Pourquoi Scheme est-il ma langue maternelle à l'université?

80

J'entends parler de C, C ++, Java tous les jours à chaque fois que des gens commencent à parler d'informatique, mais dans mon premier cours d'informatique, on nous demande d'écrire dans Scheme (DrRacket).

Pourquoi donc?

Quelles différences cela fera-t-il dans ma compréhension future de la programmation?

UPDATE: J'ai terminé mon premier mandat, mais pas complètement terminé avec Scheme. Dans mon deuxième mandat (qui est maintenant), nous sommes entrés dans la programmation en C. Au début, c'était frustrant d'apprendre des indicateurs, mais maintenant je me sens beaucoup mieux.

Il n'y a pas beaucoup plus à dire que cela. J'essaie d'apprendre moi-même Java (ou C ++?) Pour la partie POO qui me manque. Jusqu'à présent, j'aime toujours mieux la programmation fonctionnelle. Lambda est juste fascinant. :)

Erica Xu
la source
148
Félicitations, il me semble que vous allez peut-être fréquenter l’une des rares écoles où l’on veut enseigner l’informatique. Le programme d’apprentissage en tant que première langue est (IMO) une très bonne chose. Non, ce n'est pas aussi commercial que beaucoup d'autres, mais c'est un excellent langage pour apprendre la véritable essence de l'informatique.
Jerry Coffin
21
C, C ++ et Java sont des sous-produits de l'industrie de l'informatique. Toutes les racines de Scheme sont en informatique. Les langues utilisées dans le commerce ont autant à voir avec l’informatique que McDonalds avec la cuisine.
JasonTrue
33
Ces gars sont corrects; vous confondez programmation informatique et informatique - comme l'a dit Dijkstra, cela revient à confondre la construction d'un télescope avec l'astronomie. Scheme concerne le meilleur langage pour l’apprentissage des concepts de base en informatique . Si vous vous attendez à ce que l'obtention d'un diplôme en informatique consiste à apprendre à écrire des applications métier en Java, vous êtes peut-être inscrit au mauvais programme.
Eric Lippert
29
Pour la même raison, les cours de zoologie enseignent la biologie de l’évolution, l’anatomie et le comportement animal plutôt que de savoir comment débusquer un stand d’éléphants
jk.
4
Une fois que vous avez compris la syntaxe de base de Scheme, essayez de lire "The Little Schemer". C'est un livre mince, mais si vous pouvez tout comprendre, vous aurez une connaissance très solide des bases des langages de programmation fonctionnels.
Eric Lippert

Réponses:

91

Cela ressemble à une grande école! Les dialectes Lisp suivent beaucoup plus étroitement le paradigme mathématique des algorithmes. Ils forcent les programmeurs à apprendre la récursion et le style fonctionnel. C'est une excellente expérience. Votre école est dans les rangs avec le MIT, qui utilise toujours Abelson et Sussman pour le CS 6.001 requis.

Vous pourriez trouver cet article encourageant et utile pour comprendre le problème.

Jonathan Henson
la source
6
"Force" n'est probablement pas un bon mot à utiliser. Que diriez-vous de "train"?
Barry Brown
4
En fait, le programme EECS du MIT a subi des changements radicaux au cours des deux dernières années. Leur cours d'initiation est maintenant divisé en deux cours (voir mit.edu/6.01/mercurial/fall11/www/index.html pour le premier semestre), et la majorité des cours de langue sont donnés en python.
Jonsca
4
Je conviens que Scheme est une excellente langue et que c'est une bonne idée de l'apprendre. Cependant, avouons-le; presque tous les emplois de programmation dans le monde réel utilisent un langage impératif; la plupart des tâches de programmation vraiment sérieuses nécessitent le C ++, et les programmeurs C ++ vous découragent généralement activement d'utiliser toutes les bonnes idées basées sur des principes mathématiques pour la conception de programmes pour une raison ou une autre. La récursivité ne jouera pas un rôle important dans vos programmes impératifs.
Felix Dombek
4
@FelixDombek, êtes-vous sûr? Toutes les idées? Vraiment? Une boucle impérative est aussi une idée mathématique, remarquez.
SK-logic
3
@FelixDombek, je ne peux voir une raison d'utiliser l' itération au lieu d'une queue récursivité en C ++. Toutes les autres formes de récursivité sont servies exactement de la même manière que dans les implémentations de langages fonctionnels. Je ne suis donc pas du tout d'accord avec votre remarque. Plus vous utiliserez de mathématiques dans votre codage C ++, mieux ce sera. Je doute que vous essayiez d'implémenter, par exemple, des arbres rouge-noir en C ++ sans récursivité.
SK-logic
37

