Perché la famiglia c è il reggimento di studio CS standard per i programmi di matematica / CS invece della famiglia LISP? [chiuso]


14

Mi sono familiarizzato con LISP per scopi di auto-miglioramento. Una delle cose che ho notato è che LISP è molto più all'interno del paradigma della matematica che dire C. La sintassi e la struttura del design sembrano riecheggiare direttamente il modello matematico reale di un algoritmo. Non ha senso per me perché anche buoni programmi CS basati su matematica studiano C invece di LISP. Penso che LISP impieghi più direttamente concetti matematici più elevati rispetto a C. Non sto dicendo che non puoi modellare strutture matematiche in C. Sto semplicemente notando che LISP sembra essere predisposto per i matematici.

Ho letto molte delle affermazioni di Joel Spolsky sulle scuole JAVA e cosa no - e sono d'accordo con la sua valutazione -, ma la mia scuola non ha insegnato JAVA proprio per questo motivo. Erano rigorosi nell'insegnare concetti fondamentali come puntatori, progettazione di algoritmi, ricorsione e persino istruzioni di assemblaggio. Tuttavia, hanno fatto tutto questo in C e c ++. Qualcuno conosce le ragioni di questo e / o della sua storia?


Alla fine della giornata, una laurea in informatica dovrebbe essere in qualche modo indipendente dal linguaggio. L'idea di un CS è che dovrebbe essere in grado di apprendere qualsiasi nuova lingua poiché l'informatica è teorica. All'esterno CS sembra essere il tutto compreso che ti insegna come essere un programmatore e uno scienziato. Questo non è il caso, imparare a imparare una lingua è ciò di cui parla CS.
Chris,

2
Allo stesso modo in cui LISP "echo il modello matematico reale di un algoritmo", C echo la struttura effettiva dell'hardware ed è semplice come i costrutti in C mappano alla memoria (che è naturalmente particolarmente utile per i sistemi embedded). Tuttavia, sono totalmente d'accordo con te. Avrei apprezzato altri corsi di laurea in LISP in modo da poter approfondire ulteriormente
Bill VB

Risposte:


13

OK. Quindi, la risposta noiosa è che, alla fine, la maggior parte delle scuole insegna ciò con cui i professori si sentono a proprio agio, e la maggior parte dei professori non è cresciuta hackerando Lisp; trascorsero i loro primi anni nel campo con lingue basate sull'Algol. Per questo motivo, anni dopo, quando stanno costruendo un curriculum, finisci con le scuole che insegnano CS con una fondazione in Pascal, poi C, poi C ++ e poi Java.

Quindi hai scuole di livello inferiore e alcuni anni più giovani. E guardano in alto al bar che è stato aperto dalle scuole che aprono la strada, e vedono che gli studenti lasciano quelle scuole conoscendo C, e vedono che i loro stessi studenti si aspettano lo stesso - quindi iniziano a insegnare C, poi C ++, quindi Giava.

Infine, hai alcune delle istituzioni tecniche o "di fascia bassa" che insegnano semplicemente qualunque insieme di tecnologia corrisponderà alle parole chiave che gli studenti desiderano sui loro curriculum, quindi praticamente ottieni Java.

Detto questo, alcune scuole fanno insegnare Lisp, anche se può essere più di un elettivo, piuttosto che una lingua fondamentale. E anche le scuole che non insegnano Lisp come lingua autonoma, lo usano ampiamente nei corsi di AI, quindi i corsi di AI per principianti si concentrano sull'inizio della programmazione di Lisp.


2
Ti sento. Non mancano di rispetto a C e c ++, sono stati i miei linguaggi di scelta per tutta la mia carriera, ma LISP sarebbe uno strumento di insegnamento molto migliore per gli studenti di matematica rispetto a C. C è un ottimo linguaggio, e sicuramente non assumerei mai qualcuno chi non lo sapeva, ma lo scopo di un diploma di laurea specialistica non è la formazione tecnica sul campo, è padroneggiare i concetti di matematica e informatica. LISP sembra molto più adatto a questo scopo.
Jonathan Henson,

Penso che entrambi abbiano il loro posto, e le università potrebbero trarre vantaggio dall'avere un percorso più teorico / accademico a un livello CS in cui allarghi la mente. Quella traccia dovrebbe avere una buona gamma di lingue, tra cui Lisp, Prolog, Algol, ecc. E una traccia che è basata sulla pratica, con una concentrazione su qualunque sia il sapore pratico della giornata.
Andrey Butov,

@Jonathan Henson: Spot on!
Chris,

9

Questo dipende davvero dall'università. Scheme (un dialetto di lisp) è stato per secoli il linguaggio del corso introduttivo di informatica al MIT, sebbene sia stato recentemente sostituito da Python. Ho conseguito la laurea in CS presso una scuola di ingegneria, dove sono stato esposto a C, Scheme, Prolog e C ++ durante il mio primo anno. Penso che sia stato un buon mix.

Sono fermamente convinto che il linguaggio con cui inizi sia molto meno importante che essere esposto a più paradigmi all'inizio, prima che il tuo cervello si blocchi in un modo di guardare il mondo.


1

Fondamentalmente, la teoria dell'informatica è matematica. L'ingegneria del software, tuttavia, non lo è. Modellare direttamente concetti matematici non è un vantaggio intrinseco: direi che spesso può essere uno svantaggio.

Le buone teorie e i buoni programmi non sono necessariamente correlati.


"Le buone teorie e i buoni programmi non sono necessariamente correlati.": La programmazione riguarda la costruzione e la combinazione di astrazioni che risolvono i problemi. E, secondo Wikipedia, "La teoria è un ... tipo di pensiero astratto o generalizzante, o i risultati di tale pensiero". ( en.wikipedia.org/wiki/Theory ) Quindi teoria e (buona) programmazione sono davvero molto vicine tra loro.
Giorgio,
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.