Come posso migliorare le mie capacità di programmazione? [chiuso]


76

Ecco alcune informazioni su di me, prima di iniziare con la domanda.

Sono un laureato in Informatica, Java è il mio linguaggio di programmazione principale.

Il problema di base nella mia Università sono gli standard di insegnamento. Nessuno si preoccupa dell'insegnamento della conoscenza del codice agli studenti, piuttosto che solo della conoscenza teorica.

In effetti, la maggior parte dei miei compagni di college non capisce affatto la programmazione.

Neanche io sono stato in grado di uscire dal tradizionale ambiente di programmazione, il che limita il mio codice in una misura.

Quali sono i modi possibili con cui posso sviluppare ed espandere le mie capacità di programmazione / codifica.

Inoltre, puoi suggerire le fonti per lo stesso?

A cura : fonti che suggeriscono lo sviluppo di capacità di codifica.


13
FYI: Dalla mia esperienza la conoscenza teorica ti aiuterà sicuramente nella parte successiva
Gopi,

6
Sai nuotare semplicemente leggendo il libro "Insegnati a nuotare in X giorni"?
pramodc84,

9
"Pratica deliberata". Fai qualcosa di leggermente più difficile del tuo livello attuale, risolvilo, impara da esso, ripeti.

7
@ pramodc84 Ma certamente leggere un libro sul nuoto e poi tuffarsi in un fiume aiuterà sicuramente THAN a saltare direttamente in un fiume e cercare di imparare a nuotare
Gopi,

5
È così nella maggior parte delle università. Una laurea non riguarda l'essere un buon programmatore; si tratta di conoscere le teorie alla base di ciò e come applicarle - si può dire che essere un buon programmatore è lasciato come esercizio al laureato.
configuratore

Risposte:


46

La programmazione è uno dei settori in cui l'esperienza conta. Pertanto, per diventare un programmatore migliore, è necessario codificare di più. Tuttavia, la scrittura non è l'unica cosa che dovresti fare. Dovresti anche leggere il codice di altri sviluppatori e imparare da ciò che è un buon codice. Fare riferimento alle domande SO su questo .

Potresti anche trovare libri, che sono specificamente dedicati alla programmazione, utili; come "Codice completo". Contengono descrizioni di ciò che è un buon codice, che, combinato con le tue conoscenze fondamentali, può renderti un buon programmatore.


8
Code Complete è una buona lettura, questo è il libro che avrei preferito leggere quando sono uscito dal college come programmatore.
glenatron,

2
Ora quel libro è nella mia must-readlista. :) Grazie!
ykombinator,

2
@ykombinator:(push 'code-complete must-read)
Giorgio,

98

La mia citazione preferita è di Confucio:

Sento, lo so. Vedo, ricordo. Lo capisco.

Tutta la conoscenza che ho acquisito è derivata dall'applicazione di un'unica strategia:

Prendi il percorso più impegnativo, sempre.

Vuoi imparare C #? Ottieni un lavoro come sviluppatore C #.

Vuoi imparare l'italiano? Andateci con una dizione inglese / italiano e parlate italiano

Vuoi imparare la programmazione? Codice!


19
+1 per prendere sempre il sentiero più difficile. Alla fine, diventano un percorso facile! Buona risposta.
Ryan Hayes,

3
Sembra certamente un compito scoraggiante prepararsi per una sfida, ma trovo che fornisca motivazione per avere successo. Bella risposta. Le lingue che conosco meglio sono quelle che ho colto in testa per primo senza un indizio e imparato continuamente con ogni progetto.
Chris,

2
Sono cambiato più duramente dai più sfidanti. È più positivo

2
Una buona programmazione non è uno sport per spettatori.
Incognito

4
@Pierre, vuoi imparare 1) latino e 2) Perl. Codice Perl in latino: csse.monash.edu.au/~damian/papers/HTML/Perligata.html

21

La codifica è un ottimo consiglio, ma senza qualcuno che ti dia un feedback, ripeterai semplicemente i tuoi errori. Trova un lavoro, lavora su un progetto open source, trova un tutor e fagli guardare il tuo codice.


1
Esattamente! Questo è un ottimo punto. Probabilmente non ho ancora un mentore.
ykombinator,

4
Scrivi del codice e pubblicalo con una domanda specifica su StackOverflow.com e otterrai molto.
JeffO,

2
Questo è il motivo per cui continuo a lamentarmi per avere recensioni di codice sul nostro progetto, ma "non c'è tempo per quello".
MetalMikester