Personne ne prévoit que comme un étudiant de première année , vous serez assez compétent dans une langue pour obtenir un vrai travail, alors pourquoi ne pas commencer par celui qui est facile à apprendre? Attendre des novices à apprendre la programmation en utilisant un langage professionnel dans une IDE professionnelle revient à donner un scalpel à un étudiant en première année de médecine et à le faire travailler sur des corps vivants.

Ne t'inquiète pas vous apprendrez éventuellement Java / C / C ++, probablement à partir de la deuxième année. Si vous commencez à apprendre Java 6 maintenant, Java 8 sera déjà disponible. Ou il aura été remplacé par Python. Ou un autre langage qui n'a pas encore été inventé mais qui prend d'assaut l'industrie. Mieux vaut différer l'apprentissage de la matière "populaire" le plus longtemps possible pour qu'elle ne soit pas obsolète lorsque vous vous inscrivez sur le marché du travail.

Scheme / Racket vous aidera à vous concentrer sur les concepts importants: conception d’algorithmes, structures de données et manipulation d’informations. Vous savez, ce qui est commun à toutes les langues.

Barry Brown
la source
36

Félicitations, vous êtes maintenant devenu l'équivalent d'un végétalien dans le monde de l'informatique et, dans deux ans, vous ne pourrez plus vous lancer dans une discussion sans informer les gens du fondement moral plus élevé sur lequel vous vous tenez debout. ;)

Quoi qu'il en soit, vous avez obtenu une très bonne école. Les écoles qui ne sont pas fouettées sont bonnes.
Comme quelqu'un d'autre l'a dit, ils vous enseignent la science dont vous tirez le métier .

Beaucoup de mauvaises fermes de code-singe vous apprennent le métier, et vous pouvez en déduire la science, mais ce n'est pas garanti. (et vous pouvez vous retrouver avec des idées fausses assez étranges à ce sujet)

Quoi qu’il en soit, en tant que membre honoré de la foule fonctionnelle, lorsque vous sortirez de là, vous vous sentirez toujours mal compris et sous-estimé .

Ce qui, admettons-le, n’est pas une nouveauté pour le grand public.

Vous courez maintenant un risque élevé de:

  • en essayant de terminer sa carrière universitaire ,
  • se lancer dans la poursuite d'un doctorat ,
  • ... Emacs .

Vous aimerez probablement aussi l’open source, mais vous ne trouverez jamais assez de collaborateurs pour vos projets fonctionnels.

ZJR
la source
2
Désolé, pour necro-commenter, mais pourquoi emacs? Je suis curieux. Je suis dans le même bateau qu'OP (débutant à l'université en automne) et nous allons utiliser Racket (similaire à Scheme).
Kevin Johnson
2
@KevinJohnson emacs est souvent désigné comme un système d'exploitation écrit en LISP qui aide accidentellement de nombreuses personnes à modifier le code . Si vous utilisez des paradigmes fonctionnels et que vous êtes assimilé aux obscénités des syntaxes analogues à LISP, il deviendra probablement votre éditeur de texte préféré.
ZJR
1
"vous apprendre la science, à partir de laquelle vous dérivez le métier": +1
Giorgio
23

Quelles différences cela fera-t-il dans ma compréhension future de la programmation?

C'est un peu comme si on vous demandait comment la lecture de Shakespeare vous aiderait à rédiger vos travaux. La programmation (dans n'importe quelle langue) n'est qu'un moyen d'exprimer vos idées sous une forme exécutable. L'informatique fournit les blocs de construction conceptuels qui vous donneront quelque chose d'intéressant à dire. La syntaxe des schémas est relativement simple, vous pouvez donc accéder rapidement à des idées intéressantes sans vous heurter à de nombreuses erreurs de compilation, bibliothèques standard, etc.

Portez une attention particulière en classe - vous allez apprendre beaucoup de choses intéressantes ce semestre.

Caleb
la source
14

Il semble que vous soyez très novice en programmation sans aucune expérience préalable. Alors voici quelques précisions:

Pourquoi Scheme et pas C / C ++ / Java ...?

Lorsque vous apprenez un langage de programmation (une analogie peut être faite avec l'anglais), vous apprenez la syntaxe à suivre pour que votre code soit correct du point de vue grammatical. Cependant, une langue ne vous apprendra pas la logique qui sous- tend la résolution de problèmes. Afin d'apprendre cette logique, vous apprenez différents paradigmes de programmation .

Chaque langue peut implémenter (plus ou moins précisément) un ou plusieurs paradigmes. Un paradigme est un moyen de structurer votre logique. Le paradigme implémenté par Scheme s'appelle Functional Programming (FP).

La vraie question que vous posez est donc: pourquoi la PF?

Comme vous l'avez mentionné, C, C ++ et Java (qui n'implémentent pas la FP) sont beaucoup plus populaires. En fait, (et pour différentes raisons, tout le monde a son opinion) La PF n’est pas très populaire dans l’industrie.

D'autre part, la PF est très appréciée dans les milieux universitaires. Il est plus proche de l'approche mathématique commune, se concentre davantage sur la prouvabilité et l'optimisation des algorithmes, et la plupart des gens s'accorderont pour dire que cela ferait de vous un meilleur programmeur en général.

C'est semblable aux écoles qui enseignent le latin afin d'étudier la littérature anglaise.

Rahmu
la source
1
Scheme n'a pas besoin d'être utilisé de manière fonctionnelle, même s'il est plus probable que vous le fassiez en C, C ++ et Java.
Ricky Clarkson
"Cela ressemble aux écoles qui enseignent le latin pour étudier la littérature anglaise.": Ou aux classes de systèmes d'exploitation qui enseignent un système d'exploitation de type Unix plutôt que d'autres systèmes d'exploitation plus répandus.
Giorgio
11

Vous êtes censé apprendre comment la programmation est effectuée et quels sont les concepts de base. Les langages de tous les jours utilisés dans la plupart des entreprises sont peut-être bien adaptés à la production du logiciel nécessaire aujourd'hui, mais ne sont pas nécessairement les mieux adaptés pour vous enseigner les bases de la programmation.

Une fois que vous avez compris les concepts, il est facile de les appliquer à d'autres langues.

perdian
la source
4
"Les langages de tous les jours utilisés dans la plupart des entreprises pourraient bien convenir à la production du logiciel dont vous avez besoin aujourd'hui" - Compte tenu des coûts, de la qualité et des taux de réussite habituels, voici une déclaration plutôt optimiste :-)
Jörg W Mittag
C'est vraiment vrai! C'est pourquoi j'ai écrit "pourrait" au lieu de "sont" :-)
perdian
1
"Une fois que vous avez compris les concepts, il est facile de les appliquer à d'autres langues." - Cette affirmation est trop vraie. Je suppose que cela me prendrait environ une semaine pour trouver la syntaxe dans presque toutes les nouvelles langues et être compétent. On m'avait appris le C / C ++ et l'assemblage à l'école, mais je me suis enseigné le python et Lisp pour un projet de recherche. Sans la compréhension fondamentale que j'ai acquise de Python, Lisp et Assembly, je doute que je sois presque le programmeur que je suis aujourd'hui.
Wayne Werner
9

Si vous étudiez avec DrRacket, je parie que vous utilisez également le programme Comment concevoir des programmes.

Voici ce que l’un des auteurs (certes biaisés) de HtDP a à dire sur la façon dont l’enseignement a préparé les étudiants de premier cycle de la Northeastern University au programme d’éducation coopérative («coop»): les étudiants alternent des sessions d’études universitaires avec des sessions d’études à temps plein. emploi).

Avant mon arrivée, Northeastern utilisait un programme standard depuis deux décennies: trois termes du langage à la mode actuel (Pascal, C ++, Java), utilisant un ensemble d’exercices extrêmement riches en graphismes entrelacés avec des leçons d’applications pratiques. Le programme a été largement publié dans SIGCSE et les communautés liées, mais cela n’a pas fonctionné. Au plus fort de la bulle Internet, environ un tiers seulement des étudiants ont bénéficié d'une formation en programmation. la plupart des autres ont fini par devenir des «techniciens» comme ils s'appelaient eux-mêmes: déplacer des ordinateurs, exécuter des scripts, configurer des routeurs et des réseaux, etc. Toute cette éducation coûtait 150 000 $ de frais de scolarité.

