Sur SO, je suis tombé sur une question concernant la plate-forme, Java ou Python, la meilleure pour développer sur Google AppEngine. Beaucoup de gens se vantaient de la productivité accrue acquise grâce à l'utilisation de Python sur Java. Une chose que je dirais à propos de l'argument de productivité Python vs Java, c'est que Java a d'excellents IDE pour accélérer le développement alors que Python fait vraiment défaut dans ce domaine en raison de sa nature dynamique.
Donc, même si je préfère utiliser Python en tant que langage, je ne pense pas que cela donne une augmentation de productivité par rapport à Java, en particulier lors de l'utilisation d'un nouveau framework. Évidemment, si c'était Java vs Python et que le seul éditeur que vous pouviez utiliser était VIM, alors Python vous donnerait un énorme gain de productivité, mais lorsque les IDE sont mis dans l'équation, ce n'est pas aussi clair.
Je pense que les mérites de Java sont souvent uniquement évalués au niveau du langage et souvent sur des hypothèses dépassées, mais Java a de nombreux avantages externes au langage lui-même, par exemple la JVM (souvent critiquée mais offre un énorme potentiel), d'excellents IDE et outils, un grand nombre de tiers bibliothèques de fête, plates-formes, etc.
Question, Python / les langages dynamiques associés donnent-ils vraiment les gains de productivité énormes dont on parle souvent? (en envisageant d'utiliser de nouveaux cadres et de travailler avec des applications moyennes à grandes).
Réponses:
L'un des principaux avantages de Python est sa philosophie «piles incluses»: une bibliothèque standard étendue et simple à utiliser. En Java, la simple lecture d'un fichier texte nécessite plusieurs lignes de code, des lecteurs imbriqués et autres. En Python, c'est
f.read()
. Ce sera certainement un énorme gain de productivité, en particulier dans le prototypage rapide. Le langage Python est également généralement moins verbeux, ce qui n'est pas une mauvaise chose (bien que je pense que l'importance de la verbosité par rapport à la concision est souvent surestimée).Cependant, si vous travaillez déjà sur un cadre, tel que GAE, alors je m'attendrais à ce que les différences soient beaucoup plus petites, et principalement à la maîtrise personnelle de la langue. La plupart du temps, vous ne ferez que câbler le cadre avec la syntaxe de votre choix, et la grande bibliothèque standard de Python n'aide guère.
la source
List<String> lines = Files.readAllLines(Paths.get("file.txt"), Charset.forName("UTF-8"));
. Pas mal! (Il s'agit de java 7 qui n'a pas encore été publié le 11 mars).Voici mes 2 cents. D'après mon expérience, Python est bon pour les projets de petite à moyenne taille alors que pour les grands projets, je suis plus productif avec Java.
En général, je peux utiliser un langage typé dynamiquement comme Python (ou PHP) pour des projets plus petits: il n'est pas trop complexe, vous voulez le faire rapidement et il n'y a pas trop de choses qui peuvent mal tourner. Dans ce cas, je trouve que Python peut être plus pratique à utiliser.
Cependant, lorsque je dois développer un logiciel plus volumineux, je préfère un langage typé comme Java car je préfère que le compilateur effectue autant de vérifications que possible pour moi. D'après mon expérience, dans les projets plus importants, je dois passer plus de temps à corriger les bogues avec Python qu'avec Java, donc je ne m'inquiète pas s'il faut un peu plus pour écrire le code en Java car cela gagnera du temps plus tard.
la source
Je suis beaucoup plus productif dans des langages plus puissants comme Python ou Ruby. Peu importe si une partie du code Java peut être générée par un IDE. Il y a plus de code à lire et à maintenir. Il faut plus de temps pour parcourir le code répétitif et trouver les parties importantes, et plus de temps pour le changer. C'est bien qu'Eclipse puisse convertir
à:
mais chaque fois que j'ouvrirai la classe, je verrai cette camelote et je devrai la parcourir pour trouver les parties intéressantes. De plus, pendant la maintenance, des erreurs peuvent être introduites dans le code généré.
Je préférerais de beaucoup voir:
Pour moi, la nécessité pour un IDE de travailler efficacement avec Java est une bonne raison de choisir un autre langage.
Peut-être plus puissamment, comparez ce code Ruby:
contre un code Java similaire:
Le code Ruby est une traduction directe de la spécification: le poids moyen des personnes de plus de 200 (cm). Un commentaire serait tout à fait redondant.
Le code Java nécessite un travail considérable pour écrire et lire.
Paul Graham fait un argument convaincant pour la brièveté des langages de programmation dans cet essai . Après avoir fait des mathématiques de niveau supérieur, je trouve son argument convaincant et les arguments contre la brièveté faibles. Certes, une seule ligne dans une langue de haut niveau peut être plus difficile à comprendre qu'une seule ligne dans une langue de bas niveau, tout comme une équation différentielle partielle est plus difficile à comprendre qu'une simple addition. Mais une seule ligne dans un langage puissant est plus facile à comprendre que les cinq ou dix lignes qu'elle remplace. Imaginez que vous lisiez un texte mathématique écrit à l'aide de mots plutôt que de symboles.
la source
dateOfBirth
public. Si la logique doit y être ajoutée ultérieurement lors de l'obtention ou de la définition, ajoutez un_dateOfBirth
pour stocker les données, puis créez unproperty
nomdateOfBirth
avec les méthodes get et set. Le code appelant n'a pas du tout besoin de changer en Python. Java n'utilise que des accesseurs car il n'a pas le concept de "propriété".people.stream().filter(p -> p.getHeight() > 200).mapToDouble(Person::getWeight).average().orElse(0);
Je suis passé de Java à Python il y a quelques années et je pense personnellement que je suis plus productif. Comme le souligne @Joonas, une grande partie de la productivité provient de la bibliothèque empaquetée. Mais certains proviennent de la langue elle-même. Je ne peux pas imaginer ne pas avoir de dictionnaires, de listes de compréhension, de fonctions d'ordre supérieur et d'un shell.
Gardez à l'esprit que si vous connaissiez déjà Java, il faudra un certain temps pour maîtriser Python.
la source
C'est un peu une vieille question, mais j'aimerais ajouter mon 0,03 $. Je pense que cela dépend aussi beaucoup de votre façon de penser. Pour ma part, je ne supporte vraiment pas les langages dynamiques et interprétés. Je suis, d'autre part, un grand fan de langues typées statiquement. Bien sûr, l'utilisation de Java peut être plus verbeuse, mais je trouve plus facile à lire et à maintenir une fois que tout est dit et fait. Je trouve que Python, Ruby et Perl sont extrêmement difficiles à lire (pour moi). Je ne peux simplement pas envelopper ma tête même si j'ai essayé. Cela dit, je peux très bien écrire du code dans Scala et ce n'est pas grave. Je pense que cela dépend de ce que vous êtes à l'aise. À la fin de la journée, Java va être beaucoup plus puissant; plus que Ruby, Python ou Perl. La JVM est une technologie convaincante et apprendre à en exploiter la puissance pourrait s'avérer très bénéfique pour vous.
la source
Je trouve que Python, Ruby, Javascript et SQL sont beaucoup plus productifs que les langages compilés tels que Java parce que ces langages ont une boucle de rétroaction très rapide. Vous pouvez exécuter quelques lignes de code sur une ligne de commande et savoir immédiatement si le code est correct ou non. S'il lève des exceptions, vous le savez immédiatement. Avec Java, vous devez compiler, empaqueter et déployer, ce qui peut souvent prendre des minutes pour les grands systèmes, ce qui entraîne un cycle de rétroaction très lent.
Le cycle de rétroaction rapide vous permet d'itérer rapidement vers une bonne solution, et c'est ce qui rend les langages dynamiques plus productifs.
la source
feedback loop
J'ai fait beaucoup plus de python récemment et je suis programmeur java depuis longtemps, et pour un tout nouveau développement, je pense que je suis un peu plus productif en python. beaucoup de choses assez simples en java peuvent être un peu fastidieuses, comme le traitement de fichiers / flux, la lecture de trucs depuis une URL, la sérialisation de XML, etc. par "fastidieux", je veux dire ce qui vous prend 5 lignes de code en java semble souvent n'en prendre qu'un en python. Cependant, l'utilisation des bons outils, comme la goyave ou une autre API de collections, peut vraiment vous aider.
Je suppose que je dis que l'un des avantages de python est qu'il est livré avec de nombreuses fonctionnalités dont vous avez besoin pour utiliser une bibliothèque tierce en java.
tout cela dit, pour certaines choses, je serais beaucoup plus productif en java que je ne pourrais l'être en python, en particulier quand il s'agit de refactoriser et de travailler avec de grandes bases de code, etc.
la source