Perché Scheme è la mia prima lingua all'università?


80

Sento C, C ++, Java ogni giorno quando la gente inizia a parlare di informatica, ma nella mia prima lezione di informatica ci viene chiesto di scrivere in Scheme (DrRacket).

Perché?

Quali sono le differenze nella mia futura comprensione della programmazione?

AGGIORNAMENTO: ho terminato il mio primo mandato, ma non completamente con Scheme. Nel mio secondo mandato (che è ora) siamo entrati nella programmazione C. All'inizio è stato frustrato apprendere i suggerimenti, ma ora mi sento molto meglio.

Non c'è molto altro da dire. Sto cercando di insegnarmi Java (o C ++?) Per la parte OOP che mi manca. Finora, mi piace ancora di più la programmazione funzionale. Lambda è semplicemente affascinante. :)


148
Congratulazioni, mi sembra che tu possa andare in una delle poche scuole rimaste che cerca effettivamente di insegnare informatica. Lo schema di apprendimento come prima lingua è (IMO) un'ottima cosa. No, non è così commerciale come molti altri, ma è un linguaggio eccellente per l'apprendimento della vera essenza dell'informatica.
Jerry Coffin,

21
C, C ++ e Java sono sottoprodotti dell'industria dell'informatica. Tutte le radici dello schema sono nell'informatica. Le lingue in uso commerciale hanno tanto a che fare con l'informatica quanto McDonalds ha a che fare con la cucina.
JasonTrue,

33
Questi ragazzi hanno ragione; stai confondendo la programmazione informatica con l' informatica - come diceva Dijkstra, è come confondere la costruzione del telescopio con l'astronomia. Lo schema riguarda la migliore lingua che esiste per l'apprendimento dei concetti di base nell'informatica . Se ti aspetti che prendere una laurea in informatica sia imparare a scrivere app line-of-business in Java, potresti essere iscritto a un programma sbagliato.
Eric Lippert,

29
Per lo stesso motivo per cui i corsi di zoologia insegnano biologia evolutiva, anatomia e comportamento animale piuttosto che come eliminare una stalla per elefanti
jk.

4
Una volta che hai i piedi sotto di te per capire la sintassi di base di Scheme, prova a leggere "The Little Schemer". È un libro sottile, ma se riesci a capire tutto in esso avrai una comprensione molto solida dei fondamenti dei linguaggi di programmazione funzionale.
Eric Lippert,

Risposte:


91

Sembra una grande scuola! I dialetti di Lisp seguono molto più da vicino il paradigma matematico degli algoritmi. Costringono i programmatori ad apprendere la ricorsione e lo stile funzionale. Questa è un'esperienza eccellente. La tua scuola è in fila con il MIT, che utilizza ancora Abelson e Sussman per il CS 6.001 richiesto.

Potresti trovare questo articolo incoraggiante e utile per comprendere il problema.


6
"Forza" probabilmente non è una buona parola da usare. Che ne dici di "treno"?
Barry Brown,

4
In realtà, negli ultimi due anni ci sono stati cambiamenti radicali nel curriculum EECS del MIT. Il loro corso introduttivo è ora suddiviso in due corsi (vedi mit.edu/6.01/mercurial/fall11/www/index.html per la prima metà), e la maggior parte delle lezioni di lingua è in Python.
jonsca,

4
Concordo sul fatto che Scheme sia un'ottima lingua ed è una buona idea impararla. Tuttavia, ammettiamolo; quasi ogni lavoro di programmazione nel mondo reale impiega un linguaggio imperativo; i lavori di programmazione più seri richiedono C ++ e i programmatori C ++ di solito ti scoraggiano attivamente dall'utilizzare tutte le belle idee matematiche per la progettazione del programma per un motivo o per l'altro. La ricorsione non avrà un ruolo importante nei programmi imperativi.
Felix Dombek,

4
@FelixDombek, sei sicuro? Tutte le idee? Veramente? Un ciclo imperativo è anche un'idea matematica, intendiamoci.
SK-logic,

