Salut à tous !
La question revient souvent : quel langage choisir pour débuter ? Difficile de répondre dans l'absolu, car tout dépend de l'objectif de chacun. Voici toutefois un petit guide des langages de programmations les plus répandues, ainsi que deux ou trois moins connus, mais qui, à mon avis mérite le détour. J'essaye de présenter les qualités et domaines d'applications de chacun, ainsi que, autant que possible, une bibliographie adaptée à leur découverte. Le choix des livres s'est fait en fonction de leur aspect pédagogique, respect des normes, la facilité à les trouver en bibliothèques et librairies et leur accessibilité au niveau baccalauréat. J'ai tenté d'être aussi juste que possible avec chaque langage, mais il est évident que cette présentation reste influencée par mes choix personnels.
Les bases
La première chose à savoir, c'est qu'il n'y a pas de langage parfait, qui permet de tout faire. Il faut donc choisir le langage en fonction de ses qualités, mais aussi de ses défauts et surtout de ce que l'on compte faire. Donc, la première chose, c'est de bien évaluer ton besoin.
D'autre part, l'essentiel, en programmation, c'est l'algorithmique. Je conseille donc cet ouvrage :
Introduction à l'algorithmique
Thomas H. CORMEN, Charles E. LEISERSON, Ronald L. RIVEST et Clifford STEIN
Dunod
Le bouquin est énorme, mais il n'est pas besoin de le lire d'un coup. Par contre, il vous suivra dans toute votre vie de programmeur, depuis les premiers pas jusqu'à la pratique avancée. De plus, vous pourrez en tirer profit quel que soit le langage que vous utiliserez. D'ailleurs, globalement, je conseille le format livre pour tout ce qui est documentation, bien plus facile à utiliser et à consulter lorsque l'on est en situation d'effectivement coder.
Ce site est intéressant au niveau de l'algorithmique :
http://www.france-ioi.org/train/algo/index.php
Également, si vous optez pour un langage orienté objet, dans un deuxième temps ce sera une bonne idée de se mettre à la modélisation, par exemple UML. Cet ouvrage permet une bonne introduction (les langages utilisés dans les exemples sont C# et Java) :
UML 2 par la pratique
Pascal ROQUES
Éditions Eyrolles
La modélisation Merise est très appropriée lorsque l'on a recours à des bases de données :
Comprendre Merise
Jean-Patrick MATHERON
Éditions Eyrolles
Enfin, de nombreux langages ont recours aux expressions rationnelles :
Introduction aux expressions régulières
Bernard DESGRAUPES
Éditions Vuibert
Je vais maintenant essayer de faire un rapide tour d'horizon des langages qui me semblent les plus intéressants pour les débutants.
Pour une première initiation : les scripts Bash
Pour commencer, s'initier à la programmation
via les scripts Bash est un bon moyen de découvrir ce qu'il est possible de faire et de maîtriser Linux :
Scripts sous Linux
Christophe BLAESS
Éditions Eyrolles
Sur le Internet :
http://www.siteduzero.com/tutoriel-3-12827-reprenez-le-controle-avec-linux.html#part_88347
Un langage généraliste : Java
Un langage généraliste, très bien adapté au web et pur objet – paradigme de programmation le plus répandu à l'heure actuelle. Par contre, il n'est à utiliser que dans les cas où le temps d'exécution n'est pas critique (encore que sa lenteur soit trop souvent exagérée) : Java. Simple à apprendre, propre, c'est en général un bon choix. Si vous optez pour ce langage (ou tout autre langage orienté objet), je conseille d'apprendre la modélisation UML, toutefois je pense qu'il vaut mieux avoir un peu touché le langage avant de se lancer dans l'UML, afin que les concepts ne soient pas trop abstraits. Il y a de nombreux ouvrages de qualités dédiés à l'apprentissage de Java. Un exemple :
Programmer en Java
Claude DELANNOY
Éditions Eyrolles
Un tutoriel en ligne :
http://jmdoudoux.developpez.com/cours/developpons/java/
Pour découvrir la programmation avec une bonne rigueur : OCaml
Dans la série des langages généralistes, un autre, qui a l'avantage de permettre d'opter aussi bien une approche impérative que fonctionnelle (et même de permettre de mêler les deux approches), supporte l'objet, autorise d'excellentes performances (équivalentes à C) et qui est extrêmement robuste – plus encore qu'Ada, pour les connaisseurs –, tout en permettant une énorme productivité : Objective CaML. Son inconvénient est qu'il est très peu utilisé dans les projets réels (ce qui est bien dommage), de sorte que c'est surtout un excellent choix pour l'apprentissage. Un très bon ouvrage pour apprendre à programmer en Objective CaML :
Développement d'applications avec Objective Caml
Émmanuel CHAILLOUX, Pascal MANOURY et Bruno PAGANO
O'Reilly
Ce livre est disponible sur Internet :
http://www.pps.jussieu.fr/Livres/ora/DA-OCAML/
Si vous optez pour ce langage, envisagez l'apprentissage d'UML à moyen terme.
Pour ceux qui ont un esprit mathématique : Haskell
Pour la programmation scientifique, dans la mesure où il n'y a pas de calcul trop intensif, mais également à mon sens un très bon moyen d'apprendre la programmation de manière propre sans risquer de prendre de mauvaises habitudes et sans trop se prendre la tête (en plus le langage permet une très bonne productivité) : Haskell, principalement langage fonctionnel, mais avec une partie objet. Différents ouvrages sont parus, généralement de bonne qualité. Un exemple :
http://gorgonite.developpez.com/livres/traductions/haskell/gentle-haskell/
Pour ceux qui maîtrise l'anglais :
Real World Haskell
Bryan O'SULLIVAN, John GOERZEN et Don STEWART
Éditions O'Reilly
Ce livre est disponible en ligne :
http://book.realworldhaskell.org/read/
Lisp, l'ancêtre à la vie dure
Dans la série des langages fonctionnels, citons Lisp et ses nombreux dialectes (tel que Scheme). Emacs est programmer en Lisp et lui sert de langage d’extension – l’équivalent des macro-commandes, mais avec une approche permettant plus de possibilités et de flexibilités :
Premier cours de programmation en Scheme
Jean-Paul ROY
Ellipses
Il existe un cours disponible sur Internet :
http://www.algo.be/logo1/lisp/prog.html
Pour les amateurs d'exotisme et les logiciens : Prolog
Pour ceux qui veulent s'orienter vers l'intelligence artificiel, quoique le paradigme de programmation est un peu particulier (programmation logique) : Prolog. Un exemple d'ouvrage :
L'Art de Prolog
Leon STERLING et Ehud SHAPIRO
Masson
En ligne :
http://pcaboche.developpez.com/article/prolog/presentation/
PHP, le couteau-suisse du web
Pour le web, PHP (en général couplé à MySQL) est un très bon choix. Simple, facile à apprendre, disposant d'une bibliographie abondante et permettant d'être très vite opérationnel. Par contre, il est totalement spécialisé dans le web et ne permet que de coder des sites dynamiques :
Les Cahiers du programmeur – PHP 5
Stéphane MARIEL
Éditions Eyrolles
Sur Internet :
http://g-rossolini.developpez.com/tutoriels/php/cours/
Pour des sites dynamique : Javascript
Toujours dédié au Web, Javascript permet de concevoir des sites dynamiques. Là où PHP s'exécute côté serveur, Javscript s'exécute côté client, ils sont donc complémentaires plus que concurrent. Cela dit, méfiez-vous du nom, car il ne s'agit pas du même langage :
JavaScript – L'essentiel du code et des commandes
Christian WENZ
Campus Press
En ligne :
http://javascript.developpez.com/cours/
Le champion des automates vite-fait-bien-fait : Perl
Un très bon langage pour la création d'automates et le traitement des chaînes de caractère : Perl. Il est très apprécié des administrateurs système. Par contre, sa syntaxe peut parfois être obscure. Il dispose lui aussi d'une bonne bibliographie. Par exemple :
Perl pour l'impatient
Sébastien DESREUX et Stéphane TOUGARD
H et K Editions
Ainsi que l'incontournable :
Programmation en Perl
Larry WALL, Tom CHRISTIANSEN, Jon ORWANT
Éditions O'Reilly
Larry WALL est le créateur de Perl.
Un tutoriel intéressant :
http://lhullier.developpez.com/tutoriels/perl/intro/
Un langage de script très versatile : Python
Dans à peu près le même domaine que Perl, mais avec peut-être une syntaxe plus claire : Python. C'est un bon choix pour apprendre la programmation, à peine plus compliqué que Basic, mais bien plus propre et avec plus de possibilités. De plus, il supporte de nombreux paradigmes, parmi lesquels la programmation par objet et la programmation fonctionnelle. C'est le principal langage utilisé par les développeurs d'Ubuntu. Ce livre n'est pas mal :
Python : Petit guide à l'usage du développeur agile
Tarek ZIADÉ
Dunod
En ligne :
http://www.swaroopch.com/notes/Python_fr:Table_des_Matières
Spirzouf en a fait une version PDF (non mise à jour), disponible à cette adresse :
http://www.megaupload.com/?d=ALRACFAX
Si jamais ce livre vous est utile, aidez l'auteur : pensez à faire un don.
Pour des scripts rédigés avec une approche objet : Ruby
Toujours dans le même domaine, quoiqu'un peu moins répandu, Ruby repose sur l'approche orientée objet :
Ruby - Les fondamentaux du langage - Mise en oeuvre avec Ruby on Rails
Alexandre BRILLANT
Éditions ENI
Vous pouvez aussi consulter ce tutoriel :
http://pbnaigeon.developpez.com/tutoriel/ruby/premiers-pas-avec-ruby/
Le champion de la programmation système, à déconseiller au débutant : C
Pour la programmation système, le langage de référence est C. Ce n'est pas un langage difficile à apprendre contrairement aux idées reçues, par contre il est impératif, procédural et structuré – il est possible d'adopter une approche objet, mais elle ne fait pas vraiment partie du langage –, ce qui signifie qu'il est facile de faire des choses assez peu propres (voir vraiment n'importe quoi) et donc difficile à maintenir, souvent inefficace et comportant des bogues étranges. De plus, la gestion des pointeurs et plus généralement de la mémoire peu vite devenir un casse-tête inextricable. C'est le langage utilisé pour le codage du noyau Linux, entre autre. De nombreux ouvrages de qualités disponibles, je conseille celui-ci :
Méthodologie de la programmation en C
BRAQUELAIRE
Dunod
En complément :
Maîtrise des algorithmes en C
Kyle LOUDON
O'Reilly
Disponible sur Internet :
http://c.developpez.com/cours/poly-c/
Autant que possible, je conseille de ne pas commencer la programmation avec C.
Un langage puissant et généraliste, mais difficile à apprendre et à utiliser : C++
Enfin, un langage extrêmement versatile et généraliste, qui permet aussi bien la programmation scientifique, le calcul intensif, le temps réel, la programmation système, que toutes sortes d'applications. Les principaux paradigmes supportés sont la programmation impérative, la programmation structurée, la programmation procédurale, la programmation orientée objet, la programmation orientée prototypes et la programmation orientée composants. De plus, les extensions du langage (principalement la bibliothèque standard et la bibliothèque Boost) lui permettent de supporter d'autres paradigmes. Si vous optez pour ce langage, il sera bon, également, de vous mettre à UML une fois les bases maîtrisées, ainsi que d'apprendre à utiliser la bibliothèque Boost. Par contre, contrairement aux autres langages proposés, c'est un langage difficile, tant au niveau de l'apprentissage qu'au niveau de son utilisation. De plus, il est extrêmement souvent mal utilisé et mal enseigné. Attention donc à la littérature sur son sujet : trop souvent, elle propose d'apprendre du C un peu étendu compilé par un compilateur C++ (une aberration), avec gestion des pointeurs à la C (n'importe quoi), utilisation de la bibliothèque standard C en lieux et place de la bibliothèque standard C++ – qui est pourtant bien plus versatile et très efficace si on sait l'utiliser proprement. Bjarne STROUSTRUP, le créateur du langage, a écrit un livre destiné à l'apprentissage de C++, disponible en français :
Programmation, Principes et pratique avec C++
Bjarne STROUSTRUP
Pearson Education
Il a aussi écrit un livre de référence sur ce langage (un peu rébarbatif) :
Le langage C++
Bjarne STROUSTRUP
Pearson Education.
C++ est un excellent choix pour un projet réel – par exemple, je l'utilise dans la programmation d'un modèle d'océan –, mais je le déconseille pour l'apprentissage de la programmation (même si je connais des gens qui n'ont jamais utilisé que ce langage). Je conseille également d'apprendre C++ avant C, pour éviter une contamination mal venue.
De toute façon, méfiez-vous des tutoriels C++ disponibles sur le net : ils sont généralement très mauvais.
Et pour aller plus loin
Une fois découvert l'algorithmique, la programmation et la modélisation si vous optez pour l'approche par objets, je voudrais vous donner quelques pistes pour aller plus loin.
Tout d'abord, tous les problèmes n'ont pas forcément de solution informatique. La calculabilité est l'étude qui permet d'identifier de tels problèmes :
Introduction à la calculabilité
Pierre WOLPER
Dunod
Connaître le fonctionnement d'un compilateur permet de mieux maîtriser cet outil :
Compilateurs
Dick GRUNE, Henri E. BAL, Ceriel J. H. JACOBS et Koen G. Langendoen
Dunod
Si vous vous orientez vers la programmation système, il est préférable d'avoir une idée du fonctionnement d'un ordinateur et d'un système d'exploitation :
Architecture de l'ordinateur
Andrew TANENBAUM
Dunod
Systèmes d'exploitation
Andrew TANENBAUM
Pearson Éducation
Enfin, le développement des réseaux a provoqué l'essor de la programmation parallèle :
Algorithmique parallèle
Arnaud LEGRAND et Yves ROBERT
Dunod
Cet ouvrage est peut-être un peu difficile d'accès au niveau baccalauréat.
Réseaux
Andrew TANENBAUM
Pearson Éducation
Voilà, j'espère que cela donne quelques éléments pour faire un choix.
À bientôt.
[right]Le Farfadet Spatial[/right]