Qual è la cosa più efficace che hai fatto per migliorare le tue capacità di programmazione?


876

Ripensando alla mia carriera e alla mia vita di programmatore, ci sono stati molti modi in cui ho migliorato le mie capacità di programmazione: leggere codice, scrivere codice, leggere libri, ascoltare podcast, guardare screencast e altro ancora.

La mia domanda è: qual è la cosa più efficace che hai fatto che ha migliorato le tue capacità di programmazione? Cosa consiglieresti ad altri che vogliono migliorare?

Mi aspetto risposte varie qui e nessuna risposta unica "taglia unica" - Vorrei sapere cosa ha funzionato per persone diverse.


18
Pratica, pratica, pratica. E non accontentarti mai della prima cosa che mi viene in mente.
Mark Ransom,

2
+1 per Mark Ransom ... La difficoltà arriva quando non sei ancora soddisfatto della centesima cosa che mi è venuta in mente!
Stimul8d

5
Non sprecare il mio tempo sul sito dello scambio di stack di programmatori mi ha aiutato a migliorare immensamente le mie capacità di programmazione.
Lavoro

3
@Mark Trapp come non è costruttivo?
destra del

1
@WTP - Leggi la descrizione. "Questa domanda non è adatta al nostro formato di domande e risposte." - come qualcuno che ha posto questa domanda, sono d'accordo. È stato chiesto in tempi più rilassati.
Oded,

Risposte:


753

In nessun ordine specifico ...

  • Lavorare con persone molto più intelligenti di me

  • Ascoltando sempre ciò che gli altri hanno da dire, indipendentemente dal fatto che siano junior, intermedi, senior o guru. il titolo di lavoro non significa nulla.

  • Imparare altri framework / lingue e vedere come fanno le cose, e confrontarlo con cose che già conosco

  • Leggendo su schemi, buone pratiche e poi esaminando le mie vecchie cose e applicando tali schemi ove necessario

  • Coppia di programmazione

  • In disaccordo con tutto ciò che dice Joel. ;)


41
So che sembra davvero gratuito e potenzialmente puttana in termini di reputazione, ma se separassi questi elementi in uno per risposta, le persone potrebbero votare quali erano d'accordo, consentendo una "soluzione" più specifica per il voto finale di questa domanda.

117
Guarda come le persone più intelligenti gestiscono gli errori - è quando imparo di più da loro

82
se questa è una lista in nessun ordine particolare, non dovrebbe essere una lista non ordinata piuttosto che una ordinata? : P
Jon W,

3
Sono d'accordo con gli mmyer - solo perché non sei d'accordo con qualcuno non significa che li stai ignorando. In realtà, è il contrario: per non essere d'accordo con loro, stai prestando loro attenzione.
Cristián Romo,

15
Non sono in disaccordo con tutto ciò che dice Joel, penso che il più delle volte abbia delle cose interessanti da dire. Il mio commento è stato ironico. Ci sono molte cose con cui concordo quando si tratta di Joel, ma circa una volta al mese mi fa scuotere la testa e chiedere "Cosa? Sei serio ?!". Che amo, poiché trovo quelle cose più difficili che mi costringono a controllare davvero la mia posizione e ciò in cui credo.

557

Decidere PER essere un 'Jack-of-all-Trades'

Abbastanza presto nella mia carriera, ero un esperto con un database particolare e un linguaggio di programmazione. Sfortunatamente, quel particolare database perse le "guerre di database" e scoprii che le mie opzioni di carriera erano ... limitate. Dopodiché ho deciso consapevolmente che non mi sarei mai più lasciato boxare in quel modo. Quindi ho studiato tutto ciò su cui potevo mettere le mani: Windows, Unix, C, C ++, Java, C #, Perl, Python, Access, SQL Server, Oracle, Informix, MySQL, ecc. Qualunque strumento e tecnologia sia nuovo o insolito, io è diventato il 'go-to-guy' - "Chiedi a Craig, se non lo sa, lo imparerà." Di conseguenza ho lavorato su tutti i tipi di progetti, dai sistemi embedded per la telemetria ambientale ai sistemi di comando e controllo per la difesa missilistica.

L'unico problema che abbia mai avuto è con le aziende che insistono nel farmi diventare una specialità, quando la mia specialità è un generalista. [EDIT: noto anche come Polymath o Renaissance Man o multi-specialista. ]