3
@FelixDombek, vedo solo un motivo per usare l'iterazione invece di una ricorsione della coda in C ++. Tutte le altre forme di ricorsione sono servite esattamente come nelle implementazioni di linguaggi funzionali. Quindi non posso assolutamente essere d'accordo con la tua osservazione. Più matematica metti nella tua codifica C ++, meglio è. Dubito che proverai a implementare, diciamo, alberi rosso-neri in C ++ senza ricorsione.
SK-logic,

37

Nessuno si aspetta che come matricola sarai abbastanza esperto in qualsiasi lingua per ottenere un vero lavoro, quindi perché non iniziare con uno che è facile da imparare? Aspettarsi che i principianti imparino a programmare usando un linguaggio professionale in un IDE professionale è un po 'come dare un bisturi a uno studente di medicina del primo anno e farli lavorare su corpi vivi.

Non ti preoccupare; alla fine imparerai Java / C / C ++, probabilmente iniziando il tuo secondo anno. Se hai iniziato a studiare Java 6 ora, prima di laurearti Java 8 uscirà. O sarà stato sostituito da Python. O qualche altra lingua che non è stata ancora inventata ma prende d'assalto l'industria. Meglio rimandare l'apprendimento delle cose "popolari" il più a lungo possibile, quindi non è obsoleto quando esci dalla forza lavoro.

Schema / Racket ti aiuteranno a concentrarti su concetti importanti: progettazione dell'algoritmo, strutture di dati e manipolazione delle informazioni. Sai, le cose che sono comuni a tutte le lingue.


36

Congratulazioni, ora ti stai trasformando nell'equivalente di un vegano nel mondo dei computer, e in due anni non sarai in grado di concludere qualsiasi discussione senza informare le persone sul terreno morale superiore su cui ti trovi. ;)

Ad ogni modo hai ottenuto un'ottima scuola. Le scuole che non sono montate nel settore sono buone.
Come ha detto qualcun altro, ti insegnano la scienza, da cui deriva il mestiere .

Molte cattive fattorie di scimmie di codice ti insegnano l'arte, e quindi potresti capitare di dedurne la scienza, ma non è garantito. (e potresti finire con strane idee sbagliate al riguardo)

Ad ogni modo, come membro onorato della folla funzionale, quando esci di lì, ti sentirai sempre frainteso e sottovalutato .

Il che, ammettiamolo, per il mago medio del computer non è una novità.

Ora sei ad alto rischio di:

  • cercando di concludere in una carriera accademica ,
  • intraprendere la ricerca di un dottorato di ricerca ,
  • ... emacs .

Probabilmente ti piacerà anche l'open source, ma non troverai mai abbastanza collaboratori per i tuoi progetti funzionali.


2
Scusa, per commentare, ma perché emacs? Sono curioso. Sono nella stessa barca di OP (inizio autunno matricola) e useremo Racket (simile a Scheme).
Kevin Johnson,

2
@KevinJohnson emacs viene spesso indicato come un sistema operativo scritto in LISP che aiuta accidentalmente molte persone a modificare il codice . Se fai paradigmi funzionali e (ti viene insegnato) come le oscenità delle sintassi simili a LISP, probabilmente crescerà su di te come editor di testo preferito.
ZJR

1
"ti insegnano la scienza, da cui deriva il mestiere": +1
Giorgio,

23

Quali sono le differenze nella mia futura comprensione della programmazione?

È un po 'come chiedere in che modo leggere Shakespeare ti aiuterà a scrivere articoli a termine. La programmazione (in qualsiasi lingua) è solo un mezzo per esprimere le tue idee in forma eseguibile. L'informatica fornisce gli elementi concettuali che ti daranno qualcosa di interessante da dire. La sintassi dello schema è relativamente semplice, quindi puoi ottenere idee interessanti rapidamente e senza imbatterti in molti errori del compilatore, librerie standard, ecc.

Presta molta attenzione in classe - imparerai molte cose interessanti questo semestre.


14

Sembra che tu sia molto nuovo nella programmazione senza averne alcuna esperienza. Quindi, ecco alcuni chiarimenti:

