Programmation - Critères de choix d'un langage/framework

Décembre 2016

[Note de sebsauvage: Cet article est loin d'être complet ! à compléter, détailler et raffiner]

Voici quelques questions à vous poser pour bien choisir un langage, une plateforme de développement ou un framework pour un projet.

Il est impossible de dire de but en blanc que tel ou tel langage est le meilleur: Le meilleur choix sera très dépendant de vos besoins et contraintes. Les questions ci-dessous devraient vous guider.

Notez que chaque question peut ou non être importante ou pertinente pour votre projet. Tout ceci est très dépendant de votre projet.


Note: Cette liste n'est pas exhaustive.

Dans le document ci-dessous, le terme "langage" peut être remplacé par "framework" ou "plateforme de développement": les questions restent valides.

Nature


Est-ce un langage à typage fort, faible ?
à typage statique/dynamique ?
Compile-t-il en code natif ou tourne-t-il dans une machine virtuelle ?
Si natif, pour quels processeurs est-il disponible ?
Y'a-t-il une possibilité de temps d'exécution garanti ? Ou d'exécution sécurisée ?
Si machine virtuelle, sur quelles plateformes est disponible cette machine virtuelle ? Quelle est la maturité de la machine virtuelle sur chaque plateforme ?

Le langage permet-il une séparation nette données/code ?
Permet-il une séparation nette logique du programme/présentation ?
Supporte-t-il la programmation procédurale, assertionnelle, objet, évènementielle ? Est-ce important pour votre projet ?

Est-ce que ce langage/framework permet, favorise ou impose une approche n-tiers ? client/serveur ? centralisée ? déconnectée ? nomade ?
Est-ce important pour votre projet ?


Ce langage (et des librairies) peut-il se conformer à des standards ?
(XML, SOAP, HTTP, Rosetta.Net, ITIL, RFC et protocols divers...)

Portabilité


Ce langage est-t-il dépendant d'un système d'exploitation particulier ?
Sur combien de systèmes d'exploitation des compilateurs pour ce langage sont disponibles ? De combien de vendeurs différents ?
Est-ce que les API et librairies que vous utilisez seront disponibles dans d'autres systèmes d'exploitation ?

Est-ce que ce langage ou ses librairies permettent de faire abstraction du système d'exploitation ? Du matériel ? Des ressources (mémoire, disque...) ?

Stabilité


Depuis combien de temps existe ce langage ?
Est-il encore en beta ?
Des entreprises l'utilisent-elles ? Si oui, pour des tâches critiques ?
Avez-vous pu trouver sur internet des discussions critiques sur ce langage ? Que disent-elles ?

Pérennité


Depuis combien de temps existe ce langage ?
Ce langage est-il un standard (de fait, ISO, W3C, IETF...) ?
Si c'est un standard, y'a-t-il beaucoup d'implémentations différentes de ce standard ? Par combien de vendeurs différents ? Jusqu'à quel point ces implémentations respectent-elles le standard ?
Ce langage est-il propriétaire ou libre ?
Est-il ouvert ou fermé ?
Y'a-t-il des compilateurs de différents vendeurs pour ce même langage ?
Y-a-t'il une communauté forte autour de ce langage ?
Trouve-t-on des librairies, modules et exemples pour ce langage sur internet ? Dans quelle proportions ? Sont-elles majoritairement payantes ou gratuites ?

Le vendeur assure-t-il un support technique pour ce langage ?
Si oui, à quel tarif et quelles conditions ?
Quel est le cycle de vie de ce langage chez le vendeur ?
Jusqu'à quand sera-t-il supporté ?
L'enteprise assurant le support ou le vendeur lui-même sont-ils solides économiquement ?
Depuis combien de temps cette entreprise existe-elle ?
Quels sont ses clients utilisant le produit ?

Si le vendeur met la clé sous la porte, quelles conséquences pour vous et votre projet ?
Si le vendeur décide de ne plus supporter le produit, quelles conséquences pour vous et votre projet ?
Quels seraient les coûts de migration vers un autre langage ? Un autre serveur de base de données ? Un autre système d'exploitation ?

Vos données restent-elles accessible même si l'application/le langage/le framework/le vendeur vous lâche ?
Quels seraient les coûts de migration de vos données ?

Métier et maintenance


Trouve-t'on facilement des gens compétents sur ce langage ?
La syntaxe et les outils de ce langage permettent-ils une maintenance aisée ? (syntaxe claire, langage explicite...)

Les outils de génie logiciel sont-il disponible pour ce langage ?
(Modélisation, débuggers, IDE, RAD, code coverage, test unitaires automatisés, auto-documentation du code, analyse du code, build automatique, gestion de sources/versionning...)
Comment ce langage peut-il s'intégrer aux outils de génie logiciel existants dans le commerce ou déjà présents dans votre entreprise ?

Ce langage est-t-il bien documenté ? La documentation est-elle à jour ?
Des exemples sont-il disponible en nombre ?
Les API et librairies fournies avec ce langage sont-elles nombreuses ? Bien documentées ?

Le code et les données sont-elles accessible en dehors de l'IDE/RAD fourni avec le langage ?
Est-t-il possible de lancer la compilation et édition des liens en ligne de commande ?


Ce langage est-t-il déjà utilisé dans votre entreprise ?
Quels sont les retours des personnes l'ayant utilisé ? Que pouvez-vous apprendre d'eux (problèmes rencontrés, solutions, avis sur le support du vendeur, vie au jour le jour de la maintenance...)
Pouvez-vous capitaliser sur leur expérience ? (Utilisation des connaissances acquises par les autres, réutilisation des outils et librairies développés en interne, aide pour installation, documentations...)


Comment ce langage/framework pourra-t-il s'intégrer à l'infrastructure existante de votre entreprise ?
(Serveur de base de données, sites web, annuaires (Single SignOn, LDAP...), gestion de domaines, architecture réseau, règles de sécurité...)

Ouverture


Ce langage permet-il d'interagir avec d'autres langages ? (C, C++, Java...)
Quelle connectivité supporte ce langage ? (ftp, http, ssh...)
A quelles API ce langage permet-il d'accéder ? (Win32, SOAP, .Net...)
Ce langage est-il fortement lié à une API particulière ?
A quels types de bases de données ce langage permet-il de se connecter ? (Oracle, SQL Server, mySQL, ou génériques: ODBC, JDBC... ?)

Sécurité


Ce langage et ses librairies possède-t-il des fonctions intrinsèque de sécurité ?
Est-il vulnérable aux risques de buffer overflow ? Est-ce important pour votre projet ?
Aux risques de SQL injection ?
Aux risques de cross-site scripting ?
etc.
Les librairies fournies avec ce langage offrent-elles ces protections ?

License et droits


Que vous permet la license de ce langage ?
Y'a-t-il des risques juridique liés à ce langage ? (Qu'il soit propriétaire ou opensource).
Ou des risques juridiques liés à ses librairies ?
Avez-vous vérifié la license de chacun des librairies que vous utilisez ?
Quels droits de redistribution avez-vous sur ces librairies ?
Les licenses sont-elles compatibles entre elles ? Sont-elles compatible avec la license de votre propre logiciel ? Qu'imposent ces licenses sur votre license ou la distribution/vente de votre logiciel ?

