Come posso davvero padroneggiare un linguaggio di programmazione?

100

So che imparando una lingua, puoi semplicemente comprare un libro, seguire gli esempi e, quando possibile, provare gli esercizi. Ma quello che sto guardando davvero è come padroneggiare la lingua una volta appresa.

Ora so che l'esperienza è uno dei fattori principali, ma per quanto riguarda l'apprendimento degli interni della lingua, qual è la struttura sottostante, ecc.

Ci sono articoli là fuori che dicono leggere questo libro, leggere quel libro, fare questo gioco e quel gioco. Ma per me questo non significa padroneggiare una lingua. Voglio essere in grado di leggere il codice di altre persone e capirlo, non importa quanto sia difficile. Per capire quando usare una funzione e quando un'altra, ecc. Ecc.

L'elenco potrebbe continuare all'infinito, ma credo di aver capito il punto. :)

E infine, prendi qualsiasi linguaggio come esempio se necessario, anche se sarebbe meglio se C fosse preso come esempio.

    
posta cprogcr 30.09.2012 - 18:55
fonte

14 risposte

162

Devo rispondere, "Tutto quanto sopra." Le persone discutono sul fatto che la codifica sia un'arte, un mestiere, una disciplina ingegneristica o una branca della matematica, e penso che sia più giusto dire che è una di queste. Come tale, più tecniche porti alla padronanza della lingua, meglio è. Ecco un elenco parziale:

  • Usa la lingua tutto il giorno, tutti i giorni. Di solito questo significa essere impiegati a tempo pieno nella lingua.

  • Leggi tutto quello che puoi sulla lingua. Soprattutto, "best practice" e espressioni idiomatiche.

  • Unisciti a un gruppo di utenti per parlare con gli altri della lingua e di cosa fanno con essa.

  • Lavora con il codice di altre persone! Non esiste un modo più rapido per imparare cosa non fare in una lingua piuttosto che dover pulire dopo che qualcuno ha fatto qualcosa di terribile.

  • Supporta il codice che scrivi - ogni bug diventa un tour delle tue peggiori decisioni!

  • Studia l'informatica e le lingue in generale

  • Impara una lingua molto diversa. Un grande complimento per C sarebbe un linguaggio funzionale come Lisp. Questo trasformerà il tuo modo di pensare al tuo linguaggio procedurale.

  • Impara a utilizzare i framework e le API disponibili per quella lingua.

  • Prenditi il tempo per fare i tuoi esperimenti con la lingua. SICP non è applicabile a C, ma l'atteggiamento di imparare una lingua testandone i limiti è molto produttivo.

  • Leggi la cronologia della lingua per scoprire perché è stata creata così com'è.

  • Partecipa alle conferenze per ascoltare gli autori delle lingue che parlano o per ascoltare ciò che i leader del settore stanno facendo con la lingua.

  • Segui una lezione nella lingua.

  • Insegna la lingua agli altri (grazie a Bryan Oakley )

In sintesi, fai tutto ciò che riesci a pensare. Non c'è modo di sapere tutto sulla maggior parte delle lingue. Ogni tecnica di apprendimento che usi offre una prospettiva aggiuntiva alla tua comprensione.

    
risposta data 10.10.2017 - 18:42
fonte
52

10.000 ore di pratica sono sufficienti.

Leggi "Ti insegna a programmare in dieci anni"

Punti chiave dall'alto:

  • Get interested in programming, and do some because it is fun. Make sure that it keeps being enough fun so that you will be willing to put in your ten years/10,000 hours.
  • Program. The best kind of learning is learning by doing.
  • Talk with other programmers; read other programs.
    
risposta data 20.09.2012 - 10:46
fonte
33

MAI considera te stesso il padrone dell'intera lingua finché non hai implementato una lingua migliore di quella. Il che significa, per imparare come funziona una particolare lingua da sotto, ottenere un libro che ti insegna i concetti di compilatore / interprete della lingua. Ad esempio:

  • C: il libro del compilatore LCC

  • C ++: la progettazione e l'evoluzione di C ++ (E poi vai avanti costruisci il tuo Compilatore C ++ o almeno capire l'implementazione di uno utilizzando il codice del compilatore GNU C ++)

  • Java: scarica "Inside JVM" e ottieni il codice sorgente di javac. "java" .C anche il codice è utile

  • Python: implementazione di CPython.

  • ObiettivoC: quasi tutto il materiale di Apple sugli interni di ObjC runtime env e sui codici sorgente del compilatore ti aiuterà.

  • Lisp: SICP Book (ti insegna Scheme e un interprete-compilatore di base per il linguaggio simile a Lisp) : Lisp in Small Pieces (un altro buon libro).

risposta data 20.09.2012 - 03:35
fonte
11