Qualcosa da tenere a mente ... qual è l'emivita della conoscenza nell'high tech? Traccia con la Legge di Moore: metà di tutto ciò che sai sarà obsoleto tra 18-24 mesi. Un esperto che sceglie la disciplina sbagliata può essere facilmente minato dalla stampa della tecnologia; un generalista deve solo aggiungere alcune abilità in più e ricordare le lezioni del passato nell'applicare tali abilità.


224
"Jack di tutti i mestieri, maestro di nessuno, anche se spesso meglio di un maestro di uno." -Adam Savage
jms

9
Ottimo consiglio, votato. La "tecnologia orfana" nel mio passato era il mio Atari a 8 bit, che ha perso il C64. Ho raggiunto la stessa conclusione però - per citare Heinlein, "la specializzazione è per gli insetti".

17
Ci sono sempre compromessi e ci sono solo 86.400 secondi in un giorno: dovrai decidere come spenderli. Nel mio caso, ho scelto di trascorrere ore extra (al di là delle mie ore di "lavoro") per imparare cose che pensavo fossero interessanti o che sarebbero state richieste in futuro; dovrai fare le tue scelte.
Craig Trader,

74
"La specializzazione è per gli insetti". - Heinlein
Kelly S. francese,

31
Dov'è il tuo badge "Generalist"? ^^
Arnis Lapsa,

459

Ho sempre pensato a me stesso come un programmatore piuttosto accattivante. Quindi un nuovo ragazzo, chiamandolo Aaron, è stato assunto nella nostra squadra. Aaron era ovviamente molto meglio di me nella maggior parte dei settori. Era anche più giovane di me. Mi ha fatto capire che non ero molto migliorato molto negli ultimi anni. Ero un hacker ad hoc e mediocre.

Questo mi ha avvertito di provare consapevolmente a migliorare me stesso e soprattutto la qualità del codice che scrivo.

Aaron mi ha portato a imparare molte cose. Mi ha insegnato come la maggior parte del codice che scrivo dovrà essere mantenuto ed esteso per almeno diversi anni, quindi dovrei scrivere il codice tenendo presente questo. Dovrei scrivere test automatici per il mio codice. Aaron parlava sempre di come non avrei mai dovuto fermarmi alla prima versione funzionante, ma di refactoring e perfezionamento fino a quando il codice non è elegante. Ho scoperto che le lingue e gli strumenti che stavo usando avevano molto margine di miglioramento.

La cosa più importante che ho imparato da Aaron è stata quella di non smettere mai di imparare.

Dopo un paio d'anni, Aaron lasciò la compagnia. Mi sentivo vuoto. Gli anni passati con lui mi avevano portato a livelli completamente nuovi di abilità e mi sono reso conto che ora ero molto meglio del resto della squadra. Stavano ancora scrivendo codice errato e facendo gli stessi errori di prima. Ho cercato di insegnare loro, ma non avevano interesse a imparare. In realtà, erano infastiditi dal fatto che qualcuno sarebbe stato così arrogante da dire loro quali errori stavano facendo.

Quindi, qualche mese dopo, ho lasciato anche la compagnia. Mi sono trasferito in un'azienda più piccola con un team di grande talento. Tutti lì volevano saperne di più e l'ho adorato.

Sono contento di aver incontrato Aaron. Senza di lui, probabilmente avrei ancora lavorato nella vecchia compagnia con la vecchia banda, senza andare da nessuna parte e pensando troppo a me stesso.


54
In genere funziona in entrambi i modi. Sono entrato in alcune aziende ora come un 'Aaron' e ho scoperto che una volta che mi sono eccitati gli altri programmatori che hanno iniziato a farmi correre i miei soldi e mi incoraggiano a raddoppiare i miei sforzi. Ottimo post!

28
+1 per "Aaron parlava sempre di come non avrei mai dovuto fermarmi alla prima versione funzionante, ma refactoring e perfezionamento fino a quando il codice non è elegante"

17
"non fermarti mai alla prima versione funzionante" ??? - quando dovresti svolgere il resto del tuo lavoro? :)

4
Ho provato ad essere Aaron, a volte funziona, ma a volte mi sbaglio. "Coloro che non possono imparare dalla storia sono condannati a ripeterlo." È bello tenere le nostre menti aperte a nuove idee, ma è male ascoltare un n00b su coloro che hanno già fatto gli errori per te. Tutti hanno bisogno di un po 'di scetticismo, mentre impariamo facendo domande a noi stessi e agli altri.