Combien de poste développeur pouvez-vous équiper, et à quel prix ?
Devrez-vous repayer pour chaque serveur d'intégration et de production ?
Comment se calculent les coûts de license ? Par poste développeur installé, par nombre d'utilisateurs simultanés, par nombre de connexions réseau simultannées ?
Et en production: Par serveur installé, par utilisateur simultanés, par nombre total d'utilisateurs déclarés ?
Si le langage nécessite un runtime, quels sont les droits de distribution liés à ce runtime ?

Devrez-vous payer la license des librairies/runtimes nécessaire au langage/framework chaque fois que vous installera votre logiciel chez un nouveau client ?

Les différentes licenses imposent-elles des contraintes chez le client ?

Scalabilité


Qu'exige-t-il en matière de logiciel et matériel ? (Serveurs dédiés, système d'exploitation et serveur de base de données spécifiques ?)
Que vont vous coûter les licenses des logiciels, librairies et serveurs nécessaire pour faire fonctionner ce langage/framework ?

Quelle charge peut supporter un programme écrit dans ce langage ?
Que consomme-t-il comme ressources ? (mémoire, CPU, espace disque, débit réseau...)

Ce langage possède-t-il des goulots d'étranglement/limites/points faibles ? (lock globaux, nombre de connexions simultannées, quantité max de mémoire qu'il est capable d'utiliser...)

Ce langage/framework permettra-t-il à votre application d'être utilisée par 100, 1000 ou un million d'utilisateurs simultanément ?
Comment se comportera le langage/framework et votre application dans ce cas ?
Quelles sont les possibilités d'extension ? (clusters de machines, machines multi-processeurs ?) Le langage/framework supportera-t-il ces concepts ?

A voir également :

Ce document intitulé «  Programmation - Critères de choix d'un langage/framework  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.