it-swarm-fr.com

Les langues dynamiques dactylographiées méritent-elles toutes les critiques?

J'ai lu quelques articles sur Internet sur le choix des langues de programmation dans l'entreprise. Récemment de nombreuses langues dynamiques typées ont été populaires, c'est-à-dire de ruby, python, PHP et erlang. Mais de nombreuses entreprises restent toujours avec des langages typés statiques tels que C, C++, C # et Java.

Et oui, l'un des avantages des langues statiques typées est que les erreurs de programmation sont attrapées plus tôt, au moment de la compilation, plutôt qu'au moment de l'exécution. Mais il y a aussi des avantages avec des langues dynamiques dactylographiées. (- plus sur wikipedia )

La principale raison pour laquelle les entreprises ne commencent pas à utiliser des langues comme Erlang, Ruby et Python, semblent être dynamiques dactylographiques. Cela semble aussi être la principale raison pour laquelle les gens sur Stackoverflow décider contre Erlang. Voir Pourquoi avez-vous décidé "contre" erlang .

Cependant, il semble y avoir une critique forte contre la frappe dynamique dans les entreprises, mais je ne l'obtiens pas vraiment pourquoi c'est que fort.

Vraiment, pourquoi y a-t-il tant de critiques contre la frappe dynamique dans les entreprises? Cela affecte-t-il vraiment le coût des projets qui, ou quoi? Mais peut-être que je me trompe.

35
Jonas

Oui, je crois qu'ils font.

Il y a quelques raisons à prendre en compte dans la sélection d'une langue pour un nouveau projet:

  • Vitesse d'exécution. Par rapport à C/C++/FORTRAN, PERL et Python sont si lents que c'est drôle.
  • Vitesse d'initialisation. Comparé aux langues rapides ci-dessus, Java tombe et pleure lorsque le JVM continue de charger et de charger et ...while(1)....
  • Prototype-capacité. Passer de manière exhaustive et faire la déclaration/la définition des travaux requis pour C++ ou Java augmente le LOC, qui est le seulement métrique connue qui est en corrélation fiable avec des bugcomptes. Cela prend aussi beaucoup de temps. Cela nécessite également un peu plus de réflexion sur les types et les connexions.
  • Fidlabilité interne. Messing dynamiquement avec vos internes est excellent jusqu'à ce que vous commenciez à déboguer votre Code auto-modificateur. (Python, Lisp, Perl)
  • Vérification correcte. Un compilateur peut fournir une passe de semi-correction rapide de votre code de votre code en C++, et cela peut être vraiment Nice.
  • Détails d'analyse statique. C et Java ont une assez bonne analyse statique. Perl n'est pas complètement analysable statiquement à un théorique niveau (éventuellement Python aussi). Je suis raisonnablement sûr que Lisp n'est pas non plus.
  • Les plateformes étranges ne prennent que c, en général.
  • Chaîne de soutien. Si vous pouvez avoir un contrat que vous Will Obtenez vos bugs regardés et travaillés sur, c'est énorme.

Si vous pouvez présumer que l'organisation avec laquelle vous travaillez a un principe "à l'avenir" (il y a un terme comptable pour cela), et NE PAS Décidez de ne pas travailler sur le logiciel , alors vous avez beaucoup mieux pour utiliser le logiciel. Comme il n'y a pas d'entreprise majeure vente (Implication de la responsabilité de la responsabilité de la maintenir) Python/Perl/$ dynamic_language, il réduit considérablement les risques.

D'après mon expérience, Open Source Mainteners a souvent un problème qui assume pleinement la responsabilité des bugsfixes et de la publication de mises à jour. "C'est gratuit, tu travailles dessus!" est pas une réponse acceptable pour la plupart des entreprises (pas leurs principales compencences, entre autres).

Bien sûr, je ne parle pas du monde WebApp/Startup, qui a tendance à jouer à haut risque/à des règles de récompense élevées et à être très ouvert à rester sur le bord moussé de la technologie.

46
Paul Nathan

Vous donnez beaucoup trop de crédit technique aux décideurs d'entreprise. Il y a un vieil adage: "Personne n'a été tiré pour acheter IBM." Si vous allez un itinéraire différent et que les choses deviennent rocheuses (elles font toujours), personne ne veut risquer d'être blâmé. Coller aux normes et blâmer quelqu'un d'autre.

Il existe de nombreuses entreprises plus jeunes qui deviendront éventuellement les entreprises de demain et utiliseront ces langues.

Et n'oublions pas les lignes de la BuChionion du code écrit dans VBA!

24
JeffO

La principale raison pour laquelle les entreprises ne commencent pas à utiliser des langues comme Erlang, Ruby et Python, semblent être le fait qu'ils soient dactyliques dactylographiés.

Je pense que ce n'est que leur excuse primaire. La vraie raison est que les entreprises ne les prennent pas vraiment tout cela au sérieux et sentent qu'ils sont peut-être un peu aussi amateur. Java et .net sont "Big Business Nams", ont un bon marketing commercial, un support client commercial et sont donc largement pris très au sérieux.

Il est regrettable qu'il n'y ait pratiquement pas de langue statiquement typée qui est n'importe où près aussi populaire que les grands noms commerciaux. Pourquoi les environnements de programmation open-source/libre-logiciel sont-ils presque typés de manière dynamique? Cela pourrait indiquer qu'une langue statistique a été typée n'est pas si facile à faire et que la typing dynamique est un "hack de l'homme paresseux". Si tel est le cas, les entreprises qui décident des langues typées dynamiquement pourraient en réalité avoir un point.