Perché Scheme e non C / C ++ / Java ...?

Quando apprendi un linguaggio di programmazione (un'analogia potrebbe essere fatta con la lingua inglese) impari la sintassi che devi seguire in modo che il tuo codice sia grammaticamente corretto. Tuttavia, una lingua non ti insegnerà la logica alla base della risoluzione dei problemi. Per apprendere quella logica, impari diversi paradigmi di programmazione .

Ogni lingua può implementare (più o meno accuratamente) uno o più paradigmi. Un paradigma è un modo per strutturare la tua logica e il paradigma implementato da Scheme si chiama Programmazione funzionale (FP).

Quindi la vera domanda che stai ponendo è: perché FP?

Come hai detto, C, C ++ e Java (che non implementano FP) sono molto più popolari. È un dato di fatto (e per vari motivi, ognuno ha la propria opinione) FP non è molto popolare nel settore.

D'altra parte, FP è molto apprezzato nei circoli accademici. È più vicino all'approccio matematico comune, si concentra maggiormente sulla dimostrabilità e l'ottimizzazione degli algoritmi e la maggior parte delle persone concorderà sul fatto che ti renderebbe un programmatore migliore in generale.

È simile alle scuole che insegnano il latino per studiare la letteratura inglese.


1
Lo schema non deve essere usato funzionalmente, anche se è più probabile che lo farai che in C, C ++ e Java.
Ricky Clarkson,

"È simile alle scuole che insegnano il latino per studiare letteratura inglese.": O alle classi di sistemi operativi che insegnano un sistema operativo simile a Unix invece di altri sistemi operativi più diffusi.
Giorgio,

11

Dovresti imparare come si sta programmando e quali sono i concetti di base. I linguaggi di uso quotidiano nella maggior parte delle aziende potrebbero essere adatti per la produzione del software necessario oggi, ma non sono necessariamente i più adatti per insegnarti le basi della programmazione.

Dopo aver compreso i concetti, è facile applicarli ad altre lingue.


4
"I linguaggi di uso quotidiano nella maggior parte delle aziende potrebbero essere adatti alla produzione del software necessario oggi" - Considerando i costi tipici, la qualità e le percentuali di successo, questa è una dichiarazione piuttosto ottimistica :-)
Jörg W Mittag,

Questo è assolutamente vero! Ecco perché ho scritto "potrebbe" invece di "are" :-)
perdian

1
"Dopo aver compreso i concetti, è facile applicarli ad altre lingue." - Questa affermazione è fin troppo vera. Sospetto che mi occorrerebbe circa una settimana per rilevare la sintassi in qualsiasi nuova lingua ed essere competente. Mi è stato insegnato C / C ++ e Assembly a scuola, ma ho insegnato a me stesso Python e Lisp per un progetto di ricerca. Senza la comprensione fondamentale che ho acquisito da Python, Lisp e Assembly, dubito che sarei quasi il programmatore che sono oggi.
Wayne Werner,

9

Se stai imparando con DrRacket, scommetto che stai usando anche il curriculum How to Design Programs.

