Se uno deve imparare un nuovo linguaggio di programmazione ogni anno, quale dovrebbe essere l'elenco? [chiuso]


19

Nel primo capitolo di "The Pragmatic Programmer" il primo obiettivo di apprendimento è:

Impara almeno una nuova lingua ogni anno. Lingue diverse risolvono gli stessi problemi in modi diversi. Imparando diversi approcci diversi, puoi aiutare ad ampliare il tuo pensiero ed evitare di essere colpito da una carreggiata. [...]

Per raggiungere questo obiettivo nel corso di una carriera, è probabile che l'elenco delle lingue diventi piuttosto lungo (in particolare se non si desidera "progredire" nella gestione). Chiaramente l'educazione di un programmatore (o qualunque forma) ti farà iniziare con un nucleo di linguaggi utili dal punto di vista commerciale (la solita lista delle offerte di lavoro: C, C ++, Ruby, Python, JavaScript, C #, Java, VB, .. .). Inoltre, è probabile che un programma di apprendimento formale o informale abbia coperto approcci funzionali (tramite qualcosa come Haskell, LISP o un linguaggio derivato ML)

Ma una volta appreso un sottoinsieme ragionevole di tale elenco, quali sono le prospettive e perché ?


3
In questa risposta elencherò alcuni dei paradigmi linguistici che potrebbero essere studiati per ampliare le tue capacità. Vorrei iniziare cercando di imparare tutti questi paradigmi (piuttosto che focalizzarmi sulle lingue), quindi spuntare tutti quelli che la tua lingua corrente usa, quindi scegliere una lingua che abbia altrettante differenti da quelle a cui sei abituato. Non ha molto senso iniziare in C # quindi in Java, inizialmente cerca di diversificare maggiormente. Dopo aver coperto tutti i tipi di base, puoi scegliere altre lingue comuni.
Simon P Stevens,

@Simon: Perché non rendere questa una risposta qui?
Richard,

1
Imparerai molto andando da Java a C #, ma non tanto andando al contrario
Casebash

@Richard. Non pensavo davvero che giustificasse una risposta completa, ti stavo solo riferendo a qualcosa di rilevante che avevo scritto altrove.
Simon P Stevens,

1
La maggior parte della gente che impara una lingua all'anno sarà un "tuttofare ma padrone di nessuno" fino a quando non ti concentrerai su alcuni per diversi anni. Credo, sulla base di molta esperienza, che l'idea del programmatore "full-stack" sia falsa, tranne per l'1% - 5% degli sviluppatori. La maggior parte delle persone di back-end hard-core che conosco non hanno grandi capacità di front-end e viceversa.
junky

Risposte:


19

Rendilo interessante e trascorri ogni anno scrivendo un interprete o un compilatore per il tuo linguaggio di programmazione che riempie una nicchia per cui non hai mai usato un linguaggio di programmazione. Ogni anno scrivi il tuo prossimo compilatore / interprete usando la lingua che hai scritto l'anno precedente.


7
Posso avere il tuo autografo, per favore? :-)
Christian Davén,

1
+1 Risposta brillante, anche se probabilmente è stata intesa in modo umoristico.
Joe D,

1
@Joe D Non inteso in modo totalmente divertente. Se riesci a farlo, hai imparato tutte le nicchie.
alternativa il

-1 per non significarlo in modo totalmente divertente. (come se non avessimo abbastanza lingue / implementazioni semi abbandonate in giro)
ZJR

2
@ZJR Quindi 99% divertente, 1% non divertente è male? Andiamo, forza. Inoltre, perché stai ridimensionando una risposta in base a un commento?
alternativa

13