27
Il problema è che troppe persone pensano di essere "Aaron"
cinqoTimo

257

Due cose:

  1. Leggi il codice scritto da persone diverse.
  2. Scrivi la documentazione per il codice scritto da altre persone.

Scrivere codice è estremamente semplice; ogni altra persona che conosco può farlo. Ma leggere il codice di qualcun altro e capire cosa fa è stato un mondo completamente nuovo per me.


42
E uno dei modi migliori per imparare cosa NON fare :)
AviD

9
Puoi vedere come fanno qualcosa. Forse lo fanno in un modo migliore di te?

4
Ho dovuto scavare in un progetto davvero vecchio e completamente privo di documenti, documentarlo, correggere alcuni bug e portarlo su un nuovo sistema. Ho imparato molto, e non tutto era cosa non fare. Anche se ho imparato il valore dei commenti.

E mentre stai scrivendo la documentazione, forse scrivi alcuni casi di test unitari (se non esistono). Quindi saprai anche come utilizzare il codice.
lavabile il

Così vero, questa è stata la parte più difficile del mio lavoro da molto tempo.

199

Vai in palestra regolarmente.

Seriamente, il mio cervello funziona molto meglio quando sono in forma. I problemi diventano più facili e meno travolgenti, lo scherzo è molto meno una tentazione e lavorare passo dopo passo non sembra un compito così arduo.


30
Il triste fatto che la maggior parte delle persone non eserciti o addirittura si allunghi su una base regolare è un grosso problema nel mondo di oggi.
Sneakyness

5
Estenderò questo, se posso, a qualsiasi quantità di escursione fisica. A volte, quando non ho fatto molto lavoro manuale per un po ', inizio a desiderare la stanchezza fisica. È un po 'un romanzo quando sei così abituato ad essere mentalmente svuotato e ti aiuta a scoppiare quando ti stai solo pensando in tondo.
Stimul8d

1
sì, questo è il grosso problema oggi. non abbiamo tempo, specialmente in Pakistan, dove l'orario di lavoro è molto più lungo
maz3tt

2
+1 come promemoria per me stesso per fare più esercizio fisico.
SingleNegationElimination

Trovo che uno sport sia un grande motivatore, per me è il basket.
Adel,

181

Programmazione. Lavorando su progetti interessanti. Non c'è NULLA come entrare e lavorare su cose. Soprattutto sotto pressione. Dico sempre a chiunque mi chieda come programmare: basta trovare un progetto interessante (anche se devi inventarlo) e lavorarci su.


4
Sono d'accordo. Sporcarsi le mani in un progetto è stato probabilmente il più grande contributo al mio miglioramento. ; )
Mike Grace,

1
Esattamente. Il modo migliore per diventare un programmatore migliore è codificare. Puoi imparare tutto ciò che vuoi da libri, podcast e colleghi, ma devi applicarlo prima di capirlo davvero. Codifica di più e codifica cose più diverse. Perché non impari molto ripetendo lo stesso vecchio trucco.

Scegliere progetti stimolanti e intriganti da fare. Penso che la lotta per superare al di fuori della tua zona di comfort acceleri davvero le tue abilità. Non andarono sulla luna perché era facile.
Kim Jong Woo,

172

Ha assunto un lavoro part-time come tutor per studenti CS nella mia università. Ti obbliga davvero a capire qualcosa a un livello completamente diverso quando devi spiegarlo a qualcun altro.


1
Posso garantire per quello.

1
Un insegnante all'università mi ha parlato dell'apertura quando ero ancora uno studente. Ho soggiornato per quasi un anno (a tempo parziale) dopo essermi laureato.
Bill the Lizard,

29
Come scrive Douglas Adams in "Dirk Gentley's Holistic Detective Agency": "il modo migliore è quello di cercare di spiegarlo a qualcun altro. Ciò ti costringe a risolverlo nella tua mente. E più lento e oscuro il tuo allievo, il più devi scomporre le cose in idee sempre più semplici ".

