title:      ★ Pourquoi Python et Django
slug:       pourquoi-python-et-django
date:       2009-12-11 00:59:01
type:       post
vignette:   images/logos/scrumpy_pony.png
contextual_title1:  Stratégie de chiffrement des données et emails
contextual_url1:    20101206-strategie-de-chiffrement-des-donnees-et-emails
contextual_title2:  Un projet Python : de l&#39;idée à la publication
contextual_url2:    20101203-un-projet-python-de-lidee-la-publication
contextual_title3:  ★ De l&#39;OpenData au LinkedData : exemple de nosdonnees.fr
contextual_url3:    20101130-de-lopendata-au-linkeddata-exemple-de-nosdonneesfr

Retour sur l'[événement Scrumpy](https://larlet.fr/david/biologeek/archives/20091014-scrum-python-et-django-montpellier/) auquel j'ai participé le mois dernier. J'ai déjà eu l'occasion de m'exprimer ici sur [Pourquoi Python](https://larlet.fr/david/biologeek/archives/20060505-pourquoi-programmer-en-python/) et [Pourquoi Django](https://larlet.fr/david/biologeek/archives/20080521-conferences-django-pour-pycon-fr/) mais le contexte était assez différent sur cet intervention car je devais commencer à convaincre des bienfaits de Python. Or convaincre sur un langage ou un framework est relativement stupide.

On utilise un outil pour son usage, on peut faire des trucs super chiants aussi avec Python ou Django. Partant de là, comment parler des usages possibles, facilités par ces outils ? Ou reformulé un peu différemment, **qu'est-ce qui me motive pour utiliser ces outils dans mon quotidien ?**

*Une lecture dont vous êtes le héros : soit vous voulez [visionner l'intervention dans son intégralité](http://vimeo.com/7702575) (25 minutes) et je vous conseille de ne pas lire la suite avant (mais de sauter à la fin), soit vous continuez la lecture et vous pourrez vous rattrapper plus tard.*

J'ai choisi d'explorer 2 axes un peu inhabituels : **les vacances et le fun !**

## Vacances et productivité

<p>
    <img
        src="/static/david/biologeek/images/scrumpy/vacances_productivite.jpeg"
        alt="Vacances et productivité"
        style="margin: 0pt auto; display: block;"/>
</p>

Si on veut pouvoir partir en vacances confortablement, il va en fait falloir être plus productif, et ça la productivité ça parle à tout le monde et ça fait pro :-).

### Apprentissage

<p>
    <img
        src="/static/david/biologeek/images/scrumpy/apprentissage.jpeg"
        alt="Apprentissage"
        style="margin: 0pt auto; display: block;"/>
</p>

L'apprentissage de Python est l'un des plus rapides qui soit, on peut l'enseigner aux enfants, aux élèves, aux développeurs, il suffit de quelques heures pour en maîtriser les bases. Avec quelques bases, on peut hacker son premier programme en quelques minutes. Vraiment.

Rapidité d'apprentissage signifie aussi facilité à intégrer de nouvelles personnes dans une équipe ou à transférer des compétences sur un projet (ce qui est plutôt utile pour partir en vacances tranquille).


### Agilité

<p>
    <img
        src="/static/david/biologeek/images/scrumpy/agilite.jpeg"
        alt="Agilité"
        style="margin: 0pt auto; display: block;"/>
</p>

Agilité : vaste programme car on en arrive à mettre tout et n'importe quoi derrière ce terme. En quoi Python vous fait gagner en agilité ? Il y a bien sûr l'usage des tests dont je parle ensuite qui rendent les refactorisations moins douloureuses, évitant les régressions inévitables autrement. Mais c'est surtout à l'usage que l'on se rend compte à quel point le langage est flexible et puissant.


### Réutilisation

<p>
    <img
        src="/static/david/biologeek/images/scrumpy/reutilisation.jpeg"
        alt="Réutilisation"
        style="margin: 0pt auto; display: block;"/>
</p>

La philosophie de Python et d'être *batteries included*, c'est à dire de proposer une bibliothèque standard complète permettant d'effectuer les tâches courantes avec le langage de base sans avoir à installer des bibliothèques tierces. Ceci favorise le code portable et réutilisable entre plusieurs projets.


## Fun et qualité

<p>
    <img
        src="/static/david/biologeek/images/scrumpy/fun_qualite.jpeg"
        alt="Fun et qualité"
        style="margin: 0pt auto; display: block;"/>
</p>

La relation entre le fun et la qualité ? Une équipe qui prend du plaisir à développer va introduire de la qualité dans son produit.


### Conventions

<p>
    <img
        src="/static/david/biologeek/images/scrumpy/conventions.jpeg"
        alt="Conventions"
        style="margin: 0pt auto; display: block;"/>
</p>

