J’ai lu récemment sur un forum la question “quand utiliser Python ?”. Mais la vérité c’est que Python est un langage globalement bon partout. En fait, on peut presque tout faire en Python car c’est un langage bourré de qualités avec une belle communauté et des libs pour presque tout.
Du coup, je pense qu’il est plus judicieux de se poser la question inverse : quand ne pas utiliser Python ?
Pour le moment, j’évite d’utiliser Python dans les cas suivants :
- L’équipe avec laquelle je travaille est bien meilleure dans un autre langage. Il faut profiter des compétences de chacun au maximum plutôt que privilégier une technologie, c’est plus productif.
- Je reprends du code d’un projet solide, dans un autre langage. Inutile de réécrire quelque chose qui est propre et qui fonctionne.
- Je travaille dans un environnement où d’autres technologies sont mieux intégrées. Par exemple, dans une entreprise avec une forte culture Java, faire les choses dans son coin ne va pas permettre un bon travail d’équipe. Travailler avec une boîte qui a des serveurs qu’ils ne peuvent pas changer et d’autres technos ? Inutile de forcer la main.
- Des technologies plus productives existent pour ce domaine : c’est le cas de l’embarqué, ou des jeux vidéos. Ça ne veut pas dire qu’on ne peut pas en faire en Python. En fait, il y a un fort travail de la communauté pour améliorer cela en ce moment même. Mais difficile de combattre les outils en C/C++ dans ces domaines.
- Je suis pressé, et la solution de facto n’est pas en Python. Par exemple, je veux faire du Web temps réel. Si j’ai le temps, je ferai du Python, car ce n’est pas grave si il me faut aiguiser moi-même quelques outils pour obtenir le résultat désiré. Si par contre j’ai 2 semaines devant moi, je prendrais NodeJS, malgré mon dégoût pour le Javascript, car je suis pragmatique.
- J’ai mesuré mes besoins objectivement, et est évalué que Python ne serait pas assez performant malgré toute les mesures d’optimisation que je sais mettre en œuvre. Dans ce cas, on se tourne vers des solutions plus lourdes mais nativement plus rapides : C, GO, Erlang etc.
- Je vise une plateforme en particulier (Windows, iOS…), je n’ai pas besoin de porter mon code, et je sais qu’utiliser les outils de la boîte qui fait l’OS me donnera de meilleurs résultats. Par exemple si je vise Android uniquement, utiliser leur SDK donnera une app plus fluide et une UI mieux intégrée.
Dans tous les autres cas, Python est un choix excellent.
Article intéréssant !
A quand un bon MMORPG en python?
Le problème c’est peut-être le manque de performances en python du fait qu’il soit un langage haut niveau (donc facile à programmer mais en résulte une certaine “lourdeur” (n’est-ce qu’un préjugé?), difficile de faire un “gros” jeu optimisé à mort =/.
Pourtant niveau programmation objet python n’est pas trop mal foutu…Programmer un MMORPG serait si fun sur ce langage! (c’est bien en objet que sont faits tous les MMORPS n’est-ce pas? )
(Ps ; je ne suis qu’un petit étudiant de fac / débutant en python mais j’en apprends de plus de plus, en partie grâce à sametmax.com et autres tutos sur le net. Ne m’agressez pas si je dis de la merde :P )
“Je reprends du code d’un projet solide” … donc c’ est du python….. :o
@boblinuxz : la plupart des jeux utilises plusieurs langages. Par exemple, un pour le moteur du jeu, un pour le scripting, un pour le serveur multijoueur, etc. Python peut très bien être une surcouche à un moteur en C/C++. La performance n’est pas du tout un problème, c’est juste qu’historiquement, les outils ont été conçu autour d’autres technos.
Vous avez testé ça pour du Python qui dépote ?
https://github.com/cosmo-ethz/hope
Nope.
Ca marche aussi avec PHP.
Pas vraiment. PHP, en dehors du Web, c’est vraiment limité en outils disponibles, en hooks, en libs… On a pas de libs scientifique équivalente à scipy, pas autant de formats de fichiers supportés pour être un langage glu, pas des wrappers sur QT/GTK aussi aboutis que ceux dans les autres langages… PHP, c’est comme Ruby, si on sort du Web, on se retrouve très vite au dépourvu.
C’est bien de voir que tu n’es pas sectaire ;) C’est une belle ouverture d’esprit ;)
J’ai découvert ce blog au boulot, mais j’ai rapidement évité de le consulter au boulot (dommage), mais c’est NSFW ! Heureusement que je peux regarder ça chez moi quand même, parce que tes articles sont super intéressant !
un MMORPG en Python ca existe déjà: http://en.wikipedia.org/wiki/Eve_Online sur Stackless Python ;)
Très bon article.
J’ai vu le mot “GO” ! Vous pourrez nous faire un article dessus svp? :3
@nairolf pour le nsfw, je me suis abo au flux rss, comme ça je reluque les articles à ma guise :)
Pour la communauté, tout du moins les Frenchies, c’est vrai qu’elle est bien cool. Au début, on a tendance à rester sur sa réserve/ses habitudes de dev PHP (passant à Python). Mais une fois un petit cap passé, les liens se tissent relativement facilement. Et il faut avouer que ça joue beaucoup pour démarrer un nouveau langage. Un Mr que j’apprécie beaucoup pour l’avoir croisé IRL, c’est le sieur @Linovia_net (et son binôme @mrjmad). Creuser un peu leur profil et vous me comprendrez si vous ne les connaissez pas déjà ;)
Enfin, pour revenir à “quand ne pas utiliser Python” : étant initiateur de tout ce que je produis au boulot et qui ne passe jamais entre les mains des clients (je donne pour l’heure dans le middleware), je dirai donc évidement : “jamais”
@Nurza: si on tappe dans du Go, après faudra faire du Erlang, et D, et Rust… Déjà qu’on fait des articles JS sur un blog Python, on va pas couvrir tous les langages hype du moment. On va essayer de traiter Python correctement, c’est déjà assez difficile. Tellement difficile en fait que personne le fait.
Il faut arrêter avec les préjugés du type “Python est plus lent qu’Erlang, C ou Go”, pas nécessairement la vérité sur un exemple concret: http://www.techempower.com/benchmarks/#section=data-r9&hw=peak&test=query&l=e8h&d=6
Ce n’est qu’un benchmark, sur un cas particulier, mais bon, déjà + proche de ce qu’on fait en production que la plupart des benchmarks publiés sur le Web.
@tony: tiens, jamais entendu parler de celui-là. Actuellement point de vue jit dans le milieu scientifique c’est plutôt Numba qui est connu (mais il est ultra chiant à installer en dehors d’Anaconda). J’ai testé Numba, mais il n’a jamais fonctionné sur mes exemples réels, comme pas mal d’autres lib du genre. Dommage…
Hello,
une petite coquille ici : J’ai mesuré mes besoins objectivement, et AI évalué (j’ai)
de rien ^^
Ceci dit, bon blog, merci :)
Quelle est la différence entre HOPE et Cython ?
Dans l’ hypothèse d’un projet expérimental à la Eve Online en ultra méga light :
Comment travailler avec un champion du C/C++/Lua qui ne connait rien au Python
quand on ne connait soi-même que du Python ?
Quelles pistes sont explorées pour profiter des avantages du Python et des C-oïdes ?
Deux projets qui ont un but similaires mais passent pas des étapes différentes.
HOPE fait de la compilation en C++ à la volée sur des portions de code au premier moment de l’éxécution qu’il stocke dans un dossier .hope. A la deuxième exécution (par exemple si la fonction est appelée une seconde fois), ça réutilise ce code.
Cython compile du code Cython, un superset de Python optionnellement typé. Ca pond un exécutable compilé à partir d’un programme Python complet.
Il va falloir vous y mettre. Pour le codeur C, se mettre à Python c’est facile. Tu le brief en 3 jours pour qu’il écrire pas du Python comme on écrit du C, et il est good. Dans l’autre sens, tu vas en chier. Mais bon, ça fera de toi un meilleur dev.
Dans tous les cas, il faut que vous compreniez un peu des deux.
Cython est le meilleur choix car il permet facilement d’appeler du code C depuis Python et inversement. Généralement tu voudras laisser les parties critiques (moteur graphique, data crunching) à ton pote Ciste, et toi tu t’occupera t’appeler son code pour de la logique de haut niveau (scripting de scénario, AI, calculs ponctuels, etc).
Une alternative et d’utiliser WAMP qui permettra au code d’appeler via RPC du code Python vers C++ et inversement via le serveur WAMP. Tes codes seront donc des services qui s’appelleront les un les autres. Pour la partie jeu en ligne, c’est un bon compromis.
J’ajouterai aussi le cas de figure: “je travaille trop bas niveau pour qu’il soit confortable de bosser avec un langage qui n’est pas prévu pour être compilé en code natif (du moins en première intention), ni pour s’exécuter sans dépendance.”
C’est un cas typique. Pareil pour la prog temps réel.
J’aurai envie de dire qu’il ne faut pas utiliser Python pour des logiciels lourds qui demande du code robuste et de bonnes performances (oui, c’est peu précis, je sais). J’ai de la peine à voir un logiciel lourd en Python de plus de 5’000 lignes de code. Je dis pas que c’est impossible mais ce n’est certainement pas adapté.
Youtube, Pinterest, Disqus, Instagram sont tous massivement codés en Python. Je pense qu’ils font plus de 5000 lignes de code.
En fait, la nature même de Python le rend excellent pour de gros projets :
@umon : franchement, c’est du préjugé à 2 balles de dire ce genre de choses.
J’ai codé des démons avec + de lignes de code qui sont à la fois maintenable et qui tiennent un peu mieux la charge qu’un Apache + PHP (Réécriture d’applications Web existantes)
@Ludovic
Ne fait pas de ton cas une généralité.
PHP n’est même pas un langage, c’est une erreur à oublier.
@Sam
Les sites que tu cites ne sont pas codé entièrement en Python (évidemment), il est beaucoup utilisé comme “glue language”. Je me suis mal exprimé, quand je parlais de “logiciels lourds” c’était pas analogie à “client lourd”. Par exemple un logiciel comme Blender ne sera pas codé en Python mais l’utilisera comme langage de script (ce qu’il est en définitive).
Des langages comme F# ou Scala, certes beaucoup plus jeunes que Python, n’ont pratiquement que des avantages par rapport à lui : typage statique à inférence, un ordre de grandeur plus rapide, s’utilise à la fois sous la forme de scripts et/ou de binaire packagé, etc… Évidemment, comme partout, le domaine du logiciel a énormément d’inertie.