La programmation en Python est-elle plus rapide qu'en C, C ++ ou Java? [fermé]

27

Il y a une croyance répandue parmi les 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 alors peut-être pour les langages de script frères comme , ou ?

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.

Kit Sunde
la source
25
Eh bien, puisque vous avez restreint l'ensemble des réponses possibles, j'ose juste un commentaire en posant une autre question à laquelle il faut d'abord répondre (à mon humble avis): Existe-t-il des paramètres fiables et fiables pour mesurer la "productivité d'un programmeur"?
Paul Michalik
1
@ Paul Michalik - Je suppose que tout document de recherche portant sur la productivité aurait une définition incluse (sinon ce serait vraiment difficile à mesurer). Donc, si quelqu'un faisait référence à une recherche, il serait utile qu'il inclue la définition dans la réponse. Il existe probablement (j'imagine) plusieurs façons parfaitement acceptables de mesurer la productivité, peut-être que "le temps qu'il faut pour passer un certain nombre de tests" serait l'un d'entre eux.
Kit Sunde
1
@Paul Michalik - Bien sûr, mais combien de déclarations que vous lisez dans des livres, des blogs, des conférences et des articles de programmeurs sont en fait testées empiriquement? Je suis sûr qu'il existe des façons meilleures ou pires de mesurer la productivité. Par exemple. La "consommation de café / temps" serait probablement pire que les "lignes de code / temps" classiques. Je retiendrais le jugement sur des revendications de productivité spécifiques que nous avons vues et je peux en discuter les mérites sur cette base. Les allégations de productivité ne sont pas non plus tout simplement erronées, je suis sûr que les "lignes de code / temps" mesurent quelque chose lorsque les gens n'essaient pas de détruire la métrique.
Kit Sunde
1
Vous pourriez être intéressé par cet article: citeseerx.ist.psu.edu/viewdoc/…
DistantEcho
1
@ChrisF - Êtes-vous en train de dire que cette question ne s'applique pas à Programmers.SE? C'est certainement pour les sceptiques, et cela semblait convenir ici aussi. J'avais l'impression que vous ne devriez pas le faire avant d'avoir lu un commentaire récent de Robert Cartaino sur cette question: skeptics.stackexchange.com/q/1963/631 qui dit essentiellement que tout va bien si cela intéresse les deux communautés, et Je ne l'ai fait qu'après avoir été invité par un autre utilisateur à le faire. Étant donné que la question suscite des votes positifs, il semblerait que cela intéresse également cette communauté.
Kit Sunde

Réponses:

17

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

Jawa
la source
9
Bien que ce soit une bonne réponse, n'oubliez pas que les langages modernes sans script ont également tendance à être fournis avec des utilitaires prêts à l'emploi qui accélèrent le développement. C # me vient à l'esprit. Quiconque pense que Python est livré avec plus d'utilitaires prédéfinis que C # connaît simplement Python mieux que C #. En réalité, ils ont tous les deux une gamme vaste et comparable d'utilitaires «intégrés».
Roman Starkov
@romkyns, pour tout projet non trivial, vous devez écrire beaucoup de code. Même si vous avez beaucoup de briques Lego, les Bionicles ne se réunissent pas comme par magie.
2
@Thor, mais cela aide vraiment d'avoir ces briques Lego à l'avance, au lieu d'avoir à construire un foret à huile, une usine de plastique et une extrudeuse de blocs lego en premier.
Roman Starkov
2
c ++ et Java ont tous deux des conteneurs génériques, et c ++ 11 a une bibliothèque standard complète pour les algorithmes de tri et les itérateurs, etc. De plus, pour ma part, je passe la plupart de mon temps de programmation à déterminer ce que je dois faire, pas à taper. Je pense donc que le simple fait de compter le nombre de lignes qu'il faut pour faire une chose n'est pas un indicateur clair de la vitesse à laquelle un programmeur serait dans ce langage.
Sam Redway
7

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.

Roman Starkov
la source
7
"vous évaluez vraiment le programmeur, pas le langage" - Pas si cela est fait scientifiquement. Prenez 100 programmeurs. Sélectionnez un projet général tel que "Ecrire une application de calendrier avec ces exigences spécifiques". Les exigences sont liées aux tests unitaires automatisés. 50 programmeurs écrivent l'application en C ++, 50 en Python, sélectionnés au hasard afin que les développeurs de qualité soient uniformément dispersés. Les résultats seraient un score combinant le temps moyen jusqu'à l'achèvement avec le nombre de tests unitaires réussis. Comparez la moyenne des résultats Python avec la moyenne du résultat C ++ et ... SCIENCE!
Morgan Herlocker
2
@Prof Peut-être que si vous obtenez un millier de chacun ... mais quand même, comment contrôlez-vous le fait que seules les personnes avec un certain état d'esprit et un certain niveau de capacité connaîtront le C ++?
Roman Starkov
vous pouvez faire en sorte que votre échantillon ne soit extrait que de personnes capables de passer un test de compétence en C ++ et Python. Beaucoup de mes anciens professeurs faisaient des études très similaires. Vous faites également quelques hypothèses que d'autres ont discutées ici: programmers.stackexchange.com/q/73715/3792
Morgan Herlocker
6

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.

btilly
la source
1

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

jon_darkstar
la source
-5

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.

wobbily_col
la source
6
« il a fallu un plein écran de code pour ouvrir et écrire dans un fichier »: Mettez ceci dans une classe utilitaire avec deux méthodes write()et read()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).
Giorgio
Bien sûr, mais Python, Perl et les langages supérieurs ont généralement pensé à ce genre de choses à l'avance, et vous n'avez donc pas besoin d'écrire les classes utilitaires (ou pas autant). L'utilisation d'une classe utilitaire prend toujours du temps et est un principe de code réutilisable qui s'applique à la fois à Java et à Python en fonction de ce que vous faites réellement.
wobbily_col
Cela suppose que Java a besoin de 50 à 60 lignes de code juste pour ouvrir et écrire un fichier. Ce n'est tout simplement pas correct.
h22