Prova a usare la lingua per qualcosa per cui non era destinato. Scrivi un driver di dispositivo in Python o una libreria di manipolazione di matrice in COBOL. Penso che uno dei modi migliori per padroneggiare una lingua sia quello di spingerlo davvero, cercando di far superare i suoi punti di forza.

    
risposta data 19.09.2012 - 17:09
fonte
10

Ti renderò semplice la vita. Non imparerai mai una lingua. Periodo. Se pensi di avere, allora ovviamente non lo hai fatto. Non c'è una cima di montagna che arrivi improvvisamente e dici "Bene, ora, ho pienamente padroneggiato quella lingua. Anche i programmatori esperti che hanno lavorato con lo stesso linguaggio per decenni vi diranno che a volte continuano a imbattersi in nuove idee, processi, pratiche, ecc. Il vero obiettivo è padroneggiare la comprensione concettuale di una lingua o di una lingua. La capacità di apprendere nuovi concetti e la velocità con cui è possibile adottare funzionalità nuove o modificate nella lingua è molto più importante della conoscenza meccanica di ogni parola chiave e sintassi. Smetti di preoccuparti di "padroneggiare" un linguaggio e semplicemente preoccupati di migliorare continuamente e perfezionare la qualità e l'efficienza del tuo codice. Questo è ciò che fanno i "maestri".

    
risposta data 19.09.2012 - 18:10
fonte
5

Conosci già la risposta a questo

  • Devi usare la lingua. Un sacco. Per risolvere il più possibile una gamma di problemi il più possibile
  • Devi leggere (e, idealmente, lavorare con) il codice di altri popoli, preferibilmente quelli che hanno un certo grado di padronanza (cioè una profonda comprensione di almeno alcuni aspetti della lingua). Per estensione, se puoi parlare con le persone sulla risoluzione dei problemi con la lingua, allora tanto meglio.

Dipende dal duro lavoro, dalla determinazione e da tutto ciò che potresti mai ottenere.

Pensa da dove prendiamo il termine - per diventare un Maestro Artigiano dovevi essere un apprendista e poi un operaio e solo loro potresti avere la possibilità di diventare un maestro. Lungo la tua strada verrai insegnato e praticheresti e osserveresti e metteresti in discussione gli altri con il loro mestiere e (si spera) imparerai da loro.

Non esiste un proiettile magico ...

    
risposta data 19.09.2012 - 16:11
fonte
2

Inizia leggendo e comprendendo cosa è SDLC (ovvero, Vita dello sviluppo del software -ciclo). È un processo iterativo che implica il miglioramento di sé, l'apprendimento, **practicing, practicing...**

Ciòaprirebbeituoiorizzontisuqualiareehaibisognodiimparareomigliorare.Cisonodiversilibridibasesull'ingegneriadelsoftwarechepotrestitrovaremoltoutiledaleggeredopoavercreatounpaiodiapplicazionidate.

Inoltre,unavoltachetisentirestifiduciosoconunlinguaggioOOP,potrestiiniziareaimpararemodellidiprogettazionee Head First Design patterns è davvero un buon libro da considerare. Adoro questo libro.

    
risposta data 20.09.2012 - 12:43
fonte
2

Non c'è alcun sostituto per esperienza. Per padroneggiare qualcosa, devi farlo / usarlo, molto, per molte cose diverse.

Quindi vai avanti e usa quel linguaggio per esercizi (come Project Euler ) e progetti personali, cose di cui hai effettivamente bisogno, o cose che pensi è interessante. Scrivi un gioco, scrivi una webapp, scrivi un parser, qualunque cosa ti piaccia. E ad ogni passo, cerca di capire cosa stai facendo piuttosto che incollare semplicemente il codice o seguire le istruzioni.

I want to be able to read other people's code and understand it, no matter how hard that is.

Questo è qualcosa che puoi fare subito dopo aver capito la sintassi di base. Prendi un po 'di codice e prenditi il tempo per vederlo in dettaglio. Cerca elementi che non capisci o poni domande specifiche in luoghi come Stack Overflow .

    
risposta data 29.09.2012 - 00:18
fonte
2

Sul lato di alto livello del problema, scopri l'architettura: come organizzare i tuoi progetti, qual è la sua struttura. Non lasciarli crescere casualmente.

Al livello intermedio, impara diverse tecniche e paradigmi. Più strumenti diversi hai nel tuo repertorio, più potere per te. Se hai studiato solo java, python e ruby, sei stato esposto solo a una piccola parte dello spazio di programmazione. Apprendi la programmazione imperativa e funzionale, impara prolog e J. L'idea non è "padroneggiare" centinaia di lingue, ma apprendere diversi modi per risolvere gli stessi problemi.

Sul lato di basso livello del problema, una cosa che potrebbe aiutarti a essere un programmatore migliore (in effetti meglio in qualunque cosa tu faccia) è avere un buon modello mentale della piattaforma. Ad esempio, puoi imparare come funzionano le strutture di controllo C e conoscere le librerie più comuni, ma se non hai un modello mentale di come funzionano i puntatori e la memoria, avrai problemi con espressioni moderatamente complesse.

    
risposta data 29.09.2012 - 15:21
fonte
1

