J'entends parler de C, C++, Java tous les jours chaque fois que les gens commencent à parler d'informatique, mais dans mon premier cours d'informatique, on nous demande d'écrire en Scheme (DrRacket).
Pourquoi donc?
Quelles différences cela apportera-t-il à ma future compréhension de la programmation?
MISE À JOUR: 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 C. C'était frustrant d'apprendre les pointeurs au début, mais maintenant je me sens beaucoup mieux.
Il n'y a pas grand-chose de plus à dire que ça. J'essaie de m'apprendre Java (ou C++?) Pour la partie OOP qui me manque. Jusqu'à présent, j'aime toujours mieux la programmation fonctionnelle Lambda est tout simplement fascinant. :)
Cela ressemble à une grande école! Les dialectes LISP suivent de plus près le paradigme mathématique des algorithmes. Ils forcent les programmeurs à apprendre la récursivité et le style fonctionnel. C'est une excellente expérience. Votre école est dans les rangs du 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.
Personne ne s'attend à ce qu'en tant que débutant, vous maîtrisiez suffisamment la langue n'importe laquelle pour obtenir un vrai travail, alors pourquoi ne pas commencer par une langue facile à apprendre? S'attendre à ce que les novices apprennent la programmation en utilisant un langage professionnel dans un professionnel IDE est un peu comme donner un scalpel à un étudiant en médecine de première année et les faire travailler sur des corps vivants.
Ne vous inquiétez pas; vous finirez par apprendre Java/C/C++, probablement à partir de votre deuxième année. Si vous avez commencé à apprendre Java 6 maintenant, au moment où vous serez diplômé Java 8 sera sorti. Ou il aura été remplacé par Python. Ou un autre langage qui n'a pas encore été inventé mais prend l'industrie d'assaut. Mieux vaut retarder l'apprentissage des trucs "populaires" le plus longtemps possible afin qu'il ne soit pas obsolète lorsque vous sortez 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.
Félicitations, vous êtes en train de devenir l'équivalent d'un végétalien dans le monde informatique, et dans deux ans, vous ne pourrez pas conclure de discussion sans informer les gens sur le terrain moral supérieur vous vous levez. ;)
Quoi qu'il en soit, vous avez décroché une très bonne école. Les écoles qui ne sont pas non fouettées par l'industrie sont bonnes.
Comme quelqu'un d'autre l'a dit, ils vous enseignent la science, dont vous dérivez le métier.
Beaucoup de mauvaises fermes de singe-code vous apprennent le métier, et alors vous pouvez en déduire la science, mais ce n'est pas garanti. (et vous pouvez finir 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 sortez de là, vous vous sentirez toujours incompris et sous-estimé .
Ce qui, admettons-le, pour le wiz informatique moyen n'est pas nouveau.
Vous êtes maintenant exposé à un risque élevé de:
Vous aimerez aussi probablement l'open source, mais vous ne trouverez jamais assez de collaborateurs pour vos projets fonctionnels.
Quelles différences cela apportera-t-il à ma future compréhension de la programmation?
C'est un peu comme demander comment la lecture de Shakespeare vous aidera à rédiger des articles à terme. La programmation (dans n'importe quel langage) n'est qu'un moyen d'exprimer vos idées sous 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 et sans rencontrer de nombreuses erreurs de compilation, des bibliothèques standard, etc.
Portez une attention particulière en classe - vous allez apprendre beaucoup de choses intéressantes ce semestre.
Il semble que vous soyez très nouveau dans la programmation sans aucune expérience préalable en la matière. Voici donc quelques clarifications:
Pourquoi Scheme et pas C/C++/Java ...?
Lorsque vous apprenez un langage de programmation (une analogie pourrait être faite avec la langue anglaise), vous apprenez la syntaxe que vous devez suivre pour que votre code soit grammaticalement correct. Cependant, une langue ne vous apprendra pas la logique derrière 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, et le paradigme implémenté par Scheme est appelé Programmation fonctionnelle (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 FP) sont beaucoup plus populaires. En fait, (et pour diverses raisons, tout le monde a son opinion) FP n'est pas très populaire dans l'industrie.
D'un autre côté, FP est très apprécié 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 conviendront que cela ferait de vous un meilleur programmeur en général.
C'est similaire aux écoles qui enseignent le latin afin d'étudier la littérature anglaise.
Vous êtes censé apprendre comment la programmation est en cours et quels sont les concepts de base. Les langages de tous les jours utilisés dans la plupart des entreprises pourraient être bien adaptés à la production des logiciels nécessaires aujourd'hui, mais ne sont pas nécessairement les mieux adaptés pour enseigner vous les bases de la programmation.
Une fois que vous avez compris les concepts, il est facile de les appliquer à d'autres langues.
Si vous apprenez avec DrRacket, je parie que vous utilisez également le programme d'études Comment concevoir des programmes.
Voici ce que l'un des auteurs (certes biaisé) de HtDP a à dire sur la façon dont le programme d'enseignement a préparé les étudiants de premier cycle à l'Université du Nord-Est pour le programme d'enseignement coopératif ("coop"): les étudiants alternent les semestres académiques études avec des semestres d'emploi à temps plein).
Avant mon arrivée, Northeastern utilisait un programme standard depuis deux décennies: trois termes du langage actuellement à la mode (Pascal, C++, Java), utilisant un ensemble d'exercices extrêmement riches en graphiques entrelacés avec des leçons sur des applications pratiques. Le programme a été largement publié dans SIGCSE et les communautés apparentées, mais cela n'a pas fonctionné. Au plus fort de la bulle Web, seulement environ un tiers des étudiants ont obtenu des programmes coopératifs; la plupart des autres ont fini par devenir des "technophiles" comme ils l'appelaient: déplacer des ordinateurs, exécuter des scripts, configurer des routeurs et des réseaux, etc. Et toute cette éducation a coûté 150 000 $.
Après un an à Northeastern, notre doyen m'a demandé de reprendre le premier cours. Le premier exemple 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 sommes passés au TeachScheme! curriculum en permanence; le doyen m'a suggéré de concevoir un cours-relais pour relier le cours HtDP au reste du programme; cela a commencé ma collaboration sur HtDC avec Viera Proulx. Voir le post-scriptum ci-dessous. En l'espace de quelques années, j'ai commencé à entendre de la part de notre faculté coopérative que la part des postes en programmation augmentait. En 2007 - la dernière fois que j'ai participé au cours - on m'a dit que le ratio de programmation de la première coopérative était passé aux deux tiers et plus. En attendant, tous TeachScheme! les cours ont été dispensés par de nombreux professeurs avec des styles d'enseignement et des personnalités assez différents des miens. Le ratio de programmes coopératifs est passé à trois quarts et plus, et tous les professeurs en aval sont satisfaits des compétences en programmation des étudiants.
Edit: pour ceux très intéressés par le rationnel derrière le curriculum, voici l'explication de l'architecte principal - http://www.youtube.com/watch? v = m3be1PHW5X
Mon école a également commencé avec Scheme. L'une des raisons évoquées est que cela a contribué à uniformiser les règles du jeu. La plupart des élèves de 1re année Comp Sci peuvent avoir une exposition, ou beaucoup, à des langues plus courantes. Il était moins probable que quiconque ait une grande connaissance de Scheme.
En fait, comme LISP (Scheme étant un dialecte) est la Grande Dame des langages fonctionnels (pensez à F #, Groovy, Clojure, Haskell, etc.), cette formation ne vous laisse pas non plus de désavantage commercial, car c'est la plus chaude sujet sur le bloc de développement en ce moment.
Scheme vous aidera à vous améliorer et à penser de manière appropriée à l'utilisation des langages de programmation fonctionnels. Scala par exemple est un hybride fonctionnel/OO qui est assez brillant, bien qu'un peu dense. Des langages comme celui-ci marquent cependant l'avenir - j'espère.
Les langues de type LISP ont cependant une pureté et une simplicité de conception qui les rendent un peu plus faciles à enseigner. L'avantage de Nice est que vous aurez beaucoup plus de facilité à apprendre quelque chose comme Scala par la suite.
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 commencé à travailler avec C que j'ai commencé à réaliser la puissance de Scheme.
En ce qui concerne votre question, pourquoi Scheme est choisi: la réponse est que c'est l'une des langues 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 :