Dovresti massimizzare la "rilevanza marginale", ovvero avventurarti sempre in nuove aree in cui non sei ancora forte. Varia sia i linguaggi di programmazione che i concetti . Se non conosci alcun linguaggio orientato agli oggetti, prova Java e alcuni framework ad alta astrazione come Hibernate. Quindi scrivere alcune cose di amministrazione dei sistemi in un linguaggio di script come Python o Perl. Quindi acquisisci alcune competenze di basso livello in C o C ++, scrivendo codice server multithread ad alte prestazioni. Se non conosci la programmazione funzionale, prova Haskell con alcuni problemi di teoria dei grafi come la risoluzione di Solitario Peg , ecc. È molto fattibile farlo in modo che tutto ciò che impari abbia un valore di mercato immediato, fino a quando non colpisci l'erudito o cose speciali come come protezione della capacità dell'oggetto ,Prolog o VHDL .

A proposito, buon esercizio! Questo ti insegnerà a pensare lateralmente e ad immaginare i problemi in termini agnostici della lingua, invece di fare affidamento su troppo poche tecniche specifiche della piattaforma. Ad esempio, una volta padroneggiate le somiglianze e le differenze nell'invio di metodi virtuali tra C ++ e Python, praticamente lo "capirai" immediatamente per qualsiasi altro linguaggio.


9

Un linguaggio che non influisce sul modo in cui pensi alla programmazione, non vale la pena conoscerlo. - Alan Perlis

Come alcune delle altre risposte hanno toccato, se stai imparando una nuova lingua all'anno, perché? è espandere le tue capacità come programmatore. Come? è imparare le lingue con paradigmi distinti da quelli delle lingue che già conosci e fare il punto sui paradigmi che già conosci determina quale lingua apprendere in seguito.

Quali sono questi paradigmi? Il libro avanzato Concetti, tecniche e modelli di programmazione per computer offre un'eccellente panoramica con una mappa grafica .

Pertanto, se conosci solo linguaggi imperativi di tipo C, l'apprendimento di Scheme / Lisp è estremamente utile. Se conosci già linguaggi imperativi e funzionali, allora sarà utile imparare Prolog, ecc.

Un libro recente che cerca di insegnare più lingue e paradigmi è Sette lingue in sette settimane . Naturalmente, non sarai fluente in ogni lingua dopo una settimana di studio, ma sembra fornire una prospettiva multi-paradigma accessibile e orientata al professionista.

Quando fai un altro paradigma, è davvero un momento Zen; passare dall'imperativo alla programmazione funzionale mi ha fatto vedere il mondo dell'informatica sotto una luce completamente nuova. Buon apprendimento!


E una lingua influenza il tuo pensiero non tanto da ciò che ti consente di esprimere, ma più da ciò che ti obbliga ad esprimere.
Florian F,

9

C - come essenziale, "sottostante a tutto", linguaggio di programmazione dei sistemi

Lisp (Scheme) - lo strano ma incredibilmente potente linguaggio che i grandi hacker ritengono definitivo

Smalltalk - perché questo è ciò che OO doveva essere

Erlang (o altra lingua degli attori) per capire gli attori

Haskell - per capire Monadi

Javascript - perché è ovunque ed essenziale per lo scripting del browser

Uno di Python / Ruby / Perl (ma non importa quale) - quindi sai come si sente un linguaggio di scripting popolare, moderno e di alto livello con un buon supporto di libreria

SQL: così puoi parlare con database relazionali

Prolog - perché hai ancora bisogno di farti saltare la testa


2
Il motivo per cui ho imparato Haskell è perché volevo imparare un linguaggio funzionale (al contrario di tutti quelli procedurali che conoscevo prima), e Haskell mi è sembrato il bambino dei linguaggi funzionali per i linguaggi funzionali. La ragione per cui mi piace Haskell ora è perché è un linguaggio di alto livello, ha un buon supporto per le librerie ed è veloce (circa il 50% più veloce di C, ma dipende da cosa stai facendo). Inoltre, mi piace essere in grado di scrivere un sacco di codice e tutto funziona la prima o la seconda volta (dopo averlo compilato).
Joey Adams,

