Programant (o vivint), lliçons apreses

A la feina que tinc actualment tinc una part molt important de programació. Em diuen quin ha de ser el resultat final però no em diuen com fer-ho, així que haig de pensar quina és la millor manera abans de fer-ho.

Apart, una cosa que normalment intento fer és intentar aprendre dels meus errors (siguin programant o amb el què sigui). Així cada cop tinc errors diferents, no els mateixos. És més divertit així!

Durant l’última tasca de programar he aprés diverses coses que podria escriure com a lemes o grans frases, igual que fan com a resum al llibre “The Practice of Programming” (frases tipus “Re-escriu el mal codi, no el comentis” o les molt bones també The Zen of Python (enllaç recomanat)

El què em vaig trobar i enumeraré no ho he vist directament a aquests llocs, segurament per ser molt bàsic o senzillament estar escrit de diferent manera. Ho comentaré aquí per si és d’ajuda a algú.

A més notar que la part d’aquesta entrada és aplicable a molts àmbits de la vida, no només a la programació. En serio!

A continuació escric quatre frases i desenvolupo una mica la idea que voldria explicar.

Una regla amb moltes excepcions: potser és possible trobar una regla millor?

Programant em vaig trobar amb el problema X, i vaig fer un mètode que ho resolia (que venia a ser com una regla). A mesura que passaven els dies, anava afegint excepcions a la regla. Al final tenia més codi en excepcions o excepcions d’excepcions que en la regla inicial, cosa que vaig poder solucionar canviant la regla. La nova regla cobria moltes de les excepcions anteriors. De fet, i exagerant-ho una mica la regla anterior va passar a ser una excepció d’una regla més genèrica.

Sol fer mandra “re-codificar” (anar posant excepcions com un posseït és menys cansat i arriscat) però al final es converteix en una cosa difícil de mantenir, créixer, optimitzar, etc.

Arreglar els bugs. No les conseqüències dels bugs

Aquest cop va ser molt divertit. Tenia un mètode utilitzat a varis llocs, que a vegades tornava resultats “lleugerament” incorrectes. Vaig quasi tot un matí fent petites correccions de bugs a varis llocs perquè anés funcionant tot bé. Al cap d’unes hores vaig pensar que no podia ser tan mal programador, que hi havia d’haver alguna altra cosa. Efectivament, una funció força central retornava valors “lleugerament” incorrectes. Vaig estar tapant fuites d’aigua que aparèixen a una paret mentre a dins la paret tenia una tuberia foradada!

Si un error és massa difícil de trobar, potser no busquem al lloc correcte

Em va passar programant i m’ha passat administrant. Buscar un error, donar-li voltes, imprimir valors, depurar, etc. i no trobar l’error. I l’error no estava davant nostre, sinó darrera amagat.Si l’error costa “massa” de trobar, potser no és que siguem molt dolents programant, és que no el busquem on està!

Si busquem algú a una habitació i no hi és, anirem a buscar-lo a altres habitacions. No mirarem a llocs impossibles de l’habitació (almenys de moment) per trobar-lo. Sempre hi haurà el cas que busquem a un contorsionista i estarà dins el calaix, però normalment estarà tancat al lavabo.

Pensa en general. Si ho necessites, pensa en particular. No al revés

Vaig començar a atacar un problema amb casos particulars, enlloc d’atacar-lo amb una visió general. Vaig passar força temps amb un enfoc incorrecte, feina de xinos, no escalable, impossible de millorar amb el pas del temps.Sortosament ho vaig veure: podia atacar el mateix problema amb dos casos generals i algunes adaptacions, no amb N casos particulars. La veritat, un cop vist feia vergonya total l’altre aproximació, semblava de nen petit de pàrvuls. I més vergonya haver estat hores amb l’enfoc incorrecte quan era més senzill veure-ho bé. Sempre queda un consol: més val tard que mai.

Properament…

Quedava massa llarg per ser una sola entrada. Properament escriuré unes “regles” sobre l’optimització, que tot i que n’hi ha moltes escrites a varis llocs no eren exactament les que vaig necessitar (com sol passar amb aquestes coses, evidentment)

1 comment to Programant (o vivint), lliçons apreses

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>