Posso fare un paio di suggerimenti?

Innanzitutto, se riesci a trovare un mentore per discutere del tuo uso della lingua con e per ottenere i migliori consigli e trucchi e per rispondere quando una tecnica è migliore di un'altra.

In secondo luogo, esercitati il più possibile e prova la lingua al massimo! Lavoravo in una squadra, che (per una questione di divertimento) sceglieva un verbo o un altro pezzo del linguaggio di programmazione dal manuale ogni giorno. Era un segno d'onore se potessi lavorarci nella tua codifica quel giorno. Ciò significava che l'intero team di programmazione doveva esaminare e comprendere il termine (a volte) oscuro per comprenderlo e utilizzarlo in modo efficace. Alcuni giorni abbiamo fallito, ma quella squadra è stata divertente da lavorare e tecnicamente attivata !!

    
risposta data 19.09.2012 - 18:16
fonte
0

I linguaggi di programmazione riflettono le idee dietro i paradigmi di programmazione sviluppati per lo sviluppo di software generico o per lo sviluppo di software per scopi speciali. Ad esempio, un linguaggio di programmazione come Java rappresenta il paradigma del programma orientato agli oggetti, ma AspectJ (un'estensione di Java) viene utilizzato per programmare in base alla programmazione orientata all'aspetto.

Data questa breve introduzione, per padroneggiare veramente una lingua, acquistare e leggere un libro da solo non sarebbe di grande aiuto. Dovresti capire l'ambiente in cui puoi programmare usando la lingua desiderata, conoscere il paradigma e, soprattutto, creare un'applicazione significativa usando il linguaggio. Costruire una piccola applicazione che può darti un assaggio dei vari strumenti forniti dalla lingua è un approccio di apprendimento davvero utile.

Ho visto persone provenienti dalla comunità C pura senza imparare nulla sull'orientamento agli oggetti e la difficoltà nell'apprendimento di Java o dell'obiettivo-c. Ho anche visto persone lottare con la programmazione delle interfacce utente quando non hanno realmente compreso la comprensione degli elementi dell'interfaccia utente, della programmazione basata sugli eventi, ecc ...

Spero che questo aiuti!

    
risposta data 19.09.2012 - 20:52
fonte
0

Vorrei aggiungere due elementi all'elenco di Glen

  • Cerca di risolvere il problema più difficile che altri hanno, ad es. dare risposte su SO
  • Leggi i blog dei designer di lingue / prenota. Questa è la migliore risorsa di conoscenza profonda. Sapresti qual è la decisione di progettazione dietro la ragione X.
risposta data 19.09.2012 - 20:55
fonte
0

Costruire su ciò che @TMN ha detto. Ho avuto un grande successo nell'apprendimento delle lingue scrivendo lo stesso programma in una lingua diversa.

Ad esempio, scrivendo un programma che legge in un file CSV, analizza il testo e poi lo scrive su un secondo CSV con le colonne in ordine inverso.

In questo modo,

Column1,Column2,Column3

a

Column3,Column2,Column1

Ciò ti darà una comprensione di base o la lingua. Quindi vedi cos'altro puoi fare. Forse consentire la sostituzione del valore o il riordino o la lettura dalla riga di comando. Rendilo complesso come vuoi.

Penso anche a cosa ha detto @GlenPeterson,

Learn a very different language. A great compliment to C would be a functional language like Lisp. This will turn the way you think about your procedural language inside out.

È una grande idea. Suggerirei un linguaggio come Haskell perché nelle ultime versioni puoi programmare usando tutti e quattro i paradigmi di programmazione di OO, procedurale, logico o funzionale. Anche se in realtà è un linguaggio funzionale, con qualche sforzo puoi implementare gli altri paradigmi che sarebbero una buona esperienza di apprendimento.

Ottimo linguaggio con cui giocare.

    
risposta data 19.09.2012 - 21:55
fonte
0

Non puoi imparare una lingua dal libro. Tutto ciò di cui hai bisogno è pratica e pratica. Non pensare Puoi imparare una lingua da quel particolare libro o da quella particolare fonte. Devi solo pensare che il linguaggio di programmazione sia lo stesso del linguaggio umano. Non puoi semplicemente imparare l'inglese o il francese leggendo un particolare libro. Tutto ciò che serve è usarlo nel giorno per vita quotidiana. Codice da zero, estendere la sua funzionalità, provare a costruire qualcosa che ti renda un po 'soddisfatto. E se stai pensando di padroneggiare una lingua come conoscenza dell'intero linguaggio e usando ogni elemento del linguaggio di programmazione nella pratica codifica .. NON PUOI. O anche se è possibile, potrebbe richiedere 10-15 anni.

    
risposta data 01.07.2013 - 04:57
fonte

Leggi altre domande sui tag