Python est-il adapté aux gros projets logiciels (non basés sur le Web) ?

StackOverflow https://stackoverflow.com/questions/35753

  •  09-06-2019
  •  | 
  •  

Question

En ce moment, je développe principalement en C/C++, mais j'ai écrit quelques petits utilitaires en Python pour automatiser certaines tâches et je l'aime vraiment en tant que langage (surtout la productivité).

Hormis les performances (problème qui pourrait parfois être résolu grâce à la facilité d'interfaçage de Python avec des modules C), pensez-vous qu'il soit adapté à une utilisation en production dans le développement d'applications complexes autonomes (pensez par exemple à un traitement de texte ou un outil graphique) ?

Quel IDE suggéreriez-vous ?Le IDLE fourni avec Python n'est pas suffisant même pour les petits projets à mon avis.

Était-ce utile?

La solution

Nous avons utilisé IronPython pour créer notre application de feuille de calcul phare (code de production de 40 kloc - et c'est Python, ce qui, selon l'OMI, signifie que le loc par fonctionnalité est faible) à Systèmes de résolution, donc je dirais certainement qu'il est prêt pour une utilisation en production d'applications complexes.

Il y a deux manières pour lesquelles cela pourrait ne pas vous être une réponse utile :-)

  1. Nous utilisons IronPython, pas le CPython plus habituel.Cela nous donne l'énorme avantage de pouvoir utiliser les bibliothèques de classes .NET.Je me prépare peut-être à flamber ici, mais je dirais que je n'ai jamais vraiment vu d'application CPython qui avait l'air "professionnelle" - donc avoir accès à l'ensemble de widgets WinForms a été une énorme victoire pour nous.IronPython nous offre également l'avantage de pouvoir facilement passer au C# si nous avons besoin d'une amélioration des performances.(Même si, pour être honnête, nous avons jamais il fallait faire ça.Jusqu'à présent, tous nos problèmes de performances sont dus au fait que nous avons choisi des algorithmes stupides plutôt qu'à la lenteur du langage.) Utiliser C# à partir d'IP est beaucoup plus facile que d'écrire une extension C pour CPython.
  2. Nous sommes une boutique Extreme Programming, nous écrivons donc des tests avant d'écrire du code.Je n'écrirais pas de code de production dans un langage dynamique sans d'abord écrire les tests ;l'absence d'étape de compilation doit être couverte par quelque chose, et comme d'autres personnes l'ont souligné, refactoriser sans cela peut être difficile.(La réponse de Greg Hewgill suggère qu'il a eu le même problème.D'un autre côté, je ne pense pas que j'écrirais - ni surtout que je refactoriserais - du code de production dans n'importe lequel langue ces jours-ci sans écrire les tests au préalable - mais YMMV.)

Concernant:l'EDI - nous avons été plutôt satisfaits du fait que chaque personne utilise son éditeur de texte préféré ;si vous préférez quelque chose d'un peu plus lourd alors WingIDE est plutôt bien considéré.

Autres conseils

