C'est avec Python que j'ai réussi à développer mes projets (et pas en C ou en Java "appris" pendant les études), mais maintenant avec quelques années dans les pattes et des softs en production sur mes serveurs avec des utilisateurs et utilisatrices, j'ai bien trop de frustrations pour envisager de recommencer un projet en Python (et effectivement, je ne le fais pas).
Le déploiement
On ne peut pas créer un exécutable d'un projet Python. Ça rend le déploiement compliqué.
Si tu ne "pinnes" pas assez tes dépendances, et que tu lances "pip install" lors d'une mise à jour (tout le monde le fait, non ?), alors l'installation peut péter. Ça peut péter parce qu'une dépendance de dépendance n'a pas assez spécifié ses dépendances à elle.
Le déploiement peut péter lors d'un "pip install" parce que pip lui-même pète, y compris lors du passage à une version mineure. Exemple: #7620.
Alors il y a quelques essais (platter), mais ce ne sont pas des solutions natives, et ça ne remplace pas un binaire.
En comparaison, avec un binaire: rsync vers le serveur, on le lance, et voilà.
Les types, les typos, l'environnement de l'éditeur
Python est typé dynamiquement. Un moyen de savoir qu'on n'a pas fait d'erreurs bêtes est d'écrire des tests unitaires qui passent par toutes les branches du code. Si on ne fait pas ça, on peut livrer du code avec une faute de frappe, qui pète en prod. C'est déjà dommage, que le langage qu'on utilise ne nous offre pas plus de garanties. Il faut donc configurer son éditeur avec des outils externes pour vérifier ces erreurs évitables. OK, ça paraît normal. Mais les outils du genre flake8 ou pylint ne vérifient pas grand chose (selon moi, en comparaison à d'autres langages), et ce sont des outils externes, secondaires, qu'il faut configurer pour tout projet, qui ajoutent un petit temps de latence au démarrage ou dans la CI, qu'il faut lancer en parallèle (mypy), etc. C'est bien, mais j'ai été séduit par un langage qui nous donne plein de warnings et d'erreurs à la compilation (en plus on peut compiler une fonction à la fois en étant dans son éditeur, ce qui donne un feedback immédiat).
Les performances, la parallélisation
Les performances sont très moyennes, ce qu'on réalise quand le projet prend de l'ampleur :/
La stabilité
Le langage évolue constamment et ça me fatigue. J'ai pris du retard sur la mise à jour de Django et Python 3 et je le regrette, je crains que chaque jour qui passe me rende le processus plus difficile. Je crains que chaque passage de version apporte son lot de petits bugs. Je trouve que j'ai autre chose à faire sur le temps passé sur mon logiciel libre à me battre avec Python et à résoudre ses erreurs liées à l'écosystème. Je devrais écrire encore plus de tests, surtout plus de tests end-to-end (avec Selenium et cie), et plus tester manuellement. Mais je ne suis pas entouré par une équipe, je ne suis pas payé à faire ça, d'autres langages n'ont pas ce problème... je me permets donc de blâmer Python, et pas moi-même :D
Certains langages sont très stables, même si leur compilateurs évoluent, même si les librairie évoluent. On peut exécuter un programme écrit il y a plus de 20 ans. Vous vous rendez compte ? (là je pense à Common Lisp)
Conseil au débutant: ce n'est pas pour autant que Python est à rejeter, étant donné les bons frameworks et librairies disponibles. On peut apprendre beaucoup avec. Mon conseil est de continuer à chercher un autre langage qui te plaise, sans ces inconvénients.
# L'interview de moi-même - mes frustrations
Posté par dzecniv . En réponse à la dépêche Python — partie 10 — Entretiens. Évalué à 10.
C'est avec Python que j'ai réussi à développer mes projets (et pas en C ou en Java "appris" pendant les études), mais maintenant avec quelques années dans les pattes et des softs en production sur mes serveurs avec des utilisateurs et utilisatrices, j'ai bien trop de frustrations pour envisager de recommencer un projet en Python (et effectivement, je ne le fais pas).
Le déploiement
On ne peut pas créer un exécutable d'un projet Python. Ça rend le déploiement compliqué.
Si tu ne "pinnes" pas assez tes dépendances, et que tu lances "pip install" lors d'une mise à jour (tout le monde le fait, non ?), alors l'installation peut péter. Ça peut péter parce qu'une dépendance de dépendance n'a pas assez spécifié ses dépendances à elle.
Le déploiement peut péter lors d'un "pip install" parce que pip lui-même pète, y compris lors du passage à une version mineure. Exemple: #7620.
Alors il y a quelques essais (platter), mais ce ne sont pas des solutions natives, et ça ne remplace pas un binaire.
En comparaison, avec un binaire: rsync vers le serveur, on le lance, et voilà.
Les types, les typos, l'environnement de l'éditeur
Python est typé dynamiquement. Un moyen de savoir qu'on n'a pas fait d'erreurs bêtes est d'écrire des tests unitaires qui passent par toutes les branches du code. Si on ne fait pas ça, on peut livrer du code avec une faute de frappe, qui pète en prod. C'est déjà dommage, que le langage qu'on utilise ne nous offre pas plus de garanties. Il faut donc configurer son éditeur avec des outils externes pour vérifier ces erreurs évitables. OK, ça paraît normal. Mais les outils du genre flake8 ou pylint ne vérifient pas grand chose (selon moi, en comparaison à d'autres langages), et ce sont des outils externes, secondaires, qu'il faut configurer pour tout projet, qui ajoutent un petit temps de latence au démarrage ou dans la CI, qu'il faut lancer en parallèle (mypy), etc. C'est bien, mais j'ai été séduit par un langage qui nous donne plein de warnings et d'erreurs à la compilation (en plus on peut compiler une fonction à la fois en étant dans son éditeur, ce qui donne un feedback immédiat).
Les performances, la parallélisation
Les performances sont très moyennes, ce qu'on réalise quand le projet prend de l'ampleur :/
La stabilité
Le langage évolue constamment et ça me fatigue. J'ai pris du retard sur la mise à jour de Django et Python 3 et je le regrette, je crains que chaque jour qui passe me rende le processus plus difficile. Je crains que chaque passage de version apporte son lot de petits bugs. Je trouve que j'ai autre chose à faire sur le temps passé sur mon logiciel libre à me battre avec Python et à résoudre ses erreurs liées à l'écosystème. Je devrais écrire encore plus de tests, surtout plus de tests end-to-end (avec Selenium et cie), et plus tester manuellement. Mais je ne suis pas entouré par une équipe, je ne suis pas payé à faire ça, d'autres langages n'ont pas ce problème... je me permets donc de blâmer Python, et pas moi-même :D
Certains langages sont très stables, même si leur compilateurs évoluent, même si les librairie évoluent. On peut exécuter un programme écrit il y a plus de 20 ans. Vous vous rendez compte ? (là je pense à Common Lisp)
Conseil au débutant: ce n'est pas pour autant que Python est à rejeter, étant donné les bons frameworks et librairies disponibles. On peut apprendre beaucoup avec. Mon conseil est de continuer à chercher un autre langage qui te plaise, sans ces inconvénients.