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

79

Ogni giorno sento parlare di C, C ++, Java ogni volta che si inizia a parlare di informatica, ma nella mia prima lezione di informatica ci viene chiesto di scrivere in Scheme (DrRacket).

Perché?

Quali differenze apporteranno alla mia futura comprensione della programmazione?

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

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

    
posta Erica Xu 20.10.2011 - 05:29
fonte

11 risposte

89

Sembra una grande scuola! I dialoghi Lisp seguono il paradigma matematico degli algoritmi molto più strettamente. Costringono i programmatori a imparare la ricorsione e lo stile funzionale. Questa è un'esperienza eccellente. La tua scuola è nei ranghi con MIT, che usa ancora Abelson e Sussman per la richiesta CS 6.001.

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

    
risposta data 20.10.2011 - 05:39
fonte
36

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

Non preoccuparti; alla fine imparerai Java / C / C ++, probabilmente iniziando il tuo secondo anno. Se hai iniziato a imparare Java 6 ora, quando ti diplomi Java 8 sarà fuori. O sarà stato sostituito da Python. O qualche altro linguaggio che non è stato ancora inventato, ma prende d'assalto l'industria. Meglio smettere di imparare le cose "popolari" il più a lungo possibile, quindi non è obsoleto quando esci nel mondo del lavoro.

Scheme / Racket ti aiuterà a concentrarti su concetti importanti: progettazione di algoritmi, strutture di dati e manipolazione delle informazioni. Sai, cose che sono comuni a tutte le lingue.

    
risposta data 20.10.2011 - 06:17
fonte
34

Congratulazioni, ti stai trasformando nell'equivalente di un vegan nel mondo dei computer, e in due anni non sarai in grado di concludere alcuna discussione senza informare la gente della < strong> terreno morale superiore ti alzi. ;)

Ad ogni modo hai fatto un'ottima scuola. Le scuole che sono non montate dal settore sono buone.
Come qualcuno ha detto, loro ti insegnano la scienza da cui trai il mestiere .

Molti cattivi code-monkey-farms ti insegnano il mestiere, e quindi potresti capitare di dedurne la scienza, ma non è garantito. (e si può finire con idee sbagliate piuttosto strane su di esso)

Ad ogni modo, come membro onorato della folla funzionale, quando esci da lì, sentirai sempre incompreso e under- apprezzato .

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

Ora sei a rischio elevato:

  • provare a concludere in una carriera accademica ,
  • intraprendi un PHD ,
  • ... emacs .

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

    
risposta data 20.10.2011 - 14:45
fonte
22

What differences will this make to my future understanding of programming?

È un po 'come chiedere come leggere Shakespeare ti aiuterà a scrivere tesine. 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 è possibile ottenere idee interessanti rapidamente e senza incorrere in molti errori del compilatore, librerie standard, ecc.

Fai molta attenzione in classe: imparerai molte cose interessanti in questo semestre.

    
risposta data 20.10.2011 - 07:00
fonte
13

Sembra che tu sia molto nuovo alla programmazione senza alcuna esperienza precedente. Quindi ecco alcuni chiarimenti:

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

Quando impari 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 grammaticalmente corretto. Tuttavia, una lingua non ti insegnerà la logica dietro la risoluzione dei problemi. Per apprendere questa 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 è chiamato Programmazione funzionale (FP).

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

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

D'altra parte, FP è molto apprezzato negli ambienti accademici. È più vicino all'approccio matematico comune, si concentra maggiormente sulla provabilità e sull'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.

    
risposta data 20.10.2011 - 13:06
fonte
10

Dovresti imparare in che modo viene eseguita la programmazione e quali sono i concetti di base. I linguaggi di tutti i giorni utilizzati nella maggior parte delle aziende potrebbero essere adatti alla produzione del software necessario oggi, ma non sono necessariamente i più adatti per insegnare come base della programmazione.

Una volta che hai compreso i concetti, è facile applicarli ad altre lingue.

    
risposta data 20.10.2011 - 09:21
fonte
9

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

Ecco cosa ha da dire uno degli autori (esplicitamente di parte) di HtDP sul modo in cui lo schema di insegnamento ha preparato gli studenti universitari presso la Northeastern University per il programma di educazione cooperativa ("co-op": studenti alternano semestri di studi accademici con semestri di lavoro a tempo pieno).

Prior to my arrival, Northeastern had been using a standard curriculum for two decades: three terms of the currently fashionable language (Pascal, C++, Java), using a set of extremely graphics-rich exercises intertwined with lessons on practical applications. The curriculum was widely published in SIGCSE and related communities, but it didn’t work. At the height of the web bubble, only around one third of the students got programming co-ops; most others ended up as “techies” as they called themselves: moving computers, running scripts, setting up routers and networks, etc. And all of this education cost $150,000 tuition.

After a year at Northeastern, our dean asked me to take over the first course. The first instance was a success—contrary to predictions from some local faculty. Even though it had been considered a trial, we switched to the TeachScheme! curriculum permanently; the dean suggested that I design a bridge course to connect the HtDP course to the rest of the curriculum; this started my collaboration on HtDC with Viera Proulx. See the postscript below. Within a couple of years, I started hearing from our co-op faculty that the share of programming positions was going up. By 2007—the last time I was involved with the course—I was told that the ratio of programming on the first co-op went up to two thirds and higher. In the meantime, all TeachScheme! courses have been taught by numerous faculty members with rather different teaching styles and personalities than my own. The ratio of programming co-op has risen to three quarters and more, and all the downstream faculty are happy about the students’ programming skills.

Modifica: per coloro che sono interessati al razionale dietro al curriculum, ecco la spiegazione dell'architetto principale - link

    
risposta data 20.10.2011 - 19:14
fonte
6

Anche la mia scuola è iniziata con Scheme. Una delle ragioni citate è che questo ha aiutato a livellare il campo di gioco. La maggior parte del primo anno Comp Sci potrebbe avere un po ', o molto, di esposizione a più lingue comuni. Era meno probabile che qualcuno avesse molta conoscenza di Scheme.

    
risposta data 20.10.2011 - 06:05
fonte
6

In realtà, poiché Lisp (Schema essendo un dialetto) è la Grande Dame dei linguaggi funzionali (pensiamo a F #, Groovy, Clojure, Haskell ecc.), allora questo addestramento non ti lascia in alcun modo svantaggio commerciale, poiché è l'argomento più caldo sul blocco di sviluppo in questo momento.

    
risposta data 20.10.2011 - 17:43
fonte
4

Lo schema ti aiuterà a diventare bravo ea pensare nel modo corretto di usare linguaggi di programmazione funzionali. Scala ad esempio è un ibrido Functional / OO che è abbastanza brillante, anche se un po 'denso. Lingue come questa però segnano il futuro - si spera.

I linguaggi "Lisp" hanno però una purezza e semplicità nel loro design che li rendono un po 'più facili da insegnare. Il vantaggio è che avrai più tempo per imparare qualcosa come Scala in seguito.

    
risposta data 20.10.2011 - 13:01
fonte
3

Abbiamo completato lo schema nel primo e nel primo semestre 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 iniziamo a giocare con le 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 alcune forme speciali.
  2. Consente un'astrazione di livello superiore. Un buon corso può concentrarsi sull'insegnare ai programmatori come pensare invece di concentrarsi sui dettagli tecnici che consentono agli studenti di diventare migliori programmatori.
  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 accorgi che Scheme è stato straordinario nel gestire le liste.
risposta data 08.07.2013 - 12:50
fonte

Leggi altre domande sui tag