11
Timwi
  • Les langues dactylographiées dynamiquement ont tendance à être plus lentes que leurs cousins ​​typés statiquement.
  • Les erreurs sont plus difficiles à attraper et peuvent être plus difficiles à déboguer
  • Le compilateur/interprète a tendance à être beaucoup moins fastidieux sur ce que vous pouvez et ne peut pas faire. C'est-à-dire que vous n'atteignez pas à peu que des erreurs de syntaxe à la phase de compilation
  • Si vous n'êtes pas très prudent avec la conception d'une langue dactylographiée dactylographiée, vous vous retrouvez avec JavaScript, qui est le langage de l'odeur de code

éditer : Je devrais mentionner que ma langue de programmation principale pour le moment est python, qui est dactylographié de manière dynamique. Personnellement, j'aime la liberté qui vient sans avoir à pré-déclarer des variables, mais parfois, elle serait serait agréable de spécifier (par exemple) quoi Type de paramètres Une fonction prend pour attraper des erreurs tôt plutôt que tardivement.

9
Chinmay Kanchi

Les langues dactylographiées dynamiquement sont perçues (par certains programmeurs/patrons) pour produire du code qui ne fonctionne pas aussi. Le fait qu'un programme dactylographié de manière dynamique vous raconte très peu de son exactitude. Le fait qu'un programme de langue typée statique vous raconte beaucoup plus. (D'autre part, il reste encore un long chemin entre compile et la bonne chose, donc cela pourrait être moins significatif que semble-t-il)

Les langues dactylographiées dynamiquement sont perçues pour être des langues de script. Vous n'auriez jamais écrit d'application dans BASH ou un fichier de commandes. Toutes les langues dactylographiées dynamiquement ont tendance à être bouclées dans cette catégorie (injustement).

Les langues dactylographiées dynamiquement sont plus lentes, puis des langues typées statiquement. (Mais nous verrons à quel point le travail change bien sur JIT)

8
Winston Ewert

NOTE: Ceci est principalement subjectif et basé sur mes expériences et mes impressions.

Les langues dactylographiées dynamiquement sont très différentes des langues typées statiquement. Ces différences deviennent probablement plus importantes dans les logiciels d'entreprise de poids lourd que dans la plupart des autres applications.

Les langues typées statiquement ont tendance à être très normatives. Une méthode ne prendra qu'une entrée qui correspond exactement à sa signature. Les niveaux d'accès ont tendance à être très importants et les interfaces sont définies explicitement, avec des restrictions verbeuses mais sans ambiguïtés en place pour appliquer ces définitions.

Les langues dactylographiées dynamiquement sont très pragmatiques. Les conversions de type se produisent souvent implicitement, les fonctions peuvent même jouer si vous fournissez le mauvais type d'entrée tant qu'il se comporte suffisamment similaire. Dans des langues comme Python, même les niveaux d'accès seront basés sur le contrat plutôt que sur des restrictions techniques (c'est-à-dire que ce n'est que private parce que vous êtes dit de ne pas l'utiliser et qu'il a un nom amusant).

De nombreux programmeurs préfèrent les langues dynamiques car elles permettent (sans doute) permettre un prototypage rapide. Le code finit souvent plus court (si seulement en raison du manque de déclarations de type) et si vous souhaitez enfreindre le protocole approprié, vous avez besoin d'une solution rapide et sale ou que vous souhaitez tester quelque chose, c'est facilement possible.

Maintenant, la raison pour laquelle les sociétés "Enterprisey" préfèrent souvent que les langues typées statiquement sont exactement qu'ils sont plus restrictifs et plus explicites sur ces restrictions. Bien que dans la pratique, même le code tycrié statiquement peut être brisé par des idiots avec un compilateur, de nombreux problèmes seront beaucoup plus visibles beaucoup plus tôt dans le processus (c'est-à-dire avant l'exécution). Cela signifie que même si le codebase est grand, monolithique et complexe, de nombreuses erreurs peuvent être prises facilement, sans avoir à exécuter le code ni à l'envoyer au service QA.

La raison pour laquelle le bénéfice n'implique pas l'emporte sur les inconvénients de nombreux programmeurs en dehors de cet environnement, c'est que ce sont des erreurs qui seront souvent facilement capturées par une inspection approfondie du code ou même en essayant de l'exécuter. Surtout lorsque vous suivez une méthodologie testée, ces erreurs deviennent souvent triviales à attraper et à réparer. De plus, avec beaucoup de telles entreprises ayant un cycle de libération beaucoup plus courte, la productivité est souvent plus importante que la rigidité et de nombreux tests (de base) sont en cours de réalisation par les développeurs eux-mêmes.

L'autre motif que les sociétés d'Enterprisey n'utilisent pas beaucoup de langues typées de manière dynamique. Code hérité. Aussi stupide que cela puisse sembler des nerds américains, les grandes entreprises collaboreront souvent à des solutions qui fonctionnent, même si elles passent bien leur état de conservation. C'est pourquoi tant de sociétés majeures appliquent Internet Explorer 6 et sont si lentes à améliorer leurs OSES. C'est aussi pourquoi ils écrivent souvent un nouveau code dans des langues "anciennes" (anciennes versions antiques de Java): il est beaucoup plus facile d'ajouter quelques lignes de code à un logiciel d'autorisation que d'obtenir une approbation pour une réécriture complète dans une nouvelle Langue.

TL; DR : Les langages statiques ressemblent plus à la bureaucratie, afin que les gestionnaires d'entreprise comme ils les aiment mieux.

8
Alan Plum

Les entreprises ne font qu'en adopter de nouvelles langues et outils assez rapidement et il y a de bonnes raisons pour cela. Mais lorsque l'un des outils traditionnels tels que C # implémenter certaines de ces caractéristiques, ils deviendront rude dans les entreprises grand public ....

0
aggietech