Indubbiamente importa se impari Perl, Python o Ruby. Ad esempio, Python ha una comprensione dell'elenco, che non esiste in Ruby, e Ruby ha moduli che non esistono in Python. Puoi duplicare i risultati di entrambe le cose in entrambe le lingue, ma l'apprendimento di entrambi influenzerà il tuo modo di pensare in modi molto diversi.
philosodad,

1
Prolog - perché devi ancora farti saltare la testa - Il miglior commento di sempre +1
Zachary K

1
Penso che il principale vantaggio dell'apprendimento di haskell non sia necessariamente quello di afferrare l'astrazione della monade, ma piuttosto di apprendere i vantaggi di un sistema di tipo REAL forte e potente. Se l'idea di un "sistema di tipo statico" è qualcosa come Java, allora haskell ti toglierà il respiro.
Sara

4
  • Vai (nuovo linguaggio di programmazione a livello di sistema con un buon supporto per la concorrenza e concetti non così tradizionali)
  • Lua (linguaggio di scripting semplice, espressivo, estremamente flessibile ed equilibrato paradigmi imperativo, funzionale e meta-programmazione, che consente OOP)
  • D (C / C ++ fatto bene)
  • Groovy (espressività e meta programmazione nel mondo Java)
  • Eiffel (Design by Contract e un approccio diverso a OOP)
  • Prolog (IL linguaggio di programmazione logica)

1
Perché qualcuno dovrebbe imparare questi? (Il motivo è interessante qui, ci sono pochi linguaggi di programmazione davvero unici: ogni paradigma è stato implementato più di una volta.)
Richard

Interessante vedere che pensi che D sia C fatto bene. Personalmente quando uso C, lo uso principalmente per alcune cose di basso livello in cui non voglio affatto astrazioni OOP.
Jonas,

@Jonas: Abbiamo ancora bisogno di un linguaggio semplice fatto bene, mentre questo linguaggio non viene D può essere usato bene solo in modo imperativo. Per te, D2 è più funzionale, una volta completato forse sarà la migliore implementazione del paradigma in un linguaggio principalmente imperativo.
Maniero,

fatto bene è soggettivo. Per me Erlang è un linguaggio molto piccolo e semplice fatto bene. La parte mancante è un ottimo framework GUI, e se fai sistemi complessi forse ti piacerebbe un linguaggio tipizzato statico di più.
Jonas,

@Jonas: Erlang è un buon linguaggio ma non è C / C ++ fatto bene, è una cosa totalmente diversa.
Maniero,

2

1) Prolog: è completamente diverso da tutti i linguaggi imperativi che hai usato finora e cambierà il modo in cui pensi ai problemi

2) Lisp: senza di essa, potresti anche usare Vi

3) Erlang: Ancora una volta, è completamente diverso, inoltre, sembra abbastanza alla moda.

4) Qualcosa dal Tarpit di Turing (ad esempio Brainfuck), e probabilmente scrivere un compilatore o un interprete per questo: non riesco a pensare a un motivo per farlo, ma mi sembra una buona idea.


1
"senza di essa, potresti anche usare Vi". Sono sorpreso che nessuno l'abbia preso :)
Gauthier,

Io uso vi! (Bene Dio)
Zachary K

1

Oltre a quelli che hai elencato,

Haskell, F #, Clojure, OCaml, Lua, Go, D, Erlang, Obiettivo C.


1

Anche se concordo sul fatto che è bene imparare nuove lingue (e persino imperativo attraverso una lunga carriera), penso che una all'anno sia troppo oltre i primi cinque-dieci anni. Quello che preferirei vedere è qualcuno con questo livello di esperienza che impara cose nuove sulle lingue che già conoscono. Ad un certo punto hai bisogno di profondità e ampiezza di conoscenza. Quindi puoi scrivere un costrutto If in 12 lingue, big whoop. Preferirei vedere qualcuno che scava davvero e diventa esperto in almeno una cosa. E poi i prossimi anni diventeranno esperti in qualcos'altro. Per oltre 30 anni di carriera, voglio che qualcuno abbia una conoscenza approfondita e non solo le basi di molte cose.

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.