En tant qu'éducateur CS de niveau universitaire, la question du langage de programmation à enseigner dans le premier cours de programmation fait souvent l'objet de discussions. Il y a des milliers de langues parmi lesquelles choisir, et beaucoup de fièvre religieuse (ou fièvre) supportant un camp linguistique plutôt qu'un autre. Tous ces préjugés subjectifs entourant chaque langage de programmation rendent très difficile pour un éducateur d'en choisir un.
Ma question est:
Quels critères objectifs un enseignant peut-il utiliser pour choisir un langage de programmation sur lequel fonder un cours de programmation universitaire de première année? Quelle est la base de ces critères?
Remarque : je ne veux pas voir une liste de langages de programmation et pourquoi ils sont les meilleurs à utiliser. La question ne concerne pas la meilleure langue, mais les critères de sélection d'une langue . Les réponses peuvent toutefois utiliser des langages de programmation pour illustrer des points particuliers.
Cette question s'inspirait d'une autre question jugée hors sujet: https://cs.stackexchange.com/questions/1946/criteria-for-choosing-a-first-programming-language .
la source
SML
tout simplement parce qu'il est peu probable qu'un étudiant connaisse cette langue à l'avance. Cela a permis à chaque élève d’avoir plus ou moins le même niveau pour commencer le cours.Réponses:
Je vais donner ma part, bien que je pense que ce sujet est un gouffre sans fond. Ne vous méprenez pas, je pense que la question est fascinante, mais nous ne réglerons probablement pas celle-ci à la satisfaction de tous.
En un mot, je dirais que la langue doit faire ce que vous voulez , de la manière la plus simple et la moins ambiguë possible, et pas plus .
Ma propre expérience vient du tutorat de plusieurs générations d'étudiants de première et deuxième années avec le langage de programmation Oberon . Les personnes qui connaissent cette langue reconnaîtront son influence dans mes opinions. Notez que ce langage a été utilisé pour enseigner les "Algorithmes et Structures de Données". À l'époque (à l'époque), la programmation fonctionnelle et la conception orientée objet étaient enseignées dans des cours séparés dès la deuxième année.
Important : avant d’entrer dans les détails d’une langue, je tiens toutefois à souligner que le plus important est d’être absolument clair, pour vous-même et pour vos étudiants, sur les objectifs de votre cours. Enseignez-vous la programmation en tant que telle ? Ou des algorithmes et des structures de données? Ou génie logiciel? Avant de choisir une langue, cela vaut la peine de réfléchir un instant à l’avenir. Les différences à ce niveau (objectifs) sont probablement ce qui, à mon avis, donne le plus de désaccord sur ce sujet.
Les points que j'estime importants peuvent chevaucher plusieurs choses qui ont déjà été dites, mais je pense que la plupart finissent par être des sous-ensembles de l'un des quatre suivants:
Simplicité : les étudiants sont généralement là pour apprendre la programmation, les algorithmes et les structures de données, et non les fonctionnalités et les subtilités de tout langage de programmation spécifique. Wirth a utilisé la citation d'Einstein "Rendez-le aussi simple que possible, mais pas plus simple" comme principe directeur dans la conception d'Oberon, et plusieurs autres langues le font aussi bien. Votre langage de programmation de choix devrait pouvoir implémenter tous les concepts requis dans votre conférence, mais devrait le faire avec le plus petit ensemble possible de fonctionnalités / détails. Le langage de programmation est généralement l’outil, pas le but.
Univoque : un frère proche de la simplicité, il devrait y avoir un construit pour chaque concept, avec le moins de chevauchement possible. Pensez-y comme s'il n'y avait qu'un seul "bon" moyen de mettre en œuvre chaque concept. Trois types de boucles différents qui sémantiquement tous font la même chose? Ou quinze façons différentes d’incrémenter une variable? Pas bon. Cela rend également la correction des devoirs ou généralement juste comprendre le code de vos élèves beaucoup plus facile. Vos assistants d'enseignement l'apprécieront.
Portabilité : les étudiants suivront des cours sur des machines Linux, Windows et OSX. L'environnement de programmation devrait être aussi semblable (identique) que possible dans les trois cas. Les résultats de tout programme devraient également être identiques. C’est un autre point que les assistants d’enseignement, chargés de corriger les devoirs et de traiter des questions / problèmes, apprécieront grandement.
Préférence de l’industrie : Sérieusement, nous ne devrions commencer à nous en préoccuper que si «l’industrie» décide elle-même du langage de programmation qu’elle préfère. Depuis l'invention des ordinateurs, cette cible est en constante évolution. Pour le moment, si vos étudiants apprennent réellement à programmer, cela ne dépend pas de la langue. Cependant, il existe des domaines dans lesquels l’industrie parvient à s’entendre sur une norme, par exemple le
VHDL pour la conception de circuitou le SQL pour les requêtes de base de données. Ce point est donc toujours valable.Encore une fois, l'adéquation d'une langue à cette liste dépend fortement de ce que vous essayez d'enseigner!
la source
WHILE expr DO stmts END
etc.Développer une pensée algorithmique pour résoudre les problèmes est l’objectif principal: l’ un des inconvénients de l’utilisation d’un paradigme orienté objet dans le premier cours est que le fait de faire entrer de nouveaux apprenants dans des domaines tels que l’héritage, le polymorphisme, etc., les distrait de l’objectif principal susmentionné. En fait, l’introduction de considérations secondaires à côté de cet objectif principal, telles que l’ingénierie logicielle, la portabilité, l’utilité de l’industrie, etc., est contre-productive pour les raisons indiquées.
Ce n'est pas un langage orienté objet: de nos jours, la plupart des universités commencent à enseigner la programmation correctement avec un langage orienté objet. Je pense que c'est une erreur. Il y a des choses dans le monde qui ne peuvent vraiment être comprises que par opposition à son contraire. Sans être exposés à un paradigme procédural de programmation (données et fonctions en tant que deux aspects distincts du programme), l'idée de base de l'orientation objet (données et comportement considérés comme intrinsèquement liés) peut manquer à beaucoup. Et parce que la programmation orientée objet est si importante, rater l’idée de base n’est pas une mince affaire. En outre, étant donné que, dans les cours plus avancés, les étudiants CS auront probablement une programmation principalement en OO, ils doivent également être exposés à l'aspect procédural.
Donc, à la fin, je choisirais un langage procédural évitant les fonctionnalités avancées et mettant l’accent sur le développement de la pensée algorithmique. Mais, en évitant les fonctionnalités avancées, je ne veux pas dire éviter les problèmes difficiles. Je veux dire que même avec des problèmes difficiles, les étudiants devraient être obligés de le résoudre en utilisant des principes de base, des outils simples.
la source
public static void main()
en Java, qui doit être dans le contexte d'une classe. Cela rend Java moins qu'idéal en tant que première langue, bien que l'obstacle ne soit évidemment pas trop difficile.public static void main()
très longtemps. BlueJ est un bon exemple d'EDI qui permet aux étudiants d'écrire des programmes sansmain
aucun élément.Puisque nous parlons du premier cours de programmation d’un programme d’informatique, je dirais que l’aspect le plus important serait ce que les concepts fondamentaux de la CS qu’il enseignera à vos étudiants. Puisqu'aucune langue ne peut enseigner tous les concepts à la fois, vous devez déterminer quels concepts seront nécessaires par la suite.
Je ne suis pas d'accord avec la notion de @ Kaveh selon laquelle la pertinence de l'industrie est importante. c'est peut-être un bonus, mais c'est d'une importance mineure ici. Avec une base solide dans les principes du CS, l'apprentissage d'une langue "industrielle" dans les cours ultérieurs sera relativement facile.
En passant, quelle que soit la langue choisie pour la première langue, il est important de soumettre dès que possible vos élèves à une autre langue, radicalement différente.
la source
Mon souci principal est l' universalité , en ce sens que l'apprentissage de ce langage de programmation devrait permettre à l'étudiant de gérer la plupart des langages de programmation.
Autant que je le regrette, ce critère exclut les langages fonctionnels purs. Cela s'applique également au cours qui ne doit pas utiliser des fonctionnalités exotiques de la langue.
... mais ce n'est que du bon sens.
la source
Lors du choix d'un premier langage de programmation, de nombreux problèmes doivent être pris en compte. Beaucoup de ces facteurs ont été pris en compte dans les réponses ci-dessus. J'en ai inclus 3 de plus, car ils faisaient partie de ma réponse à la question fermée ( https://cs.stackexchange.com/questions/1946/criteria-for-choosing-a-first-programming-language ) qui a inspiré cette question à l'origine . J'ai copié ma réponse ici (et l'ai modifiée) en fonction de la politique actuelle de suppression des questions fermées.
Voici 3 points à considérer, en utilisant quelques langages de programmation comme exemples.
Programmation dans le grand vs programmation dans le petit
Lorsque vous apprenez à programmer, vous devez apprendre à programmer en petit avant de passer à l'apprentissage de mécanismes d'aide à la programmation en grand .
Par programmation dans le petit format, j'entends écrire des programmes comportant moins de 100 lignes. Ces programmes impliqueront des algorithmes manipulant des structures de données simples, ayant un flux de contrôle simple et permettant de résoudre des problèmes simples. Ils ne seront en général pas considérés comme des applications .
Par programmation dans le sens large, j'entends écrire de gros programmes construits à partir de nombreux composants / classes, en s’appuyant sur une API, avec une interface graphique, une base de données, éventuellement dans une configuration client-serveur.
Les choses auxquelles un programmeur doit penser quand on programme en petit sont très différentes de celles en grand. La programmation dans le grand format demande au programmeur de réfléchir à la modularité, aux bonnes interfaces, à une bonne conception, à la réutilisabilité et à de nombreux autres problèmes. Les langages de programmation modernes fournissent de nombreuses constructions pour aider les programmes dans leur ensemble. Ces constructions incluent des classes, des modules, des interfaces, la dissimulation d'informations, etc. Lors de la programmation dans le plus petit format, ces problèmes sont beaucoup moins importants.
Un langage de programmation tel que C ++ a de nombreuses fonctionnalités pour aider à la programmation, mais il est plus difficile de s'asseoir et de commencer à écrire un programme très simple. Java est similaire.
D'autre part, un langage comme Python, Ruby, Scheme ou Haskell facilite beaucoup l'écriture directe d'un programme.
Niveau haut vs bas niveau
Les langages tels que C ++ et C sont plutôt des langages de bas niveau. Ils permettent au programmeur de manipuler directement les références en mémoire. Bien que cela permette d’écrire du code très efficace, les premiers détails peuvent être difficiles à apprendre pour un premier programmeur. Certains diront que ces détails de bas niveau empêchent la logique de résoudre le problème.
Un langage de niveau supérieur tel que Python permet d’exprimer plus facilement les concepts en termes de domaine problématique.
Staticallly Typed vs Dynamically Typed
C ++, Haskell, Java et beaucoup d'autres langages sont statiquement typés. Cela signifie que le compilateur trouve automatiquement les emplacements où des erreurs potentielles se produisent en fonction des types de valeurs attendus à chaque emplacement du code. Il y a un peu de guerre religieuse pour savoir si le typage statique est une bonne chose ou non, mais je vais m'écarter de celui-ci. Un problème avec le typage statique pour les nouveaux programmeurs est que les messages d'erreur rapportés par le compilateur sont souvent difficiles à comprendre. C'est particulièrement le cas avec les modèles C ++ et les programmes Haskell en général.
Python, Ruby et Scheme sont typés dynamiquement. Cela signifie que des erreurs sont détectées pendant l'exécution du programme. On peut dire que c'est trop tard pour détecter les erreurs (mais on peut aussi utiliser des tests pour éviter de telles erreurs). Là encore, évitant l’argument religieux, l’avantage des erreurs que l’on rencontre lors de l’écriture de programmes simples dans un langage de programmation à typage dynamique est du type que cet objet ne sait pas faire . Dans le contexte d'un petit programme, ces erreurs sont faciles à comprendre et à localiser.
Les langages tels que C ont un typage faible, ce qui signifie que bien que le compilateur résolve certaines erreurs, l'exécution ne parvient pas à en capturer d'autres, telles que les accès mémoire non valides. Par conséquent, le message d'erreur renvoyé au programmeur s'apparente à "Programme bloqué". Un langage typé dynamiquement intercepterait ces erreurs et les convertirait en un message d'erreur plus compréhensible.
Autres
Pour d'autres langues, différentes considérations peuvent entrer en jeu, telles que le support fourni par l'environnement de programmation, les API disponibles, la qualité des livres et des tutoriels en ligne, etc.
la source
En guise d'introduction, considérons la possibilité de présenter plus d'une langue (dans un cours). Dans mon premier mandat, nous avons montré à la fois SML et Java. Le contraste avait son propre et important message: choisir le bon outil pour le travail.
Mais maintenant, pour les critères, dans un ordre arbitraire.
La difficulté à apprendre est un problème subjectif, mais important: vous ne voulez pas que votre élève passe du temps à apprendre la langue, mais à faire des choses avec. On peut soutenir que des langages dynamiques comme Ruby peuvent gagner sur ce plan: vous pouvez leur donner n'importe quoi, et il existe d'excellents didacticiels "factices" sur le Web. Si je me souviens bien, certaines études montrent également que les étudiants qui n'ont pas encore programmé obtiennent de meilleurs résultats avec les langages fonctionnels qu'avec les autres.
Richesse : la ou les langues doivent être suffisamment riches pour tous les concepts que vous souhaitez enseigner. Par exemple, si vous souhaitez discuter de fonctions d'ordre supérieur, vous avez besoin d'un langage dans lequel les fonctions sont des valeurs, telles que les langages fonctionnels ou Scala.
Évolutivité : il est probable que vos étudiants n'apprendront pas plus de langues que ceux que vous leur présentez. Vous souhaitez donc que la ou les langues choisies évoluent au fil de leurs études: ils doivent écrire les exercices pour votre animal de compagnie maintenant, mais peuvent également attaquer un projet de taille moyenne ultérieurement. Java et les langages ayant une écosphère similaire sont de bons choix ici.
Prise en charge des outils : Ceci est lié à l'évolutivité. Si vous vous attendez à ce que vos étudiants soient productifs avec le langage, vous devez posséder de bons environnements de développement, des gestionnaires de construction et des bibliothèques. Les coques interactives (Ruby, Scala) sont également une bonne chose, surtout pour les débutants. Les outils doivent également fonctionner sur toutes les grandes plates-formes.
Documentation : Vous ne voulez probablement pas enseigner la langue, mais demandez aux étudiants de s’enseigner eux-mêmes avec vos conseils (abstraits). Par conséquent, une bonne documentation est importante. On peut dire que plus une langue est populaire et établie, meilleure est la documentation. Par exemple, la documentation de Scala est assez pauvre (mais en amélioration). Des outils comme Hoogle sont un plus.
Disponibilité : Certaines personnes enseignent avec Matlab ou Visual C ++. Considérez que tout le monde n’a pas nécessairement une licence ou une machine capable d’exécuter les programmes nécessaires. Vous devriez probablement privilégier les langages libres fonctionnant sur diverses plates-formes.
Propreté : vous voulez probablement façonner la façon de penser de vos élèves. Plus la langue est sale, plus ils penseront; Je ne proposerais jamais PHP dans un cours. Les langages dynamiques ont en général des inconvénients: ils permettent, parfois même encouragent, les mauvaises habitudes.
Quels critères sont plus importants pour vous que d'autres dépendent également de ce que vous voulez enseigner. Est-ce littéralement un cours de programmation? Est-ce un cours sur les algorithmes et les structures de données? Est-ce un cours qui introduit les concepts de langages de programmation dans différents paradigmes? S'agit-il d'un cours sur le développement logiciel dans les grands?
la source
For example, if you want to discuss higher-order functions, you need a language where functions are values, such as functional languages or Scala.
... ou C ou Pascal, qui ont tous deux un pointeur de fonction depuis toujours. Pratiquement le seul langage (grand public) que ce critère exclut est Java.Question fascinante; J'aime votre insistance sur des critères objectifs. Nous voulons que les étudiants de première année apprennent:
Concepts de programmation : Le premier langage de programmation doit prendre en charge: appels de fonction, itération, récursivité
Idées fondamentales : le premier langage de programmation doit prendre en charge les tableaux (pour les premières étapes d'une introduction en douceur à la façon dont fonctionne réellement la mémoire et les pointeurs)
compétences pratiques en programmation : comment utiliser le débogueur, comment utiliser le profileur, comment résoudre des problèmes volumineux (un langage de haut niveau), comment assembler de grands systèmes, comment décomposer des problèmes (décomposition de problèmes), comment éviter d'écrire code compliqué, comment communiquer aux humains l’intention qui se cache derrière une série (souvent cryptée) d’instructions exécutables.
le fait que des bibliothèques pré-écrites existent pour des choses comme sort (), et comment les utiliser - c'est-à-dire qu'il n'est pas nécessaire d'écrire tout à partir de zéro.
Autres critères pour une première langue :
interprété (un retour rapide facilite le processus d’apprentissage).
un environnement interactif qui accélère l’apprentissage, les tests et le débogage.
le code source de haute qualité est disponible pour que les étudiants lisent dans cette langue
"facile à lire", "syntaxe proche du langage naturel" (pour faciliter la lecture et la notation du code source)
portable (fonctionne sous Mac OS, Windows, Unix). Au moins une implémentation de logiciel libre du langage.
rapide à enseigner, "peu de pièges" - par exemple, "il peut être plus rapide d'enseigner d'abord aux débutants Python, puis Java, plutôt que Java en tant que premier OOPL." - "Comparaison des langages de programmation orientés objet" et TelescopeRule
Matthias Felleisen a développé un langage de programmation avec des messages d'erreur adaptés à un public débutant. Il souligne que le choix d’une langue n’est pas aussi important que l’enseignement d’une bonne méthodologie de conception. En fait, il considère le premier cours de CS comme un cours d'arts libéraux, où il enseigne la pensée critique, la résolution de problèmes et le souci du détail.
critères pour un deuxième langage de programmation
Des choses que nous voulons que les étudiants apprennent, mais peut-être que cela peut attendre le deuxième langage de programmation:
un langage "pertinent" qui n'est "pas trop ésotérique"; quelque chose de "populaire dans l'industrie"
Théorie de la complexité: comment reconnaître des tâches impossibles avec les technologies actuelles.
niveau supérieur: comment choisir le bon outil pour le travail , comment utiliser un compilateur, structures, programmation orientée objet, programmation fonctionnelle, programmation logique, conception du compilateur, composition et manipulation de fonctions (au sens de Lisp / ML), programmation concurrente et distribuée,
trucs de bas niveau: arithmétique de pointeur, architecture informatique. gestion de la mémoire, cadres de pile, programmation des assemblages, architecture de la machine, pilotes de périphérique et conception du système d'exploitation (afin que la machine ne "ressemble pas à une boîte noire effrayante qu'elle ne peut pas pénétrer")
EDIT: Je trouve décevant que la publication d’un résumé de quelque chose que j’ai écrit, en collaboration avec beaucoup d’autres, "ne soit peut-être pas une publication légale".
J'ajoute donc une citation plus formelle à mon précédent lien informel, en essayant de respecter les règles d' utilisation équitable et d'autres droits d'auteur du wiki.
Cette réponse est un résumé de la langue première de Freshman (Anon 2011) au Portland Pattern Repository.
(Anon 2011) De nombreux auteurs anonymes et divers. "Première Langue Freshmans". Dépôt de modèle de Portland. 27 septembre 2011. http://c2.com/cgi/wiki?FreshmansFirstLanguage .
la source
Je pense que la simplicité et la facilité d'apprentissage sont l'un des critères principaux. Dans un cours d'introduction à la programmation, nous souhaitons éviter les obstacles inutiles à la programmation et nous concentrer autant que possible sur les principes de la programmation et de la résolution de problèmes algorithmiques. Les étudiants de première année n'ont souvent pas la capacité de penser de manière algorithmique les problèmes. Le cours traite également de l'enseignement de la pensée algorithmique.
Un autre critère est l'utilité de la langue dans l'industrie. Nous ne voudrions pas enseigner une langue qui ne soit d'aucune utilité dans l'industrie. Une nette majorité d’étudiants vont travailler dans l’industrie, il est donc important de garder un œil sur ce qui est utilisé (et sera utilisé lorsque les étudiants obtiendront leur diplôme) dans l’industrie.
Le troisième critère serait les cours que les étudiants vont suivre dans les années à venir. Les cours, en particulier les cours obligatoires, ne sont pas conçus sur eux-mêmes mais en coordination avec d’autres cours.
La dernière chose à laquelle je pense en ce moment est la même que celle de jmad, la langue devrait permettre d’apprendre facilement d’autres langues importantes. Il devrait être suffisamment riche et il serait facile de reprendre les langues les plus importantes par la suite (ici, les moyens importants sont importants du point de vue des étudiants).
Je pense que de nombreuses universités ont déplacé leur principal cours d'introduction à la programmation de Java / C ++ / C à Python, bien qu'elles puissent être amenées à s'initier à la programmation dans d'autres langues de temps à autre (souvent pour les majors non informaticiens, par exemple C pour les majors en génie électrique). Cependant, ils peuvent faire preuve de souplesse si l'instructeur souhaite expérimenter l'enseignement d'une autre langue de temps en temps.
la source
Je vais donc immédiatement me passer de ma réaction réflexe, à savoir que tout le monde devrait apprendre à programmer via SICP car Lisp est la solution.
Beaucoup de bons critères ont déjà été proposés pour choisir une langue ... la simplicité et la portabilité étant parmi les plus importantes. Cependant, je pense aussi qu'il est essentiel que les nouveaux étudiants en programmation ne se fassent pas une mauvaise idée (ou n'aient aucune idée) de ce qui se passe dans les coulisses avec les langues vivantes.
Bien que certains de ces autres postes offrent d'excellents critères, j'aimerais utiliser un langage particulier pour illustrer le sens de «respecter les critères».
Certaines de ces préoccupations ont été abordées (bien mieux que ce que je pouvais essayer) dans l'article de blog de Joel Spolsky, The Perils of JavaSchools . Le choix de langages comme Java ou Python se résume à deux des concepts les plus difficiles (et les plus vitaux) de CS; à savoir, les pointeurs et la récursivité.
Bien sûr, l’enseignement d’un cours d’introduction au C va être incroyablement dense, tout en laissant probablement de côté plusieurs concepts importants liés à la récursion. De même, un cours enseigné en Lisp devra aborder les pointeurs sous les couvertures, car
car
ilcdr
implique des concepts importants liés aux listes chaînées, tout en laissant la langue gérer les détails.En gros, ce que je veux dire, c'est que les étudiants doivent comprendre les principes fondamentaux des structures de données et des algorithmes, ainsi que la mise en œuvre pratique.
Je suis également en désaccord avec la suggestion de ne pas utiliser un langage orienté objet. Je pense que l'utilité des langages orientés objet pour modéliser le monde réel est un atout positif pour les nouveaux programmeurs, tant que l'inadéquation des impédances est clairement définie et que les langages orientés objet sont un paradigme parmi beaucoup d'autres.
Je proposerais que Ruby (suggéré comme une possibilité par un autre post) illustre de nombreuses qualités à rechercher dans un langage à utiliser pour une introduction au cours de programmation.
Je justifierai cette affirmation momentanément, mais je voudrais d’abord commenter une tendance qui me perturbe dans les cours d’introduction au CS. Je travaille dans une université qui, comme beaucoup d'écoles, a récemment adopté Python pour ses cours d'introduction. Je crois fermement que Python est le nouveau BASIC, et la tendance du langage est de choisir la nouvelle convivialité plutôt que le pouvoir et l'expressivité, comme je l'ai récemment expliqué ailleurs . C'est un mauvais service, et nous devons penser aux programmeurs qu'ils vont devenir, pas aux nouveautés qu'ils sont en ce moment.
Quoi qu'il en soit, justifiant Ruby en tant que langage d'introduction ...
malloc()
en leur apprenant à étendre le langage en C.Quoi qu'il en soit, rien ne peut remplacer l'apprentissage de nombreuses langues, de plusieurs paradigmes, que vous les utilisiez de manière professionnelle ou non. Fondamentalement, je pense que tout le monde devrait comprendre , sinon utiliser C et Lisp. Ruby est le meilleur compromis auquel je puisse penser pour un semestre d’introduction.
Quoi qu'il en soit ... c'est mon dollar américain .02. Je n'essaie pas de vous convaincre d'utiliser Ruby, mais ... utilisez-le comme un exemple de qualités à rechercher dans une langue pour enseigner un cours d'introduction.
la source
Mon premier langage de programmation était un langage d'assemblage de jouets. Le second était Fortran. Entre les deux, on m'a appris une notation "d'algorithmes", qui était à peu près celle d'Algol 60. Je me suis bien débrouillé. En fait, je pense que ce que j'ai appris était à peu près parfait.
Lorsque j'ai étudié la programmation fonctionnelle pour la première fois, dans des documents de recherche, mais pas dans un langage implémenté, je me suis dit: "Waouh, c'est complètement différent. C'est assez mathématique!" La plupart des gens à qui l'on enseigne la programmation fonctionnelle ont toujours le même type d'expérience "wow". Je pense que c'est génial.
Je pense que la programmation impérative et la programmation fonctionnelle sont deux manières complètement différentes de regarder le monde. Nous ne rendrions pas service à nos étudiants si nous leur enlevons cette expérience diversifiée.
Le meilleur premier langage de programmation doit être le plus simple et le plus clair possible, afin que les étudiants puissent se concentrer sur la manière de penser clairement. Malheureusement, la simplicité et la clarté de l’assemblage Fortran et Algol 60 sont incomparables dans la plupart des langages de programmation modernes. Haskell est une bonne exception. Mais Haskell ferait mon deuxième langage de programmation idéal, pas le premier. Eiffel ou Oberon pourraient peut-être faire l'affaire.
la source
À la North Carolina School of Science and Mathematics , nous présentons Python aux étudiants depuis 2004. Nous l'utilisons pour enseigner la programmation procédurale, car nous pensons que la capacité à rédiger des procédures courtes et correctes est essentielle pour progresser plus tard avec des outils plus lourds, notamment OO. programmation.
Nous l'aimons pour ces raisons.
Python n'est pas un langage au format libre. Cela oblige les étudiants à écrire leur code par blocs en utilisant l'indentation. (Comme note technique, nous utilisons l’éditeur de texte vim et
set tabstop=4 set et
ajoutons [ ] dans le fichier .vimrc pour éliminer les problèmes gênants et pour que l’indentation du code soit perceptible mais ne provoque pas une dérive horizontale excessive et moche). Nos étudiants s'habituent à voir la structure hiérarchique des programmes délimités par des espaces. En conséquence, leurs habitudes de formatage ont tendance à être très bonnes car ils programment dans d'autres langues.La simplicité syntaxique de Python le rend convivial pour les débutants. Des programmes simples peuvent être écrits avec un minimum de mots-clés obscurs et d’incantations magiques. Nous voulons que les étudiants qui ne penseraient normalement pas à la programmation l'essaient. Notez la belle simplicité de Python
hello.py
; ce qui se passe est clair comme du cristal.Python est typé dynamiquement et typé canard. Cela facilite l'introduction de variables. Je dis à mes étudiants que les variables ne sont que des étiquettes. Ils pointent des objets. Vous envoyez un message à un objet en utilisant le nom de la variable, comme si quelqu'un vous envoyait un message en vous appelant par téléphone.
Python est un outil que les étudiants ambitieux ne pourront pas développer. Il a des bibliothèques sophistiquées qui font des hôtes de choses utiles. C'est un puissant outil de création accessible aux débutants.
Python est gratuit et fonctionne sur toutes les plates-formes principales. Notre école est un environnement OS hétérogène avec toutes sortes de machines. Nous n'avons pas à nous soucier de maux de tête tels que des problèmes de compatibilité. Il fonctionnera sur n'importe quel ordinateur.
Python a une excellente documentation. Nous encourageons nos étudiants à explorer, bricoler et colorier en dehors des lignes. Ils découvrent très tôt comment utiliser la documentation Python et finissent souvent par explorer des choses intéressantes en dehors des cours.
Nous avons été très satisfaits de Python.
la source
Je dirais que le langage (sous certaines limitations) importe moins, que ce que vous faites avec le langage. Vous pouvez en apprendre davantage sur le développement de logiciels, les algorithmes, la programmation orientée objet, le matériel informatique, etc. dans la plupart des langues. La clé est de développer quelque chose d'intéressant qui utilise tous ces concepts.
(réponse migrée à partir de https://cs.stackexchange.com/questions/1946/criteria-for-choosing-a-first-programming-language/ )
la source
TL; DR: Il n’ya aucun moyen derépondre demanière objective à cette question car il n’existe aucunebase objective pour les critères sous-jacents. C'est aussi arbitraire que d'essayer de débattre si le bleu est objectivement une couleur «meilleure» que le rouge ou si la crème glacée à la vanille est objectivement «plus savoureuse» que le chocolat.
Je pense qu'il y a déjà quelques articles merveilleux, mais je vais ajouter mes propres 2 centimes.
Cette question revient à demander s’il est possible de choisir objectivement le premier parfum de crème glacée que quelqu'un devrait essayer lorsqu’il visite un lieu de crème glacée pour la première fois. Non, il n'y a pas de moyen objectif de choisir quelque chose qui est intrinsèquement subjectif .
Pourquoi? Parce que même lorsque nous examinons les critères raisonnables mentionnés dans la réponse de Pedro , tout le monde aura toujours une vision subjective de la manière dont chaque facteur "résiste" à celui de quelqu'un d'autre.
Par exemple, Ruby est-il objectivement "plus simple" que Python? Plus simple dans quel sens? En ce qui concerne quoi? Que signifie "plus simple" pour vous ? Cela signifie-t-il "moins de lignes de code"? Cela signifie-t-il "plus facile à lire et à comprendre"? Qu'en est-il des autres? Pourquoi quelqu'un devrait-il accepter un choix particulier ici? Je ne pense pas que nous puissions répondre à cette question de manière objective .
Cela conduit à la question suivante.
Bien que certains critères puissent être raisonnables, je pense que cela est plus fondé sur les préférences subjectives qu'autre chose. Par exemple, il n’ya aucune raison pour que j’accepte les critères de simplicité , d’ ambiguïté , de portabilité et de préférence de l’industrie de Pedro - sans se soucier de la mesure dans laquelle ils pourraient être raisonnables. En fait, la préférence de l' industrie est subjective par définition et conduirait simplement à un cercle vicieux. (Tout le monde y est formé, donc tout le monde l'utilise dans l'industrie, c'est pourquoi tout le monde y est formé, ...)
Par exemple, pourquoi pas
Le fait est que, bien que je puisse proposer un ensemble différent de critères d’évaluation tout en restant raisonnable, nous ne pouvons pas prétendre qu’il est objectivement supérieur / inférieur à celui de quelqu'un d’autre.
En conclusion, il n'y a pas base objective pour les critères. C'est aussi arbitraire que d'essayer de débattre si le bleu est objectivement une couleur «meilleure» que le rouge ou si la crème glacée à la vanille est objectivement plus savoureuse que le chocolat.
Cela ne veut pas dire que vous ne pouvez pas avoir de bonnes raisons de justifier vos préférences, mais en fin de compte, ce ne sont que vos préférences.
la source