Choisir systématiquement un langage de programmation [fermé]

24

Je recherche une méthodologie pour choisir une langue. Je ne demande pas d'avis sur les langues. J'ai été chargé du processus de comparaison de la langue actuelle de notre boutique avec d'autres qui sont disponibles. Nous sommes une boutique de développement web btw.

Notre PDG voudrait un livre blanc complet sur toutes les langues Web disponibles, de quelle langue parente elles sont dérivées (par exemple, jsp vient de java qui est de c / c ++). J'ai besoin de créer une matrice avec tous les facteurs clés d'une langue particulière ainsi que les défauts de cette langue donnée. Le langage est-il limité par la plate-forme, est-il conçu pour la programmation fonctionnelle, procédurale ou OO ou peut-il être utilisé avec n'importe quel paradigme de programmation?

J'ai également besoin d'avoir des informations moins techniques, comme la taille du vivier de talents pour une langue donnée et le salaire médian dans ce vivier. Comment le marché verra-t-il notre choix?

Nous avons commencé à chercher un consultant pour nous aider à comprendre toutes ces choses, mais ce que nous avons constaté, c'est que la plupart des consultants viennent d'un milieu de développement et il semble souvent que la réponse est " xxx est le meilleur langage car c'est celui que je J'ai utilisé le plus au cours des n dernières années et cela ne m'a jamais déçu. Vous pouvez le compléter avec yyy pour le frontal et utiliser la bibliothèque zzz "

Je me sens dépassé par cette tâche et je pense que la meilleure façon d’agir, étant donné ce que recherche notre PDG, est de regarder dans le monde universitaire et d’embaucher un professeur sans réelle expérience de développement pour venir nous «enseigner». sur toutes les langues possibles.

Quelqu'un d'autre a-t-il dû faire cet exercice? Si vous en avez, pouvez-vous partager les étapes et / ou la méthodologie que vous avez utilisées pour passer par le processus?

Lance
la source
21
Le PDG prévoit-il réellement d'utiliser cette matrice pour décider des choses telles que "Nous utiliserons $ {language} pour construire $ {nextBigProject}!" Construire quelque chose qui pourrait réellement être utile pour cela (bien que je ne sois pas sûr qu'il sera jamais sérieusement utile) prendrait probablement beaucoup de temps, et il y aurait également une maintenance continue.
FrustratedWithFormsDesigner
3
Je pense qu'un guide général pour choisir une langue / un environnement pour un projet pourrait être d' abord d' essayer d'avoir une compréhension plus profonde du problème spécifique que le projet essaie de résoudre (d'une manière indépendante de la langue), chercher des outils / bibliothèques qui mieux aider à le résoudre à ce moment-là , puis regardez quelles langues vous devez connaître pour travailler avec ces outils / bibliothèques. Cela vous donnera probablement une liste de langues, et à partir de là, vous pouvez le réduire en fonction de votre connaissance de ces langues, de l'assistance des fournisseurs, du budget, etc.
FrustratedWithFormsDesigner
9
La toute première question à laquelle répondre est: "devons-nous changer du tout?" Quels problèmes ne sont pas résolus par votre choix de langue actuel?
John Bode
4
Comment Stack Overflow peut-il aider les développeurs à évaluer les technologies? "Ce matin, j'avais environ 8 frameworks devant moi, essayant de décider lequel j'utiliserais ..."
gnat
7
En pratique, autant lancer des fléchettes. Dans l'arène Web (en particulier JavaScript, et al), il existe des dizaines (voire des centaines) d'options, avec des forces, des faiblesses, des affinités et des incompatibilités variées. Vous pouvez l'analyser à mort, ou simplement faire une supposition éclairée, aller de l'avant et faire une correction à mi-parcours si nécessaire.
Daniel R Hicks

Réponses:

53

@FrustratedWithFormsDesigner a fait allusion à cela ci-dessus, je serai plus franc: vous avez été accusé d'une tâche coûteuse mais inutile.

Je soupçonne le PDG de rechercher des preuves irréfutables et objectives qui étayeront son choix de langue. Le problème est que la préférence de la langue est chargée de beaucoup trop de facteurs subjectifs et extrinsèques pour que le livre blanc soit significatif et encore moins utile.

Autrement dit, s'il y avait un langage idéal, tout le monde l'utiliserait à la place de ces langages défectueux "objectivement". Elle témoigne également d'un degré de microgestion qui devrait incomber aux ingénieurs qui devront le faire fonctionner. Erlang est peut-être le "meilleur objectivement" mais si personne ne le sait, ajoutez un coût de démarrage de 6 mois / ingénieur et 6 mois / ingénieur de plus pour gagner en compétence.

Comme je n'ai pas votre travail, je ne suis pas inquiet de le perdre, bien que vous le puissiez. Je donnerais au PDG un document sur la thèse de l'Église physique-Turing. Je me réunissais ensuite avec les ingénieurs principaux et j'obtenais leur avis non rigoureux et non objectif sur ce qui devrait être utilisé et je disais au PDG que c'était ce que vous utiliseriez. En échange, vous promettez aux ingénieurs de ne pas participer aux réunions du conseil d'administration, aux directeurs financiers, aux méthodes comptables, à la sélection des vice-présidents, etc. Il y a une raison pour laquelle nous nous spécialisons, et il n'a pas plus de place dans les préférences d'ingénierie que vous dans son domaine.

msw
la source
6
Ha, j'aime l'enthousiasme téméraire du dernier paragraphe. Je dirais que c'est le domaine des PDG à cause des 6 mois embêtants que vous avez mentionnés, c'est tout ce dont vous avez besoin pour lui dire à mon humble avis.
Nathan Cooper
1
"Thèse de Church-Turing physique" N'allons pas là-bas. Très peu de langages de programmation ont une sémantique formelle, à peu près une condition préalable pour que Turing soit complet. (Sans un, ce n'est même pas un modèle de calcul.)
Rhymoid
4
Il suffit de choisir Lisp et d'en finir.
Eric
1
Par Lisp, vous entendez bien sûr ClojureScript. :-)
Brian Knoblauch
1
+1. C'est votre travail en tant qu'ingénieur de faire comprendre à un PDG pourquoi ce n'est pas une bonne approche. Cela peut être difficile car cela ressemble à une bonne approche, mais c'est nécessaire.
djechlin
25

