El Blog de Trespams

Blog personal sobre tecnologia, gestió de projectes i coses que se me passen pel cap

Retrocompatibilitat

Aquesta setmana m'he trobat en una situació on pots veure la diferència entre fer feina amb un llenguatges com Python i un bastiment com a Django, vers fer-ho amb altres tipus de bastiments (sí Rails, t'estic parlant a tu) amb distinta filosofia de feina i de com s'han de fer les actualitzacions.

Rails i Django són cosins germans. Els dos van intententant agafar el millor que té l'altre. Permeten desenvolupar aplicacions web amb molta rapidesa i són molt divertits per fer-hi feina.

La gran diferència és en la filosofia de feina: Django i Python tenen força cura en la compatibilitat cap enrera, en que a cada versió hi pugui haver canvis, però que siguin de tal manera que en la seva gran majoria les aplicacions segueixin funcionant amb modificacions mínimes.

Rais i Ruby, per la seva banda tenen un historial de anar trencant amb tot el que hi ha a cada versío. El més important és la novetat, en la màgia del que es pot fer, en el factor sorpresa per tal de deixar la claca bocabadada.

Però què passa quan el que tens són aplicacions que s'han de mantenir al llarg de molts anys? Com deia aquesta és una situació en que m'he trobat aquesta setmana. Una aplicació que fa anys que la vam fer, a la qual s'han anat fet petites modificacions a llarg del temps, però sense necessitat de canvis de base.

Ara el client demana una funcionalitat que és millor desenvolupar fent servir una versió més moderna de Django. Això implica passar de la versió 1.2 a una versió que soporti class bassed views. Implica no sols canviar la versió de Django, sinó també moltes de les llibreries de tercers que també es fan servir.

Començ el canvi i vaig actualitzant. Vaig actualitzant Django fins a la versió 1.4.10 i les llibreries externes assegurant-me que són compatibles amb aquesta versió. Algunes no diuen res i cap problema. És una feina que s'ha de fer per fases, provant i commitant versions. Tot dins un virtualenv separat de la resta d'aplicacions. Veig també la gràcia de poder tenir cada aplicació dins un sistema com a Docker, on a més de l'actualització tingués també tot l'entorn tal com estaria a producció, però ara per ara el virtualenv serveix. Hi ha feina a fer i s'ha de fer amb ordre, provant cada versió i descarregant-la de PyPi o del github. Una vegada fet les modificacions que s'han de fer a l'aplicació són bàsicament els que ja hi havia previstes i per les que se feia el canvi. A la part de Django sols he tingut que canviar el sistema d'accés a la base de dades i la part de les urls.py per adaptarles a les CBV. Tota la resta ha funcionat.

Quan fas aplicacions per consum intern pots permetre el luxe de fer servir el que vulguis. Quan fas aplicacions per un tercer i les has de mantenir el valor que té Django i Python i la seva mania per no rompre les coses innecessàriament són una garantia.

Django demostra dia a dia que l'evolució i l'afegir noves característiques no implica fer que tot el que hi havia deixi de funcionar. Potser és més divertit trencar coses i no pensar en els perjudicats, però personalment a mi m'agrada saber que el que fas avui, si l'has modificar uns anys després ho podràs fer sense tonar-te boig. Al client també segur que li agradarà saber-ho.

blog comments powered by Disqus