Vous trouverez principalement deux réponses à cette question – la réponse religieuse (Oui !Bien sûr!C'est la meilleure langue qui soit !) et l'autre religieuse (vous vous moquez de moi !)Python?Non...ce n'est pas assez mature).Je vais peut-être sauter la dernière religion (Python ?!Utilisez Ruby !).La vérité, comme toujours, est loin d’être évidente.

Avantages:il est facile, lisible, piles incluses, contient de nombreuses bonnes bibliothèques pour à peu près tout.Sa frappe expressive et dynamique le rend plus concis dans de nombreux cas.

Les inconvénients:en tant que langage dynamique, son support IDE est bien pire (achèvement correct de la syntaxe) a besoin typage statique, qu'il soit explicite en Java ou déduit en SML), son système d'objets est loin d'être parfait (les interfaces, ça vous tente ?) et il est facile de se retrouver avec un code désordonné dont les méthodes renvoient soit un int, soit un booléen, soit un objet, soit une sorte de sous circonstances inconnues.

Mon avis – J'adore Python pour les scripts, l'automatisation, les petites applications Web et d'autres tâches simples et bien définies.À mon avis, c'est de loin le meilleur langage dynamique sur la planète.Cela dit, je le ferais jamais utilise le n'importe lequel langage typé dynamiquement pour développer une application de taille conséquente.

Dites – ce serait bien de l'utiliser pour Stack Overflow, qui compte trois développeurs et je suppose pas plus de 30 000 lignes de code.Pour les choses plus importantes – d’abord, votre développement serait ultra rapide, puis une fois que l’équipe et la base de code se développeront, les choses ralentiront plus qu’elles ne le feraient avec Java ou C#.Vous devez compenser le manque de contrôles du temps de compilation en écrivant plus de tests unitaires, les refactorisations deviennent plus difficiles car vous ne savez jamais ce que votre refacoring a cassé jusqu'à ce que vous exécutiez tous les tests ou même l'ensemble de la grande application, etc.

Maintenant, décidez de la taille de votre équipe et de la taille de l'application une fois qu'elle sera terminée.Si vous avez 5 personnes ou moins et que la taille cible est à peu près Stack Overflow, allez-y, écrivez en Python.Vous terminerez en un rien de temps et serez satisfait d’une bonne base de code.Mais si vous voulez écrire un deuxième Google ou Yahoo, vous serez bien meilleur avec C# ou Java.

Note latérale sur C/C++ que vous avez mentionnée :si vous n'écrivez pas de logiciel critique en termes de performances (par exemple, un raytracer parallèle massif qui fonctionnera pendant trois mois pour le rendu d'un film) ou un système très critique (par exemple, un atterrisseur sur Mars qui volera trois ans d'affilée et n'a qu'une seule chance d'atterrir correctement, sinon vous perdez 400 millions de dollars), ne l'utilisez pas.Pour les applications Web, la plupart des applications de bureau, la plupart des applications en général, ce n'est pas un bon choix.Vous mourrez en déboguant des pointeurs et en allouant de la mémoire dans une logique métier complexe.

À mon avis, Python est plus que prêt pour développer des applications complexes.Je vois la force des pythons davantage du côté du serveur que de l'écriture de clients graphiques.Mais jetez un oeil à http://www.resolversystems.com/.Ils développent une feuille de calcul complète en python en utilisant le port .net ironpython.

Si vous connaissez Eclipse, jetez un oeil à pydev qui fournit une prise en charge de l'auto-complétion et du débogage pour python avec tous les autres avantages d'Eclipse comme le support svn.Le gars qui le développe vient d'être acheté par aptana, ce sera donc un choix solide pour l’avenir.

@Marcin

Les inconvénients:En tant que langage dynamique, a un support IDE bien pire (une bonne complétion de la syntaxe nécessite un typage statique, que ce soit explicite en Java ou déduit dans SML),

Vous avez raison, l'analyse statique peut ne pas fournir une complétion complète de la syntaxe pour les langages dynamiques, mais je pense que pydev fait très bien le travail.De plus, j'ai un style de développement différent lors de la programmation de Python.J'ai toujours une session ipython ouverte et avec un F5, j'obtiens non seulement l'achèvement parfait d'ipython, mais également l'introspection et la manipulation d'objets.

Mais si vous voulez écrire Second Google ou Yahoo, vous serez beaucoup mieux avec C # ou Java.

Google vient de réécrire Jaiku pour travailler sur App Engine, le tout en python.Et pour autant que je sache, ils utilisent également beaucoup de python dans Google.

J'aime beaucoup python, c'est généralement mon langage de prédilection ces jours-ci pour les petites choses (non graphiques) que je fais moi-même.

