it-swarm.it

Come posso migliorare le mie capacità di programmazione?

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

Sono un laureato in Informatica, Java è il mio linguaggio di codifica 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 certa 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?

Modificato: fonti che suggeriscono lo sviluppo di abilità di codifica.

76
ykombinator

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 a domande SO al riguardo .

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.

46
P Shved

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!

98
user2567

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 mentore e fagli guardare il tuo codice.

21
JeffO

Ecco un presentazione Dan North ha dato 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
10
ysolik

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

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 le dimensioni del programma sembrano ingestibili.

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! "

8
D. L.

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 in e dalla 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'è una grande sovrapposizione tra cose da considerare quando scrivo un gioco d'azzardo multiplayer e un sistema di trading.

5
sal
  • Seleziona buoni progetti opensource e leggi il codice.
  • Prendi un progetto di medie dimensioni per te stesso 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
Amarghosh

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 magari entrare 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 scoprendo come farlo orientato agli oggetti e usando PEAR e il suo modulo rapido che è un altro ostacolo che devo superare ma determinato ed eccitato ciò nonostante.

Quindi pratica. Salta in acqua! Buona fortuna :)

4
Jonathan

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.

4
Muad'Dib

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
jmservera

Suggerisco di imparare tutta la sintassi della tua lingua preferita. Comprendi come utilizzare funzioni virtuali, ereditarietà, 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.

O 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
user2528

Il consenso generale è "scrivere più codice", che sono d'accordo, 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 a un livello inferiore linguaggio (C è buono per questo), un linguaggio di scripting (preferisco Perl, ma python è anche una buona scelta), un linguaggio funzionale (LISP è la raccomandazione generale qui, ma OCaml e Haskell sono anche buone scelte) e almeno si sentono a proprio agio con la lettura di una lingua dell'Assemblea.

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 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.

3
Cercerilla

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 utilizzalo per correggere bug, creare 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 va bene - se smetti di fare errori hai smesso di imparare e devi trovare un nuovo modo di sfidare te stesso.

2
glenatron

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. Più esposizione ottieni a diversi tipi di sistemi, più capirai il pensiero che li sta dietro e perché hanno fatto le cose come hanno fatto.
  • Quando hai finito con parti del tuo codice, ritorna ad esso e cerca di migliorarlo costantemente. Trova inefficienze, 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
Tjaart

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.

2
missingfaktor

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
Dima

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
Tim Claason

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 a cui sei appassionato. Inizia a leggere i codici, esegui il debug e prova a 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.

1
Freshblood

"Pratica!" Questo è un cliché.

Dovresti rivedere ciò che hai appreso durante le lezioni di matematica e creare alcuni programmi per affrontare 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
Ming-Tang