... how can I develop programming skills that can be applied towards all languages instead of just one?
La chiave di questa domanda è di trascendere la lingua e pensare in non alla lingua in cui stai codificando.
WAT?
I programmatori esperti poliglotta pensano nel albero sintattico astratto (AST) del loro modello mentale della lingua. Non si pensa "ho bisogno di un ciclo for qui", ma piuttosto di "ho bisogno di ripetere il ciclo su qualcosa" e lo traduco all'appropriato per, o mentre, o iteratore o ricorsione per quella lingua.
Questo è simile a ciò che si vede nell'apprendimento di una lingua parlata. Le persone che parlano molte lingue pensano fluentemente il significato , e ne esce in una determinata lingua.
Si può vedere qualche indizio di questo AST nella coppia di video eyetracking Comprensione del codice con Eye Tracking e Esperimento del codice di tracciamento degli occhi (Novice) dove i movimenti dell'occhio di un programmatore principiante ed esperto sono osservati. Si può vedere il programmatore esperto 'compilare' il codice nel proprio modello mentale e 'eseguirlo' nella propria testa, mentre il principiante deve iterare sul codice parola chiave per parola chiave.
Quindi, la chiave della domanda sullo sviluppo delle abilità di programmazione da applicare a tutte le lingue tutte è quella di imparare più lingue in modo che ci si possa distanziare dall'avere il modello mentale di uno lingua e sviluppare la capacità di generare l'AST per un problema da soli in una lingua di testa che viene poi tradotta in una determinata lingua.
Una volta che si ha questa capacità di usare l'AST nella testa, imparando un'altra lingua all'interno di una scuola di pensiero simile (andando a Befunge è un po 'un salto da Java, ma non tanto da Forth ) diventa molto più facile - E '' solo 'tradurre l'AST in una nuova lingua che è molto più facile la 3a, la 4a e la 5a (ecc ...) ora è fatta.
C'è un articolo classico, I veri programmatori non usano Pascal . Una parte di questo dice:
... the determined Real Programmer can write Fortran programs in any language
Ci sono anche bit per i quali non puoi semplicemente usare l'AST mentale - devi anche pensare nella lingua. Questo richiede un po 'di tempo per essere realizzato (sono ancora accusato di aver scritto il codice Perl in Python e il mio primo Lisp codice è stato esaminato dicendo "Questo è un ottimo programma C.").
Per questo, devo segnalare un articolo pubblicato da ACM, Come non scrivere Fortran in Qualsiasi lingua . Il terzo paragrafo dell'articolo (che non riporta citazioni) affronta direttamente la domanda in questione:
There are characteristics of good coding that transcend all general-purpose programming languages. You can implement good design and transparent style in almost any code, if you apply yourself to it. Just because a programming language allows you to write bad code doesn’t mean that you have to do it. And a programming language that has been engineered to promote good style and design can still be used to write terrible code if the coder is sufficiently creative. You can drown in a bathtub with an inch of water in it, and you can easily write a completely unreadable and unmaintainable program in a language with no gotos or line numbers, with exception handling and generic types and garbage collection. Whether you're writing Fortran or Java, C++ or Smalltalk, you can (and should) choose to write good code instead of bad code.
Non è sufficiente avere l'AST - è necessario avere l'AST che si possa tradurre in altre lingue. Avere un Fortran AST nella tua testa e scrivere codice Fortran in Java non è una buona cosa. Bisogna anche essere abbastanza familiari con la lingua e i suoi idiomi per poter pensare nella lingua (nonostante quello che ho detto in cima).
Ho visto codice Java scritto da qualcuno che non aveva smesso di scrivere codice C. C'era un oggetto con un metodo principale. In questo oggetto c'erano un sacco di metodi statici chiamati da main
, e classi interne private che avevano campi pubblici (e quindi assomigliavano molto ai montanti). Era un codice C scritto in Java. Tutto ciò che è stato fatto è stato tradurre la sintassi di una lingua in un'altra.
Per superare questo punto, è necessario continuare a scrivere codice in più lingue, non pensare in quelle lingue quando si progetta il codice, ma pensare in loro quando si traduce il disegno nel codice per lavorare con gli idiomi della lingua correttamente.
L'unico modo per arrivarci - essere in grado di sviluppare competenze di programmazione che possono essere applicate a tutte le lingue - è continuare ad apprendere le lingue e mantenere quel linguaggio di programmazione mentale flessibile piuttosto che collegato a una lingua.
(Le mie scuse a ChaosPandion per aver preso a prestito pesantemente da l'idea che ha presentato .)