Il y a une croyance répandue parmi les programmeurs selon laquelle plus le langage est dynamique et lâche, plus le programmeur sera productif. Guido van Rossum a écrit sur la productivité de la programmation en utilisant python en 1998 et en cherchant sur le Web, je vois toujours des gens référencer cette affirmation exacte:
Syntaxiquement, le code Python ressemble à un pseudo-code exécutable. Le développement de programmes à l'aide de Python est 5 à 10 fois plus rapide qu'avec C / C ++ et 3 à 5 fois plus rapide qu'avec Java. Dans de nombreux cas, un prototype d'application peut être écrit en Python sans écrire de code C / C ++ / Java. Souvent, le prototype est suffisamment fonctionnel et fonctionne assez bien pour être livré comme produit final, ce qui permet de gagner un temps de développement considérable. D'autres fois, le prototype peut être traduit en partie ou en totalité en C ++ ou Java - la nature orientée objet de Python fait de la traduction un processus simple.
Cette question a-t-elle été correctement évaluée scientifiquement? Si ce n'est pas pour python, alors peut-être pour les langages de script frères comme ruby , perl ou php ?
Je ne cherche pas de rationalisations, d'analogies ou d'explications pour lesquelles il pourrait être difficile de répondre, à moins que ce ne soit l'opinion de chercheurs ou d'experts qui ait pris le temps d'examiner la question.
J'ai d'abord posé cette question chez sceptics.SE , et quelqu'un a suggéré que je la pose ici aussi.
Réponses:
L'article 1 d' Ousterhout sur les langages de script suggère que plus le niveau de programmation est élevé, plus le programmeur est productif. Si nous considérons que, comme le dit Boehm 2 , le nombre de lignes qu'un programmeur peut écrire dans un temps donné est constant et ne dépend pas du langage ou de son type (bas niveau, programmation système, script), on peut facilement croire l'affirmation. Le rapport d'instructions par ligne de code source résultant peut être d'un ordre de grandeur (ou plusieurs) meilleur avec les langages de script qu'avec les langages de programmation système.
Comme les langages de script s'appuient fortement sur des utilitaires prêts à l'emploi pour les tâches courantes (par exemple, les structures de données, la manipulation de chaînes), leur utilisation principale est généralement d'améliorer la productivité avec le coût d'une vitesse d'exécution plus lente en fournissant une syntaxe facile à apprendre et efficace pour l'entretien des programmes. avec. On n'a pas recours à un langage de script lorsque la vitesse d'exécution maximale est nécessaire.
[1]: JK Ousterhout, Scripting: Higher Level Programming for the 21 Century , Computer (IEEE), 1998
[2]: B. Boehm, Software Engineering Economics , Prentice Hall, 1981
la source
Si vous mesurez la productivité comme «le temps d'écrire un programme simple spécifique», cela dépend tellement plus de l'expérience du programmeur et de l'esprit vif que de la langue que vous évaluez vraiment le programmeur, pas de la langue.
Je pense que les concours de code chronométré indiquent que le langage n'a pas vraiment d'importance pour ce genre de tâches. Il n'y a pas une seule langue qui remporte de tels défis plus facilement que d'autres (du moins pas si vous tenez compte de la popularité relative des langues).
Si vous mesurez les performances comme «l'efficacité du meilleur programme» écrit dans une langue donnée, alors cela dépend encore moins de la langue. Voir par exemple les résultats du concours Galcon AI . Le gagnant est écrit en lisp. La prochaine entrée Lisp, cependant, est classée n ° 280. Qu'est-ce que cela nous apprend sur l'aptitude du langage à écrire efficacement une excellente IA? À mon avis, rien. Il nous dit simplement que "bocsimacko" a trouvé et implémenté les algorithmes les plus efficaces. Pour mémoire, le temps n'était pas un facteur majeur dans ce concours - les gens avaient plus de deux mois pour développer leur code.
Enfin, si vous mesurez la performance comme «coût à long terme de la maintenance d'un projet», je pense que vous êtes sur quelque chose. Surtout si vous n'embauchez que les meilleures personnes pour le travail et comptez le coût en heures-hommes plutôt qu'en dollars. J'ai une forte opinion sur les langues qui conviennent le mieux à cela, mais n'ayant aucune preuve tangible pour vous lier, je laisserai cette opinion de côté. Peut-être que quelqu'un d'autre a des liens pour ce type de performance.
la source
http://page.mi.fu-berlin.de/prechelt/Biblio/jccpprtTR.pdf est l'une des rares études dont je suis au courant qui a fait une comparaison directe réelle entre la productivité dans diverses langues. Il est ancien, mais mérite d'être lu si vous trouvez le sujet intéressant. La comparaison présente un certain nombre de lacunes majeures dont l'article est très honnête.
Le résultat global est que les langages de bas niveau (par exemple C, C ++) prennent plus de temps à écrire, peuvent prendre beaucoup moins de mémoire et peuvent s'exécuter beaucoup plus rapidement. Mais avec une très grande variabilité. Les langages de script de haut niveau ont tendance à prendre la moitié du temps à écrire et ont moins de variabilité dans l'approche. Dans une mesure initialement surprenante, il existe en général un moyen évident de faire quelque chose dans un langage de script.
Notez que tous les chiffres de performance pour Java doivent être pris avec un grain de sel majeur - le papier a été produit dans les années 90 avant que les gens aient beaucoup d'expérience avec Java et avant que la JVM ne soit bien optimisée. Ces deux facteurs devraient avoir un impact significatif.
la source
Pour le dire de manière générale, l'écriture d'un programme en Python sera généralement plus rapide que l'écriture du même programme en C, C ++, Java.
Il est également susceptible de ralentir.
Il existe, bien sûr, des applications particulières pour lesquelles d'autres langues peuvent être plus rapides car certaines tâches impliquées sont prises en charge «plus nativement».
Bien que je ne sois au courant d'aucune étude confirmant cette augmentation de la vitesse / productivité (comme un commentateur l'a mentionné, cela peut être difficile à mesurer avec précision), il y a eu des recherches directes sur l'expressivité du langage.
Je pense qu'il y a un certain mérite à une corrélation entre l'expressivité du langage et la vitesse de programmation. Imaginez simplement un modèle d'itération simple et comment une compréhension de boucle for Pythonic ou de liste peut être plus succincte. Non seulement il peut être tapé immédiatement plus rapidement, mais il élimine également les problèmes d'erreurs hors-un, d'index hors limites et d'autres problèmes de ce type qui peuvent ralentir considérablement le processus de codage.
Cela montre un tableau une estimation des ratios d'expressivité des langues. Bien qu'il devrait être pris avec un grain de sel, les notes de bas de page qu'il mentionne en valent la peine.
http://en.wikipedia.org/wiki/Comparison_of_programming_languages#Expressiveness
la source
La dernière fois que j'ai utilisé Java (il y a un certain temps), il a fallu un écran plein de code pour ouvrir et écrire dans un fichier. Comparez cela à quelques lignes en Python ou Perl, et vous pouvez deviner laquelle est plus rapide.
Évidemment, les langues ont toutes leurs propres forces et faiblesses, mais pour la plupart des tâches, Python sera plus rapide à écrire.
la source
write()
etread()
dans le reste de votre Java accès aux fichiers du projet sera aussi concis que en Python. Je pense que votre exemple est un peu trop restreint pour comparer Python et Java (même si je conviens que Java a tendance à être plus verbeux).