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
- y a-t-il d'autres facteurs qui me manquent?
- Et quelles langues proposez-vous comme choix?
la source
Réponses:
Ma réponse? Python.
Laissez-moi vous expliquer en abordant tous vos points.
print("Hello World!")
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.
la source
{
et}
oubegin
etend
de 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.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.
la source
À 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.
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:
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.
la source
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.
la source
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.)
la source
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)
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.
la source
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
la source