domenica 4 gennaio 2009

Da grande voglio fare il fisico computazionale

[scheda perforata]Perdonate la battuta infame, ma dopo aver fatto una tesi con Maxima ora vado a caccia di minimi.

Succede che devi fare un fit. Non lineare nei parametri, magari pesato e - mi voglio rovinare - vuoi pure determinare l’errore statistico dei parametri, uno dei quali, per la cronaca, è la gap nello spettro di un superconduttore.

Sounds cool, eh? E vabbeh, diranno i miei venticinque milioni di lettori che attendevano con ansia che il blog tornasse online. C’è un miliardo di programmi in giro! Il problema è che il modello teorico da adattare ai dati sperimentali non è dato da una funzione espressa analiticamente ma da un integrale che puoi calcolare solo per via numerica. Provate a chiedere a Mathematica di fare FindFit su un modello del genere: vi riderà in faccia.

Se c’è una cosa che invidio ai fisici delle alte energie è la possibilità di intitolare un post Hot photos of PAMELA. Da quelle parti gli esperimenti hanno un nome proprio, mentre i fisici della materia condensata... ognuno ha il suo laboratorietto. Non ditelo troppo in giro, ma c’è persino chi è riuscito a costruirsi un microscopio a effetto tunnel nel garage di casa. Insomma, il vantaggio è che puoi sentirti ancora un ragazzo di Via Panisperna e non il dipendente di una multinazionale. Il rovescio della medaglia è che nell’analisi dei dati i particellari sono imbattibili. Ho provato ad attingere alla loro fonte, ma leggendo il manuale di MINUIT non mi è parso di trovare nulla che facesse al caso mio. Però mi sono commosso, e ho pensato che in qualche momento nella Storia dev’essere sicuramente esistita un’implementazione per schede perforate.

Per venire a cose più moderne, ho dato un’occhiata a ROOT ma è troppo complicato (come il linguaggio in cui è scritto, del resto)! Ed è a questo punto che una vocina che risuonava nella mia testa da mesi si è fatta molto più insistente.

Quella vocina sussurrava: «GNU Scientific Library... GNU Scientific Library... GNU Scientific Library!». Credo di essere stato l’unico utente di YouTube ad averla mai usata come tag. La bozza di programmino è qui, niente Autoconfversioning per ora, perché siamo gente grezza.

Il punto è che sto avendo dei ripensamenti. Scrivere in C mi sembrava la cosa più naturale, avevo escluso linguaggi di più alto livello perché volevo performance e la complessità computazionale era alta, e poi perché è il linguaggio in cui è scritta la libreria stessa; a detta degli autori, ottenere dei binding per Python, Perl etc. dovrebbe essere relativamente facile; sta di fatto che, da quanto ho visto, allo stato quasi nessuno di questi binding è completo al cento per cento.

Il punto è che questo post è stato scritto prima di Natale, e lo sto completando solo ora. Più o meno come il programmino. Succede che, ad un certo punto, cominciano a servirti troppe variabili globali o - in alternativa, ma è lo stesso - le tue funzioni devono rimpallarsi sempre gli stessi parametri (o il puntatore a una struttura, fate voi), e questi parametri (globali de facto, se non di diritto) aumentano in numero man mano che il tuo programmino diventa un programmone flessibile e configurabile.

Insomma, ti accorgi che il paradigma a oggetti è quello che più si avvicina al problema che vuoi risolvere. C’è scritto vorrei ma non posso ovunque, tra le righe del tuo codice. Cominci a pensare che il C++, forse, a qualcosa serve, specie se il tuo punto di partenza è un programma o una libreria in C e tu sei poco più che un dilettante. Eh, sì, perché «Può sembrare paradossale, ma credo che per programmare bene con il modello procedurale, bisogna essere veramente bravi».