Faut-il éviter de distraire les débutants avec l'orientée objet ?
Faut-il éviter de distraire les débutants avec l'orientée objet ?
Ou serait-il préférable de l'enseigner en premier ?
Faut-il apprendre à un débutant l'orienté objet ? Pour ou contre ? L'avis de James Hague est en tout cas tranché.
Dans un récent billet de son célèbre blog "programming in the twenty-first century", il plaide contre l'introduction de ce concept au nouveau programmeur sous peine de trop les « distraire ».
Hague prend l’exemple de Python, qu’il considère comme un langage où les solutions sont souvent simples à implémenter. Bref, un langage d’introduction idéal pour le débutant, avec une élégance particulière dans l’utilisation des types de donnée de base tels que les dictionnaires. Néanmoins, il estime qu’il faut éviter à tout prix de parler de l'orienté objet, et se contenter de ces outils de base qui s'avèrent assez efficaces pour résoudre la majorité des problèmes pratiques.
Selon Hague, l'introduction de l'orienté objet force le programmeur « à réfléchir non pas en terme de problème et de solution, mais en terme d'architecture ». Pour résumer, l'introduction de nouveaux artefacts issus de la POO ne fera que distraire le programmeur de l'objectif principal, à savoir la résolution du problème.
Ainsi, certains débutants vont jusqu'à abuser de ces concepts, et se retrouvent à créer des hiérarchies inutiles de classes, s'éloignant complètement de ce qu'il faut réellement apprendre.
D'autres groupes se désintéresseront complètement, parce qu’ils trouveront cette couche additionnelle sans sens concret, et rends la programmation encore plus encombrante et lourde.
« À un moment donné, oui, vous devrez aborder la création d'objets sous Python, mais résistez à la tentation de le faire aussi longtemps que vous le pouvez », conseille-t-il.
Et vous ?
:fleche: Faut-il, d'après vous, éviter de distraire les débutants avec la programmation orientée objet ?
:fleche: Ou est-il préférable de l'enseigner en premier ?
:fleche: Python est-il le langage idéal pour apprendre la programmation ?
:fleche: Ou estimez-vous que d'autres langages remplissent mieux cette tâche ?
Source : Don't Distract New Programmers with OOP
Qu'en disent les spécialistes de l'éducation ?
Personnellement, je suis de ceux qui croient que commencer directement par l'OO n'est pas forcément une bonne chose, et que commencer par du procédural pour terminer par de l'OO est une bonne pédagogie.
Mais cette impression ne vaut strictement rien, et seuls les faits méritent d'être évoqués. Il faut savoir que dans le domaine de la pédagogie, de nombreuses recherches ont étés effectuées et qu'on arrive plus ou moins à savoir comment faire pour bien enseigner. Et dans le domaine de la programmation, on n’échappe pas à ce genre de choses. Ainsi, on sait plus ou moins ce qui rend un langage facile à apprendre et quelles sont les difficultés majeures : vous n'imaginez pas les difficultés que peuvent poser les structures de contrôle et l'assignement (oir ici pour les curieux : http://www.cl.cam.ac.uk/teaching/1011/R201/). Et concernant le débat OOP versus procédural, on a quelques éléments de débat venant d'études de psychologues sur le sujet.
J'ai effectué personnellement quelques recherches sur le sujet, et je suis tombé sur un document qui en parle un petit peu. Commencez à lire le pdf qui va suivre à partir de la page 142 : http://lib.tkk.fi/Diss/2012/isbn9789...9526046266.pdf, vous devriez avoir un paragraphe appelé "Objects are a bone of contention". Je vous laisse vous faire votre avis.
Au final, j'ai retenu que l'apprentissage précoce de l'OOP peut parfaitement marcher : ceux qui commencent par l'OOP n'ont pas de grosses différences de performances avec ceux qui ont commencés par du procédural, même si les difficultés rencontrées par ces deux types d'élèves ne sont pas les mêmes. Par contre, apprendre l'OOP en premier est plus complexe que du simple procédural (la notionnal machine d'un langage OOP est plus complexe que celle d'un langage procédural), ce qui est un désavantage. Personnellement, je suis d'avis de commencer par le procédural et d'expliquer l'OOP en faisant le lien avec les bases du procédural (et notamment en se basant sur la programmation modulaire). C'est le seul moyen que je vois pour apprendre l'OOP en utilisant les méthodes préconisées par la pédagogie explicite (garder une progression du simple au complexe, découpage du cours en petites unités notionnelles acquises en se basant sur les précédentes, pas de concepts "trop généraux" ou ambigus, etc).
Je suis de ceux qui pensent qu'il faut commencer par la POO
Je suis de ceux qui pensent qu'il faut commencer par la POO.
Je pense qu'au contraire il faut commencer par savoir comment Architecturer et structurer et cela en dehors du principe de coder.
D'abord on fera de la théorie avec des exemples qui ne sont pas du code puisque le but est ici d'apprendre à coder. Après on commence à coder en se servant des bons Design Pattern.
La POO est un concept assez simple si on l'apprend dans un concept général. Beaucoup de langages ne sont qu'orienté objet et ne permettent pas la procédurale. Si la procédurale était un principe obligatoire alors personne ne pourrait commencer par des langages dits seulement objet.
La procédurale est un concept ancien et démodé, il a servit un temps mais les techniques de programmation ont évolué.
Apprendre à programmer doit être quelque chose de constamment évolutif. C'est comme gérer une équipe et lui demander d'exécuter des tâches. Elle sera plus efficace avec une bonne structure réfléchie.
On évolue toujours sur la façon de gérer une équipé et on adapte également toujours selon les besoins.
On n'apprend pas de vieilles méthodes de travail sinon elles restent ancrées et le passage à d'autres méthodes fait naitre la question du 'Pourquoi changer'. La personne n'aura pas forcément envie d'évoluer car elle se sent bien dans son contexte actuel ou elle à ses repères.
Un bon développeur doit être évolutif et penser d'abord à la structure puis après à l'alimenter. Un bon code bien structuré pourra toujours évoluer. Sinon cela s'apparente à une chimère.
Je pense qu'il n'y a pas de meilleur langage plus qu'un autre c'est la façon de l'apprendre et de savoir l'utiliser.
Les langages basés sur la POO reprennent eux-mêmes une architecture et des concept assez communs mis en place par la POO. Ainsi que ce soit en C# , Java ou PHP on retrouve plusieurs concepts de structure et de design pattern communs. Ces similitudes permettent le portage d'un code d'un langage à un autre langage de manière plus simple. On doit bien sur affronter quelque différences techniques mais on n'a pas à repenser autant la structure.
La POO associée à la POA communément appelé programmation orientée aspect, peut aussi faire l'objet d'un certain présentéisme d'un point de vue organisation.