Ecco cosa uno degli autori (dichiaratamente di parte) di HtDP ha da dire sul modo in cui il Programma di insegnamento ha preparato studenti universitari presso la Northeastern University per il programma di educazione cooperativa ("cooperativa": gli studenti alternano semestri di studio accademico con semestri di tempo pieno l'occupazione).

Prima del mio arrivo, Northeastern utilizzava un curriculum standard da due decenni: tre termini del linguaggio attuale (Pascal, C ++, Java), usando una serie di esercizi estremamente ricchi di grafica intrecciati con lezioni su applicazioni pratiche. Il curriculum è stato ampiamente pubblicato su SIGCSE e nelle comunità correlate, ma non ha funzionato. Al culmine della bolla del web, solo circa un terzo degli studenti aveva cooperazioni di programmazione; la maggior parte degli altri finì per essere "techie" come si chiamavano: spostare i computer, eseguire script, impostare router e reti, ecc. E tutta questa istruzione costava 150.000 dollari.

Dopo un anno al Nordest, il nostro preside mi ha chiesto di tenere il primo corso. La prima istanza fu un successo, contrariamente alle previsioni di alcune facoltà locali. Anche se era stato considerato un processo, siamo passati a TeachScheme! curriculum permanente; il preside mi ha suggerito di progettare un corso bridge per collegare il corso HtDP al resto del curriculum; questo ha iniziato la mia collaborazione su HtDC con Viera Proulx. Vedi il poscritto qui sotto. Nel giro di un paio d'anni, ho iniziato a sentire dalla nostra facoltà cooperativa che la percentuale di posizioni di programmazione stava salendo. Nel 2007, l'ultima volta che sono stato coinvolto nel corso, mi è stato detto che il rapporto di programmazione sulla prima cooperativa è salito a due terzi e oltre. Nel frattempo, tutto TeachScheme! i corsi sono stati tenuti da numerosi docenti con stili e personalità di insegnamento piuttosto diversi dai miei. Il rapporto tra cooperativa di programmazione è aumentato a tre quarti e più, e tutte le facoltà a valle sono contente delle capacità di programmazione degli studenti.

Modifica: per coloro che sono molto interessati al razionale dietro il curriculum, ecco la spiegazione dell'architetto principale - http://www.youtube.com/watch?v=m3be1PHW5X0


6

La mia scuola ha iniziato anche con Scheme. Uno dei motivi che è stato menzionato è che ciò ha contribuito a livellare il campo di gioco. La maggior parte del primo anno di scienze scientifiche potrebbe avere un'esposizione, o molto, a lingue più comuni. Era meno probabile che qualcuno conoscesse molto lo Schema.


4
Sono d'accordo; Ho iniziato CS conoscendo Pascal, C, Basic, x86 Assembler, mentre altri hanno avuto esperienze in lingue diverse o nessuna. Siamo stati introdotti a ML che non solo nessuno ha avuto alcuna esperienza precedente ma che aveva un paradigma così estraneo che era come ricominciare da capo anche per i più esperti tra noi. Più tardi, penso che ML (il paradigma funzionale) sia la cosa più utile che ho imparato in CS.
KaptajnKold,

6

In realtà, dato che Lisp (Scheme è un dialetto) è la Grande Dame dei linguaggi funzionali (pensate a F #, Groovy, Clojure, Haskell ecc.), Allora questa formazione non vi lascia alcun tipo di svantaggio commerciale, poiché questo è il più caldo argomento sul blocco di sviluppo in questo momento.


4

Lo schema ti aiuterà a diventare bravo e a pensare nel modo corretto di usare linguaggi di programmazione funzionali. Scala, ad esempio, è un ibrido funzionale / OO piuttosto brillante, sebbene un po 'denso. Lingue come questa segnano il futuro, si spera.

Le lingue simili a quelle di Lisp hanno però una purezza e una semplicità nel loro design che le rendono un po 'più facili da insegnare. Il bello vantaggio è che dopo ti divertirai molto più facilmente a imparare qualcosa come Scala.


3

Abbiamo completato Scheme nella prima e nella prima metà del secondo semestre. Solo quando abbiamo iniziato a lavorare con C ho iniziato a realizzare il potere di Scheme.

Per quanto riguarda la tua domanda, perché Scheme viene scelto: la risposta è che è una delle lingue più semplici là fuori e ti permette di fare molto (specialmente quando inizieremo a giocare con liste pigre in seguito). Inoltre :

  1. Per le persone che non hanno esperienza di programmazione, è più facile da imparare. Non ci sono molti dettagli tecnici e solo alcuni moduli speciali.
  2. Consente un'astrazione di livello superiore. Un buon corso può concentrarsi sull'insegnamento ai programmatori come pensare invece di concentrarsi sui dettagli tecnici che consentono agli studenti di diventare programmatori migliori.
  3. Le liste sono fantastiche. C'è così tanto che puoi fare con loro. Car e cdr si dimostrano strumenti potenti ed è solo quando inizi a lavorare con i puntatori che ti rendi conto che Scheme è stato fantastico nella gestione delle liste.
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.