En tant qu'enseignant: choisir un langage de programmation approprié

8

Je ne sais pas si c'est le bon endroit pour cette question. Désolé si je vais un peu hors sujet.

Le choix d'une langue appropriée pour le premier cours de programmation est l'une des choses les plus importantes que chaque enseignant / conférencier doit garder à l'esprit; surtout si les élèves sont jeunes ou ont une connaissance limitée des mathématiques.

J'enseigne actuellement à un groupe de jeunes très enthousiastes (environ 16 à 17 ans) avec une connaissance moyenne des mathématiques . Ils vont au lycée en classe de 10e en ce moment. Je vais commencer à enseigner un langage de programmation pour le prochain semestre.

Ils sont un groupe d'étudiants triés sur le volet dans toute la ville avec un niveau extraordinaire de créativité et de diligence, donc je vois que travailler avec un vrai langage de programmation ne serait pas une tâche difficile pour eux. Ainsi, le choix de solutions graphiques et de glisser-déposer simples comme Turtle Art, Scratch et Tynker n'est pas considéré comme une option.

Il y a quelques facteurs à vérifier avant de faire un choix:

  • Simplicité : la plupart d'entre eux n'ont probablement jamais connu de véritable action de codage auparavant.
  • Simplicité, encore une fois : L'une des principales idées est d' apprendre à penser algorithmique . Avoir un langage sophistiqué ou peu syntaxique les détournera du chemin.
  • Généralités : il vaut mieux que le langage ne soit pas conçu pour des cas de développement spéciaux. Prenons PHP et MATLAB comme exemples qui sont respectivement conçus pour le développement Web et le calcul / modélisation.
  • Objectif minimal : pas de programmation OO forcée (comme Java). Ou du moins avec la dépendance minimale aux concepts OO.
  • Plate - forme : Il est important d'avoir Windows comme environnement de développement pris en charge, car presque tous sont sous Windows.
  • Facile à configurer : il est préférable d'avoir une manière simple de configurer l'environnement de développement.
  • Préférence de l'industrie : Pas un problème grave. Mais ce devrait être au moins une langue actuellement active permettant aux étudiants d'atteindre des expériences de développement presque réelles.
  • Portabilité matérielle : Il est important (mais pas obligatoire) que le langage soit suffisamment flexible pour être utilisé sur la programmation matérielle. (Je ne parle pas des langages de description du matériel comme Verilog et VHDL.) L'objectif est de programmer du matériel basé sur un processeur plus simple comme les microprocesseurs AVR ou l' interface GPIO Raspberry Pi .

Je veux savoir que

  1. y a-t-il d'autres facteurs qui me manquent?
  2. Et quelles langues proposez-vous comme choix?
zxcmehran
la source
2
Pour les autres critères que vous pourriez manquer, consultez cette question .
David Richerby
1
@DavidRicherby Je l'avais vu avant de poster la question, et bien sûr, cela a beaucoup aidé.
zxcmehran
Essayez Lua.
Ankur
1
@zxcmehran Sur le sujet des paradigmes de programmation, je suis tombé sur cela sur Wikipedia aujourd'hui et j'ai pensé que cela pourrait être pertinent pour votre question: Comparaison des langages de programmation multi-paradigmes
tehDorf

Réponses:

11

Ma réponse? Python.

Laissez-moi vous expliquer en abordant tous vos points.

  1. Simplicité . Le code Python se lit comme l'anglais. Sérieusement, comme c'est simple print("Hello World!")
  2. Généralité . Python peut être utilisé pour le développement Web (via. Flask / Django), l'analyse de données (via. NumPy / Pandas / SciPy), les jeux (via. PyGame), ainsi que pour une multitude d'autres tâches en raison de la quantité considérable de bibliothèques présentes sont.
  3. Trucs d'objectif minimum . Vous pouvez faire de la POO en Python mais ce n'est pas obligatoire.
  4. Plateforme . Python2.7 est à peu près dans toutes les distributions Linux et il y a beaucoup de vidéos YouTube sur sa configuration sur Windows / Mac. Si quelque chose, vous pouvez utiliser l'interpréteur en ligne que Repl.It propose.
  5. Préférence de l'industrie . Corrigez-moi si je me trompe, mais Python a toujours été classé comme l'un des langages les plus populaires.