1
@MetalMikester - ma c'è sempre tempo per farlo.
JeffO

1
@JeffO Questo è esattamente ciò che sta accadendo ora. :(
MetalMikester

10

Ecco una presentazione di Dan North e QCon su come passare da principiante a programmatore esperto chiamato Sharpening the Tools . Di seguito sono riportati i suggerimenti chiave della presentazione:

  1. Pratica le basi: kata, codice per divertimento ...
  2. Impara da altre persone: leggi libri, blog, ecc., Leggi codice, programma in coppia ...
  3. Comprendi le tendenze: cosa sta succedendo nel settore ora
  4. Condividi la conoscenza: il modo migliore per imparare qualcosa è comprenderlo e insegnarlo
  5. Mantieni la tua cassetta degli attrezzi: usa "senza tempo" e nuovi strumenti
  6. Impara come apprendere: capire come funziona l'apprendimento

8

Prova a scrivere un compilatore per un linguaggio semplice da zero. Migliorerai molto le tue abilità lungo il percorso (con alcune belle tecniche teoriche dalla teoria del linguaggio formale come bonus). Ho provato a scrivere una versione semplice di Excel ed è anche un esercizio molto bello.

Come altri hanno detto, l'unico modo per migliorare le tue abilità di programmazione è effettivamente farlo. Sporcati la mano con alcuni grandi progetti. Ma poi per programmi di grandi dimensioni, è ancora più importante padroneggiare le tecniche di progettazione del software, altrimenti la dimensione del programma sembra ingestibile.

C'è una bella citazione di Nate Kirby:

"I cattivi programmatori ignorano i dettagli. I cattivi progettisti si perdono nei dettagli."

Quindi il passaggio tra questi due livelli di astrazione è l'abilità che dovresti padroneggiare.

Anche la velocità di quante righe di codice puoi scrivere all'ora non è ciò a cui dovresti mirare. Mi piace una citazione di David Parnas :

"Sento spesso gli sviluppatori descritti come" qualcuno che sa come costruire rapidamente un grande sistema ". Non è un trucco costruire rapidamente grandi sistemi: più velocemente li costruisci, più diventano grandi! "


5

Ho implementato un pool di scommesse o un gioco di Baccarat in quasi tutte le lingue che ho imparato.

Questo tipo di software copre

  • Date e orari, con calcoli
  • Tipi di valuta e cose che possono essere convertite da e verso la valuta
  • Un insieme discreto di regole che è facile da testare
  • Stati, transizione tra stati e entità multiple responsabili della transizione di stato
  • Utenti multipli con diverse visualizzazioni dello stesso modello
  • Condizioni di estremità multiple

Anche il blackjack a più giocatori e il poker funzionerebbero.

Un avvertimento è che nel mio lavoro quotidiano lavoro su sistemi finanziari e c'è un'enorme sovrapposizione tra cose da considerare quando scrivo un gioco d'azzardo multiplayer e un sistema di trading.


4
  • Seleziona buoni progetti opensource e leggi il codice.
  • Prendi un progetto di medie dimensioni e inizia a scrivere codice
    • Se sei interessato allo sviluppo web, prova a costruire un sito esistente da zero utilizzando la tua tecnologia preferita; che ne dici di twitter in Django?
    • Se sei interessato allo sviluppo di applicazioni desktop, inizia con un blocco note e improvvisalo per supportare funzionalità avanzate (ricerche basate su regex, per cominciare).

4

Pensala in questo modo ... Tiger Woods non è diventato il "migliore" golfista guardando il golf o leggendolo. Ha ottenuto in questo modo, come qualsiasi altro atleta, studiando, praticando, trovando dove può migliorare il suo gioco e facendo qualcosa al riguardo.

La codifica è la stessa. Il modo migliore per migliorare è studiare ciò che fanno gli altri, capire PERCHÉ lo fanno in quel modo, e poi farlo da soli.


Sì, Tiger Woods diventa "il miglior" giocatore di golf avendo molti amanti. :-) Quindi non è davvero un buon esempio.
DL

4

Come in qualsiasi altra attività umana, il modo migliore per migliorare è mettere in pratica le tue conoscenze, ma per questo hai bisogno di alcuni esercizi. Dave Thomas , uno degli autori del libro The Pragmatic Programmer, ha introdotto il concetto di Code Katas , simile al concetto di kata nelle arti marziali.

Puoi dare un'occhiata qui: http://codekata.pragprog.com/


4

