Je suis souvent ennuyé de devoir enseigner aux étudiants de première année des règles de langage spéciales (comme la désintégration de pointeur en tableau) qui n'ont absolument rien à voir avec la programmation en soi. Alors je me suis demandé:
Quel est le langage de programmation avec le plus petit nombre de règles de langage spéciales, où tout est de première classe et peut être composé sans restrictions techniques gênantes? Une telle langue ne serait-elle pas la langue d'enseignement idéale?
Note du modérateur
Nous recherchons des réponses longues qui fournissent des explications et un contexte. Ne vous contentez pas d’énumérer une langue: veuillez expliquer pourquoi, selon vous, la langue répond à la question. Les réponses qui n'expliquent rien seront supprimées. Voir Bon subjectif, Mauvais subjectif pour plus d'informations.
la source
I=SKK
. Les langues orthogonales par excellence sont les langues à instruction unique telles que Jot et RSSB.Réponses:
À mon avis, Lisp ou Smalltalk gagneraient, dit-il, «très peu de règles». La syntaxe nue peut être écrite sur un onglet de bière.
Mais selon mon expérience, la simplicité de Lisp et de Smalltalk ne signifie pas qu’ils sont simples à comprendre et faciles à enseigner. Bien que ce ne soit pas la «pure» manière, selon mon expérience, le style de liste à faire des langages impératifs est le plus facile à comprendre pour les débutants.
Par conséquent, je suggérerais Python, Ruby ou quelque chose d’abstraction similaire : vous trouvez (presque) tous les concepts de base en eux (OK, pas de pointeurs), mais vous n’avez pas besoin de le comprendre dès le début pour que quelque chose fonctionne.
la source
Je dirais que LISP, ou Scheme ou une langue de cette famille serait la plus orthogonale. Avec
let
,lambda
,define
,if
,cons
,list
et(
)
vous pouvez apprendre à peu près tout ce que vous voudriez dans un cours intro. Il n’ya pas non plus besoin de directives de prétraitement ou deint main()
choses comme celles que les étudiants comprennent mais ne voient pas de raison.Dans mes cours d'introduction CS, nous avons fait beaucoup de choses vraiment sympas avec Scheme: implémenter une machine de Turing, implémenter un ordinateur TC-201, écrire une grammaire sans contexte, utiliser la récursion, trier les fusions et les insertions, implémenter des additionneurs d'autres choses.
J'avais déjà suivi Java en AP Comp Sci avant de commencer mes études, mais Scheme était génial, car je pouvais réduire l'encombrement et me concentrer sur les concepts de mon programme. C'était une excellente classe et je vous recommande fortement de l'essayer pour votre enseignement.
la source
Pascal a été spécialement conçu pour enseigner la programmation. C'est facile à apprendre (c'était l'un des premiers langages de programmation que j'ai appris).
la source
Logo: c'est toujours vivant !
Cela peut sembler être plus un jouet qu'un langage de programmation, mais ce ne serait pas une mauvaise première étape pour beaucoup de gens. La syntaxe est très simple, mais la tortue fournit une forme de retour d'information plus concrète que la plupart des langages / environnements. Essayer de créer une forme spécifique est un excellent moyen d'apprendre à penser à l'avenir pour résoudre un problème.
Si vous avez une aversion pour les tortues, cependant, je pense vraiment que Scheme est la voie à suivre.
la source
Je proposerais à la fois SML et Haskell. L'orthogonalité a été un point de conception principal pour les deux. En particulier, le noyau de SML (c’est-à-dire la partie du langage qui n’est pas concernée par la modularité) est à peu près un calcul lambda typé. En conséquence, la plupart des fonctionnalités de langage sont gérées par des types et les types déterminent à leur tour les formulaires d’introduction et d’élimination des valeurs. C'est à peu près idéal.
Il existe quelques verrues non théoriques dans les deux langages (types dans SML, seq dans Haskell), mais elles sont encore inimaginables en ce qui concerne les interactions étranges de caractéristiques langagières sans rapport.
la source
Quel que soit le choix, j’encourage fortement l’enseignement d’une «vraie» langue . Enseigner les langues des jouets fonctionne pour certaines personnes, mais pour d’autres, c’est très, très frustrant à cause de la déconnexion avec le monde réel. Certaines personnes ont besoin de la pertinence du monde réel pour motiver l’apprentissage, et ce n’est pas à nous de juger de cette stratégie d’apprentissage (c’est en fait une idée fausse commune).
Cela disqualifie des langues telles que Logo, mais également des langues spécifiques à un domaine, telles que Traitement . Bien que ce dernier soit extrêmement utile pour certaines choses (par exemple, la production de graphiques d'informations), son utilisation est trop restreinte pour la plupart des utilisations (et donc la plupart des utilisateurs). Cela exclut également Gofer , un sous-ensemble inutile de Haskell. Cela exclut également Pascal, car bien que ce dernier ait été utilisé dans des projets réels, il n’est tout simplement plus pertinent et manque simplement de fonctionnalités essentielles (par exemple, des chaînes intégrées).
Parmi les langages pratiques, je suis d’accord avec ceux déjà mentionnés: les dialectes modernes Lisp ou Scheme, le Haskell, le Python ou le Ruby. Personnellement, j'utiliserais probablement Python mais tous ces choix ont leur part d’avantages et d’inconvénients.
la source
Tcl a 12 règles qui régissent toute la langue.
Il existe très peu de cas spéciaux, de mots ou de caractères réservés.
la source
Pour développer mon commentaire, dans Jot, tout est de première classe (car c’est un calcul lambda) et peut être composé. Il n'y a qu'une instruction. C'est une langue d'enseignement absolument affreuse.
En général, les abords de Turing ont très peu de règles spéciales et vous demandent de bien comprendre les bases du calcul avant de pouvoir faire quoi que ce soit. La langue d'enseignement parfaite permet aux étudiants d'expérimenter sans arracher tous leurs cheveux. Des niveaux d'abstraction plus élevés sont donc une bonne chose.
la source
Les fonctionnalités les plus importantes dans une langue que vous apprenez sont les suivantes:
principe de moindre surprise (PASCAL)
lisibilité (Ada)
À mon avis, le second l'emporte sur le premier, car la lecture de code est encore plus importante que l'écriture.
Maintenant, encore une fois, j’écris C #, Java, Objective-C et Javascript pour gagner sa vie, qui ont tous des horreurs bizarreries: D
Néanmoins, si je devais choisir une langue pour commencer, je choisirais le C #. Il est relativement facile à lire, a peu de surprises sérieuses en soi (elles sont le plus souvent cachées dans des outils / frameworks MS ...) et une énorme quantité de code à lire et de documentation, deux éléments essentiels pour bien apprendre.
la source