Quelques grands coups de pinceau à considérer:

Popularité de la langue

Cela ne devrait vraiment pas avoir d'importance, car la popularité n'équivaut pas nécessairement à la productivité, à l'expressivité ou à l'une des autres qualités linguistiques qui importent plus, mais cette considération l'emporte souvent sur toutes les autres considérations car:

  1. Il est plus facile de trouver des développeurs de logiciels dans un langage populaire.
  2. Il est plus facile de trouver des outils et des bibliothèques dans une langue populaire.
  3. Les décideurs ne comprennent pas les compromis linguistiques, ils prendront donc la décision en toute sécurité («de nombreuses entreprises utilisent cette langue, elle doit donc être bonne»).

Applicabilité au domaine problématique

Tout programme peut être écrit dans n'importe quel langage de programmation complet de Turing, mais certains langages sont mieux adaptés à certains domaines problématiques que d'autres. Si vous écrivez des applications Web, vous vous tournerez probablement vers des langages et des outils qui sont bien adaptés à cela, et ils seront très probablement des langages orientés objet.

D'un autre côté, si vous allez écrire des logiciels principalement basés sur la recherche ou les mathématiques, vous vous orienterez probablement vers des langages qui embrassent des paradigmes fonctionnels .

Et, bien sûr, il y a tout entre les deux. De nombreux langages prennent en charge plusieurs paradigmes, et certains modèles de logiciels existent uniquement pour surmonter les limitations dans les langages qui manquent de certaines fonctionnalités ou paradigmes.

Expressivité et productivité

Certaines langues sont plus expressives que d'autres. Ce qui peut être écrit dans une langue en utilisant mille lignes de code peut être écrit dans une langue plus expressive en utilisant cent lignes de code. Le compromis est que les cent lignes de code sont probablement écrites dans une langue moins populaire, par des personnes plus compétentes.

Beaucoup de lignes de code présentes dans les langages orientés objet utilisés pour écrire des applications métier sont des cérémonies. Cette cérémonie, tout en coûtant du temps et des efforts pour se développer, fournit également une structure visible qui autrement ne serait pas facilement apparente dans un langage plus expressif. Il permet aux personnes ayant moins d'expertise que ce dont elles auraient autrement besoin de travailler sur le code avec un risque réduit.

L'ère des langues multiples

Je conclurai en affirmant que le désir de décider d'une seule langue peut être un faux dilemme. Aujourd'hui, les candidatures sont souvent rédigées, non pas dans une seule, mais dans de nombreuses langues. Chaque langue a ses propres forces et (en théorie) est spécifiquement conçue pour la tâche qu'elle est utilisée. Certains domaines problématiques (tels que la logique du navigateur Web ou l'accès à la base de données) nécessitent des langues spécifiques.

Robert Harvey
la source
7
J'ajouterais au dernier point que si vous souhaitez utiliser plusieurs langues, il pourrait être utile d'envisager une plate-forme qui prend en charge une interopération facile entre elles (.Net CLR ou JVM).
svick
9
@NathanCooper: Vous voulez dire que vous n'avez jamais écrit d'application Web? Même un petit? Ou avez-vous dû porter une application mobile sur plusieurs plates-formes? Ou travaillé en embarqué? Ou des données récupérées d'une base de données SQL?
Robert Harvey
10
@ NPSF3000: Naturellement, vous n'avez pas pris la peine de divulguer votre méthode de sorcellerie. J'appelle des manigances.
Robert Harvey
9
@ NPSF3000 Alors que C # peut être un bon choix pour ce que vous faites (bien que l'utilisation de Unity étire certainement les choses un peu car il est explicitement conçu pour qu'ils fassent tout le travail lourd multilingue pour vous), votre seule anecdote ne réfute pas le point. La plupart des projets non triviaux sont certainement multilingues dans le sens où ils utilisent SQL et une autre technologie, mais même au-delà, beaucoup utilisent différents langages de programmation en parallèle, ou écrivent leur application dans un langage et leurs outils dans un autre, etc. I ne trouve pas du tout l'affirmation litigieuse.
Chris Hayes
7
@ NPSF3000 Si c'est votre problème, dites-le . Ne nous obligez pas à traverser cette galère d'essayer de comprendre ce que vous voulez dire. Je suis sûr que Robert serait ravi de faire une modification si vous aviez déclaré "Je ne suis pas d'accord que certains domaines problématiques nécessitent des langues spécifiques". Cela dit, je ne vois aucune implication du tout ici que travailler dans plusieurs langues est "bénéfique par défaut".
Chris Hayes
5

