Comment apprendre?
Choix du langage
Il faut d’abord choisir un langage de programmation. Un ingénieur pourrait évidemment être tenté d’apprendre à programmer en Maple, Matlab, Scilab ou autre. Il faut qu’il comprenne qu’il s’agit là d’outils spécialisés pour mathématicien ou ingénieur qui lui seront utiles et qui, certes, se programment, mais pas à proprement parler de langages généralistes complets. Sans argumenter sur les défauts respectifs des langages qui en font partie, il nous semble évident qu’il ne s’agit pas du bon choix pour l’apprentissage de la programmation. En pratique, le choix actuel se fait souvent entre C++ et Java. Bien que Java ait été conçu, entre autres, dans un souci de simplification du C++12, nous préférerons C++ pour des raisons pédagogiques : 1. C++ est plus complexe dans son ensemble mais n’en connaître que les bases est déjà bien suffisant. Nous ne verrons donc dans ce cours qu’un sous ensemble du C++, suffisant en pratique. 2. Plus complet, C++ permet une programmation de haut niveau mais aussi une programmation simple, adaptée au débutant13. C++ permet également une programmation proche de la machine, ce qui est important pour le spécialiste mais aussi pour le débutant, car seule une bonne compréhension de la machine aboutit à une programmation convenable et efficace14. 3. C++ est souvent incontournable dans certains milieux, par exemple en finance.
12. Nous ne réduisons évidemment pas Java à un sous ensemble de C++. Il lui est supérieur sur certains aspects mais il est d’expressivité plus réduite. 13. Java force un cadre de programmation objet, déroutant pour le débutant. 14. Ne pas comprendre ce que la machine doit faire pour exécuter un programme, conduit à des programmes inconsidérément gourmands en temps ou mémoire.4. Enfin, certains aspects pratiques et pourtant simples de C++ ont disparu dans Java15. Depuisquelquesannées,unlangagequis’imposedeplusenplusestlePython.La raison est qu’il est portable, puissant et facile d’accès. Cependant, il présente des inconvénients. Il est en constante évolution, non standardisé, et la compatibilité entre les versions n’est pas garantie16. De plus, les structures de données de Python, certes très utiles, cachent la complexité qu’il y a derrière du point de vue de la gestion mémoire, et il est important pour un ingénieur d’être conscient de ce qui se passe en coulisse. Encore une fois, répétons que le choix du langage n’est pas le plus important et que l’essentiel est d’apprendre à programmer.
Choix de l’environnement
Windows et Linux ont leurs partisans, souvent farouchement opposés, à tel point que certains n’admettent pas qu’il est possible d’être partisan des deux systèmes à la fois. Conscients des avantages et des inconvénients de chacun des deux systèmes, nous n’en prônons aucun en particulier17. Ceci dit, pour des raisons pédagogiques, nous pensons qu’un environnement de programmation intégré, c’est à dire un logiciel unique permettant de programmer, est préférable à l’utilisation de multiples logiciels(éditeur, compilateur, debuggeur, etc.). C’est vrai pour le programmeur confirmé, qui trouve en général dans cet environnement des outils puissants, mais c’est encore plus crucial pour le débutant. Un environnement de programmation, c’est : — Toutes les étapes de la programmation regroupées en un seul outil de façon cohérente. — Editer ses fichiers, les transformer en programme, passer en revue ses erreurs, détecter les bugs, parcourir la documentation, etc. tout cela avec un seul outil ergonomique. Différents environnements de développement peuvent être choisis. L’environnement de référence sous Windows est celui de Microsoft, Visual Studio, qui existe en version gratuite, Express. C’est probablement l’un des meilleurs logiciels issus de la firme de Redmond18. Sous Linux, conseillons KDevelop et sous Mac XCode. L’inconvénient est qu’ils n’ont pas par défaut les mêmes raccourcis clavier que Visual. Certains fonctionnent sous toutes les plates-formes (Linux, Windows, Mac), en particulier QtCreator. L’avantage de ce dernier est qu’il utilise par défaut les mêmes raccourcis clavier que Visual Studio, mais qu’il comprend en plus le format CMake (dont nous reparler son dans lesTP). Son interface est fortement inspirée de K DevelopetX Code. Comme pour le choix du langage, le choix de l’environnement n’est pas limitant et en connaître un permet de s’adapter facilement à n’importe quel autre. Le reste de ce poly est orienté vers QtCreator. Notons qu’il est facile d’installation sur toutes les plates-formes. Sous Windows et Mac, il vient avec les librairies Qt, dont de toutes facons nous avons besoin pour utiliser Imagine++, que nous utiliserons pour tout ce qui est interface graphique. De plus, sous Windows nous n’avons pas de
15. Les opérateurs par exemple. 16. Ainsi l’opération 3/4 donnera 0 en Python 2 (quotient de division euclidienne) et 0.75 en Java 3. 17. L’idéal est en fait d’avoir les deux « sous la main ». 18. Le seul utilisable, diront les mauvaises langues… compilateurC++pardéfaut ,mais en installant la version de QtpourMinGWon bénéficie justement du compilateur MinGW20. Un autre compilateur pour Windows est celui de Microsoft qui vient avec VisualStudio, qui est certes gratuit mais ne l’installez que si ça ne vous dérange pas de donner à Microsoft des informations personnelles qui ne le concernent en rien.
Principes et conseils
Au niveau auquel nous prétendons l’enseigner, la programmation ne requiert ni grande théorie, ni connaissances encyclopédiques. Les concepts utilisés sont rudimentaires mais c’est leur mise en oeuvre qui est délicate. S’il n’y avait qu’un seul conseil à donner, ce serait la règle des trois « P » : 1. Programmer 2. Programmer 3. Programmer La pratique est effectivement essentielle. C’est ce qui fait qu’un enfant a plus de facilités, puisqu’il a plus de temps. Ajoutons quand même quelques conseils de base : 1. S’amuser. C’est une évidence en matière de pédagogie. Mais c’est tellement facile dans le cas de la programmation, qu’il serait dommage de passer à côté! Au pire, si programmer n’est pas toujours une partie de plaisir pour tout le monde, il vaut mieux que le programme obtenu dans la douleur soit intéressant pour celui qui l’a fait! 2. Bricoler. Ce que nous voulons dire par là, c’est qu’il ne faut pas hésiter à tâtonner, tester, fouiller, faire, défaire, casser, etc. L’ordinateur est un outil expérimental. Mais sa programmation est elle aussi une activité expérimentale à la base. Même si le programmeur aguerri trouvera la bonne solution du premier jet, il est important pour le débutant d’apprendre à connaître le langage et l’outil de programmation en jouant avec eux. 3. Faire volontairement des erreurs. Provoquer les erreurs pendant la phase d’apprentissage pour mieux les connaître est le meilleur moyen de comprendre beaucoup de choses et aussi de repérer ces erreurs quand elles ne seront plus volontaires. 4. Rester (le) maître22 (de la machine et de son programme). Que programmer soit expérimental ne signifie pas pour autant qu’il faille faire n’importe quoi jusqu’à ce que ça marche plus ou moins. Il faut avancer progressivement, méthodiquement, en testant au fur et à mesure, sans laisser passer la moindre erreur ou imprécision.