Com corregir els vostres errors de codificació científica

Com a estudiant de postgrau, Steven Weisberg va ajudar a desenvolupar un campus universitari, encara que virtual. Anomenat Virtual Silcton, el programari posa a prova les habilitats de navegació espacial, ensenyant a la gent el disseny d’un campus virtual i després desafiant-los a apuntar cap a punts de referència específics.1. L’han utilitzat més d’una dotzena de laboratoris, diu Weisberg, que ara és un neurocientífic cognitiu a la Universitat de Florida a Gainesville.

Però el febrer de 2020, un company que estava provant el programari va identificar un problema: no podia calcular la vostra direcció amb precisió si apuntàveu a més de 90 graus des del lloc. “El primer que vaig pensar va ser, ‘oh, això és estrany'”, recorda Weisberg. Però era cert: el seu programari generava errors que podien alterar els seus càlculs i conclusions.

“Ho hem de retractar tot”, va pensar.

Quan es tracta de programari, els errors són inevitables, especialment a l’àmbit acadèmic, on el codi acostuma a ser escrit per estudiants de postgrau i postdoctorats que mai no van rebre formació en desenvolupament de programari. Però les estratègies senzilles poden minimitzar la probabilitat d’un error i facilitar el procés de recuperació.

Evitació

Julia Strand, psicòloga del Carleton College de Northfield, Minnesota, investiga estratègies per ajudar la gent a participar en una conversa, per exemple, en un restaurant sorollós i ple de gent. El 2018, va informar que un senyal visual, com un punt intermitent a la pantalla d’un ordinador que coincidia amb la parla, va reduir l’esforç cognitiu necessari per entendre el que es deia.2. Això suggereix que una simple aplicació per a telèfons intel·ligents podria reduir el cansament mental que de vegades sorgeix en aquestes situacions.

Però no era veritat. Strand havia programat inadvertidament el programari de proves per començar a cronometrar una condició abans que l’altra, cosa que, tal com va escriure el 2020, “és semblant a iniciar un cronòmetre abans que un corredor arribi a la línia”.

“Em vaig sentir malalt físicament”, va escriure: l’error podria haver afectat negativament els seus estudiants, els seus col·laboradors, el seu finançament i la seva feina. No va ser així: va corregir el seu article, va mantenir les seves subvencions i va rebre la titularitat. Però per ajudar els altres a evitar una experiència similar, ha creat un recurs didàctic anomenat Error Tight3.

Error Tight ofereix consells pràctics que fan ressò de les llistes de control de la reproductibilitat computacional, com ara; utilitzar el control de versions; codi de document i fluxos de treball; i adoptar estratègies organitzatives i de denominació de fitxers estandarditzades.

Les seves altres recomanacions són més filosòfiques. Strand diu que un laboratori “resistent a errors” reconeix que fins i tot els investigadors acurats cometen errors. Com a resultat, el seu equip va adoptar una estratègia que és habitual en el desenvolupament de programari professional: la revisió de codi. L’equip busca errors de manera proactiva fent que dues persones revisin el seu treball, en lloc de suposar que aquests errors no existeixen.

Joana Grave, estudiant de doctorat en psicologia a la Universitat d’Aveiro, Portugal, també utilitza la revisió de codi. El 2021, Grave es va retractar d’un estudi quan va descobrir que les proves que havia programat s’havien codificat malament per mostrar les imatges equivocades. Ara, els programadors experimentats de l’equip revisen el seu treball, diu, i Grave repeteix les tasques de codificació per assegurar-se que obté la mateixa resposta.

El programari científic pot ser difícil de revisar, adverteix C. Titus Brown, bioinformàtic de la Universitat de Califòrnia, Davis. “Si estem operant a la vora irregular de la novetat, pot ser que només hi hagi una persona que entengui el codi i una altra persona pot trigar molt de temps a entendre’l. I fins i tot llavors, potser no estan fent les preguntes adequades”.

Weisberg va compartir altres pràctiques útils en a Fil de Twitter sobre la seva experiència. Aquests inclouen compartir codi, dades i entorns computacionals en llocs com GitHub i Binder; garantir que els resultats computacionals coincideixen amb l’evidència recollida mitjançant diferents mètodes; i adoptar biblioteques de programari àmpliament utilitzades en lloc d’algorismes personalitzats quan sigui possible, ja que sovint són provats àmpliament per la comunitat científica.

Sigui quin sigui l’origen del vostre codi, valideu-lo abans d’utilitzar-lo, i periòdicament, per exemple, després d’actualitzar el vostre sistema operatiu, aconsella Philip Williams, químic de productes naturals de la Universitat de Hawaii a Manoa a Honolulu. “Si alguna cosa canvia, la millor pràctica és tornar enrere i assegurar-se que tot està bé, en lloc de suposar que aquestes caixes negres sempre donaran la resposta correcta”, diu.

Williams i els seus col·legues van identificar el que van anomenar un “error” en el codi publicat per un altre investigador per interpretar dades de ressonància magnètica nuclear.4, la qual cosa va fer que els conjunts de dades s’ordenaven de manera diferent segons el sistema operatiu de l’usuari. Comprovar els seus números amb un conjunt de dades model amb respostes “correctes” conegudes, podria haver-los alertat que el codi no funcionava com s’esperava, diu.

