Passage de PHP à Python & Django : retour d’expérience
Mes impressions sur le passage de PHP à Python et notamment l’utilisation de Django dans le cadre de développement d’applications Web.
3615 My life
Quand je me suis mis au développement Web il y a plusieurs années, j’ai commencé comme beaucoup sur le site du zéro (désormais Open Class Rooms) à apprendre le PHP et MySQL. Plus tard j’ai utilisé des frameworks PHP pour coder plus proprement et en suivant des bonnes pratiques, j’ai notamment utilisé Code igniter. Les frameworks les plus poussés sont Zend Framework et Symfony. D’ailleurs tout développeur PHP qui fait une application un peu complexe devrait utiliser ces frameworks.
J’ai ensuite découvert WordPress, et ça tombe bien, comme c’est en PHP ce fut le coup de foudre dès le premier rencard.
En 2012 nous nous sommes spécialisé dans l’application Web et l’accompagnement aux start-ups. Baptou a sauté le pas le premier, sur conseil de collègues à nous (Naeka, les papas de Vosae, l’app de facturation qui sortira en 2025). J’ai fait de même en 2013 afin que l’on puisse tous coder dans le même langage.
On est pas contre PHP, je ne souhaite pas raviver le vieux débat des langages, simplement on a été très séduit par la philosophie de Python et Django.
L’environnement de développement
N’étant pas un gros fan de la ligne de commande, la mise en place de l’environnement de développement (le serveur , la BDD, les paquets, les dépendances…) cette partie a été un peu compliquée pour moi au début. Il a fallu apprendre et installer bon nombre de choses. Heureusement que j’ai été aidé.
Pour faire fonctionner le serveur par la suite adieu les Wamp Mamp ou autres, tout se fait en ligne de commande. Bon, soit, on s’y fait vite.
La philosophie et le code
C’est la philosophie de Python qui m’a plu le plus : Le langage est plus épuré que PHP. Tout fonctionne à l’indentation. Terminés les points-virgules à la fin de chaque ligne, les accolades pour les boucles et conditions.
C’est tout de suite plus lisible. Pareil pour les objets ou les tableaux, ici on n’a pas les => que l’on retrouve sur PHP. Le nom des fonctions est aussi généralement plus simple.
Finalement je trouve que je passe moins de temps à récupérer, modifier, transformer, adapter et convertir des données PHP mais plutôt à réfléchir au modèle de données et aux interactions de ces données. Au final, coder en PHP et en Python pour arriver au même résultat relève d’une façon de penser complètement différente, ce qui fait bizarre au début.
Je me retrouve du coup à coder pas mal de fonctionnalités en très peu de lignes de code, et c’est très plaisant.
La bonne pratique, le plaisir du code bien codé
Python et Django sont intransigeant sur les bonnes pratiques, le fait de ne pas se répaéter (DRY = Don’t Repeat Yourself), l’utilisation du MVT (Modèle Vue Template), les tests unitaires (= le fait de coder une fonction qui va vérifier qu’une autre fonction fait bien son boulot), les migrations de base de données et l’utilisation d’un ORM (pour gérer les requêtes à la BDD). Tout cela contribue à obtenir un code sain, maintenable, facilement récupérable par un autre …
Bien entendu je compare Django à du PHP brut, je devrais le comparer à Zend ou Symphony mais je n’ai pas assez utilisé ces plateformes pour faire une bonne comparaisons. Elles aussi utilisent des techniques avancées et bonnes pratiques.
Ce qui m’a poussé à changer de langage c’est la présence de trop nombreux bidouilleurs PHP qui pensent pouvoir tout coder. Je me suis retrouvé souvent dans une position inconfortable de devoir retoucher du code d’un autre (que ce soit PHP pur, WordPress…) et c’était bien souvent malheureusement très très moche à voir.
Le Framework Python pour le Web : Django
C’est là que j’ai réellement vu la puissance et le potentiel de ce langage. Django est un framework qui va réunir toutes les bases pour développer une application web solide et pérenne.
Le Framework inclue tout ce qu’un bon framework peut proposer :
- Bonne pratiques de développement : Modèle Vue Template (MVT)
- Outils de sécurité (système anti XSS par exemple)
- Système de template
- Architecture de fichiers
- Interface d’administration
- Connexion / Inscription utilisateur
- un ORM (= pas besoin de gérer des requêtes SQL dans la base de données)
Les détracteurs diront que Zend ou Symphony offrent le même panel de fonctionnalités, effectivement, alors je ne débattrais pas sur qui est le meilleur Framework Web, c’est à vous de voir ;)
L’ORM Django
Pour récupérer et traiter des informations CRUD (Create Read Update Delete) c’est ultra simple et vous n’avez pas besoin de faire de requête de base de données SQL. Parfait car je suis allergique aux jointures ou autre relations SQL. Plus besoin de ça, vous pouvez récupérer ce que vous souhaitez ultra facilement sans avoir à trop réfléchir.
L’interface d’administration Django
Exemple de l’interface d’admin auto-générée avec le thème Django Suit :
Quelques questions que vous pourriez vous poser !
Comment héberger son application ?
On utilise la plateforme Heroku pour héberger nos applications, Amazon S3 pour stocker les fichiers statiques et Git pour le versionnement et la mise en ligne. C’est très performant, pas très couteux et pas trop compliqué à mettre en place.
La communauté est-elle active ?
Oui il y a une très bonne communauté autour de Python et Django et pleins de projets et outils que vous pourrez trouver sur Github. Bon par contre bien entendu la communauté est plus petite que pour un CMS du genre WordPress c’est évident.
Est-ce que c’est facile à apprendre ?
Le langage en soit n’est pas très compliqué, il est logique, mais parfois vous devrez faire face à de nouveaux concepts qu’il faudra apprendre et ça fera fumer quelques neuronnes vers la fin de journée, mais une fois le concept assimilé il devient clair et limpide !
Ca prend du temps ?
Un langage ne s’apprend pas en 2 jours, cela dit j’étais capable de réaliser ma première application web par moi même en moins de 2 semaines, ce qui est plutôt rapide ! C’est toujours plus facile si vous avez un mentor meilleur que vous capable de vous aider. Sinon il y a aussi Stack Overflow.
Ca vous tente ? quelques ressources Python / Django utiles
Vous aurez probablement autre chose à faire que de changer de langage car PHP vous convient bien, et c’est tout à fait compréhensible. Mais pour les quelques un qui souhaiterais en apprendre davantage, voici quelques ressources par lesquelles j’ai commencé mon apprentissage :
- Learn Python, the Hard Way. Un e-book incontournable pour commencer !
- Django : Documentation : la documentation officielle, très bien faite
- Tutoriel Django Nettuts+ : Créer une web app de gestion de tâches
- Effective Django
- Et le meilleur tutoriel : Writing your first Django App
Ruby, Python, sont des langages considérés comme plus haut de gamme que PHP, et les développeurs maitrisant ces langages trouvent plus facilement des emplois dans les start-ups et j’adore vraiment la façon de concevoir et coder mes applications Web.
15 Commentaires
Quelques coquilles qui t’ont échappées (mon côté ortho-fasciste) :
répAéter
neuroNnes (1 seul n)
Très bon blog… ca fait effectivement réfléchir sur la question. J’entends parler de Django de plus en plus. Une bonne raison de se lancer.
Que faire donc????? devrons-nous jéter le célèbre PHP?? surtout que jusqu’à présent la majorité des app web sont en PHP!!! Python-Django c’est d’hier!!! j’en connais pas vraiment d’appl developpées avec Python-Django, sinon lesquelles???
Toutefois c’est bien parlé,
J’apprécie la conviction dans l’expression!!!
Merci!!!
Salut,
non je ne dis pas de jeter PHP, qui utilisé avec Zend ou Symfony permet de faire de belles choses. Après chacun doit trouver son plaisir dans le langage qu’il utilise.
Pour répondre à ta question :
Pinterest, Instagram, Disqus sont faites avec Django
Bonjour,
Pensez-vous qu’un novice en la matière devrait mieux commencer par bien connaitre PHP avant de tenter l’aventure avec python?
Peut on aujourd’hui se lancer dans le web sans maitriser PHP ?
Je suis au stade où après avoir bien travailler le HTML et CSS, je dois choisir un langage de programmation dédié au WEB (je faisais du C++ à l’université) et donc ces questions me concerne.
Sinon très bon article qui m’a fait douté sur mon choix..
Bonjour,
Les avis sont partagés. Je dirais que oui, commence avec PHP car c’est simple et tu progresses rapidement. Mon collègue est plutôt partisan de dire que tant qu’à faire, commencer par python ça permet de se mettre tout de suite dans de bonnes pratiques et méthodologies, même si c’est un peu plus complexe. En tous cas les développeur Python sont très recherchés et bien payés, ça fait un avantage par rapport à PHP ^^. Peut être la réponse est de faire un peu des deux en même temps.
Super blog, je viens de decouvrir la programmation avec Python et Django et j’avoue que c’est pas si compliqué qu’on le pense quand on a un peu de background pour debuter.
En tout cas pour ma part je compte me perfectionner dans ce language même si sa me fumera quelques neurones.lol.
Comme tu le dis plus besoin de toutes ces règles de PHP ,on indente bien le code, sa marche et franchement c’est vraiment plus lisible aussi :)
Salut,
J’ai également testé récemment meteor JS qui est vraiment super. Ca dépend toujours du projet, mais Meteor permet de faire des app en temps réel et avec un seul langage : le JS. C’est très efficace du coup et je suis beaucoup plus productif qu’avec Django
Bonjour, existe t’il des cms comme WordPress écrit en Python et/ou Django Python. Ça serait pour découvrir comment c’est écrit et construit. Sinon je pense que pour un petit développeur comme moi, ce n’est pas intéressant de switcher en Python. Ça doit l’être surtout pour les applications d’entreprises qui sont évolutives avec différents intervenants, ce qui esxige un code rapidement compréhensible et une façon de coder plus strict pour limiter les bugs inutiles. Sinon en terme de performance, je ne pense pas que pour des petites et moyennes app, que ce soit intéressant de switcher. Mais c’est un language que je vais quand même tester, faire quelques petits essais, juste par curiosité. :-)
Salut, je crois qu’il y en avait un oui mais je n’ai plus le nom. De mes dernières expériences, j’ai testé MeteorJS qui me parait être une techno au top et beaucoup plus simple à appréhender, même si t’es pas dev JS à la base. Selon ce que tu veux faire ça peut être une bonne piste aussi :)
Bonjour Maxime,
Merci beaucoup pour cet article, et plus tu connais bien les deux frameworks que j’affectione à savoir django et meteorjs.
En ce qui me concerne je me suis remis à python il y a pas longtemps, notamment grâce aux super vidéos sur dailymotion : http://www.dailymotion.com/pythonneries
Puis j’ai découvert vite fait meteorjs grâce à une amie.
Qu’en pense-tu de la courbe d’apprentissage ( la difficulté ) entre ces deux frameworks.
Merci.
Thibault
Salut !
Subjectivement je te dirais que MeteorJS est bien plus facile à prendre en main : en 3 semaines j’avais lu “Discover Meteoré de Sasha Grief, suivi les tutos sur le site et mis en ligne ma première application pour un client. Pour Python ça a été plus long, à mettre en place, à apprendre les concepts, a galérer sur des trucs. Mais après tout dépend de ce que tu veux faire : une grosse app pérenne et solide : Python. Une app temps réelle : Meteor. Pour ma part, et c’est juste mon avis, pour mes prochaines app je ferais du météor tout le temps. Même si la communauté meteor a du mal à exploser ces derniers temps.
Je ne mettrais pas l’utilisation d’un ORM au rang des bonnes pratiques. J’ai un avis généralement négatif sur la génération de code.
Changer de langage parce que les autres l’utilisent mal est une raison qui m’a surpris. Si j’ai bien compris c’est pragmatique, pour ne pas avoir à subir l’écosystème… Pas bête en un sens, mais pas encourageant pour l’avenir dudit écosystème ;)
Bonne continuation !
Développeur PHP depuis plus de 10 ans, j’ai lu avec beaucoup d’intérêt ton retour sur l’utilisation de Python. Le langage PHP est parfait si ce n’est quelques faiblesses qui énervent grave avec le temps.
Donc merci pour ce coup d’oeil à l’alternative Python & Django, j’vais p’être m’y mettre !
Hello, depuis que j’ai écris cet article j’ai également essayé MeteorJS. Pour mes prochaines apps j’utiliserais ce genre de technos je pense. Après pour prendre sa décision beaucoup de paramètres entrent bien sûr en jeu !