Après une année à Northeastern, notre doyen m'a demandé de prendre en charge le premier cours. La première instance a été un succès - contrairement aux prédictions de certains professeurs locaux. Même si cela avait été considéré comme un essai, nous avons opté pour le TeachScheme! curriculum en permanence; le doyen m'a suggéré de concevoir un cours relais afin de relier le cours HPDP au reste du programme; Cela a commencé ma collaboration sur HtDC avec Viera Proulx. Voir le post-scriptum ci-dessous. En quelques années, j'ai entendu dire à notre faculté d'enseignement coopératif que le nombre de postes en programmation augmentait. En 2007 - la dernière fois que je participais au cours - on m'avait dit que le ratio de programmation de la première coopérative allait jusqu'à deux tiers et plus. En attendant, tous les TeachScheme! Les cours ont été dispensés par de nombreux membres du corps professoral, dont les styles et les personnalités sont assez différents des miens. La proportion de coopératives de programmation a augmenté pour atteindre les trois quarts et plus, et tous les professeurs en aval sont satisfaits des compétences de programmation des étudiants.

Edit: pour ceux qui sont très intéressés par la raison derrière le curriculum, voici l'explication de l'architecte principal - http://www.youtube.com/watch?v=m3be1PHW5X0

pidge
la source
6

Mon école a également commencé avec Scheme. L'une des raisons évoquées est que cela a permis d'égaliser les chances. La plupart des élèves de 1ère année de Comp Sci pourraient être exposés, ou avoir beaucoup, à des langues plus courantes. Il était moins probable que quiconque ait une connaissance approfondie de Scheme.

fader sombre
la source
4
Je suis d'accord; J'ai commencé CS connaissant Pascal, C, Basic, Assembleur x86, alors que d'autres avaient des expériences dans différentes langues ou aucune expérience. Nous avons été initiés à ML, qui non seulement n’avait jamais eu d’expérience préalable, mais qui avait un paradigme si étranger que c’était comme si on recommençait même pour les plus expérimentés. Plus tard, je pense que ML (le paradigme fonctionnel) est la chose la plus utile que j'ai apprise chez CS.
KaptajnKold
6

En fait, comme Lisp (schéma étant un dialecte) est la Grande Dame des langages fonctionnels (pensez à F #, Groovy, Clojure, Haskell, etc.), cette formation ne vous laissera pas non plus de désavantage commercial, car c’est le plus chaud. sujet sur le bloc de développement en ce moment.

adrianmcmenamin
la source
4

Scheme vous aidera à bien travailler et à penser de la manière appropriée pour utiliser des langages de programmation fonctionnels. Scala, par exemple, est un hybride fonctionnel / OO assez brillant, bien qu'un peu dense. Des langues comme celle-ci marquent l'avenir, espérons-le.

Les langages de type Lisp ont cependant une pureté et une simplicité qui les rendent un peu plus faciles à enseigner. L'avantage intéressant est que vous aurez beaucoup plus de facilité à apprendre quelque chose comme Scala par la suite.

Egervari
la source
3

Nous avons terminé le programme au cours de la première et de la première moitié du deuxième semestre. Ce n'est que lorsque nous avons réellement commencé à travailler avec C que j'ai commencé à comprendre le pouvoir de Scheme.

En ce qui concerne votre question, pourquoi Scheme est choisi: la réponse est qu’il s’agit de l’un des langages les plus simples et qu’il vous permet de faire beaucoup (surtout lorsque nous commençons à jouer avec des listes paresseuses plus tard). De plus :

  1. Pour les personnes qui n'ont aucune expérience en programmation, il est plus facile d'apprendre. Il n'y a pas beaucoup de détails techniques et juste quelques formulaires spéciaux.
  2. Cela permet une abstraction de niveau supérieur. Un bon cours peut apprendre aux programmeurs à penser au lieu de se concentrer sur les détails techniques, ce qui permet aux étudiants de devenir de meilleurs programmeurs.
  3. Les listes sont incroyables. Il y a tellement de choses que vous pouvez faire avec eux. Car et cdr se révèlent être des outils puissants et ce n’est que lorsque vous commencez à travailler avec des pointeurs que vous réalisez que Scheme était génial pour la gestion des listes.
Avian78
la source