Linguaggi di programmazione che migliorano le tue abilità di programmazione in generale? [chiuso]


27

Quali lingue consiglieresti di programmare per un programmatore, non perché utilizzeranno molto la lingua (ma potrebbero avere), ma perché migliorerà la propria abilità di programmazione in generale e lascerà che si pensi in un modo diverso (e forse migliore ) modo?


12
Non uno solo. Piuttosto: il maggior numero possibile, ognuno il più diverso possibile dagli altri.

Risposte:


27

per programmazione e algoritmi "normali":

  • pitone, buono da imparare, facile da usare, carino da leggere.
  • C ++, ti insegna che cos'è davvero un computer.

per un'esperienza che cambia il pensiero:

  • Haskell
  • Prolog

per aver distrutto la tua mente e aver attraversato il confine tra Padawan e il Maestro Jedi:

  • LISP comune

3
sì, d'accordo con chrisaycock, C e assembly ti insegneranno che cos'è un computer DAVVERO, C ++ è un passo molto leggero verso l'alto, ma ti farà ancora gestire problemi come puntatori di memoria e problemi ad alte prestazioni
Lacrymology

mh. Prolog è fantastico, ma non riesco a vedere come potrebbe essere interessante per migliorare le capacità di programmazione generale. Lo vedo come un sistema di notazione matematica / logica alternativo, di cui puoi interrogare i costrutti, più che come un linguaggio di programmazione (descrive gli stati, non le procedure). Modifica: cambia sicuramente il modo in cui pensi a qualcosa, ma quel qualcosa non sta programmando.
cbrandolino,

Prolog sicuramente sta programmando. Programmazione dichiarativa e radicata nella logica (e quindi relativamente matematica), sì. Ma sto ancora programmando. Per quanto riguarda l'ultimo punto, pensi che farebbe anche un altro Lisp (cioè Scheme)?

3
Prolog è il linguaggio più noto del paradigma logico. È importante piegare la mente attorno a tutti i paradigmi che puoi gestire, se quello che vuoi è migliorare come programmatore, ti aiuterà a ottenere agilità mentale e ti darà nuovi strumenti. Immagino che farebbe qualsiasi dialetto Lisp, quello che vedo in Common Lisp è che mi sembra il Lisp più utilizzabile dalla produzione.
Lacrymology

1
Voterei per Scheme over Common Lisp - Immagino che dipenda dal fatto che pensi di usare un Lisp in produzione. In caso contrario, scegli Scheme.
Skilldrick,

13

Non dimenticare Javascript .

Ha funzionalità OO che non sono le solite funzionalità OO. È adatto per le funzioni e le chiusure di ordine superiore e le usi abitualmente. Consente numerosi trucchi di programmazione funzionale. È estremamente flessibile.

Ed è pratico, perché ogni browser serio ce l'ha.

(Naturalmente ha anche un numero di stranezze spiacevoli. Poche lingue pratiche no)


1
JS ha funzionalità OO che Java non ha?
Mahmoud Hossam,

3
@Phobia: JS fa OO in un modo completamente diverso. Non ci sono lezioni. L'ereditarietà avviene tramite prototipi: in sostanza un oggetto può ereditare da qualsiasi altro oggetto. Le funzioni sono valori di prima classe; non solo puoi passarli in giro, ma puoi facilmente assegnare nuovi metodi a oggetti esistenti. Anche il modo in cui JS nasconde i dati è molto diverso da Java: tutto ciò che un oggetto espone è pubblico, quindi nascondi dati e metodi usando le chiusure. Nota che non esiste un 'OO canonico'; JS è un po 'più vicino all'OO "originale" inventato da Smalltalk rispetto ad esempio al C ++, ma l'OO di Java è ora anche "canonico".
9000,

11

C e assembly per come funziona un computer

Haskell e LISP sia per la programmazione funzionale che per la metaprogrammazione

APL per programmazione vettoriale e terse

bash o tcsh su come amministrare un computer a livello di codice


4
Invece di APL puoi usare J dello stesso autore.
9000,

+1 sull'assemblaggio. Non guardi mai abbastanza le lingue di alto livello allo stesso modo dopo aver fatto uno sviluppo significativo. Se stai cercando qualcosa che ti farà pensare alla programmazione in un modo davvero diverso, ASM lo farà.
Kurtis,

9

Vorrei suggerire Scheme.

È un linguaggio di programmazione funzionale derivato (la maggior parte in realtà pensa che sia un dialetto) da Lisp. La differenza principale con Common Lisp è che il suo approccio è molto minimalista - estremamente . Ad esempio, in una normale distribuzione di Scheme (qualsiasi schema <R5 o Mit / GNU / Scheme) non troverai un'implementazione in loop: dovrai crearne uno tuo usando la ricorsione della coda.

