C, Python & Ocaml ou les plaisirs simples de la vie
Un billet en trois parties qui aborde en premier lieu trois beaux langages de programmation bien différents et se ressemblant sur certains points. Ils réunissent expressivité et performance, style impératif et fonctionnel, typage dynamique (mais pas faible) et fort.
Je trouve qu’il est plutôt drôle de les comparer. Python semble sur certains points se situer entre le C et Objective Caml. Enfin c’est mon avis et ce que je constate parfois.
Pour Guido Van Rossum, Python devait être entre un language de script (interprété comme Shell) et le C (compilé) et ainsi tenter de réunir expressivité et performances avec des structures de données évoluées (dictionnaires, tuples, listes, etc.).
Python est donc un language impératif héritant de l’éducation de Guido Van Rossum et sur ce point est proche de C. Cependant il a un typage dynamique fortement typé (inutile de définir de manière explicite le type d’une variable, mais une fois fixé le type a souvent de limportance). Au contraire le C a un typage très fort.
Cependant des fonctions comme map ou les listes en compréhensions lui donne quelques traits de languages fonctionnels, comme OCaml (preuve que Guido a l’esprit ouvert). Biensûr sur ce point il narrive pas à la cheville dOCaml et c’est normal.
Ce qui est vraiment génial avec Python, c’est la liberté et l’expressivité du langage. Ce qui fait qu’on peut faire facilement à peu près ce que l’on souhaite. Voici par exemple deux petites comparaisons:
- Ocaml et Python
Sans être vraiment un langage fonctionnel Python de par son expressivité définit cette fonction dincrémentation quasiment aussi simplement que OCaml. Grâce au listes en compréhension il peut même faire mieux parfois; - C et Python
En le comparant à C on comprend de suite lavante du typage dynamique (qui peut être dangereux), mais il sera parfois moins performant pour des calculs plus complexes (par exemple en cryptographie ou pour traiter des longues chaînes de caractères). Voici encore un excellent exemple.
Il y a donc évidemment plusieurs styles pour écrire du Python. Un(e) Pythonien(ne) reconnaîtra le bon.
Lorsque l’on sait un petit peu développer on sent facilement quel langage est le plus adapté dans une situation. Hormis pour des raisons de performances je n’utiliserai plus le C pour calculer un PGCD, Fibonacci ou encore jouer avec une liste mais plutôt Ocaml. Je le faisais avant, je n’en ai plus besoin. Par dessus OCaml pour les listes je préfère de loin Python, parfois aussi pour des fonctions mathématiques. Pour des traitements sur des fichiers, chaînes de caractères, le C. Bref, mes trois langages favoris qui permettent de tout faire très bien.
La première partie très plaisante de ce billet se termine sur cette question: De votre côté, comment situez vous C, Python et OCaml?
Maintenant parlons du développeur de lextrême (celui qui aime les lignes de code). Typiquement:
- il aime écrire une classe en Java juste pour une fonction mathématique (exemple: incrémenter un nombre ou mise à la puissance avec gestion avancée des paramètres dans le build.xml dEclipse);
- il écrit une classe en Java pour lire un fichier texte ou ouvrir une socket;
- sil tente de coder un petit morceau (par exemple factorielle) en OCaml, il utilisera une boucle for.
Très souvent ce malheureux Windowsien(ne) dégainera Eclipse pour générer automatiquement un tas de morceaux de codes inutiles. Ce n’est pas forcément un mauvais développeur, il est peut être juste simplement passé à côté de la programmation. Ce sera parfois la faute de lécole, souvent celle du monde de l’entreprise. Pour guérir c’est facile, il suffit de découvrir Python, Perl ou Ocaml. Attention toutefois, OCaml peut provoquer un choc assez violent chez un développeur Java de longue date.
Généralement les systèmes type GNU/Linux vous feront naturellement utiliser Python, Perl et C. OCaml ça sera par pur plaisir.
Pour finir passons à une autre catégorie de développeur, le fanatique. On remarquera que cette personne utilisera entre autres Python pour tout et n’importe quoi sans même savoir si Python est bon pour cela. Par exemple pour:
- faire du traitement sur des listes;
- faire de la programmation Web (1, 2, 3 ou encore 4);
- faire de la cryptographie et jouer avec de grands nombres;
- écrire des scripts afin dautomatiser des tâches système;
- divers problèmes scientifiques (hadoop, mapreduce, factorisation de matrices, numpy, etc.)
- prototyper des interfaces ou développer carrément un jeu;
- prendre l’apéro.
Ah zut, je crois qu’il y a un problème avec la liste. Vous pouvez chercher pour moi?
Certains au lieu de Python choisirons Perl. D’autres Java. Mais ces derniers, ont-ils vraiment choisi?
Encore une question: Y a-t-il un ordre dapprentissage (au moins pour ces trois langages)?