26 août 2016

Choisir son langage de programmation

Design & Code

Philippe

Boulanger

Image ordinateur, code, livre et lunettes.

26 août 2016

Choisir son langage de programmation

Design & Code

Philippe

Boulanger

Image ordinateur, code, livre et lunettes.

26 août 2016

Choisir son langage de programmation

Design & Code

Philippe

Boulanger

Image ordinateur, code, livre et lunettes.

Un langage de programmation est un outil permettant de transformer un concept en un programme qui s’exécutera sur un ordinateur. Il existe beaucoup de langages de programmation et de nouveaux sont créés régulièrement. Comment choisir celui qui correspond à son besoin ? Quelles contraintes seront les conséquences de ce choix ? Que l’on soit un jeune développeur qui souhaite s’investir sur une technologie ayant un avenir ou un architecte/directeur de projet qui souhaite faire le bon choix technique (le langage le plus intéressant efficacité/coût) ou humain (un langage ayant une plus grande communauté de développeurs afin de faciliter les recrutements), le choix d’un langage est souvent important et engage pour une longue période (dans les banques des logiciels ayant 20 à 30 ans ne sont pas des cas isolés)..

A-t-on des contraintes ?

La première question à se poser est : a-t-on des contraintes techniques ou fonctionnelles ? En effet, répondre à une contrainte peut limiter les solutions techniques disponibles. Je vais vous en présenter quelques-unes :
• Je souhaite créer une application plug-in dans le logiciel FreeCAD (https://www.freecad.org/). FreeCAD est écrit en C++ et fournit soit des APIs C++ soit du scripting en Python. Et donc pour faire mon application je me retrouve limité sur mes choix...
• Dans le milieu de la finance, nous sommes bien souvent liés à des progiciels financiers ou à des choix d’entreprise (base de données, data lake, etc.). Les progiciels sont souvent couplés à des langages (Orchestrade à C#, Summit à C/C++ pour le core et C# pour le GUI par exemple)
• La contrainte peut être liée à des performances attendues.
Dans le cas du trading à haute fréquence, on cherche à économiser les nanosecondes ce qui force le choix à des langages très efficaces comme le C++ ou le C...
• La contrainte peut être le choix d’un métier : dans quel domaine ai-je envie de travailler ? Lequel me garantira le plus de travail dans l’avenir, etc. ?
• etc.


Il est donc nécessaire de faire la liste de ses objectifs, quelles sont nos contraintes et qu’est ce que l’on souhaite éviter ?

De quels langages parle-t-on ?

Il existe de très nombreux langages dans la nature. Nous allons faire une liste (non exhaustive) des principaux langages parmi les plus utilisés. Et pour chaque langage, nous rajouterons un petit exemple de code afin que le lecteur se fasse une idée de sa syntaxe.

FORTRAN (1957)

Le premier langage commercial dont le nom est la contraction de « FORmula TRANslating ». C’est le langage utilisé pour le calcul intensif et c’est un des langages ayant la plus grande base de code scientifique installée. Basé, à l’origine, uniquement sur le paradigme impératif structuré, il a évolué au cours du temps pour supporter le paradigme objet. Son gros point faible est lié aux outils d’entrées/sorties : nombre de projets avaient des IO écrites en C. Voici un exemple de programme écrit dans ce langage.

C (1969)

Inventé pour développer le système UNIX, c’est un langage de bas niveau permettant de créer des applications très efficaces. On le retrouve dans le cœur de la majorité des systèmes d’exploitation et dans les systèmes embarqués. Il supporte deux paradigmes de programmation : impératif structuré et fonctionnel. Certains choix dans la définition des pointeurs et dans la gestion mémoire nécessitent, de la part des développeurs, une très grande rigueur. Les coûts de maintenance des applications anciennes ont tendance à augmenter
avec le temps...

Pascal/Delphi (1970)

Conçu pour enseigner l’informatique, il a longtemps été le langage de l’éducation nationale française. Mais, malheureusement selon moi, il n’a jamais réussi à percer dans l’industrie : contrairement au C un pointeur sur un entier n’est pas du même type qu’un pointeur sur un tableau d’entiers. Il a été popularisé par la société Borland en 1983 grâce à Turbo Pascal (après la programmation en Basic je suis passé au Turbo Pascal 3 dans ma jeunesse). Il existe cependant des logiciels de comptabilité écrits en Delphi (est le successeur de Turbo Pascal)...

SQL (1974)

Le langage des bases de données relationnelles est utilisé dans chaque téléphone, dans chaque banque. Le langage normé est un langage de requêtes, mais ses variantes propriétaires (comme le PL/SQL d’Oracle) proposent des fonctionnalités qui en font des langages exécutés côté bases de données. Beaucoup d’applications, écrites en C++ par exemple, exécutent des requêtes SQL ou des procédures stockées pour lire/écrire les données dans le référentiel. Voici un exemple de fonction écrite en PL/SQL :

Ada (1980)

Conçu pour le département de la défense américaine, c’est un langage très exigeant, mais qui permet de créer du code efficace et sécurisé. Il est employé dans l’aéronautique, dans le monde des transports ou dans des applications temps réels. Écrire un programme qui compile peut paraître un peu long, car le compilateur ne laisse rien passer : globalement les seules erreurs qui restent sont les erreurs d’algorithmes.
Par contre c’est un langage verbeux :

Objective C (1983)

C’est une extension du C ANSI qui est un langage orienté objet réflexif et qui a longtemps été le langage phare pour développer des applications sur Mac OS X ou sur iPhone. Il n’est détrôné que depuis peu par Swift.

Matlab (1984)

Langage émulé dédié aux algorithmes mathématiques. Il est
utilisé entre autres choses pour le traitement du signal.
Traders et quants s’en servent aussi pour effectuer des calculs
financiers. Aujourd’hui, il y a de nombreux projets de migra-
tion Matlab vers Python.

C++ (1984)

Créé par Bjarne Stroustrup c’est le langage qui a été adopté par les entreprises pendant la période allant des années 80 à 2000... On retrouve C++ dans la plupart des clients lourds comme Excel et Word ou dans les applications bancaires nécessitant de grosses performances. L’OS BeOS était écrit en C++. Tout comme le C dont il hérite, C++ nécessite une grande rigueur. Nombre d’applications développées depuis plus de 15 ans existent dans les banques et l’industrie et très peu d’écoles forment les élèves à ce langage : il y a donc une
pénurie de ressources.

Perl (1987)

Créé pour manipuler des fichiers textes, il est basé sur les langages C et awk ainsi que sur les outils grep, sed, cut, test et expr. Très utilisé par les ingénieurs système Unix pour générer des rapports à partir de logs ou pour faire du déploiement. Sa syntaxe complexe est peu lisible surtout que celui-ci contient beaucoup d’astuces comme des variables cachées en entrée et sortie de fonctions. Il est, de plus en plus, délaissé au profit de python. Mais on trouve encore beaucoup de scripts dans les banques, par exemple, ou en data science.

Python (1991)

Peu connu à ses débuts, il se taille la part du lion depuis 2014. C’est le langage du Big Data et de la Data Science. Sa syntaxe simple et lisible en fait un très bon langage pour l’apprentissage de la programmation : il a d’ailleurs été retenu par l’éducation nationale française pour l’enseignement de l’algorithme dès la classe de seconde. C’est le langage le mieux documenté sur internet, il dispose d’une communauté importante et d’un écosystème très complet. C’est le couteau suisse de l’informaticien.

Virtual Basic (1991)

Microsoft l’a créé en le basant sur son modèle COM et sur le langage BASIC. Il permet le développement rapide d’applications. Facile à apprendre et facile à utiliser, il a beaucoup été utilisé par des non-développeurs (des personnes ayant un autre métier : assureur, trader, etc.) pour faire des démonstrateurs ou des logiciels internes... Une version. Net est maintenue.

Virtual Basic for Application (1993)

Langage de macro dans la suite Office de Microsoft, il a, peu à peu, été intégré dans d’autres softwares. Nombre de programmes tournent dans des pages Excel au sein des banques et n’oublions pas certains technico-commerciaux qui vous vendent du rêve via des « slidewares » : des démos dans des vignettes PowerPoint à grand renfort de macros... Voici un exemple de fonction VBA dans Excel :

Lua (1993)

C’est moteur de scripts conçus pour être facilement embarqués dans des applications C/C++... Bien que disposant de moins de bibliothèques que Python, il a fini par s’imposer dans les moteurs de jeux vidéo le développement réseau ou l’embarquer notamment. LuaJIT est une variante incluant un compilateur à la volée donnant au moteur Lua des performances proches du C.

R (août 1994)

Dédié aux statistiques et à la science des données, ce langage a connu un regain d’intérêt avec le crise du covid. Mais il est en concurrence avec Python qui dispose d’un écosystème plus riche et qui bénéficie de meilleures performances.

PHP (1994)

Ce langage a été démocratisé au sein des architectures LAMP (Linux, Apache, MySql & PHP) qui ont servi à bâtir les applications web dynamiques. Facebook en fait un grand usage et a travaillé à l’écriture d’un compilateur. La syntaxe est un mix entre C et perl...

Ruby (1995)

Langage associé au framework Ruby On Rails il a eu un bon succès jusqu’en 2008, mais est en érosion lente depuis si l’on en croit l’index Tiobe ou PyPL.

Java (1995)

Ce langage est très populaire depuis 1995. SUN a beaucoup investi dans l’organisation d’événements avec des évangélisateurs afin de le faire connaître ; et l’aide de Netscape en l’intégrant dans son navigateur a permis la naissance du web dynamique grâce aux applets. Le ramasse-miette intégré lui permet d’être plus accessible aux débutants que C++. Son écosystème est l’un des, si ce n’est le plus, riche de tous les langages. Appartenant désormais à la société Oracle qui a « rationalisé » son développement, les utilisateurs professionnels commencent à le remplacer.

JavaScript (1996)

Un des langages emblématiques du web dynamique avec PHP. Un des plus utilisés pour faire des interfaces utilisateurs dans les applications web. Il a bien évolué jusqu’à intégrer un compilateur Just-In-Time... C’est un langage au typage dynamique qui déchaîne les passions comme Python...

C# (2002)

C# est la réponse de Microsoft à Sun suite aux procès liés à Java. C# est un langage bâti autour de la plateforme. Net, il est un compromis entre C++ et Java : il reprend le meilleur des deux langages. Il est notamment utilisé dans les banques. Comme exemple, je pourrais citer le projet CrossOne (de la Société Générale) ou le progiciel financier Orchestrade qui ont été créés en C#.

Scala (2004)

Scala est un langage fonctionnel et orienté objet conçu pour fonctionner initialement dans la JVM. Il a été utilisé pour développer Spark et Kafka utilisé dans le domaine du Big Data.
Scala a depuis été porté dans la LLVM du MIT. Il donne du code plus compact que Java, mais est plus difficile à apprendre.

Go (novembre 2009)

Inspiré du C et du Pascal, c’est un langage concurrent développé par Google. La concurrence est basée sur un système analogue aux coroutines et sur une synchronisation par passage de messages qui est plus intuitive que celle basée sur le modèle multi-threadé synchronisé par des sémaphores ou des mutex. Il a de bonnes qualités pour la programmation réseau.

Julia (août 2009)

Julia est un langage de programmation dédié au calcul scientifique, avec une syntaxe qui se veut familière pour les utilisateurs d’autres environnements comme Matlab, R, Scilab, Python, etc. Il fournit :
• un compilateur
• du typage dynamique
• du polymorphisme
• une exécution parallèle distribuée
des appels directs de fonctions C, Fortran et Python.
Voici un exemple de code Julia :

Rust (juillet 2010)

Créé par la fondation Mozilla pour être fiable, concurrent et pratique, c’est un bon remplaçant pour le langage C pour l’embarqué ou la programmation système. Récemment accepté par Linus Torvald pour le développement de Linux : c’est un langage à surveiller.

Kotlin (juillet 2011)

Créé par Jetbrains et adoubé récemment par Google, il est devenu un langage pour le développement Android. Il permet de compiler aussi bien dans la JVM que dans le moteur JavaScript.

TypeScript (février 2012)

Langage inventé par Microsoft pour augmenter la production de code et la sécurité en JavaScript. Il transcompile en JavaScript lui permettant d’être interprété par n’importe quel navigateur web ou moteur JavaScript.

Swift (2014)

C’est le langage qu’Apple a créé pour remplacer Objective C.
Il est utilisé pour faire des applications sur iPhone ou Mac : c’est la seule plateforme où il est réellement répandu.

Définir des critères

Choisir une technologie pour un nouveau projet ou comme choix d’avenir pour son métier n’est pas chose facile. La première difficulté est de définir des critères objectifs et, si possible, mesurables. Trop souvent on entend les développeurs vanter les mérites de leur langage de prédilection ou descendre en flèche le(s) langage(s) détesté(s), mais sans recul sur aucune des technologies citées ni informations vérifiées et/ou vérifiables... Et, grand jamais, je n’ai dit que Python et C/C++ étaient les meilleurs langages et que Java ne servait à rien.

Le domaine de développement

Si l’on souhaite travailler dans un domaine précis ou sur des problématiques précises, certains langages vont s’imposer d’eux-mêmes.

Calcul scientifique

C’est un domaine de niche (il y a peu d’emplois disponibles), mais qui est très exigeant et très riche en termes de technologies. C’est ce domaine qui fut le point de départ de l’informatique moderne: décrypter les messages codés de l’Allemagne nazie... Les langages phares sont :
Fortran : probablement le langage ayant la base de code installée la plus importante. Il y a tellement de codes que les réécrire coûterait trop cher. Fortran 90 a ajouté la vectorisation dans sa syntaxe et le langage continu d’évoluer.
C++ + OpenMP : on le retrouve dans les programmes n’ayant pas à assumer un historique. OpenMP est une
extension du compilateur qui permet de paralléliser les boucles. MPI peut aussi être utilisé pour faire de la programmation distribuée.
• Python + numpy + scipy : connaît un essor important depuis 2014 et l’arrivée des clouds. Numpy et scipy sont deux bibliothèques dédiées aux calculs et ayant des versions optimisées par Intel. On le retrouve notamment dans les calculs financiers dans les organismes bancaires, dans le domaine de la recherche. Pour les statistiques, on peut rajouter la librairie pandas.
Julia : dernier arrivé dans le monde du calcul, ce langage est un outsider proposant une syntaxe simple, moderne et adapté aux enjeux de la vectorisation et parallélisation. Il est basé sur la LLVM pour être portable.

Programmation OS

C’est toujours un sujet d’actualité, les ordinateurs sont omniprésents dans nos vies (téléphones portables, box internet, ordinateurs, etc.) ; il y a donc des OS partout faisant souvent partie d’une lignée (Unix, BSD, Linux et Windows pour les plus connus, mais il y en a d’autres comme RTOS par exemple). Tous les OS d’aujourd’hui ont une partie core écrite en C et éventuellement en assembleur. Les langages les plus courants sont :
C : c’est le langage le plus utilisé pour cette tâche
Assembleur : chaque processeur a un assembleur qui lui est propre rendant complexe les évolutions. D’autant plus que les nouveaux processeurs ont nombres d’unités travaillant en parallèle : écrire du code optimisé n’est pas au niveau de tout le monde. Il est donc réservé à des fonctions très précises.
• C++ : BeOS a été écrit avec des API en C++. Moins performant que le C et plus gourmand en ressources, il n’est pas le mieux représenté des langages dans cette catégorie.
rust : conçu pour être un concurrent à C/C++, il a été autorisé pour le développement dans le noyau Linux et
Google compte s’en servir pour améliorer la sécurité du noyau d’Android.
go : le langage de google a de bonnes qualités pour développer des outils autour des OS

Programmation embarquée

Nous faisons un usage de plus en plus important d’objets connectés ou embarqués : drones, montres connectées, imprimantes, thermomix, TV connectée, etc. Travaillant sur des processeurs aux faibles performances, la gestion de la mémoire et des performances est souvent une nécessité...
C : c’est le langage le plus utilisé pour cette tâche
assembleur : comme pour les OS.
C++ : BeOS a été écrit avec des API en C++. Moins performant que le C et plus gourmand en ressources, il n’est pas le mieux représenté des langages dans cette catégorie.
rust : il commence à faire son chemin.
Micropython : popularisé par les Arduino et Raspberry PI pour rendre plus accessible la programmation.

Big Data

Le Big Data est devenu un enjeu économique de très grande importance. Le domaine a crû en importance avec la venue du cloud. Les langages les plus utilisés sont :
R : le langage des statistiques par excellence, mais en perte d’utilisation sauf dans les milieux de la recherche
scala : spark et kafka, deux des grands outils utilisés dans les solutions Big Data, sont écrits dans ce langage... Il permet d’accéder aux performances, mais au prix d’un long apprentissage. Longtemps cantonné à la JVM, il est depuis peu dans LLVM.
java : compatible JVM avec une forte base de développeurs, il est plus facile à apprendre que scala.
python + numpy + scipy + pandas + matplotlib : il remplace petit à petit R. De plus avec docker et Kubernetes, on peut facilement déployer en production.

Machine Learning

Le Big Data est le point de départ, ensuite il faut analyser les données et en déduire des enseignements comme la reconnaissance des visages, la conduite autonome, etc. C’est le but de l’intelligence ar