Cependant, pour certains projets Python plus importants que j'ai abordés, je trouve que ce n'est pas tout à fait la même chose que la programmation en C++, par exemple.Je travaillais sur un analyseur de langage et j'avais besoin de représenter un AST en Python.Cela fait certainement partie de ce que Python peut faire, mais j'ai eu quelques problèmes avec certaines refactorisations.Je changeais la représentation de mon AST et changeais beaucoup de méthodes et de classes, et j'ai découvert que le typage fort qui me serait disponible dans une solution C++ me manquait.La frappe du canard de Python était presque aussi flexible et je me suis retrouvé à ajouter beaucoup de assert code pour essayer de vérifier mes types pendant l'exécution du programme.Et puis, je ne pouvais pas vraiment être sûr que tout était correctement tapé à moins de tester la couverture de code à 100 % (ce que je n'avais pas fait à l'époque).

En fait, c'est une autre chose qui me manque parfois.Il est possible d'écrire du code syntaxiquement correct en Python qui ne s'exécutera tout simplement pas.Le compilateur est incapable de vous en informer jusqu'à ce qu'il exécute réellement le code, donc dans les chemins de code rarement utilisés tels que les gestionnaires d'erreurs, vous pouvez facilement avoir des bogues invisibles qui se cachent.Même un code aussi simple que l'impression d'un message d'erreur avec une chaîne de format % peut échouer au moment de l'exécution en raison de types incompatibles.

Je n'ai utilisé Python pour aucun élément d'interface graphique, je ne peux donc pas commenter cet aspect.

Python est considéré (parmi les programmeurs Python :) comme un excellent langage pour le prototypage rapide.Il n'y a pas beaucoup de syntaxe superflue qui gêne votre processus de réflexion, donc la plupart du travail que vous effectuez a tendance à être consacré au code.(Il faut beaucoup moins d'idiomes pour être impliqué dans l'écriture d'un bon code Python que pour écrire un bon C++.)

Compte tenu de cela, la plupart des programmeurs Python (CPython) souscrivent à la philosophie selon laquelle « l’optimisation prématurée est la racine de tous les maux ».En écrivant du code Python de haut niveau (et nettement plus lent), vous pouvez optimiser les goulots d'étranglement à l'aide de liaisons C/C++ lorsque votre application est presque terminée.À ce stade, il devient plus clair quels sont vos algorithmes gourmands en processeur grâce à un profilage approprié.De cette façon, vous écrivez la plupart du code d'une manière très lisible et maintenable tout en permettant des accélérations ultérieures.Vous verrez plusieurs modules de bibliothèque Python écrits en C pour cette raison.

La plupart des bibliothèques graphiques en Python (c.-à-d.wxPython) ne sont de toute façon que des wrappers Python autour des bibliothèques C++, vous écrivez donc pratiquement sur un backend C++.