Python repose sur des conventions de codage fortes qui favorisent la compréhension du code par un autre développeur. Ça paraît anodin énnoncé ainsi mais c'est pourtant capital pour la réutilisation et la maintenabilité du code. Lorsque vous prennez un code en main, bibliothèque externe ou code de votre collègue, vous n'allez pas être perdu grâce à une normalisation familière. C'est un gain de temps considérable à l'usage.

### Tests

<p>
    <img
        src="/static/david/biologeek/images/scrumpy/tests.jpeg"
        alt="Tests"
        style="margin: 0pt auto; display: block;"/>
</p>

Python encourage l'usage des tests qui sont indispensables à la pérennité d'un code. Je ne vais pas me répéter sur ce point, c'est *juste* la représentation du capital de votre application, ce qui fait finalement sa valeur à long terme.


### Élégance

<p>
    <img
        src="/static/david/biologeek/images/scrumpy/elegance.jpeg"
        alt="Élégance"
        style="margin: 0pt auto; display: block;"/>
</p>

Ici aussi, je vous renvoie sur le billet l'[Artiste qui sommeille en chaque geek](https://larlet.fr/david/biologeek/archives/20080613-artiste-qui-sommeille-en-chaque-geek/), la part d'élégance que vous pouvez trouver dans votre code dépend de vous, de votre sensibilité et de la vision que vous avez de vos créations.

**En conclusion, grâce à une productivité accrue et à la qualité de son code, on gagne en séreinité et en confiance.**


## Django

Je ne vais pas réexpliquer [la boîte à outils qu'est un framework web](https://larlet.fr/david/biologeek/archives/20060907-choisir-un-framework-web/), vous pouvez aussi consulter une ancienne [présentation sur Django si vous souhaitez aller plus loin](https://larlet.fr/david/biologeek/archives/20080521-conferences-django-pour-pycon-fr/).

### Applications réutilisables

<p>
    <img
        src="/static/david/biologeek/images/scrumpy/applications_reutilisables.jpeg"
        alt="Réutilisation"
        style="margin: 0pt auto; display: block;"/>
</p>

C'est aujourd'hui LE point fort de Django : un écosystème d'applications développées par la communauté de très bonne facture. Vous cherchez une application pour faire de l'OpenID, gérer des droits finement, pousser vos média sur S3, etc etc c'est possible et facilement intégrable à votre projet.

### Cohérence

<p>
    <img
        src="/static/david/biologeek/images/scrumpy/coherence.jpeg"
        alt="Cohérence"
        style="margin: 0pt auto; display: block;"/>
</p>

Le framework ayant été pensé dans sa globalité, on retrouve une cohérence et une qualité constante sur les différents points du framework. Et l'une des grandes forces de Django c'est la cohérence de sa documentation et son excellente qualité. Allez [faire un tour dessus](http://docs.djangoproject.com), ce n'est pas une légende :-).


### Rapidité

<p>
    <img
        src="/static/david/biologeek/images/scrumpy/rapidite.jpeg"
        alt="Rapidité"
        style="margin: 0pt auto; display: block;"/>
</p>

Enfin un dernier argument en faveur de Django, c'est la rapidité de développement rendue possible grâce aux nombreux outils mis à disposition par le framework permettant d'éviter les tâches fastidieuses et répétitives.
Vu la vitesse à laquelle les sites évoluent, c'est un point essentiel à prendre en compte au lancement d'un projet.


## Démonstration et code

Suite à la théorie, j'ai réalisé une [démonstration live](http://vimeo.com/7650588) de ce que l'on pouvait avoir en pratique qui a également été filmée. Et je viens de [rendre le code accessible](http://code.welldev.org/scrumpy/) pour que vous puissiez continuer/hacker/etc, c'est un twitter-like qui reprend pas mal des concepts Django. J'ai ajouté un peu de code pour que vous puissiez aller plus loin, pour repartir de la présentation il suffit de prendre la révision qui va bien. N'hésitez pas à poser des questions ici au besoin.


## Formation

Suite à cette intervention était prévue [une formation](http://scrumpy.particul.es/scrum-python-django-montpellier/formation-django) qui malheureusement a été reportée faute de participants. **C'est vraiment dommage car j'étais bien motivé et j'espère qu'il y aura davantage de curieux lors de la prochaine session**. Si vous êtes intéressé, n'hésitez pas à me contacter ou à contacter [Stéphane](http://www.insei.org), en plus le cadre est vraiment unique !

En conclusion, j'ai eu des retours assez positifs et j'espère avoir convaincu ou au moins donné envie à certaines personnes présentes d'essayer de nouveaux horizons :-). Si l'agilité vous intéresse (et ça devrait), je vous encourage également à aller consulter les [vidéos de Claude Aubry](http://vimeo.com/particules/videos).
