Citation
niorf
j'ai une question, vous dites que le C n'est pas un bon langage pour commencer à apprendre à
programmer. Mais comment expliquer vous que c'est pourtant le premier langage enseigné en IUT,
Universitée, école d'ingé et que les langages type ML eux ne sont pas ou
tres peu enseignés ?
C'est une erreur de certains pédagogues. Surtout en grande école ou à l'Université, on devrait vous enseigner des
concepts qui vous servent toute votre vie professionnelle, pas le langage à la mode chez les industriels du moment (qui d'ailleurs sont souvent mal placés pour choisir un langage: l'industrie a rarement le temps d'une veille technologique, et suit l'habitude des autres). Si vous connaissez Ocaml & Prolog ou CommonLisp, vous apprendrez en quelques semaines PHP, Perl ou Java (mais l'inverse n'est pas vrai).
Cela étant, à Berkeley, à Stanford, à Polytechnique, à l'ENS Ulm, à l'ENS Cachan, à l'ENS Lyon, à Paris6 Jussieu, à Paris11 Orsay, et ailleurs, les langages fonctionnels (Ocaml, Haskell) sont très largement enseignés. En prépa en France, Caml-light semble bien plus enseigné que Pascal. Donc, dans un certain nombre d'établissements d'enseignement de qualité, la programmation fonctionnelle est effectivement enseignée.
D'ailleurs, le meilleur cours sur Ocaml est américain (Berkeley si j'ai bonne mémoire).
Il y a une vingtaine (ou peut-être 30) d'années, E.Dijkstra écrivait déjà que ceux qui enseignait Cobol étaient des criminels. L'objectif d'un enseignant, c'est d'apprendre à réflechir, pas d'apprendre un langage. Et il n'y a pas si longtemps, les programmeurs qui ne connaissait que le Cobol ont eu des difficultés d'emploi!
Quel que soit le language que vous utilisez (et c'est vrai pour Ocaml aussi) dans 5 ou 10 ans il sera obsolète. Ce qui est important, c'est votre capacité à apprendre de nouveaux langages. Donc, ca ne sert à rien de vous enseigner un language utile immédiatement!
On pourrait objecter que les IUT ne forment pas des ingénieurs, mais des techniciens... C'et un autre débat (différence entre ce qu'on appelle en France les cadres et les techniciens) et ça pourrait expliquer qu'ils apprennent C++ ou Java.
Mon métier actuel est de faire l'analyse statique de programmes C, donc de savoir formaliser sa sémantique (par exemple, pour aider à prouver la correction des programmes critiques embarqués de l'Airbus A380). Je peux vous assurer que celle-ci est assez obscure dans ses détails (voir par exemple le projet Concerto auquel participe Xavier Leroy et d'autres). Essayez par exemple d'écrire un compilateur C (ou un processeur XSLT) en Ocaml, c'est bien moins pénible que de l'écrire en C++.
J'ai été en fac d'informatique il y a presque 20 ans. Les langages que j'ai appris sont évidemment obsolètes (PL1, Fortran, Pascal, Modula, Lisp -même si ce dernier a remarquablement évolué en CommonLisp). Les concepts et algorithmes que j'ai appris me servent encore dans ma pratique quotidienne (les notions de lambda-calcul, de complexité, d'indécidabilité me servent bien plus souvent que le PL1 ou le Fortran).
Je vous souhaite donc d'apprendre d'abord des concepts. Pour apprendre un langage, vous aurez le temps durant votre pratique professionnelle. Et quel que soit le formalisme ou le(s) langage(s) que vous apprenez, il sera
obsolète bien avant la fin de votre vie professionnelle. En résumé, l'une des principales qualités de l'ingénieur, c'est de savoir vite apprendre (sur le terrain).
Dans la pratique industrielle, le plus important sur un langage, c'est les bibliothèques disponibles; celles ci sont encore moins pérennes que les langages, et ce n'est pas la peine de les enseigner de manière approfondie en formation initiale!
N'attendez pas d'une formation initiale qu'elle vous apprenne le langage qui 5 ans plus tard sera obsolète, exigez de votre formation initiale qu'elle vous enseigne des concepts qui vous suiveront toute votre vie!
Un excellent langage pour débuter la programmation est évidemment Scheme. Il ne sert à rien dans la vrai vie professionnelle, mais les concepts du fameux SICP [
en.wikipedia.org] (un classique de la littérature) sont irremplaçables. De même, les algorithmes décrits dans les livres de Knuth (ou même Wirth) sont plus importants que les langages dans lesquels ils sont écrits.
Ce que je veux dire, c'est qu'on devrait enseigner
plusieurs languages pour les concepts qu'ils vous donnent, pas pour l'usage immédiat après l'école. J'ai eu la chance d'avoir ce genre d'enseignement, et ça me sert encore. Je plains beaucoup ceux qui ne voient qu'un seul langage (C++, Java, ...). De même, une formation en logique ou en math est plus utile (car plus pérènne) qu'une formation à XHTML2, et elle vous servira toute la vie!
Il y a une tendance triste actuelle à vouloir former des exécutants (qu'on licenciera sans ménagement dans quelques années, quand leur savoir pratique sera obsolète), et pas des citoyens autonomes et responsables... L'intérêt immédiat du patronat (main d'oeuvre corvéable, immédiatement operationnelle, jetable comme un kleenex) est distinct de l'intérêt à long terme des citoyens (capacité d'apprendre et de s'adapter à un monde qui change...)..
D'ailleurs, la difficulté de C n'est pas de connaitre bien le langage (personne ne connait le sens exact de
i *= 2.3 avec
int i -la multiplication est-elle entière ou flottante?) c'est de savoir bâtir un logiciel en C qui soit maintenable. Ce n'est pas une question de connaitre la syntaxe ou la sémantique détaillée du C.
Dans le labo où je travaille, il y a une vingtaine de personnes, et une bonne douzaine est en train de suivre, cette semaine même, une formation Ocaml, donc il y des gens qui en ont besoin.
Bien sûr, l'ingénieur en éléctronique ou en acoustique qui a ponctuellement besoin de développer un petit système embarqué codera en C (mais il l'apprendra bien plus vite s'il a appris Scheme, Prolog ou Caml à l'école!).
Je dois avouer d'ailleurs que je prefère MétaOcaml à Ocaml, et qu'il m'arrivera encore de coder en C.
Je suis sûr que le langage dans lequel je coderais dans 15 ans n'est pas encore né.
----
Basile STARYNKEVITCH
Membre de l'
APRIL « promouvoir et défendre le logiciel libre » - adhérez vous aussi à l'APRIL!
Projet logiciel libre:
RefPerSys