Dans mon expérience d'enseignement, il est extrêmement important de s'assurer que la syntaxe est aussi simple que possible à écrire et à comprendre. Pour un nouveau programmeur, cela peut être assez décourageant quand il / elle écrit du code uniquement pour voir un message d'erreur (surtout s'il / elle n'a pas la compétence pour lire un message d'erreur et déboguer).

Note latérale, PythonTutor sera vraiment utile pour expliquer certains des principaux concepts en informatique / programmation.

Lawrence Vo
la source
Merci pour le partage. Je suis d'accord avec vous et je considère Python comme l'un des meilleurs choix.
zxcmehran
1
En parlant de PythonTutor, JetBrains PyCharm Edu est également un bon outil pour commencer avec python.
zxcmehran
Je travaille dans la recherche sur les langages de programmation et je crois que les bons langages de programmation à usage général devraient être typés statiquement, mais je pense également que Python est un excellent langage d'apprentissage, en particulier pour les jeunes étudiants. Il existe de nombreux facteurs que d'autres ont mis en évidence, mais permettez-moi également de dire ceci: d'après mon expérience, un débutant a besoin de voir son programme planter et brûler de ses propres yeux. Si le gros méchant compilateur continue de lui dire "vous ne pouvez pas faire ça parce qu'il va planter et brûler" c'est peu utile. Un peu comme si je disais à mes enfants "ne touchez pas le four, il fait chaud".
Andrej Bauer
1
Et ne sous-estimez jamais le fait qu'en Python l'indentation des blocs rend la structure du programme évidente. Le simple fait de taper {et }ou beginet endde délimiter des blocs de code est un fardeau cognitif important pour un étudiant débutant. Si vous pensez le contraire, passez au schéma et voyez ce que vous pensez des parenthèses.
Andrej Bauer
Vous pouvez également programmer en python sur le raspberry pi, ce qui est bien.
heather
10

Contexte

Cette question soulève sa vilaine tête tous les 5 ans environ dans notre département. Nous avons eu Miranda et Pascal il y a longtemps, puis Haskell, maintenant nous avons C parce que le département EE a décidé de nous envoyer leurs étudiants comme avant mais a exigé "quelque chose de pratique comme C" et notre leadership sans spin n'avait rien de mieux à faire que de se conformer.

Pourquoi pas l'un de ceux recommandés ci-dessus?

J'ai enseigné une partie de cela et vu des étudiants en sortir pendant près de 20 ans. La seule chose qui s'est démarquée est que le langage importe peu tant qu'il vous permet d'exprimer les concepts fondamentaux du calcul avec une facilité suffisante et que si vous ne faites pas la bonne chose, vous obtiendrez de bons messages d'erreur, de préférence du compilateur. C'est là que python échoue. Les types sont importants! C'est là que C échoue: les types sont importants et le polymorphisme est important! (Et non, faire en sorte que tout soit de type void n'est pas une solution. Vous passez simplement au pays python.) C'est là que java échoue: les programmes ne tiennent pas sur les diapositives - il y a juste trop de plaque de chaudière et de verbosité.

Donc, personnellement, je n'irais avec aucune des réponses ci-dessus. J'irais avec Haskell. Il est magnifiquement aligné avec les mathématiques. C'est plus concis que les autres. Vous pouvez vous concentrer sur l'essentiel du calcul. Et ghc a tendance à produire du code meilleur et plus rapide que les compilateurs C pour les faibles tentatives d'optimisation dont je suis témoin chaque fois que je laisse les étudiants utiliser C.

Mais réellement..

Cela dit, d'après mon expérience, la chose la plus importante est que l'enseignant connaisse mieux la langue que quelques tutes en ligne. Les premières langues ne sont que cela, les premières langues. Si vos élèves sont sérieux, ils en ramasseront beaucoup plus en cours de route. Concentrez-vous sur les concepts plutôt que sur la syntaxe.

Kai
la source
7

À mon avis, cette question est très avisée. Il n'y a rien qui puisse déclencher une guerre sainte comme "quelle langue est la meilleure pour X". Pourtant, je vais mordre.

  1. y a-t-il d'autres facteurs qui me manquent?

