Programmare leggeri

provaSpecchio

È tanto che non scrivo di programmazione dei computer.

Da poco ho ripreso a trastullarmi, talvolta, con C++ e Java, tuttavia il tempo è sempre tiranno e, per di più, non riesco a concentrarmi su progetti complessi. Finisco per vagare e, magari, imparare qualcosa. Ultimamente, mi sono innamorato di una soluzione ultraleggera e aperta (nel senso di “open source”) che però consente di fare un sacco di cose. In un’epoca in cui gli ambienti di programmazione, anche quelli open-source, sono dei titanici mastodonti, qualcosa di leggero e “portatile” mi attira, mi sembra razionale e proporzionato a quello che è un semplice hobby. La “suite” che provo a mettere insieme è composta da:

TCC Tiny C Compiler: il più leggero tra i compilatori C completi. Copre tutte le funzionalità standard del linguaggio e anche qualcosa in più, è piccolo, compila a tempo di record e genera eseguibili efficienti (anche se non iper-ottimizzati) e di dimensioni davvero minuscole.

Lua: linguaggio di scripting veloce, semplice ed elegante. Lo trovo ancora più facile e immediato di Python e similmente efficiente.

LÖVE: ambiente grafico 2d che incorpora Lua e dà accesso a audio, mouse, immagini ecc… Nasce per i giochi ma ci si può divertire anche in altre direzioni.

Il tutto composto da codice aperto e aggiornato, che occupa, inclusi accessori non indispensabili, poche decine di Mb e, abbinato al vostro editor di testo preferito (nel mio caso Notepad++) consente di fare, se non tutto, moltissimo. Se volete, buon divertimento!

Annunci

Da una storia vera. (Il mio ufficio è differente)

dffpzttw4aeljzs

Brani di vita in un ufficio tecnico non molto diverso dalla media. Per inquadrare, ci soprannominiamo “Baia dell’Ignoranza”.

/-\-/-\

“Ma cosa vuole Lattuga?”

“Forse un po’ d’olio e aceto?”

“E allora è un’insalata”.

“Di notte deve stare tranquillo, se no russa!”

-+-

Il collega torna dal bagno piangendo.

“Capo, ho pisciato un calcolo!”

“Non ti preoccupare, lo rifacciamo… ti aiuto io”.

“Non hai capito. L’ho proprio pisciato!”

-+-

Il calcolo in esecuzione sul computer è quella cosa che se lo stai a guardare non finisce mai ma se la perdi di vista fallisce immediatamente.

-+-

“Un giorno mi picchieranno, lo so”.

“Ma sarà comunque troppo tardi!”

-+-

“I conti non tornano!”

“Sono tornati i Savoia e non tornano i conti?”

-+-

“Perché Massimo arriva sempre in ritardo?”

“Perché si dice sempre: ci vediamo alle 10. Massimo alle 10.30!”

-+-

“Quando fai il CAE e ti cambiano di continuo il CAD, allora si che ti rompono il CAX!”

-+-

Dicono “vediamo l’esploso” e tu pensi sempre al collega scoppiato, prima che ai pezzi del progetto.

-+-

“Ha infilato il pistoncino nella sua sede” non può avere un significato erotico. No!

(Ma il mio ufficio è differente)

Il compagno scomodo del computer

errore-grafico

Errori di programmazione grafica con strani effetti

Molto si scrive e ragiona sull’importanza dei computer nella vita quotidiana (anche i telefonini sono dei computer ormai). Dalle chiacchiere da bar ai saggi accademici è tutto un fiorire delle valutazioni sociologiche delle tecnologie di calcolo e comunicazione. Ma, secondo me, c’è un tema correlato strettamente ma non abbastanza valutato, quello dei bachi del software e del loro effetto sulla vita delle persone. Provo a buttare giù qualche idea a riguardo.

Il baco software è nato con il computer: appena uno scienziato si è provato a scrivere un codice per la macchina di calcolo che aveva creato si è scontrato con gli effetti inattesi degli errori che commetteva. L’idea iniziale era che il nocciolo del problema fosse legato alla carenza di memoria e potenza di calcolo dei primi computer e che macchine più evolute avrebbero potuto essere programmate in modo più facile e sicuro. Abbiamo scoperto con l’esperienza che questo non è vero.

