Marc Boyer a écrit :
> On 2008-03-31, Laurent Pointal <laurent.pointal@laposte.net> wrote:
>> Le Mon, 31 Mar 2008 23:20:07 +0200, Wykaaa a écrit :
>>> Thierry B. a écrit :
>>>> Quand à son enseignement dans les facs, je dis oui aussi. Pour les
>>>> mêmes raisons, d'abord; et surtout pour les domaines couverts: calcul
>>>> scientifique, traitement du texte, interfaces graphiques, interfaces
>>>> avec d'autres langages/logiciels. On peut le voir comme un langage
>>>> "glue" qui permet de concentrer ses efforts sur le résultat à
>>>> atteindre, et pas sur les moyens à utiliser.
>>> Surtout ne pas l'enseigner dans les écoles !! Un langage qui permet
>>> d'utiliser des variables sans les déclarer doit être banni de
>>> l'enseignement de la programmation.
>> AMA il ne faut pas le prendre comme ça.
>>
>> Si tu enseignes la programmation à des gens dont ça va être le métier, il
>> faut quelque chose qui soit éventuellement plus lourd, et oblige à
>> apprendre de bonnes méthodes (typiquement ADA).
>> Il leur faudra aussi apprendre des langages avec d'autres paradigmes, et
>> ils ne pourront passer à côté du C et de l'inévitable Java.
>
> Je partage ce constat (et je suis dans une école avec une bonne partie
> informatique), mais il ammène une limite: une fois vu C et Java, il ne
> reste plus forcément beaucoup d'heures.
Le débat entame ici le fond du problème pour l'enseignement de la
programmation.
Je vais donner mon point de vue personnel qu'on peut ne pas partager
(mais sans polémique SVP) :
1) Pour les futurs développeurs (en se cantonnant seulement à la
programmation et pas au reste du cycle de vie ni à la gestion de projet) :
Apprentissage des bases de la programmation, ce qui veut dire (pas
forcément dans l'ordre):
- notion de variable et de classe d'allocation mémoire (auto, statique,
externe, constante), valeurs littérales
- notion de sous-programme (procédure, fonction, méthode, appelons tout
cela sous ce nom générique) et de passage d'argument (par valeur, par
référence, par valeur d'adresse, par nom. Ce dernier à cause de certains
macro-processeurs principalement)
- notion de typage : types de base, types construits. Le typage
statique, le typage dynamique
- notion de programmation structurée (ce n'est pas parce que l'objet
que, hein ?) : structures itératives et alternatives
- notion de récursivité
- notion de modularité : package, classes (pour préparer les notions objets)
- Notion de compilation séparée (avec les différentes variantes. Par
exemple, séparation ou non de la spécification d'un module et de son
corps : .h et .c ou .cpp en C et C**, package et package body en ADA où
la notion de package n'est pas liée à la notion de fichier, package à la
Java)
- Comment structurer une application en énonçant les critères (notion
d'abstraction, forte cohésion interne, faible couplage)
- Notion d'héritage et de polymorphisme
- La généricité (les templates)
Tout ceci peut se faire avec Java comme langage support. Mais il faut
insister sur les concepts de programmation en insistant sur le fait que
Java (si c'est ce langage qui est utilisé comme support) n'est qu'une
mise en oeuvre de ces concepts
Si cette partie est bien faite, il devient beaucoup plus facile aux
étudiants d'apprendre d'autres langages (et pourquoi pas Python...)
Ensuite, doivent être abordés des notions plus sophistiquées comme la
programmation concurrente illustrée par les threads Java (ou les tâches
en ADA), les bases de données et la notion de donnée persistante, les
GUI et les kits de développement.
Les télécom : les librairies pour les différents protocoles, TCP/IP, etc.
Enfin les notions de qualité logicielle (elles seront évidemment
sous-jacentes à tout ce qui précède) : ce que ISO 9000 appelle les
exigences non fonctionnelles : réutilisabilité, évolutivité, etc.
2) Pour les scientifiques non informaticiens
- notion de variable, de valeurs litérales (sans les encombrer avec les
classes d'allocation mémoire (quoique des fois)
- notion de sous-programme (sans les subtilités de tous les types de
passage d'arguments)
- quelques notions de typage
- notion de récursivité
- notion de modularité
- notion d'héritage et de polymorphisme (peut-être même pas nécessaire.
Dépend du contexte)
Langage support : un langage utilisé en simulation permettant de faire
aisément des graphiques et de mettre en place une IHM, même rudimentaire
Un langage tel que le regretté HyperCard (sur Mac) était parfait pour
cela. Il faut trouver l'équivalent et, là, je fais appel à vos
suggestions à tous.
3) Pour les non scientifiques
Excel et VBA ??? (non pas taper...)
J'ai certainement oublié des trucs mais, pour tous ceux qui sont
impliqués dans l'enseignement de l'informatique au sens large dans des
cursus divers et variés, peut-être est-ce une base de discussion ?
>
>> Si tu enseignes à des personnes pour qui la programmation n'est qu'une
>> unité de valeur obligatoire dans leur cursus, qui leur servira peut-être
>> plus tard (mais pas sûr), alors autant leur apprendre un langage qui leur
>> permette de faire simplement des choses puissantes,:interfaces
>> graphiques, accès fichiers, liens avec des bases de données, manipulation
>> des protocoles de l'internet...
Entièrement d'accord mais je n'ai pas la réponse en terme de langage (je
sens que certains vont dire ... Python)
>
> Tout à fait.
> Mais l'enseignement de la programmation dans des cursus non
> informatiques est un vrai problème: en fait, ce sont rarement
> des informaticiens de formation qui les font, ce qui pose non
> pas un problème de qualité (que des physiciens codent des scripts
> python ou matlab comme des pieds, c'est pas très grave) mais
> de positionnement (qu'est-ce que l'informatique, quels sont
> ces enjeux en 2008, etc).
>
Je suis assez d'accord que la "propreté" de la programmation est très
secondaire dans ce contexte.
Cependant, une vraie réflexion est nécessaire sur la place de
l'informatique par grandes filières et les besoins par métier. Par
exemple, un architecte, un géologue ou un graphiste n'ont absolument pas
les mêmes besoins vis-à-vis de l'informatique. Sans parler des
historiens, des sociologues, etc.
>>> PS : perso, je n'aurais pas intitulé le sujet de cette manière mais
>>> plutôt : langages pour l'enseignement de la programmation - langages
>>> pour l'industrie ou quelque chose comme ça.
>
> J'ai fait la modif.
Merci Marc