2
Troppo vero. Insegnare la fotografia mi ha reso un fotografo migliore. Non molto di un programmatore :(
CAD bloke,

9
mutuo ista fiunt, et homines dum docent discunt - Seneca

135
  1. Sono un grande fan del sistema "impara un linguaggio di programmazione ogni anno". Un anno ti dà abbastanza tempo per superare il pregiudizio "ok, conosco la sintassi, quindi ora conosco la lingua", e ti costringe ad andare un po 'più lontano e capire cosa è utile in quella lingua, e programmare in uno stile nativo per quella lingua (intendo dire che non finisci per scrivere applicazioni java usando la sintassi di Ruby). Ogni lingua cambierà il modo in cui pensi alla programmazione: sapevo come usare la ricorsione, ma pensare nella ricorsione non è avvenuto fino a quando non ho preso una lezione su Prolog (immagino che un linguaggio funzionale come ML avrebbe lo stesso effetto).

  2. Avvia un progetto Pet. La mia equazione personale per un buon progetto per animali domestici è qualcosa che hai esperienza con + qualcosa che non fai = app che potresti trovare utile. Ad esempio, Migratr (il mio progetto sul weekend del caffeinato è diventato un progetto in corso) è iniziato come "Conosco c #, ma non ho mai codificato un'API Web. E voglio spostare tutte le mie foto su Zooomr". Avrebbe potuto essere altrettanto facilmente "Ho già codificato prima le API Web, ma non conosco C #"

Pubblicare il tuo progetto per animali domestici è un'esperienza educativa straordinaria in sé. Improvvisamente tutte le cose praticamente nessuno insegna ma tutti dovrebbero sapere (per me è stato impostare il proprio sistema di test, ottenere il massimo dai sistemi di controllo versione, come valutare se stessi quando nessun altro sta impostando le scadenze, come interagire con il proprio utenti e come sapere quando dire "no" per presentare le richieste), tutta quella roba bolle in superficie e ti costringe a auto-educarti a un livello che non eri prima, almeno non leggendo pigramente le guerre di fiamma sulla zona pro / contro del modo "foo" vs "bar" di fare le cose.

Fare queste due cose copre entrambe le estremità dello spettro. Imparare una nuova lingua ti renderà un programmatore migliore. Il progetto per animali domestici ti renderà uno sviluppatore migliore: P


Posso solo essere d'accordo; "Progetto di animali domestici in una lingua precedentemente sconosciuta" è buono, posso confermare

Ottimo suggerimento per imparare qualcosa a metà familiare.

Ottimo suggerimento "qualcosa con cui hai esperienza + qualcosa che non hai"! Grazie
sica07

Ho bisogno di un animale domestico ora.
Adel,

118

Mi sono insegnato all'assemblea. L'ho fatto su un vecchio chip 6502 quando avevo 13 anni? 14? Troppo tempo fa. Ma non riesco a pensare a nulla che possa migliorare il tuo sviluppo più che scendere al livello più basso.

L'apprendimento dell'apprendimento ti fornisce informazioni sul modo in cui i computer "pensano" a un livello fondamentalmente inferiore e l'eleganza a questo livello è sorprendente ... non ci sono movimenti sprecati, né "eliminazione" dei dati. Sviluppare a questo livello ti insegnerà l'efficienza e affina il tuo pensiero critico e le tue abilità logiche. Ti curerà anche da qualsiasi abitudine sciatta che hai abbastanza rapidamente!

Il chip 65xx aveva tre registri (l'accumulatore, X e Y) e nessuna istruzione a livello di macchina per moltiplicare o dividere. Ricordo di aver programmato una routine per calcolare il danno da battaglia, di aver letto il libro e di aver improvvisamente realizzato che avrei dovuto scrivere la mia biblioteca di matematica. Ho trascorso un paio di settimane a scrivere 1 e 0 su tutto il mio taccuino, cercando di capire cosa significassero veramente "dividere" e "decimali".

Ho studiato C ++, pascal, .NET, molti altri da allora ... ma nessuno di loro mi ha insegnato tanto, mi ha incuriosito tanto, o mi ha lasciato con il senso di "wow" che assemblea sul mio vecchio commodoro ha fatto .


16
Devo votarti solo per aver riportato ricordi meravigliosi! Forse mi sono anche strappato un po ':)
Charlie Flowers,

3
Traduco ancora mentalmente C / C ++ in linguaggio assembly 68K. È incredibile come ciò ti aiuti a scrivere codice efficiente per qualsiasi piattaforma.
Bob Murphy,

1
Ah, il 6502, riporta grandi ricordi. Ho imparato così tanto con l'assemblatore su questo chip.

5
OGNI studente di programmazione dovrebbe avere un'esposizione approfondita all'assemblatore all'inizio della sua educazione!

2
Ho fatto la stessa cosa di un giovane. Insegnava davvero come funzionano i computer, più di quanto mai possa fare una lingua di alto livello.
Bloke CAD,

110

Guardando indietro alle cose vecchie che ho scritto e rendendomi conto di quanto fossero brutte.


Secondo, non riesco nemmeno a leggere alcune delle mie vecchie cose.
Unkwntech,

28
Quando ripasso le mie vecchie cose, ricevo impulsi quasi irresistibili per eliminare l'intero file. A volte l'intera directory.
Christopher Mahan,

+1 per l'obiettività. Esaminare il vecchio codice non ti dirà come migliorare, solo se hai migliorato e come - o viceversa, se non lo hai fatto.

L'ho fatto - ho scritto l'intero interprete di script in VB6, l'ho scritto in due anni; potrebbe rendere Windows, gestire i loro eventi, ecc. È diventato così grande e fuori controllo che non potevo più aggiungerlo senza rompere tutto. Questa è stata l'ultima cosa che ho scritto prima di rinunciare alla programmazione di libri sulla programmazione. Ora sto molto meglio, amico . Rileggere quel progetto mostruoso mi fa capire fino a che punto sono arrivato
Carson Myers il

3
@Christopher Mahan: E in occasioni davvero brutte, l'intero volume.
Thanatos,

93

Leggere

  • libri, non solo siti Web
  • per l'auto-miglioramento, non solo per l'ultimo progetto
  • sul miglioramento del tuo commercio, non solo sulle ultime tecnologie
  • leggi il codice, non solo su cui stai lavorando.

Sviluppa semplicemente l'appetito per la lettura.


2
Inoltre, dannatamente, 1. Stavo iniziando a chiedermi dove fosse questa scelta.
Thanatos,

87

Programmazione.

Seriamente, ci sono libri, ci sono kata di codifica, ci sono siti come questo, ma credo che il modo migliore per migliorare come sviluppatore sia lavorare su progetti reali, con clienti reali instabili con requisiti reali e in continua evoluzione con ingegneria reale i problemi. Non c'è sostituto per l'esperienza.


8
Se vuoi migliorare qualcosa, non c'è niente di meglio che farlo.
Jeff Siver,

4
+1 - Questo mi ricorda Finding Forrester : "La prima chiave per scrivere è ... scrivere"
Wizard79

2
Non c'è altra risposta. Non puoi davvero dire di sapere cosa stai facendo fino a quando non hai scritto un mucchio di codice non banale e ti sei bloccato con alcune iterazioni di prodotto con i ragazzi + i clienti. Non / realmente / sai quanto è buono il tuo codice fino a quando non è il momento di farlo cambiare per soddisfare i nuovi requisiti.
blucz,

1
Sicuramente la cosa migliore che ho fatto per migliorare la mia programmazione è stata ottenere un lavoro.
Matt Ellen,

1
La mia ipotesi è che la domanda implicasse "oltre alla programmazione" ...
UncleZeiv,

81

Penso che la cosa più importante che puoi fare sia fare uno sforzo consapevole per migliorare. Non esiste un solo proiettile d'argento, devi continuare a cercare nuove fonti di informazioni, nuove esperienze e più pratica.

E la seconda cosa più importante, pensa a cosa stai facendo, perché lo stai facendo e come puoi farlo meglio. Stessa cosa con i progetti precedenti. Guarda cosa hai fatto e come potresti farlo diversamente ora. Pensa a cosa avrebbe potuto essere fatto meglio o dove potresti ancora migliorarlo.

Vedo due grandi esempi di questo al lavoro ogni giorno. Ho un collega che ama imparare e vuole essere il miglior sviluppatore che può. Usa qualsiasi tempo morto per leggere blog, leggere libri, discutere tecniche di programmazione e porre tonnellate di domande. È anche notevolmente migliorato solo nell'ultimo anno. Un altro collega fa il suo lavoro e lo fa abbastanza bene. Ma è tutto ciò che fa. È fedele a ciò che sa, non fa molti sforzi per migliorare, non lavora su nessun progetto al di fuori di quelli esistenti e, dopo 4 anni, ha lo stesso set di abilità e capacità di programmazione che aveva quando l'ho incontrato lui.


7
E probabilmente ha meno abilità perché alcune delle sue conoscenze sono diventate obsolete ..

72

Molte persone hanno suggerito di scrivere codice. Devo dire che leggere il codice di altre persone è molto più vantaggioso.


11
un mix dei due è in realtà ciò che funziona meglio per me; leggere il codice di altre persone e modificarlo per renderlo più leggibile è un grande esercizio

Leggere un buon codice ovviamente ... e capirlo. E modificandolo o scrivendo test per questo.

4
La lettura del codice è interessante, ma in realtà non ti penetra fino a quando non lo fai davvero.

Devi farlo per impararlo. È come andare in bicicletta ...

70

Coppia programmata con persone molto diverse e supponente


L'unica "esperienza" con la programmazione di coppia che ho sono i tempi in cui devo aiutare i miei colleghi. Programma molto più felice quando c'è un'altra persona con me per discutere dei problemi che devo affrontare e di come li risolverò.
mhitza,

67

Le cose di base che mi hanno aiutato come programmatore:

  • Digitazione tocco acquisita.
  • Ho imparato a superare la timidezza e fare domande.

Digitare per un programmatore è essenziale. Tutti hanno avuto un collega "programmatore" che ha digitato usando esattamente due dita e ha dovuto guardare la tastiera per tutto. Non è divertente. Imparare a toccare il tipo aumenta notevolmente la tua produttività come programmatore.

E se non lo chiedi, nessuno te lo dirà.


15
La digitazione a tocco è l'abilità più importante. I più grandi crimini nella programmazione sono stati commessi da coloro che cercano di salvare alcune sequenze di tasti.

5
Questo batte tutte le altre risposte, secondo me. La digitazione consente di risparmiare tonnellate di tempo, il che significa che è possibile dedicare più tempo all'inserimento del codice e alla sua prova. Significa che puoi scrivere gli esempi in un libro invece di annuire semplicemente, andare avanti e dimenticare. Cercare di essere un programmatore con la caccia e il beccare è come cercare di essere un pianista da concerto solleticando gli avori con i piedi.
Kyralessa,

2
Ho visto persone colpire 15 frecce in su per recuperare un comando di 2 caratteri. Abbastanza triste. È come alcuni bambini senza IDE ... completamente incompetenti.

7
Per essere contrari qui, non ho mai imparato a toccare il tipo. Ho provato ad imparare una volta, ma ho subito iniziato a farmi male ai polsi, appoggiandoli sulla scrivania per assumere che le posizioni corrette delle mani facessero pressione sul importantissimo tunnel carpale. Quindi immagino che la mia scelta di battitura abbia almeno alcuni vantaggi ergonomici. E lo faccio da tanto tempo, guardo solo in modo intermittente la tastiera, quindi nessuna vera perdita di produttività. La maggior parte del mio tempo non viene spesa per inserire i caratteri, ma per leggere il codice e capire come risolvere al meglio i problemi.
Eloff,

2
Le posizioni delle mani non sono importanti: l'importante è che tu possa digitare senza dover guardare. Sul mio laptop non appoggio i polsi.

56

Contribuire a / partecipare a progetti open source è stata di gran lunga la cosa più grande per me.


53

Puoi leggere tutti i libri, i codici e i progetti open source che ti piacciono, ma devi comprendere l'aspetto degli utenti finali dello sviluppo del software. Devi uscire dalla camera dell'eco. Quindi affronterò un paio di punti non tecnici che aiuteranno la tua carriera tecnica.

  1. Allontanati dalla tastiera e interagisci con l'utente finale e vedi, attraverso i loro occhi, come usano il software. Gli utenti finali non sono in genere tecnici, quindi vedono il software come un lavoro magico, mentre vedi il software come un insieme logico di passaggi. I due mondi sono completamente diversi. Quindi ciò che ti sembra facile e logico può sembrare criptico e intimidatorio per gli altri.

  2. Test, test, test. Molti software che ho visto in grandi aziende usano casi di test. Diavolo, usano JUnit, xUnit e tutti gli altri linguaggi di test delle unità là fuori. Ma il problema che ho visto è che la maggior parte dei programmatori non vede mai l'aspetto del loro software in Production. Scopri in che modo gli utenti (o i sistemi, se si tratta di processi batch) interagiscono con l'applicazione, la libreria o l'interfaccia per scoprire che tipo di informazioni aberranti ci trasmettono. Questo ti aiuterà a generare buoni casi di test e a smettere di supporre che al tuo programma vengano sempre forniti i dati corretti.


Vero. Potresti testare la tua (fino ad ora) versione finale lasciando che un gruppo di persone che conosci essere non tecniche lo provino e ascoltando i loro commenti (assicurandoti di scegliere quelli che non diranno "Va bene!", Perché questo non ti aiuta minimamente).

48

Schema appreso.


Sì, quello era il grande anche per me. Significativi anche la digitazione tattile e la programmazione delle coppie.

46

Scrivere codice e molto altro.


Iniziamo tutti a scrivere codice scadente. Se scrivi abbastanza e ci lavori migliorerai. Le revisioni del codice aiutano, ma il modo migliore è rivedere il proprio codice.

Leggere il codice e molto altro.
Stefan,

3
Leggere e scrivere un sacco di codice ... L'open source è un tale vantaggio per noi;)
Oded,

45

Imparare espressioni regolari.


L'ho fatto solo quattro mesi fa quando ho iniziato a insegnare a me stesso perl! La mia capacità di usare vim e unix in generale sky è schizzata! Sorprendente.
sixtyfootersdude,

Le espressioni regolari non sono solo utili, ti fanno anche pensare in un modo diverso.
Tikhon Jelvis,

+1. Sono completamente d'accordo. Sono sorpreso di rendere le persone sorprese abbastanza spesso facendo cose abbastanza semplici in vi, sed o grep.

39

14
Trovo TopCoder un po 'problematico. OK, ti rende meglio a pensare agli algoritmi, ma sei costretto a lavorare con uno stile scadente (tutto il codice in una classe) e sotto pressione del tempo, quindi probabilmente non commenterai e testerai. Forse Project Euler è la scelta migliore.

3
Non sei costretto a lavorare con cattivo stile; puoi avere tutte le lezioni che vuoi. Inoltre, hai test migliori se vuoi passare in modo coerente, poiché una soluzione che fallisce un caso a bordo singolo ottiene zero punti.

2
@hstoerr - per non parlare del fatto che i concorrenti vengono premiati per aver reso il loro codice difficile da leggere (la loro soluzione è più difficile da sfidare)
Shane Fulmer,

7
(scusate se sembra offensivo) Trovo persone a cui non piace Topcoder (o altri concorsi simili) che provano a inventare ragioni per cui farle diventerà un programmatore terribile. Va bene se non ti piacciono. Ma inventare ragioni spurie non è utile. Nessun serio concorrente del codice TC offuscato intenzionalmente (in realtà è motivo di squalifica se preso). Vedo un sacco di persone che non competono a scrivere codice errato per tutto il tempo. I concorsi sugli algoritmi non mirano a insegnare buone abitudini di programmazione (impara che da qualche altra parte), piuttosto mirano a insegnare / sviluppare qualcosa di molto più profondo.
MAK

2
TopCoder è un modo per mostrarti quanto meglio potresti diventare.

38

Fai tutto: crea il tuo progetto, i tuoi traguardi, le tue risorse, le dipendenze, i requisiti e il piano di test. Ti costringerà non solo a migliorare le tue capacità di programmazione per operare all'interno di parametri specifici, ma servirà anche a evidenziare esattamente dove hai più bisogno di migliorare. Apporta aggiornamenti regolari sui tuoi progressi, tramite un blog o aggiornamenti più formali del progetto, in modo da poter vedere esattamente dove sei stato e dove speri di andare.


36

Lascia il mio ultimo lavoro.


2
anch'io! (

6
Se ci dicessi perché, potrebbe anche essere una risposta. ;-)

2
Il progetto di supporto realizzato con il framework interno (basato su EJB2) non era la mia idea di divertimento. Niente roba nuova, solo vecchie cazzate. E la prospettiva in un nuovo lavoro non è migliore. :(
mihn

Ci sono stato, l'ho fatto.
Allbite,

+1 Buona fortuna per un lavoro che non è un vicolo cieco.
Tomek Szpakowicz,

29

Penso che mettere costantemente in discussione ciò che stai facendo sia la cosa più grande. Non pensare mai che il tuo codice sia perfetto, cerca sempre di migliorarlo.

Sembra che ho avuto 2 o 3 volte quando ho pensato che il mio codice fosse perfetto, poi ho capito che avevo molta strada da fare.

Immagino che la cosa più grande sia stata quando ho iniziato a vedere il mio codice stesso come consumato da altri programmatori e non da una macchina. È facile scrivere codice che la tua macchina può elaborare, ma è difficile scrivere DRY, codice comprensibile.

E non intendo solo capire "Cosa fa questa riga", intendo renderlo banale capire "Come si adatta questa classe a tutte le altre classi", rendendo l'interfaccia così ben formata che è praticamente impossibile per abusarne.


29

Dicono che il 70% del buon codice è il controllo e la gestione degli errori. Quando ho iniziato a programmare in quel modo, il mio codice è migliorato molto. Pensare a cosa può andare storto e poi gestirlo immediatamente ha fatto una grande differenza. Si sente come fare tutto ciò che il controllo è solo ottenere nel modo di ottenere il codice installato e funzionante, ma riduce il tempo dall'inizio alla fine di un fattore da 2 a 4.

Chi sono queste persone "loro" e dove vivono "loro"?


28

La mia abilità di programmazione è migliorata molto quando ho iniziato a chiedermi prima di implementare qualcosa su come documenterò questa cosa .

"Cosa" qui dovrebbe avere tutta la granularità possibile. Dal metodo all'intero prodotto. Ad esempio a livello di metodo impedisce l'aggiunta di un metodo nell'API che non si adatta o non è chiaro prima di scriverlo effettivamente. E se ho davvero bisogno di implementare un metodo che non posso documentare (facilmente), è un segno che c'è un problema di progettazione da qualche parte ...

Automaticamente, l'atteggiamento " se non riesco a spiegarlo, non lo scrivo " filtra il codice errato e viceversa una volta che so documentare correttamente una cosa, diventa più semplice e più pulito da implementare.


28

Impara e pratica costantemente ciò che impari.

Per mezzo di:

  1. Progetti personali: da quando ho iniziato a programmare ho realizzato progetti personali. Che vanno da piccoli giochi, elaborazione di immagini, steganografia, implementazione di specifiche del tipo di file, implementazione di vari protocolli da zero o implementazione di vari programmi nel tempo.

  2. Leggere libri: ho deciso di leggere e seguire vari libri nel mio tempo libero. Ci sono molti libri ben scritti di esperti seduti in attesa di essere letti. La profondità che puoi ottenere da un libro non ha eguali, ad esempio leggendo vari post sul forum.


10
+1 per menzionare i libri. Molta esperienza non vale molto se viene speso tutto nel fare le cose nel modo sbagliato.
mbillard,

27

Questo è di solito il mio ordine cronologico di apprendimento di qualsiasi nuova tecnologia:

  1. Leggi regolarmente buoni blog (Atwood, Martin Fowler, ecc.), Tieniti aggiornato con le notizie sulla tecnologia, Segui le informazioni su nuove interessanti tecnologie. Questi passaggi mi permetteranno di decidere se trovo qualcosa di interessante da esplorare ulteriormente.

  2. Leggi il libro giusto o qualsiasi altra risorsa per imparare per il tuo livello (ad esempio per i principianti se vuoi imparare i modelli di design, suggerirei "Head First Design Patterns"). Ho anche preferenze specifiche per i libri .

  3. Realizza uno o due progetti giocattolo usando la cosa che ho imparato. Non mi preoccupo dell'utilità del progetto. La mia intenzione è solo quella di sfruttare il mio apprendimento. (es. un progetto di calcolatrice per OOP andrebbe bene)

  4. Vorrei vedere se potevo usare le cose al lavoro . (ad es. Sebbene non utilizziamo la sovversione sul lavoro, la utilizzo come archivio locale, ho usato Ruby per un'attività che altrimenti sarebbe troppo monotona e che richiede tempo)

  5. Questa è la parte migliore che penso che la maggior parte delle persone non abbia notato. Sessioni di condivisione della conoscenza. Dare una sessione o due ai membri del team ad esempio. Credo che insegnare sia uno dei modi migliori per imparare davvero la tecnologia. Garantisco che il tuo livello di comprensione della tecnologia diventerà multiplo, indipendentemente dal fatto che il tuo pubblico lo capisca o no. :-)


24

Attacca qualche progetto open source per alcuni mesi; più è grande, meglio è. Quando interagisci con alcune persone molto diverse e geograficamente diverse che non ti conoscono, non puoi fare a meno di imparare dai tuoi errori molto più velocemente - penso che sia un certo fattore di imbarazzo. Inoltre, se identifichi una o due persone davvero intelligenti, puoi ricavarne preziose informazioni, se non pura conoscenza.

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.