Salta in acqua, all'inizio potrebbe fare freddo e sarai tentato di uscire ma presto il tuo corpo si abituerà e si riscalderà di nuovo e man mano che ti sentirai a tuo agio in acqua, potrai nuotare intorno e andare nel Deep End.

Ho appena finito il college un paio di mesi fa, dove ho studiato Java. Come te non avevo idea di come programmare correttamente. Circa un mese fa volevo creare un'app Web in PHP. Non sapevo cosa stavo facendo, ma ci sono andato. All'inizio è stato intimidatorio e travolgente, ma mentre pratichi diventa naturale. Ho anche scritto l'applicazione molte volte, ogni volta semplificandola ancora di più. Ora sto lavorando sull'app da zero, ma questa volta sto cercando di capire come farlo sia orientato agli oggetti e usando PEAR e il suo modulo rapido che è un altro ostacolo che devo superare ma determinato ed eccitato comunque.

Quindi pratica. Salta in acqua! Buona fortuna :)


3

Suggerisco di imparare tutta la sintassi della tua lingua preferita. Comprendi come utilizzare le funzioni virtuali, l'ereditarietà, la lambda se esistono. ecc. Una cosa che ho fatto è stata prendere una grande libreria spaventosa (l'ho fatto con boost e STL per C ++) e vedere se ogni riga e ogni parola chiave hanno senso.

In alternativa, puoi leggere il riferimento alla sintassi della lingua se ce n'è uno valido che copre la versione più aggiornata. Ad esempio, ecco il riferimento C # (non la versione in alto. Ho fatto l'errore guardando una versione precedente più popolare che non aveva la sintassi che stavo cercando)


3

Il consenso generale è "scrivere più codice", che concordo, ma aggiungerò a quel consiglio che dovresti scrivere molti tipi diversi di codice. Java va bene per quanto riguarda le lingue, ma dovresti assolutamente scrivere codice su e giù per lo spettro di potenza. Oltre a Java, suggerirei di fare alcuni piccoli progetti in un linguaggio di livello inferiore (C è buono per questo), un linguaggio di scripting (preferisco il perl, ma Python è anche una buona scelta), un linguaggio funzionale ( lisp è la raccomandazione generale qui, ma OCaml e Haskell sono anche una buona scelta), e almeno mettersi a proprio agio con la lettura di un linguaggio assembly.

Inoltre, scegli alcune varietà nei tipi di programmi che implementi. Osserva l'implementazione di almeno una GUI desktop, una ricca applicazione Web, un client e un server di rete, un driver, un'utilità per il munging dei dati, un ray tracer e una simulazione fisica.

Tutti i progetti dovrebbero avere una portata relativamente piccola, l'obiettivo non è quello di avere un programma ricco di funzionalità, ma di ottenere un'ampia gamma di esperienze nei diversi settori in cui potresti imbatterti, per imparare i diversi tipi di pensiero necessari per ciascuno, e scoprire dove sono i tuoi interessi.

Una volta che lo hai fatto, avrai una buona idea di quale tipo di programmazione sei più interessato e puoi trovare o avviare un progetto open source per fare esperienza lavorando su basi di codice di grandi dimensioni, trattando progetti a termine e lavorare con altri sviluppatori.


2

Stai ricevendo alcune risposte simili e anche la mia sarà la stessa. Scrivi il codice Ci sono due buoni modi per farlo.

  1. Scegli qualcosa che ti piace davvero o che ti interessa e basta implementarlo. Se ti piacciono i giochi, scrivi un gioco. Se sei interessato a cose web, crea un sito Web interessante e originale. Potresti non riuscire a finirlo nemmeno, ma l'esperienza ti insegnerà molto.
  2. Scegli un progetto open source che ritieni interessante e coinvolgi esso. Impara dal codice esistente e usalo per correggere bug, costruire unit test e implementare nuove funzionalità.

Ognuno di questi ti darà l'esperienza diretta della programmazione di cui hai bisogno e il coinvolgimento nelle comunità di programmazione mentre impari e devi fare domande per ottenere di più. Farai molti errori. Questo è un bene: se smetti di fare errori hai smesso di imparare e devi trovare un nuovo modo di sfidare te stesso.


2