È davvero espressivo e la sua sintassi è grandiosa per imparare qualcosa di nuovo sulla programmazione, come in: solo guardando il codice, avrai un'idea di come il compilatore / interprete si farà strada attraverso di esso.

Inoltre, viene fornito con il miglior libro di programmazione di sempre, struttura e interpretazione dei programmi per computer , scaricabile gratuitamente dal sito Web del MIT.

Ecco alcune lezioni video che, spero, ti interesseranno immediatamente di questo affascinante linguaggio - i relatori sono gli autori di SICP: http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman- lezioni /


Grazie. Devo avvertirti, tuttavia, che le lezioni sono facili da spostare pianisti appassionati alle lacrime.
cbrandolino,

@cbrandolino - È vero, il nostro corso di programmazione funzionale ha eliminato molte persone dal programma di informatica.
jmort253,

1
Lo schema era minimalista, ma in R5 aveva fatto crescere alcune verruche, e su R6 è decisamente enorme. È un peccato, dal momento che è stato molto bello. Per un linguaggio davvero minimalista ma ancora pratico, controlla Lua
Javier il

@Javier, hai ragione. Modificherò la risposta per specificare le implementazioni.
cbrandolino,

Sto facendo un piano in atm universitario e lo odio. Non perché sia ​​un linguaggio funzionale, voglio parlarne da molto tempo. Tuttavia, la sintassi mi uccide davvero. Esistono tre diversi tipi di parentesi graffe sulla tastiera (quattro se si contano le parentesi angolari) e si utilizzano solo le parentesi. Perché? Qual è il problema con l'utilizzo degli altri?
Femaref,

4

LISP, preferibilmente Scheme in combinazione con "Struttura e interpretazione dei programmi per computer" di Abelson & Sussman, ti insegnerà a pensare in termini diversi da quelli imposti da C / C ++.

FORTH, in particolare un FORTH orientato ai blocchi, non uno orientato ai file (come D85) ti insegnerà a frenare la tua loquaciousness. Quando non puoi in nessun caso scrivere una routine più lunga di 16 righe di 64 caratteri, sei costretto ad astrarre e fattorizzare.


4

Java è una delle lingue più insegnate nelle università di tutto il mondo e c'è una ragione per questo. Sebbene sia spesso simile a un dinosauro, offre a tutti un'ottima panoramica dei concetti di programmazione moderna. NON ti mostra come il computer stesso funzioni come l'Assemblatore o anche il linguaggio molto molto più astratto C. Ma i piloti devono essere in grado di volare e non essere in grado di costruire un aereo da soli - vai a imparare JAVA come buona base per qualsiasi codice scriverai nelle lingue più comuni (per un reson) al giorno d'oggi: Java, c ++, php, c #, ruby ​​(su rotaie) pitone e così via ...

max


3

C # 3 con LINQ.

È un'ottima introduzione alla programmazione funzionale.

Prova a scrivere un programma (o risolvere Project Euler) e a sostituire il maggior numero di loop possibile con le chiamate LINQ.
Aiuta a padroneggiare i concetti di programmazione funzionale e valutazione pigra.

Da lì, si può passare a F #


3

Giù le mani, direi Haskell. E per due motivi:

  • È semplicemente il modo migliore per imparare la programmazione funzionale. Quasi ogni altra lingua consente effetti collaterali per impostazione predefinita, ma può fare le cose in modo funzionale (e sì, questo include le ML e Erlang: vedi questo discorso per maggiori informazioni ). Haskell è funzionale per impostazione predefinita, ma può essere fatta per usare effetti collaterali quando ne hai bisogno.
  • È sicuramente un linguaggio che ti incoraggia a pensare prima di scrivere il codice. Ad essere sincero, questo non è mai stato un problema per me (semmai è esattamente il contrario). Detto questo sembra che io sia una minoranza. La maggior parte dei programmatori in cui mi imbatto sembra essere più la mentalità del "codice prima, poni domande dopo" piuttosto che la mentalità "medita il tuo problema per giorni prima di codificare la soluzione in 5 minuti" (che tende ad essere la mia mentalità) . Pertanto, questo tipo di linguaggio può fornire preziose esperienze alla maggior parte dei programmatori.

3

Suggerirei Scala se uno proviene dal mondo C / Java.