Tout d'abord, je vous recommande de lire ce que Dijkstra a dit sur l'enseignement . C'est vieux mais toujours pertinent - peut-être beaucoup, beaucoup plus pertinent aujourd'hui qu'il ne l'était dans le passé.

Deuxièmement, je recommanderais également de lire un article de blog de Joel Spolsky sur le même sujet.

Troisièmement, et ce qui est moins important, mes propres critères pour une première langue seraient:

  1. Toute erreur d'exécution doit être signalée avec un message d'erreur clair.
  2. Il doit être tapé.
  3. Aucun langage de programmation unique ne peut vous faire comprendre tous les aspects de la programmation. Pour devenir un vrai programmeur, il faut apprendre de nombreuses langues, surtout radicalement différentes.

Le point 1 est très, très utile pour un débutant. La plupart des langages satisfont cela, à l'exception notable de C et C ++. Bien que je pense que C est un langage incontournable pour tout programmeur (voir point 3), je pense qu'il est inutilement dur pour un débutant. La collecte des ordures est à peu près une condition préalable au point 1.

Le point 2 est le plus controversé. Bien que je pense que l'on devrait également apprendre à travailler dans une langue non typée (encore une fois, point 3), je pense que commencer par les types est plus bénéfique. Même dans un environnement non typé, les programmeurs réfléchissent souvent au type de données à transmettre à un sous-programme. De plus, la détection d'erreurs avant l'exécution est agréable.

Le point 2 exclut beaucoup de langues. Notez cependant que Python n'est pas exclu: alors que Python n'est pas typé, il y a le merveilleux projet mypy qui permet d'utiliser un Python typé. De plus, Perl6 a une saisie facultative (graduelle), ce qui serait toujours le cas. Typescript ajoute également des types à JavaScript. Même si Lisp et Scheme sont exclus, il existe de nombreux langages de programmation fonctionnelle typés parmi lesquels choisir (Ocaml, Haskell, F #, ...).

Le point 3 est également important. Il faut apprendre beaucoup de choses pour être un bon programmeur. Du bas niveau (pointeurs, C) au plus haut niveau (récursivité, fermetures, polymorphisme paramétrique / génériques, ...), différents paradigmes (impératif, fonctionnel, logique, ...). Cela ne peut pas être enseigné dans un seul cours, bien sûr. En premier lieu, vous devez ouvrir la voie à la route complète.

chi
la source
1

J'irais avec la réponse Python, mais j'aime aussi recommander une alternative: C.

Mon premier langage de programmation était le C et à l'époque, je l'ai vraiment apprécié. L'enseignant (et certains autres étudiants) aurait pris Java comme premier langage de programmation, mais il devait prendre C. Le professeur avait l'habitude de montrer quelques exemples Python pour montrer les avantages d'un langage de programmation plus moderne. Quoi qu'il en soit, retour au sujet:

  • Simplicité La syntaxe C est assez petite, mais de temps en temps assez étrange. Vous n'êtes pas obligé d'adopter l'approche vodoo, mais vous pourriez.

  • Simplicité, encore une fois Comme résultat des premiers points, les algorithmes peuvent être implémentés assez compacts et compréhensibles. Pensez à Fibonacci ou plus avancé le Knight's Tour.

  • Généralités En utilisant C, vous pouvez implémenter ce que vous voulez. Vous pouvez également utiliser certains sous-systèmes comme les langages de script (Lua).

  • Objectif minimal Stuff C parle de lui-même ici. Vous devez avoir une bonne connaissance de C pour implémenter des choses OO.

  • Plate-forme Chaque plate-forme majeure prend en charge le langage, prenez un compilateur de votre choix et commencez à coder.

  • Facile à configurer C n'a pas besoin d'un IDE avec beaucoup de boutons et une grosse chaîne d'outils. Prenez simplement un fichier make (ou un script) et compilez votre code avec quelques commandes. Vous pouvez utiliser un IDE (Codeblocks, ...) si vous le souhaitez.

  • Préférence de l'industrie Linux, Windows, ...

  • Portabilité matérielle Il fonctionne bien sur les microcontrôleurs AVR ou prend Arduino, qui est également programmable en utilisant le vieux C.