Recuperació

Si el codi no pot estar lliure d’errors, almenys es pot desenvolupar de manera que qualsevol error sigui relativament fàcil de trobar. Lorena Barba, enginyera mecànica i aeroespacial de la Universitat George Washington de Washington DC, diu que quan ella i la seva aleshores estudiant de postgrau Natalia Clementi van descobrir un error en el codi subjacent a un estudi.5 havien publicat el 2019, “Slack enviava emojis de caca i tota mena d’emojis de crits i coses durant unes hores”. Però la parella va poder resoldre ràpidament el seu problema, gràcies als paquets de reproductibilitat (coneguts com a repro-packs) que el laboratori de Barba fa per a tots els seus treballs publicats.

Un repro-pack és un arxiu d’accés obert de tots els scripts, conjunts de dades i fitxers de configuració necessaris per dur a terme una anàlisi i reproduir els resultats publicats en un article, que l’equip de Barba puja a dipòsits d’accés obert com Zenodo i Figshare. Un cop es van adonar que el seu codi contenia un error (havien omès accidentalment un terme matemàtic en una de les seves equacions), Clementi va recuperar el paquet de reproducció rellevant, va arreglar el codi, va tornar a executar els seus càlculs i va comparar els resultats. Sense un paquet de reproducció, hauria hagut de recordar exactament com es van processar aquestes dades. “Probablement hauria trigat mesos a intentar veure si això [code] era correcte o no”, diu. En canvi, només va trigar dos dies.

Brown necessitava molt més temps per resoldre un error que va descobrir el 2020 quan va intentar aplicar l’eina de cerca de metagenomes del seu laboratori, anomenada spacegraphcats, a una nova pregunta. El programari contenia un pas de filtratge dolent, que va eliminar algunes dades de la consideració. “Vaig començar a pensar,” estimat, això potser qüestiona la publicació original “, assegura inexpresionament. Brown va solucionar el programari en menys de dues setmanes. Però tornar a executar els càlculs va retardar el projecte uns mesos.

Per minimitzar els retards, és fonamental una bona documentació. Milan Curcic, oceanògraf de la Universitat de Miami, Florida, va ser coautor d’un estudi el 20206 que va investigar l’impacte de la velocitat del vent de l’huracà sobre les ones oceàniques. Com a part d’aquest treball, Curcic i els seus col·legues van repetir els càlculs que s’havien realitzat al mateix laboratori l’any 2004, només per descobrir que el codi original utilitzava el fitxer de dades incorrecte per realitzar alguns dels seus càlculs, produint una “compensació” d’aproximadament 30%.

Segons Google Scholar, l’estudi del 20047 s’ha citat més de 800 vegades, i les seves prediccions informen avui les previsions d’huracans, diu Curcic. No obstant això, el seu codi, escrit en el llenguatge de programació MATLAB, mai es va col·locar en línia. I estava tan mal documentat que Curcic va haver de treballar-hi línia per línia per entendre com funcionava. Quan va trobar l’error, va dir: “La pregunta era: no ho entenc correctament o és realment incorrecte?”

Strand fa que els membres de l’equip llegeixin el codi dels altres per familiaritzar-los amb la programació i fomentar una bona documentació. “El codi s’ha de comentar prou clarament perquè fins i tot algú que no sàpiga codificar pugui entendre què està passant i com canvien les dades a cada pas”, diu.

I anima els estudiants a veure els errors com a part de la ciència i no com a fallades personals. “Els laboratoris que tenen una cultura de ‘gent intel·ligent i prudent no s’equivoca’, s’estan configurant per ser un laboratori que no admet els seus errors”, diu.

Els errors no signifiquen necessàriament retracció en cap cas. Els errors de Barba, Brown i Weisberg van tenir un impacte menor en els seus resultats, i cap va requerir canvis a les seves publicacions. El 2016, Marcos Gallego Llorente, aleshores un estudiant graduat en genètica a la Universitat de Cambridge, Regne Unit, va identificar un error en el codi que va escriure per estudiar els patrons migratoris humans a l’Àfrica fa 4.500 anys. Quan va tornar a analitzar les dades, la conclusió global no va canviar, tot i que l’abast del seu impacte geogràfic sí, i n’hi havia prou amb una correcció.

Thomas Hoye, químic orgànic de la Universitat de Minnesota a Minneapolis, va ser coautor d’un estudi que va utilitzar el programari en què Williams va descobrir un error. Quan Williams es va posar en contacte amb ell, Hoye diu, no va tenir “cap reacció forta en particular”. Ell i els seus col·legues van arreglar el seu codi, van actualitzar els seus protocols en línia i van seguir endavant.

“No vaig poder evitar, al final, pensar, ‘aquesta és la manera com hauria de funcionar la ciència'”, diu. “Trobeu un error, tornes enrere, millores, corregeixes, avances”.

Leave a Comment

Your email address will not be published. Required fields are marked *