Capacità di pensare di essere un buon programmatore [chiuso]


10

Ho programmato per gli ultimi 15 anni con un diploma non CS. La ragione principale per cui mi sono appassionato alla programmazione è che mi piaceva imparare cose nuove e applicarle al mio lavoro. E sono stato in grado di trovare e correggere errori di programmazione e le loro cause più velocemente di altri. Ma non mi trovo mai un guru o un esperto, forse a causa del mio maggiore non CS. E quando ho visto grandi programmatori, ho notato che sono molto bravi, molto meglio di me, ovviamente, nel risolvere i problemi.

Un'abilità che ho trovato buono nella mia metà carriera è pensare a requisiti e compiti in ordine inverso e astratto. In questo modo, posso vedere ciò che è veramente necessario per me senza i dettagli e posso trovare rapidamente parti della soluzione già esistenti.

Quindi mi chiedo se ci sono altre capacità di pensiero per essere un buon programmatore. Ho seguito le domande e risposte di seguito e in realtà ho letto alcuni dei libri consigliati lì. Ma non potevo davvero raccogliere buoni metodi direttamente applicabili per il mio lavoro di programmazione.

Quali libri non programmatori dovrebbe leggere un programmatore per aiutare a sviluppare le capacità di programmazione / pensiero?

/software/44654/skills-and-habits-to-develop-to-be-good-at-programming-im-a-newbie

Risposte:


10

Grazie per i suggerimenti alle domande esistenti. Le risposte a queste sono piuttosto diverse da ciò che capisco tu voglia però. Ti darò alcuni suggerimenti dalla mia esperienza. La mia laurea è in fisica, sono venuto in campo con lacune in termini di formalità, correttezza / verifica, analisi degli algoritmi, programmazione dinamica, sistemi di database e, in gran parte all'inizio, selezione di strutture di dati e algoritmi. Le lacune più evidenti (ad es. Strutture di dati e algoritmi) ho chiuso presto ma continuo a leggere libri in quell'area, per approfondire la mia comprensione, vedere presentazioni alternative e rinfrescare la mia memoria. (Ho circa 40 anni, quindi i libri funzionano per me :)

Ecco un elenco di letture (in nessun ordine particolare diverso da quello in cui sono venute in mente).

  1. Perle di programmazione (Jon Bentley)
  2. Altre perle di programmazione (Jon Bentley)
  3. The Art of Computer Programming (Donald Knuth)
  4. Algorithms In C ++ (Robert Sedgewick)
  5. The Algorithm Design Manual (Steven Skiena)
  6. La pratica della programmazione (Kernighan e Pike)
  7. Elementi di programmazione (Stepanov)
  8. Come risolverlo (Polya)
  9. Struttura e interpretazione dei programmi per computer (Abelson e Sussman)

Ho anche imparato molto a scrivere Solid Code quando l'ho letto a metà degli anni '90. Ma non è nella lista poiché non si collega molto alle capacità di pensiero in quanto tali (si occupa più di progettare API per ridurre al minimo la possibilità di un uso errato accidentale - o almeno quello era il mio principale take-away da esso).

Da adolescente ho anche ottenuto molto da Gödel, Escher, Bach (Hofstadter), ma è già menzionato nelle risposte alle domande che hai già indicato. È un libro da leggere per piacere, piuttosto che sviluppare direttamente le proprie capacità informatiche.

Lavoro con un numero piuttosto elevato di programmatori di talento, e quasi universalmente sono fan di Programming Pearls . Certamente vorrei che più dei candidati che ho intervistato avessero letto il capitolo 4 di quel libro.


4

Primo; per ogni disciplina, ci sarà sempre qualcuno molto più bravo in qualche modo. Non preoccuparti per quella parte.

Poi; una laurea in CS è buona e tutto il resto, e la conoscenza teorica che ti dà è sicuramente utile, ma non è affatto un'indicazione che qualcuno è un buon programmatore. Alcuni dei migliori programmatori sono autodidatti e, credetemi, il mondo è pieno di laureati in CS che non potevano programmare l'uscita da un sacchetto di carta bagnato. Quindi non preoccuparti neanche di quella parte.