I miei suggerimenti

  • Trova un progetto per animali domestici e scrivilo in una lingua diversa (lyke python / c #) rispetto a quella che conosci. Questo ti insegnerà più di quanto tu possa immaginare. Guarda altri progetti simili e cerca di ottenere la parità di funzionalità con essi. Puoi andare piano con questo e avere obiettivi modesti, aumentando costantemente il tuo livello di difficoltà con nuove funzionalità. Questo diventa anche il tuo pezzo da spettacolo quando vai per un colloquio di lavoro.
  • Trova usi nel tuo progetto per tecnologie pertinenti come servizi web, javascript, ajax, geocodifica e praticamente tutto ciò che sta facendo progressi nel mondo del software.
  • Gioca con altri sistemi operativi come Linux / freebsd. Maggiore è l'esposizione a diversi tipi di sistemi, più capirai il pensiero che li circonda e perché hanno fatto le cose come hanno fatto.
  • Quando hai finito con parti del codice, ritorna ad esso e cerca di migliorarlo costantemente. Trova inefficienza, aggiungi altri commenti quando necessario, prova a perfezionarlo.
  • Scavare su c2.com. Esistono molte buone pratiche di codifica. Impara questi e prova ad applicarli nel tuo progetto.
  • Leggi libri come il programmatore pragmatico e il codice completo, ti daranno la conoscenza della programmazione avanzata.
  • Questo può sembrare non correlato, ma trova un altro hobby tecnico se non ne hai già uno come le auto da corsa RC, suonare uno strumento musicale o imparare una lingua straniera. Più parti del tuo cervello sono in uso, meglio è, e devi rilassarti di tanto in tanto perché la programmazione può ottenere troppo.

2

Le peer review aiutano davvero a migliorare la qualità del tuo codice. Se non hai un vero mentore, puoi pubblicare il tuo codice [dopo averlo ridotto al minimo necessario] in StackOverflow o RefactorMyCode o nelle mailing list e le persone ti aiuteranno a migliorare la qualità del tuo codice.


1

"Pratica!" Questo è un cliché.

Dovresti rivedere ciò che hai imparato nelle lezioni di matematica e creare alcuni programmi che affrontano i problemi. Inoltre, implementa un programma elevatore, un distributore automatico (che calcola le variazioni delle monete), per affinare le tue abilità logiche. Pensa a tutto nella vita di tutti i giorni e implementali.


1

Sì, la pratica è estremamente importante per sviluppare le capacità di programmazione e per mantenerle acute. Tuttavia, la pratica da sola ti porterà solo così lontano. Devi anche imparare da persone che sanno più di te. Ci sono tecniche di cui non hai mai sentito parlare, pratiche i cui benefici non sono immediatamente evidenti e trucchi che non potresti mai inventare.

I modi per apprendere nuove tecniche, trucchi accurati e pratiche utili sono molti. Leggere libri. Parla con i colleghi. Fare domande. Rivedi il codice di altre persone e fagli rivedere il tuo. Leggi blog e articoli sulla programmazione, incluso questo sito. In breve, non lavorare nel vuoto.

Oh, e se non sei sicuro di cosa significhi NP-complete, o se la notazione big-O ti spaventa, allora dovresti probabilmente prendere alcune teorie di calcolo e classi di algoritmi.


1

Direi che dovresti leggere su modelli di design, come Builder, Factory, Composite, e infine Observer, Mediator e Flyweight. I modelli di progettazione non sono il fine per tutte le soluzioni di codifica, ma dimostrano come implementare concetti teorici di programmazione orientata agli oggetti.


1

Posso solo suggerire la cosa che ha funzionato per me. Ho sognato di imparare il linguaggio di programmazione e creare un motore di scacchi con esso. Ho lasciato passare del tempo su libri, articoli e piccoli campioni. Così ho deciso di controllare i progetti reali che hanno una migliore documentazione per gli sviluppatori, ne ho scelto uno e ho iniziato a leggere il progetto giorno dopo giorno. Non pensare che passare giorni perdendo tempo a leggere. È molto meglio che passare il tempo a leggere articoli e libri. Incontrerai molte cose che non sono chiare a prima vista, ma di giorno in giorno questo cambierà se provi pazientemente la ricerca. Non aspettarti di capire tutto in una settimana. Devi tenere bassa la tua autostima quando non capisci alcune cose. Cerca solo di scoprire come funziona questa * fantastica cosa fantastica.

Scegli un progetto esistente che ti appassiona. Inizia a leggere i codici, esegui il debug e cerca di capire come funzionano le cose ogni giorno. Usa anche il progetto per te stesso. Quindi iniziare ad aggiungere alcune funzionalità desiderate. Prova anche a scrivere un'applicazione uguale o simile.

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.