Capacità di pensiero per essere un buon programmatore [chiuso]

10

Ho programmato per 15 anni con laurea non CS. Il motivo principale per cui ho iniziato a programmare è stato che mi piaceva imparare cose nuove e applicarle al mio lavoro. E sono stato in grado di trovare e correggere gli 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, naturalmente, nel risolvere i problemi.

Un'abilità che ho trovato nella mia metà carriera è quella di pensare a requisiti e compiti in ordine inverso e astratto. In questo modo, posso vedere cosa è veramente necessario per me fare senza dettagli e trovare rapidamente parti di soluzioni già esistenti.

Quindi mi chiedo se ci sono altre capacità di pensiero per essere un buon programmatore. Ho seguito Q & come sotto e in realtà leggere alcuni dei libri consigliati lì. Ma non potevo davvero prendere buoni metodi direttamente applicabili per il mio lavoro di programmazione.

Cosa non- i libri di programmazione dovrebbero leggere un programmatore per aiutare a sviluppare le capacità di programmazione / pensiero?

link

    
posta Tae-Sung Shin 02.06.2012 - 19:42
fonte

6 risposte

10

Grazie per gli indicatori delle domande esistenti. Le risposte a quelle sono piuttosto diverse da quello che capisco che tu voglia, comunque. Ti darò alcuni suggerimenti dalla mia esperienza. La mia laurea è in fisica, sono venuto sul campo con lacune attorno a formalità, correttezza / verifica, analisi algoritmica, programmazione dinamica, sistemi di database e in larga misura all'inizio, selezione di strutture dati e algoritmi. Le lacune più ovvie (ad esempio strutture di dati e algoritmi) Ho chiuso presto, ma leggo ancora libri in quell'area, per approfondire la mia comprensione, vedere presentazioni alternative e rinfrescare la memoria. (Ho circa 40 anni, quindi i libri funzionano per me:)

Ecco una lista di letture (in nessun ordine particolare tranne che nell'ordine in cui mi venivano in mente).

  1. Perle di programmazione (Jon Bentley)
  2. Altre perle di programmazione (Jon Bentley)
  3. The Art of Computer Programming (Donald Knuth)
  4. Algoritmi in C ++ (Robert Sedgewick)
  5. Manuale di progettazione dell'algoritmo (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 and Sussman)

Ho anche imparato molto da Scrittura di codice solido quando l'ho letto a metà degli anni '90. Ma non è nella lista poiché non si relaziona strongmente con le abilità di pensiero in quanto tali (si occupa più della progettazione di API per ridurre al minimo la possibilità di un uso improprio errato - o almeno questo è stato il mio principale neo). / p>

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

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

    
risposta data 02.06.2012 - 22:59
fonte
4

Per prima cosa; per una determinata disciplina, ci sarà sempre qualcuno che la migliorerà in qualche modo. Non preoccuparti per quella parte.

Poi; un grado CS è bello e tutto ciò, e la conoscenza teorica che ti dà è sicuramente utile, ma non è affatto un'indicazione che qualcuno sia un buon programmatore. Alcuni dei migliori programmatori sono autodidatti e, credetemi, il mondo è pieno di laureati in CS che non possono programmare la loro uscita da una busta di carta bagnata. Quindi non preoccuparti nemmeno di quella parte.

Quanto a ciò che serve per diventare un buon programmatore: penso che due cose siano essenziali. Uno è che è necessario essere in grado di affrontare i problemi in modo rigorosamente formale e di pensare ad un certo livello di astrazione. Se capisci i puntatori e la ricorsione, probabilmente sei bravo su questo fronte. L'altro è dedizione e perseveranza. Proprio come qualsiasi altra imbarcazione, la programmazione richiede decine di migliaia di ore di pratica dedicata e focalizzata da padroneggiare, ma non succede durante la notte. Ci vogliono almeno dieci anni per raggiungere la maestria, in un modo o nell'altro. Se sei appassionato, dedicarti alle ore, concentrarti e trovare nuove sfide sarà facile; se non lo sei, immagino che sia ancora possibile, ma non sarà una corsa piacevole.

    
risposta data 02.06.2012 - 21:11
fonte
2

Ricorda ogni volta che inizi a imparare il linguaggio di programmazione. Prima apprendi il concetto e prova subito significa fare praticamente una volta che fai questo esercizio, non dimenticheresti i concetti e il suo uso.

Avanti la nota "pratica rende perfetti" e si applica anche qui in programmazione. Più giochi con il codice, esegui il codice, leggi il codice esistente per correggerlo, non diventerai buono ma programmatore gr8.

    
risposta data 02.06.2012 - 20:50
fonte
0

Ci sono due libri non di programmazione che ritengo cruciali.

Il primo è "Lady or the Tiger", di Raymond Smullyan. Questo è un grande insieme di enigmi logici che include una specie di tour della teoria degli automi. Roba di qualità.

Il secondo è "Godel, Escher, Bach: un'eterna treccia d'oro" di Douglas Hofstadter, che ti fa pensare alla ricorsione e alla teoria del linguaggio.

Se desideri 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 capacità e come espandere la tua carriera. Prendono approcci diversi, ma funzionano bene insieme.

    
risposta data 02.06.2012 - 23:22
fonte
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 abilità generali. Se hai già un sacco di contesto e forse hai già visto problemi simili, 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 hai già questa conoscenza, ma hai le competenze necessarie, ti ci vorrà più tempo per acquisire le conoscenze di cui hai bisogno. In questo caso, stai impiegando più tempo per coprire più distanze, il che non significa necessariamente che tu sia più lento.

Naturalmente, se puoi accumulare conoscenza e imparare a usare strumenti che ti aiuteranno in un secondo momento, questo ti darà un vantaggio. Trovo che imparare un po 'su una vasta gamma di argomenti aiuta qui, poiché finiscono per sovrapporsi più di quanto mi aspetterei e sapere semplicemente dove cercare le informazioni necessarie può far risparmiare molto tempo. Ma forse sono solo io.

    
risposta data 03.06.2012 - 07:24
fonte
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 due cose in più: messa a fuoco e tempo. Per esempio, quando Linus Torvalds ha rilasciato per la prima volta Linux nel 1991, nessuno lo considera un guru. Lavora ancora su Linux ogni giorno e puoi vedere il suo registro di fusione dal repository Git del kernel Linux al giorno d'oggi. Il suo obiettivo lo rende il guru più famoso nel campo Linux. Il tempo è un concetto astratto, significa mantenersi aggiornati, acquisire esperienza attraverso la pratica costante, condividere le proprie conoscenze con altre persone e migliorare con retrospettiva.

Ho la stessa situazione con te. Ho programmato per 15 anni con un diploma non-CS (laurea 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 abilità di pensiero derivano dalla pratica e dall'esperienza. Alcuni libri possono essere utili, ma il loro significato è principalmente istruttivo. Le capacità di pensiero che appartengono a te sono dalla tua stessa esperienza. Iniziamo da ora in poi!

    
risposta data 03.06.2012 - 09:10
fonte

Leggi altre domande sui tag