Comme alternative, qu'en est-il du développement sur une plate-forme abordable comme Arduino (il pourrait y avoir de meilleures alternatives). Vous pouvez leur montrer tous les trucs algorithmiques en utilisant de simples impressions standard ou vous pouvez mettre du matériel au travail. Cela pourrait être avantageux si le code résultant n'imprime pas seulement du texte (ou une image, ou une interface graphique, ou des trucs ...) mais laisse également clignoter une LED ou quelque chose. Dans mon entreprise, il y a parfois des cours d'élèves où ils codent des trucs sur une carte Arduino assez basique et nous recevons de bons commentaires des participants.


Je pense que vous posez les bonnes questions et je vous souhaite tout le meilleur pour enseigner à vos élèves.

maxik
la source
Le seul point négatif de C et C ++ est que le codeur doit comprendre certaines des structures de syntaxe avancées (comme les pointeurs) pour pouvoir construire quelque chose qui ressemble à une action réelle. Dans la famille C, vous ne pouvez pas accéder à des interfaces graphiques sophistiquées ou à la puissance magique du réseau sans comprendre les parties difficiles du langage. En tant qu'étudiant, ce serait ennuyeux si tous les efforts déployés au cours d'un semestre aboutissaient à une logique s'exécutant dans une fenêtre de console noire avec une police de caractère étrange. Ainsi, je pense que l'utilisation d'un langage de niveau supérieur peut être plus intéressant pour eux et les encourager à poursuivre la voie du codage.
zxcmehran
1
@zxcmehran C'est vrai, c'est pourquoi j'ai suggéré quelque chose comme Arduino comme approche alternative.
maxik
C est simple comme «gérer votre mémoire vous-même» est simple. Beaucoup de comportements indéfinis sont un problème.
djechlin
1

J'irais pour Swift, en utilisant Swift Playground. Vous voudrez peut-être vérifier combien de personnes ont un Mac ou un iPad. Chez les étudiants, c'est 90% à certains endroits. Il est également disponible en ligne sur http://iswift.org/playground , vous n'avez donc besoin de rien de plus qu'un navigateur. Vous pouvez l'utiliser sur votre téléphone si vous n'avez pas d'ordinateur.

Swift est une langue moderne, c'est une langue sûre, et c'est une langue qui vous procurera un emploi si vous la maîtrisez. (Tout nouveau code écrit par Apple est écrit en Swift.)

gnasher729
la source
0

Edit: Désolé, à ce sujet - j'ai mal lu votre point sur la plate-forme. Je pensais essentiellement que vous aviez dit qu'il ne devait fonctionner que sur Windows, mais je vois maintenant que ce n'est que la majorité de vos utilisateurs qui utilisent Windows.

Microsoft a développé la prise en charge de Linux et Mac et VS Code et Visual Studio pour Mac , respectivement, et .NET Core, donc je pense que c'est toujours une réponse valide, bien que peut-être pas aussi forte.


Je vous suggère de vous pencher sur C #, le framework .NET et l' IDE de Visual Studio - ils couvrent à peu près tous vos 7 à 8 points. (selon la façon dont vous comptez les deux premiers; D)

  • Simplicité : la syntaxe est assez facile à comprendre, et il existe une grande quantité d'informations sur le Web pour les didacticiels pour débutants.
  • Simplicité, encore une fois : C # est un langage fortement typé, qui permet de mettre en évidence les erreurs avant même que l'application ne s'exécute. Visual Studio est sans doute l'un des meilleurs IDE que vous pouvez obtenir avec une excellente mise en évidence de la syntaxe, Intellisense et une prise en charge du débogage.
  • Généralités : Bien que ce ne soit peut-être pas le meilleur choix, je l'ai personnellement utilisé pour une grande variété d'applications - des sites Web et des applications de bureau aux équipements robotiques.
  • Objectif minimal : Modifier la programmation orientée objet est un style de programmation axé sur l'encapsulation, l'abstraction, l'héritage et le polymorphisme. C # possède des fonctionnalités qui facilitent l'écriture de code OO, mais il ne nécessite pas que vous les utilisiez. Vous pouvez écrire un programme C # de manière procédurale.
  • Plateforme : Modifier Le .NET Core est la version multiplateforme du .NET Framework. Il fonctionne sur Mac, Linux et Windows.
  • Facile à configurer : je ne pense pas que vous puissiez trouver une langue et un IDE plus faciles à installer sur Windows. Modifier Comme pour Mac et Linux, je n'ai aucune expérience avec cela, mais il existe VS Code (Win / Mac / Linux) et Visual Studio pour Mac (Mac uniquement). Je suppose que ce serait aussi relativement facile.
  • Préférence de l'industrie : C # est certainement un langage professionnel, bien que vous puissiez jeter un coup d'œil par vous-même en recherchant des emplois dans votre région en fonction des langues que vous envisagez. En utilisant Dice , j'ai obtenu des résultats à peu près égaux pour C # (6548) et Python (6639) pour toutes les offres d'emploi ouvertes, mais je ne sais pas si Dice a un biais d'une manière ou d'une autre, ou s'il existe des différences régionales importantes.
  • Portabilité matérielle : peut-être un demi-point ici - je ne pense pas qu'il y ait beaucoup de support pour la programmation de microcontrôleurs avec C # autre que quelques cartes .NET spécialisées comme le Netduino , mais le Raspberry Pi est pris en charge .