Quanto a ciò che serve per diventare un buon programmatore: penso che due cose siano essenziali. Uno è che devi essere in grado di affrontare i problemi in modo rigorosamente formale e di pensare a un certo livello di astrazione. Se capisci i suggerimenti e la ricorsione, molto probabilmente sei bravo su questo fronte. L'altro è dedizione e perseveranza. Proprio come qualsiasi altro mestiere, la programmazione richiede decine di migliaia di ore di pratica dedicata e focalizzata per padroneggiare, non accade durante la notte. Ci vogliono almeno dieci anni per raggiungere la padronanza, in un modo o nell'altro. Se sei appassionato, mettere le ore, concentrarsi e trovare sfide sempre nuove sarà facile; se non lo sei, immagino sia ancora possibile, ma non sarà un giro piacevole.


2

Ricorda ogni volta che inizi ad imparare il linguaggio di programmazione Prima impara il concetto e subito prova significa farlo praticamente una volta fatto questo esercizio non dimenticherai i concetti e il suo uso.

Successivamente la nota "pratica rende perfetti" e si applica anche qui nella programmazione. Più giochi con il codice, esegui il codice, leggi il codice esistente per correggerlo, non diventeresti bravo ma programmatore gr8.


0

Ci sono due libri di non programmazione che ritengo cruciali.

Il primo è "Lady or the Tiger", di Raymond Smullyan. Questa è una grande serie di enigmi logici che include subdolamente una sorta di tour della teoria degli automi. Roba carina.

Il secondo è "Godel, Escher, Bach: An Eternal Golden Braid" di Douglas Hofstadter, che ti fa pensare alla ricorsione e alla teoria del linguaggio.

Se vuoi buone abitudini per un principiante, leggi "Modelli di apprendistato" di Hoover e "Il nuovo manuale di sopravvivenza dei programmatori" di Carter. Entrambi questi libri parlano di come espandere le tue abilità e come espandere la tua carriera. Adottano approcci diversi, ma lavorano bene insieme.


0

Sono interessato a come valuti l'abilità di altri programmatori.

Penso che la conoscenza specifica e applicabile crei risultati molto più impressionanti rispetto alle competenze generali. Se hai già un sacco di contesto e forse hai già visto problemi simili in precedenza, potresti essere in grado di trovare la causa di un problema molto rapidamente. Se sai già come utilizzare un set di strumenti applicabili, potresti essere in grado di creare soluzioni molto rapidamente. Se non si dispone già di tali conoscenze, ma si dispone delle competenze necessarie, ci vorrà più tempo per acquisire le conoscenze necessarie. In tal caso, stai impiegando più tempo a coprire una maggiore distanza, il che non significa necessariamente che sei più lento.

Naturalmente, se puoi acquisire conoscenze e imparare a usare strumenti che ti aiuteranno in seguito, questo ti darà un vantaggio. Trovo che imparare un po 'su un'ampia varietà di argomenti aiuta qui, poiché finiscono per sovrapporsi più di quanto mi aspetterei e solo sapere dove cercare le informazioni di cui hai bisogno può risparmiare molto tempo. Ma forse sono solo io.


0

Ti piace imparare cose nuove e puoi correggere rapidamente gli errori. Significa che hai i due elementi chiave per diventare un guru: entusiasmo e abilità. Ma pensi di non trovarti mai un esperto, forse hai bisogno di altre due cose: concentrazione e tempo. Ad esempio, quando Linus Torvalds pubblicò per la prima volta Linux nel 1991, nessuno lo considerava un guru. Lavora ancora su Linux ogni giorno e al giorno d'oggi puoi vedere il suo registro di fusione dal repository Git del kernel Linux. La sua attenzione lo rende il guru più famoso nel campo Linux. Il tempo è un concetto astratto, significa tenersi aggiornati, acquisire esperienza attraverso la pratica costante, condividere le proprie conoscenze con altre persone e migliorare con il senno di poi.

Ho la stessa situazione con te. Ho programmato per 15 anni con un diploma non CS (grado EE) e sono sempre confuso dal mio enorme divario con il guru nel mio campo. Ma ho il sogno di diventare un guru e ho iniziato a frequentare un progetto open source. Le capacità di pensiero derivano dalla pratica e dall'esperienza. Alcuni libri possono essere utili, ma il loro significato è principalmente istruttivo. Le capacità di pensiero appartenenti a te stesso provengono dalla tua stessa esperienza. Cominciamo da ora in poi!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.