Non è un linguaggio di programmazione puramente funzionale, ma utilizza OO per simulare alcune funzionalità di programmazione funzionale (es. Uso dell'oggetto per simulare la funzione di prima classe e la funzione di alto ordine).

Quindi, se hai familiarità con OO, Scala usa termini che già conosci per spiegare il mondo funzionale.

Ho trovato più facile per me capire la programmazione funzionale in Scala piuttosto che immergermi in una programmazione più funzionale come Haskell, List ... ecc.


2

I linguaggi funzionali sono quelli che sento aiutati a portarmi dove sono oggi. Anche se sono nello sviluppo di applicazioni web, i concetti appresi dai linguaggi funzionali mi aiutano a vedere soluzioni a problemi che altrimenti non avrei visto. Ecco le lingue con cui ho lavorato nella mia università:

  • C ++ (Non funzionale, ma concetti come puntatori e gestione della memoria sono inestimabili)
  • Dr. Scheme
  • ML / Ocaml (Abbiamo scritto un'altra lingua usando ML / Ocaml!)
  • JavaScript (linguaggio funzionale che sta prendendo piede nel settore, sia lato client che lato server)

Imparare queste lingue ti aiuterà a capire il mondo delle astrazioni e come costruire blocchi di codice che incapsulino altre funzionalità, nascondendo i dettagli di basso livello in modo da poterti concentrare sugli obiettivi di business di alto livello.


1

Ruby ha uno dei framework di test più potenti e intuitivi che abbia mai usato. Non sono sicuro di aver davvero capito come usare correttamente beffe e mozziconi fino a quando non ho iniziato a scrivere test in ruby. rSpec e Cucumber sono strumenti fantastici.


1

Esistono diversi linguaggi di programmazione che richiedono di pensare a un problema in un modo nuovo (relativamente a ciò a cui siete abituati, ovviamente.) I linguaggi più comuni da imparare dopo aver insegnato un linguaggio imperativo, sono un funzionale e un linguaggio logico, ad esempio prolog e lisp .

Alcune lingue sono fortemente influenzate dalla teoria delle categorie, come ocaml e Haskell e alcune sono lingue incrociate come Curry (funzionale e logico). Curry è probabilmente il linguaggio più strabiliante che io conosca, non solo perché ha ottenuto tutta la strabiliante intelligenza di Haskell con la programmazione logica, ma anche a causa dell'integrazione con la programmazione basata sui vincoli.

Un altro linguaggio divertente è Occam-pi poiché è così pesante in termini di concorrenza, ma anche a causa del recente porto di Arduino .


1

Un programmatore a tutto tondo ha diverse borse nella manica, e queste includono:

  • Assemblaggio, per imparare come funziona il fegato di un computer.
  • Un linguaggio procedurale come C o Pascal.
  • Un linguaggio funzionale come Scheme.
  • Un linguaggio OOP come Squeak.

Tutti questi insegnano modi leggermente diversi di pensare e affrontare i problemi.


0

non imparerai correttamente alcun linguaggio di programmazione senza un obiettivo chiaro. Sapendo cosa vuoi fare con esso, puoi decidere quale programma soddisfa le tue necessità.

Ad esempio, diciamo di c #.

C # può eseguire programmi Web, programmi console, file eseguibili autonomi, programmi di gioco, programmi Silverlight e programmi mobili. Mentre la sintassi è uguale in quasi tutti i casi, ma funziona in modo diverso in ogni scenario. Ad esempio, un eseguibile autonomo mantiene le loro informazioni fino a quando non vengono scaricate o al termine del programma, mentre un programma Web, le informazioni vengono distrutte ogni volta che carichi una pagina e in Silverlight, trascorrerai la maggior parte del tempo, lottando con un file xml.

E in secondo luogo, non passare il tempo con lingue esotiche (Haskel per esempio), parlando in società, ci sono pochissimi programmi che valgono la pena: java (re della collina), c # / vb.net, php e sql.


0

Esiste un programma molto semplice per scrivere applet Java chiamato Processing

Questo linguaggio ti darà una comprensione di base di variabili, loop e questo genere di cose, se hai appena iniziato.


0

Alcuni ottimi suggerimenti qui. Probabilmente andrei con C o C ++ personalmente. Ti costringono ad affrontare molti concetti che contano molto per capire come funzionano le cose, ma che tendono ad essere offuscati in altre lingue. Comprendere come funzionano veramente le cose ti aiuterà come programmatore anche se la lingua che stai usando in seguito nasconde alcuni dettagli.

L'assemblaggio è divertente se vuoi scavare anche a un livello un po 'più basso di quello, ma non ti aspetti di farlo molto. :)


0

Consiglierei Ruby. Ruby non richiede che tu cambi paradigmi, ma ti incoraggia a lavorare in più paradigmi. Penso che il vantaggio di questo sia che, invece di essere frustrati dal non poter lavorare nel modo in cui sei abituato, usi un paradigma diverso per la frustrazione con i limiti di fare le cose nel modo in cui sei abituato.

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.