En prime, Microsoft a un programme appelé Imagine (anciennement DreamSpark) où ils distribuent de nombreux logiciels gratuits pour les enseignants et les étudiants du secondaire et du collège. Ils ont également des concours pour les étudiants.

tehDorf
la source
Uniquement pour les gars de Windows. Aussi, entièrement POO
Eugene
@Eugene Mon erreur, j'ai mal lu le point sur la plate-forme, donc ma réponse ne concernait définitivement que Windows. Je l'ai mis à jour pour adresser Linux et Mac. En ce qui concerne "entièrement POO", je l'ai également abordé dans ma réponse mise à jour sous "Trucs d'objectif minimum". S'il vous plait, faite moi part de votre avis.
tehDorf
Même si C # est un langage mature, il était hors de ma liste; puisque je supposais qu'il a une portée limitée sur la plate-forme et le matériel. Vous appréciant, il est de nouveau sur la liste. Merci pour les liens, je vais les vérifier.
zxcmehran
-1

Jetez un œil à Lazarus:

http://www.lazarus-ide.org

Lazarus est un environnement de programmation basé sur Free Pascal Compiler (FPC). Il fonctionne très bien sous Windows et est également disponible pour d'autres plates-formes majeures. FPC prend en charge une version modernisée de Pascal, appelée Object Pascal.

Object Pascal est un langage de programmation multi-paradigmes. Vous pouvez écrire du code en Pascal standard, puis commencer à utiliser les fonctionnalités OO lorsque vous en avez besoin.

Des applications du monde réel peuvent être développées en utilisant Lazarus / FPC. Ils sont tous deux assez matures, mais vous pouvez également utiliser Delphi comme alternative commerciale.

FPC peut compiler de manière croisée vos programmes avec des appareils tels que Raspberry Pi ou Android.

D'ailleurs, l'avenir de Pascal est radieux. Le langage de programmation Oberon finira par devenir le moyen le plus productif de développement de logiciels:

ht tp: //www.projectoberon.com

Espérons que les outils à développer à Oberon arriveront à maturité avec le temps. Il existe déjà un compilateur sympa pour la cible Win64:

https://github.com/congdm/AyaCompiler

srcstorm
la source
La question mentionne comme critère: "Préférence de l'industrie: ce n'est pas un problème grave. Mais ce devrait être au moins une langue actuellement active permettant aux étudiants d'atteindre des expériences de développement presque réelles." Il ne semble pas que Lazarus / Pascal s'adapte si bien à celui-là. Ce serait bien de documenter dans votre réponse quels critères Lazare réussit bien et lesquels ne le font pas.
DW
en.wikipedia.org/wiki/… <br/> wiki.freepascal.org/Lazarus_Application_Gallery <br/> delphi.wikia.com/wiki/… <br/> jonlennartaasenden.wordpress.com/2014/11/06/… <br/> <br/> Lorsque Lazarus a atteint le jalon 1.0, il a suscité beaucoup d'intérêt. La popularité n'a pas diminué depuis lors. <br/> Delphi / Lazarus est l'un des outils les plus populaires pour développer des applications de bureau. Des cadres pour utiliser FPC dans les applications serveur et mobiles sont également en cours d'élaboration.
srcstorm