Pourquoi la famille C est-elle le régiment d'étude CS standard pour les programmes de mathématiques / CS au lieu de la famille LISP? [fermé]

14

Je me suis familiarisé avec LISP à des fins d'auto-amélioration. L'une des choses que j'ai remarquées est que LISP est beaucoup plus dans le paradigme des mathématiques que disons C. La syntaxe et la structure de conception semblent faire écho directement au modèle mathématique réel d'un algorithme. Cela n'a aucun sens pour moi pourquoi même de bons programmes CS basés sur les mathématiques étudient le C au lieu du LISP. Je pense que LISP emploie plus directement des concepts mathématiques supérieurs à C. Je ne dis pas que vous ne pouvez pas modéliser des structures mathématiques en C. Je remarque simplement que LISP semble être câblé pour les mathématiciens.

J'ai lu beaucoup de discours de Joel Spolsky sur les écoles JAVA et ce qui ne l'est pas - et je suis d'accord avec son évaluation -, mais mon école n'a pas enseigné JAVA pour cette raison. Ils étaient rigoureux dans l'enseignement des concepts fondamentaux comme les pointeurs, la conception d'algorithmes, la récursivité et même les instructions d'assemblage. Cependant, ils ont tout fait en C et c ++. Est-ce que quelqu'un connaît les raisons de cela et / ou son histoire?

Jonathan Henson
la source
En fin de compte, un diplôme en informatique devrait être dans une certaine mesure indépendant du langage. L'idée d'un CS est qu'il / elle devrait être capable d'apprendre n'importe quelle nouvelle langue car l'informatique est théorique. Pour l'extérieur CS semble être le tout inclus vous apprendre à être un programmeur et un scientifique. Ce n'est pas le cas, apprendre à apprendre une langue, c'est ça le CS.
Chris
2
De la même manière que LISP "fait écho au modèle mathématique réel d'un algorithme", C fait écho à la structure réelle du matériel et il est simple de savoir comment les constructions en C sont mappées en mémoire (ce qui est naturellement particulièrement utile pour les systèmes embarqués). Cependant, je suis totalement d'accord avec vous. J'aurais apprécié un peu plus de cours de premier cycle dans LISP afin que je puisse vraiment y plonger davantage
Bill VB

Réponses:

13

D'ACCORD. Donc, la réponse ennuyeuse est qu'en fin de compte, la plupart des écoles enseignent avec quoi les professeurs sont à l'aise, et la plupart des professeurs n'ont pas grandi en piratant Lisp; ils ont passé leurs premières années sur le terrain avec des langues basées sur l'algol. Pour cette raison, des années plus tard, quand ils élaborent un programme, vous vous retrouvez avec des écoles qui enseignent le CS avec une fondation en Pascal, puis C, puis C ++, puis Java.

Ensuite, vous avez des écoles de niveau inférieur et quelques années plus jeunes. Et ils regardent la barre qui a été établie par les écoles ouvrant la voie, et ils voient que les élèves quittent ces écoles en connaissant C, et ils voient que leurs propres élèves attendent la même chose - alors ils commencent à enseigner le C, puis le C ++, puis Java.

Enfin, vous avez certaines des institutions techniques ou `` bas de gamme '' qui enseignent simplement quel ensemble de technologies correspondra aux mots clés que les étudiants veulent dans leur curriculum vitae - vous obtenez donc à peu près simplement Java.

Cela étant dit, certaines écoles ne enseignent Lisp, bien qu'il puisse être plus d'un élective plutôt qu'une langue fondamentale. Et même les écoles qui n'enseignent pas le lisp en tant que langue autonome, l'utilisent largement dans les cours d'IA, de sorte que les cours d'IA pour débutants se concentrent sur le début de la programmation Lisp.

Andrey Butov
la source
2
Je t'entends. Aucun manque de respect pour le C et le c ++, ils ont été mes langues de prédilection tout au long de ma carrière, mais LISP serait un bien meilleur outil d'enseignement pour les étudiants en mathématiques que le C. qui ne le savait pas, mais le but d'un diplôme CS n'est pas une formation technique de terrain, c'est de maîtriser les concepts de mathématiques et d'informatique. LISP semble beaucoup plus adapté à cet effet.
Jonathan Henson
Je pense que les deux ont leur place, et les universités pourraient bénéficier d'avoir un parcours plus théorique / académique vers un diplôme CS où vous élargissez votre esprit. Cette piste devrait avoir une belle gamme de langues, y compris Lisp, Prolog, basé sur Algol, etc., Et une piste basée sur la pratique, avec une concentration sur quelle que soit la saveur pratique de la journée.
Andrey Butov
@Jonathan Henson: Spot on!
Chris
9

Cela dépend vraiment de l'université. Scheme (un dialecte de lisp) a été la langue du cours d'introduction à l'informatique au MIT pendant des siècles, bien qu'il ait été remplacé récemment par python. J'ai obtenu mon BS en CS dans une école d'ingénieur, où j'ai été exposé au C, Scheme, Prolog et C ++ pendant ma première année. Je pense que c'était un bon mélange.

Je crois fermement que la langue avec laquelle vous commencez est beaucoup moins importante que d'être exposée à plusieurs paradigmes dès le début, avant que votre cerveau ne se fige dans une façon de regarder le monde.

Dima
la source
1

Fondamentalement, la théorie informatique est mathématique. Le génie logiciel, cependant, ne l'est pas. La modélisation directe de concepts mathématiques n'est pas un avantage inhérent - je dirais que cela peut souvent être un inconvénient.

Les bonnes théories et les bons programmes ne sont pas nécessairement liés.

DeadMG
la source
"Les bonnes théories et les bons programmes ne sont pas nécessairement liés.": La programmation consiste à construire et à combiner des abstractions qui résolvent les problèmes. Et, selon wikipedia, "La théorie est un ... type de pensée abstraite ou généralisante, ou les résultats d'une telle pensée." ( en.wikipedia.org/wiki/Theory ) Donc, la théorie et la (bonne) programmation sont vraiment très proches l'une de l'autre.
Giorgio