Il y a des raisons commerciales pour choisir une langue, et il y a des raisons techniques pour choisir une langue, et les deux ne se rencontrent pas toujours. Jeter des raisons académiques risque d'aggraver les choses. Je doute qu'un professeur puisse vous aider de la façon dont vous en avez besoin.

Les faits sur l'ascendance et les caractéristiques d'une langue sont assez faciles à trouver. Vous pourriez probablement passer une journée sur wikipedia pour remplir la majeure partie de cela. La taille du pool de talents et le salaire sont plus difficiles, car la plupart des gens ne se considèrent pas comme des programmeurs unilingues. Les entreprises qui utilisent des langues moins populaires comme Scala s'attendent à peu près à embaucher de bons programmeurs généraux qui n'ont pas d'expérience linguistique spécifique. À en juger par certaines présentations que j'ai vues, cette stratégie semble avoir bien fonctionné.

Même connaître les faits vous laisse encore un choix assez subjectif. Votre PDG voudra que cela se résume à une métrique approximative, comme des dollars par fonctionnalité. Pour obtenir une image précise, vous devrez faire quelques prototypes, puis parler de la facilité d'apprentissage, de la rapidité avec laquelle écrire un prototype une fois que vous avez appris les bases, de la facilité de maintenance que vous pensez et dans quelle mesure vous pensez que ce serait largement applicable au type de travail que vous effectuez habituellement.

Plutôt que d'essayer de couvrir tous les langages, je chercherais à obtenir des représentants des différents paradigmes de programmation et types de frameworks, et à implémenter un prototype dans chacun.

Voici une liste approximative des catégories principales:

  • Microsoft. (Peut avoir des sous-catégories. Je n'en sais rien.)
  • POO lourd, comme Drupal.
  • POO léger, comme une bouteille en python.
  • Jouer / soulever / scalatra en utilisant Scala.
  • Jouez / soulevez en utilisant Java.
  • Comme au printemps.
  • Struts-like.
  • Rails-like.
  • Basé à Haskell.
  • Node.js

À l'avant:

  • JavaScript de style POO
  • JavaScript de style fonctionnel, comme avec Underscore
  • JavaScript de style réactif, comme avec Bacon
  • Google Web Toolkit
  • Orme

Passer un jour ou deux sur chaque catégorie, mettre en œuvre un prototype simple, vous prendrait quelques mois, après quoi vous auriez une bien meilleure idée des forces et des faiblesses de chacune. Vous pourriez peut-être en exclure certains plus rapidement en fonction de la culture ou de l'expérience de votre entreprise.

Puisqu'il s'agit d'un rapport d'activité, je prendrais également un peu de temps à googler des choses comme «Quelle langue est utilisée par la société», en remplaçant diverses sociétés que vous admirez. Beaucoup d'entre eux ont rédigé leurs propres livres blancs sur les raisons pour lesquelles ils ont fait des choix linguistiques spécifiques, ce qui constituerait d'excellentes références à inclure.

Karl Bielefeldt
la source
4

Identifiez et chiffrez les lacunes inhérentes à votre processus de développement existant en $ A. Identifiez le coût du passage à tout autre processus de développement comme $ B.

Si $ A est inférieur à $ B, arrêtez.

Si vos lacunes connues l'emportent sur le coût du changement (et c'est un gros si!), Analysez les lacunes en détail et commencez à rechercher un langage / environnement de développement / processus de développement qui les corrige, un qui n'introduira pas d'autres problèmes plus coûteux.

Pour être honnête, à moins que vous n'essayiez actuellement de développer des applications Web dans Fortran, le seul impact que la langue que vous utiliserez aura sur le coût des entrepreneurs que vous utilisez pour combler les lacunes. Le flux principal et les langages / outils / processus de développement matures ont déjà résolu la plupart des problèmes auxquels vous êtes susceptible d'être confronté, car les outils les plus chauds, les plus récents et les plus sexy viennent avec les formateurs et les entrepreneurs les plus chers, mais les solutions les moins matures. Et si vous avez des lacunes qui justifient un tel changement, il est peu probable que votre choix de langue les comble pleinement.

Cependant, si la rentabilité n'est pas l'objectif principal ici, vous devez prendre en compte la stigmatisation d'être considéré comme démodé contre les félicitations d'être à la pointe. Demandez à votre patron les valeurs en dollars à utiliser pour cette partie de l'équation.

Paul Smith
la source