Pour répondre à votre question IDE, SPE (Stani's Python Editor) est un bon IDE que j'ai utilisé et Éclipse avec PyDev fait également le travail.Les deux sont des OSS, vous pouvez donc les essayer gratuitement !

[Modifier] @Marcin :Avez-vous déjà écrit plus de 30 000 LOC en Python ?C'est aussi drôle que vous mentionniez les soucis d'évolutivité de Google, puisqu'ils sont les plus grands partisans de Python !Une petite organisation appelée NASA utilise également fréquemment Python ;) voir "Un codeur et 17 000 lignes de code plus tard".

Rien à ajouter aux autres réponses, en plus que si vous choisissez python, vous doit utiliser quelque chose comme pylint dont personne n'a parlé jusqu'à présent.

Une façon de juger à quoi sert Python est d’examiner quels produits utilisent Python à l’heure actuelle.Ce page wikipédia a une longue liste comprenant divers frameworks Web, systèmes de gestion de contenu, systèmes de contrôle de version, applications de bureau et IDE.

Comme il est dit ici - "Certains des plus grands projets utilisant Python sont le serveur d'applications Zope, YouTube et le client BitTorrent d'origine.Les grandes organisations qui utilisent Python incluent Google, Yahoo !, le CERN et la NASA.ITA utilise Python pour certains de ses composants."

Donc en bref, oui, il est « approprié pour une utilisation en production dans le développement d’applications complexes autonomes ».Il en va de même pour de nombreuses autres langues, avec divers avantages et inconvénients.Quel est le meilleur langage pour votre cas d'utilisation particulier est trop subjectif pour répondre, donc je n'essaierai pas, mais souvent la réponse sera "celui que vos développeurs connaissent le mieux".

La refactorisation est inévitable sur des bases de code plus volumineuses et le manque de typage statique rend cela beaucoup plus difficile en python que dans les langages typés statiquement.

Et pour autant que je sache, ils utilisent également beaucoup de python dans Google.

Eh bien, je l'espère, le créateur de Python travaille toujours chez Google si je ne me trompe pas ?

Quant à l'utilisation de Python, je pense que c'est un excellent langage pour les applications autonomes.Il est largement utilisé dans de nombreux programmes Linux, et il existe quelques ensembles de widgets intéressants pour faciliter le développement d'interfaces graphiques.

Python est un plaisir à utiliser.Je l'utilise régulièrement et j'écris également beaucoup de code pour travailler en C#.L'écriture de code d'interface utilisateur en Python présente deux inconvénients.La première est qu’il n’existe pas un seul cadre d’assurance-chômage accepté par la majorité de la communauté.lorsque vous écrivez en c#, le runtime .NET et les bibliothèques de classes sont tous destinés à fonctionner ensemble.Avec Python, chaque bibliothèque d'interface utilisateur possède sa propre sémantique qui est souvent en contradiction avec l'état d'esprit pythonique dans lequel vous essayez d'écrire votre programme.Je ne blâme pas les rédacteurs de la bibliothèque.J'ai essayé plusieurs bibliothèques (wxwidgets, PythonWin[Wrapper around MFC], Tkinter). Ce faisant, j'ai souvent eu l'impression d'écrire du code dans un langage autre que Python (malgré le fait qu'il s'agissait de python) car les bibliothèques ne le sont pas. Ce n'est pas exactement pythonique, c'est un portage d'un autre langage, que ce soit c, c++, tk.

Donc pour moi, j'écrirai du code UI en .NET (pour moi C#) à cause de l'IDE et de la cohérence des bibliothèques.Mais quand je pourrai, j'écrirai la logique métier en python car c'est plus clair et plus amusant.

Je sais que je dis probablement une évidence, mais n'oubliez pas que la qualité de l'équipe de développement et sa familiarité avec la technologie auront un impact majeur sur votre capacité à livrer.

Si vous avez une équipe solide, ce n'est probablement pas un problème si elles vous sont familières.Mais si vous avez des personnes âgées de plus de 9 à 5 ans qui ne connaissent pas la technologie, elles auront besoin de plus d'assistance et vous devrez passer un appel si les gains de productivité valent quel que soit le coût de cette assistance.

Je n'ai eu qu'une seule expérience Python, mon projet trash-cli.

Je sais que certains ou tous les problèmes dépendent probablement de mon inexpérience avec Python.

J'ai trouvé frustrant ces choses :

  1. la difficulté de trouver un bon IDE gratuitement
  2. le support limité de la refactorisation automatique

De plus:

  1. la nécessité d'introduire deux niveaux de regroupement de packages et de modules me déroute.
  2. il me semble qu'il n'existe pas de convention de dénomination de code largement adoptée
  3. il me semble qu'il existe des documents sur les API de bibliothèque standard qui sont incomplets
  4. le fait que certaines bibliothèques standards ne soient pas entièrement orientées objet m'énerve

Bien que certains codeurs Python me disent qu'ils n'ont pas ces problèmes, ou qu'ils disent que ce ne sont pas des problèmes.

Essayez Django ou Pylons, écrivez une application simple avec les deux, puis décidez laquelle vous convient le mieux.Il en existe d'autres (comme Turbogears ou Werkzeug) mais ce sont les plus utilisés.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top