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

27

Quali lingue consiglieresti ad un programmatore di imparare, non perché avranno un sacco di uso della lingua (ma potrebbero esserlo), ma perché miglioreranno le abilità di programmazione in generale e faranno pensare in un altro ( e possibilmente migliore) modo?

    
posta Anto 16.01.2011 - 21:47
fonte

17 risposte

27

per la programmazione e gli algoritmi "normali":

  • python, buono da imparare, facile da usare, carino da leggere.
  • C ++, ti insegna cos'è DAVVERO un computer.

per un'esperienza di cambiamento del pensiero:

  • Haskell
  • Prolog

per distruggere la tua mente e superare la linea tra padawan e il Maestro Jedi:

  • LISP comune
risposta data 16.01.2011 - 21:55
fonte
13

Non dimenticare Javascript .

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

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

(Naturalmente ha anche una serie di stranezze strane. Pochi linguaggi pratici non lo sono)

    
risposta data 16.01.2011 - 22:39
fonte
11

C e assembly per come funziona un computer

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

APL per la programmazione vettoriale e tinta

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

    
risposta data 16.01.2011 - 22:05
fonte
9

Suggerirei Schema.

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

È davvero espressivo e la sua sintassi è ottima per imparare qualcosa di nuovo sulla programmazione, in quanto: guardando il codice, si ha un'idea di come il compilatore / interprete lavorerà su di esso.

Inoltre, viene fornito con il miglior libro di programmazione di sempre, Struttura e interpretazione dei programmi per computer , liberamente scaricabile sul sito web del MIT.

Ecco alcune lezioni video che, spero, ti faranno subito interessare a questa affascinante lingua: i relatori sono gli autori di SICP: link

    
risposta data 17.01.2011 - 06:24
fonte
4

LISP, preferibilmente Scheme in combinazione con Abelson & La "Struttura e interpretazione dei programmi per computer" di 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 loquacità. Quando non puoi in nessuna circostanza scrivere una routine più lunga di 16 righe di 64 caratteri, sei costretto ad astrarre e fattore.

    
risposta data 16.01.2011 - 22:38
fonte
4

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

max

    
risposta data 07.02.2011 - 11:53
fonte
3

C # 3 con LINQ.

È un'ottima introduzione alla programmazione funzionale.

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

Da lì, si può passare a F #

    
risposta data 16.01.2011 - 22:09
fonte
3

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

  • È semplicemente il modo migliore per apprendere la programmazione funzionale. Quasi ogni altro linguaggio consente di default gli effetti collaterali, ma può fare le cose funzionalmente (e sì, questo include le ML e Erlang: guarda questo talk per ulteriori informazioni ). Haskell è funzionale per impostazione predefinita, ma può essere utilizzato per utilizzare gli effetti collaterali quando ne hai bisogno.
  • È sicuramente un linguaggio che ti incoraggia a pensare prima di codificare. Ad essere onesti, questo non è mai stato un problema per me (se mai, è l'esatto opposto). Detto questo sembra che io sia una minoranza. La maggior parte dei programmatori che ho incontrato sembrano essere più la mentalità del "primo codice, poni domande dopo" piuttosto che il "ponderare il tuo problema per giorni prima di codificare la soluzione in 5 minuti" mentalità (che tende a essere la mia mentalità) . Pertanto, questo tipo di linguaggio può fornire un'esperienza preziosa alla maggior parte dei programmatori.
risposta data 17.01.2011 - 09:00
fonte
3

Suggerirei Scala se uno proviene dal mondo C / Java.

Non è un linguaggio di programmazione puramente funzionale, ma usa OO per simulare alcune funzioni di programmazione funzionale (ad esempio utilizzando l'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 scoperto che è più facile per me capire la programmazione funzionale in Scala piuttosto che immergermi in una programmazione più funzionale come Haskell, Elenco ... ecc.

    
risposta data 17.01.2011 - 10:51
fonte
2

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

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

Imparare queste lingue ti aiuterà a comprendere il mondo delle astrazioni e come creare blocchi di codice che incapsulino altre funzionalità, nascondendo i dettagli di basso livello in modo da concentrarti sugli obiettivi aziendali di alto livello.

    
risposta data 16.01.2011 - 23:07
fonte
1

Ruby ha uno dei framework di test più potenti e intuitivi che ho usato. Non sono sicuro di aver veramente capito come usare correttamente il mocking e lo stub fino a quando non ho iniziato a scrivere test in ruby. rSpec e Cucumber sono strumenti fantastici.

    
risposta data 17.01.2011 - 02:18
fonte
1

Ci sono un certo numero di linguaggi di programmazione che richiedono che tu pensi a un problema in un modo nuovo (rispetto a quello che sei abituato, naturalmente). Le lingue più comuni da imparare essendo state insegnate una lingua imperativa, è un linguaggio funzionale e logico, ad esempio prolog e Lisp.

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

Un'altra lingua divertente è Occam-pi dal momento che è così pesante sulla concorrenza, ma anche a causa del recente porta arduino .

    
risposta data 17.01.2011 - 13:09
fonte
1

Un programmatore a tutto tondo ha diverse borse o trucchi nella manica, e questi includono:

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

Tutto questo ti insegna modi leggermente diversi per pensare su e approccio problemi.

    
risposta data 07.02.2011 - 13:22
fonte
0

non imparerai correttamente alcun linguaggio di programmazione senza un obiettivo chiaro. Sapendo cosa vuoi fare con esso, puoi decidere quale programma si adatta alle tue esigenze.

Ad esempio, diciamo su c #.

C # può fare programmi web, programmi per console, eseguibili stand alone, 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 conserva le proprie informazioni fino a quando non viene scaricato o il programma è finito, mentre un programma web, le informazioni vengono distrutte ogni volta che si carica una pagina, e in silverlight, si trascorrerà la maggior parte del tempo, alle prese con un file xml.

E in secondo luogo, non passare il tuo tempo con le lingue esotiche (Haskel per esempio), parlando in privato, ci sono pochissimi programmi che meritano il tuo sforzo: java (re della collina), c # / vb.net, php e sql .

    
risposta data 17.01.2011 - 02:10
fonte
0

C'è un programma molto semplice per scrivere applet Java chiamati Processing

Questo linguaggio ti darà una comprensione molto basilare delle variabili, dei loop e di quel genere di cose, se sei appena agli inizi.

    
risposta data 17.01.2011 - 03:33
fonte
0

Alcuni ottimi suggerimenti qui. Probabilmente andrei con C o C ++ personalmente. Ti costringono ad affrontare molti concetti importanti per capire come funzionano le cose, ma che tendono ad essere offuscati in altre lingue. Solo capire come stanno realmente funzionando le cose ti aiuterà come programmatore anche se la lingua che usi in seguito nasconde alcuni dettagli.

L'assemblaggio è divertente se vuoi scavare anche in un livello un po 'più basso di quello, ma non aspettarti di fare molto con esso. :)

    
risposta data 17.01.2011 - 03:42
fonte
0

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

    
risposta data 17.01.2011 - 07:20
fonte

Leggi altre domande sui tag