Il baco software si auto-riproduce: ogni correzione può avere effetti collaterali e ogni evoluzione, oltre a contenere errori, può far scoprire magagne di quelle pre-esistenti. Una battuta dei programmatori si basa su una vecchia canzoncina per bambini: “Ci sono 100 piccoli bachi nel codice. Correggi un baco, ricompili il codice. Restano 100 bachi nel codice!”

cables

La complessità può essere intelligente oppure no

Riporto un po’ di storia personale. Il baco software è stata una cosa che ho avuto difficoltà a capire. Il mio primo computer è stato il Commodore 64, macchina “leggendaria” in ogni senso, per i sui pregi come per i suoi difetti, che all’epoca non apparivano: non c’era gran che di meglio in circolazione. Oltre a giocare, su quella macchina dall’alimentatore che scaldava come un fornetto ho imparato a programmare, e mi pareva strano che i programmi, anche quelli professionali, facessero, ogni tanto, cose strane. Insistevo a riprovare e immaginavo ogni volta cause accidentali: joystick tirato troppo a lungo, comandi dati troppo in fretta, gioco caricato male dalla cassetta… Che era poi una cosa, quest’ultima, che accadeva spesso.

Esitavo a pensare che l’errore fosse insito nell’insieme macchina-programma, e non era tutta colpa mia: pubblicità, fantascienza, cartoni animati insegnavano a ragazzini e adulti inesperti che il computer era infallibile, era il  “cervello elettronico” che tutto conserva e tutto considera. Ragionando su quali fossero le specifiche di quelle macchine, con gli occhi di oggi, sembra ridicolo, ma era così, lo stupore prevaleva sul ragionamento oggettivo.

Quell’esperienza però mi è servita molto: ho capito cos’era davvero un computer, cosa ci si potesse aspettare e cosa no, che i limiti erano fissati dalla creatività e dalla quantità di fatica che ci si metteva dentro e che se era quasi infallibile nei calcoli, la correttezza della procedura era responsabilità tutta dell’uomo, non della macchina. Ho anche consolidato che con la tecnologia bisogna conservare un atteggiamento che definisco “sportivo”: tutto funziona fino a che funziona e la sorpresa è sempre dietro l’angolo.

progman

Il vecchio e poco rimpianto Windows 3.1

Con gli anni e la professione ho imparato che il baco del programma è qualcosa con cui devi imparare a convivere. Per fare quello che devi a volte devi girargli attorno. Qualcuno lo sfrutta, invece, qualche baco, ma mi è sempre sembrato moralmente disonesto. Abbiamo sopportato i bachi e le instabilità di Windows e le idiosincrasie di Office, versione dopo versione, forse perché non c’era nulla di meglio. Ricevevamo notizie di una piccola élite ricca che si godeva Apple: in quel mondo non esistevano “bachi” ma solo “caratteristiche”, perché la macchina era così avanzata da sapere cosa dovesse fare l’utilizzatore e non viceversa. Si narrava di geni e topi d’informatica che combattevano con un gioiello grezzo chiamato Linux, ma non era cosa da comuni mortali.

Poi hanno cominciato a correggerli, quei benedetti bachi, finalmente trattandoli per gli errori che erano. Per una parte degli “haker da due soldi” che sfruttavano gli errori per far fare al computer cose apparentemente giuste è stato un disastro. Perfino Linux è diventato utilizzabile da comuni mortali. Ci ho provato anch’io e ho potuto verificare come diventasse meno ostico, versione dopo versione, conservando però a lungo quel sapore di poco rifinito, quasi di “fatto in casa” che a me piaceva molto.

Puppy_screen

Desktop di Puppy Linux “Slako” con poche personalizzasioni

Eppure il computer è matematico e, come la matematica, dovrebbe essere non infallibile ma prevedibile. Secondo Edsger Dijkstra il programma informatico è come un teorema: se ne può dimostrare la verità (ovvero la correttezza) in modo assoluto e un programma ben progettato dovrebbe essere matematicamente esente da errori. Sono convinto che sia così e che se non lo si fa è in gran parte per motivi di economia: di tempo, di lavoro e di denaro. Dimostrare tramite logica matematica tutti i passaggi di un software complesso è possibile, ma enormemente dispendioso. Bisognerebbe lavorare in modo rigoroso e fare programmi piccoli che fanno cose semplici in modo preciso: la filosofia Unix originaria, in un certo senso. Il mercato vuole invece software onnicomprensivi, con innumerevoli funzioni, che copra un gran numero di esigenze e che sia anche bello e piacevole da utilizzare, dei mostri informatici, in pratica, fatti da tantissime parti su cui lavorano contemporaneamente squadre di programmatori.

Per cui il baco ci accompagnerà ancora a lungo: versione dopo versione, pezza su pezza, immettendone di nuovi a ogni iterazione, magari più subdoli e sottili. Utilizzare un computer, un tablet, un telefonino è diventato una sfida meno improba che in passato, tutto è più immediato e prevedibile, almeno al livello base, ma richiede sempre un margine di sportività.

Altro argomento di psicologia informatica che sarebbe il caso di approfondire: la gestione delle attese informatiche. Non solo possono essere lunghe, ma la loro durata è spesso indefinita e non correlata ai contenuti. Magari in un altro post…

225906_1081639879917_1384777_n

Anche gli orologi digitali hanno i loro momenti di impazzimento.

Aggiunta (5 aprile 2017): “Everything Is Broken”. Tutto è corrotto in informatica (e non solo). Articolo sull’insicurezza informatica, di qualche anno ma per nulla datato, anzi: oggi che si parla sempre più insistentemente di “internet delle cose” mi sembra particolarmente attuale e forse (ma speriamo di no) profetico.

View at Medium.com

 

L’alternativa aperta

In campo informatico sono a favore dell’Open Source, con dei distinguo.

L’Open Source mi piace per l’estetica: il più delle volte è più essenziale, più funzionale, più mirato allo scopo, meno caricato di abbellimenti e di “campanelle e fischietti”, come dicono gli anglosassoni.

Mi piace perché è “aperto” nel senso di gestibile, anche se non nel modo più facile. Tutti i sorgenti sono disponibili, ma soprattutto, per l’utente esperto, tutti i file di configurazione sono accessibili. La conoscenza è distribuita on-line e ricercabile. I forum sono continue fonti di suggerimenti ed idee.

Mi piace perché è adattabile: puoi scegliere quello che preferisci, farlo funzionare come preferisci e (con un po’ di esperienza) solo con quello che ti serve. Se hai un computer non all’ultimo grido o poco potente, puoi continuare ad usare una versione aggiornata di Linux, liberata da tutti i fronzoli, senza i tempi d’attesa di un disco rigido che non la smette di girare.

Mi piace perché è stabile: anche i sistemi commerciali migliorano nel tempo, ma per l’Open Source, Linux e compagnia, il miglioramento è continuo. Tutti i “bug” sono pubblicati e discussi apertamente e la soluzione immediatamente messa in circolo, non nascosti e lasciati appesi finché la casa madre non decide di mettere assieme una “patch” da mandare agli utenti. Chiunque può proporre la soluzione o almeno un “tampone” provvisorio.

E adesso vengono i distinguo.

Non riesco a vedere un mondo interamente Open Source, per alcuni motivi.

I computer sono diventati facili da usare grazie a sistemi commerciali.

Per alcuni utenti pagare l’assistenza è meglio che doverla cercare nei forum.

Molto di quello che si sviluppa in campo Open Source è mirato ad utenti esperti e non al computeraro medio della strada (con delle ammirevoli eccezioni).

Il software commerciale è una continua fonte di idee ed innovazioni, così come lo è l’Open Source.

L’Open Source non ha mai fatto il “grande salto” verso la maggioranza degli utenti. Per tanti motivi che non sto a discutere non è, ancora oggi, adatto all’utente inesperto, quello che vuole accendere il computer per fare qualcosa, oltre che informatica. E’ l’ostacolo maggiore che Linux, ad esempio, non ha mai scavalcato del tutto. Le interfacce utente, ad esempio, mi sembrano ormai adeguate, ma la configurazione di macchina e periferiche non lo è ancora, sebbene abbia fatto progressi fenomenali nel corso degli anni.

Secondo me il principale pregio dell’Open Source, di cui usufruisce anche chi non ha mai sentito questo nome, è che da quando è diventato un’alternativa valida, ha fatto da stimolo al progresso e da calmiere dei prezzi per i software commerciali. Non parlo solo di Linux e di BSD, ma di pacchetti come Gcc, Gimp, Open e Libre Office. Senza Linux & soci, a che versione di Windows saremmo arrivati o rimasti? E di Office? E quanto costerebbero?