Difendersi dai Programmattori

Fra le parole più abusate su internet un posto d’onore va a programmatore (o developer e varianti). Forse secondo solo a “H4ck3r”. In ogni caso, programmatore fa fico, creare programmi e dire alla gente “questo l’ho fatto io” non ha prezzo.

Ma la realtà è ben diversa. Spesso molti di questi individui sono programmAttori e nulla più. Molti conoscono la programmazione sciamanica, l’arte di scrivere mantra tantrici su dei file .c o .py e passarli ad un compilatore per ottenere qualcosa in cambio. Questa non è programmazione, almeno non al suo livello più nobile. Il web è pieno di questi arroganti developer. Vediamo come disinnescarli.

1 – Programmare non significa assemblare

Se trovate persone che vi propinano programmi scritti da loro il primo modo per verificare la potenza della loro capacità. Verificate il numero di librerie e cosa fanno. Molto spesso troverete programmi assemblati. I programmi assemblati sono i software semplici costruiti a partire da un numero enorme di librerie (che fanno tutto il lavoro sporco) che vengono assemblate dal programmatore. Un esempio di questi programmi sono player musicali o programmi di pulizia del sistema. In realtà tali programmi usano librerie grafiche, librerie audio e collegano il tutto in modo piuttosto lineare.

Questo è essere programmatori allo stesso modo di come cucinare un piatto leggendo una ricetta da un libro di cucina usando prodotti surgelati fa di noi degli Chef.

È una programmazione hobbistica, che ha il suo rispetto, la sua dignità e spesso sforna programmi utilissimi. Ma i programmAttori te lo spacceranno come una meraviglia dell’informatica e pretenderanno, alla luce di ciò, di parlare alla pari con un developer del kernel.

2 – Programmare non significa sapere un linguaggio

Un programmatore non conosce il C, non conosce il Java, non conosce il Python: li conosce tutti. Un programmatore esperto non ha paura di imparare un linguaggio nuovo perché con venti minuti di letta al manuale del linguaggio entra già nel meccanismo. Questo perché sa che cos’è la programmazione al di là del singolo linguaggio, ha appreso i concetti informatici che stanno dietro ai linguaggi di programmazione e sa riconoscerli in tutti i linguaggi del mondo.

Ovviamente sto esagerando, ma un programmatore esperto può semplicemente imparare un linguaggio nuovo in due ore (se rientra nei paradigmi che conosce, altrimenti un paio di giorni).

Il programmatore farlocco invece no. Se gli dici “facciamo un progetto XYZ” non ti dirà di farlo nel linguaggio più adatto allo scopo bensì nel linguaggio che conosce.

Si può essere più programmatori scrivendo in pseudocodice su carta che scrivendo uno script di pulizia in bash.

3 – Programmare non significa fare finestre

Altro comportamento classico del programmatore wannabe è il classificare come più dignitose le applicazioni grafiche rispetto alle applicazioni a riga di comando. Se sentite frasi del tipo “io faccio programmi con le finestre, mica quelle schifezze a riga di comando” accendete l’allarme: è molto probabile che vi troviate di fronte ad un programmAttore montato dei più classici.

Le finestre sono un aspetto (minimale) dell’intera programmazione. Nonostante nell’uso desktop utilizziamo quasi tutte applicazioni a finestra queste rappresentano solo una minima parte del lavoro che milioni di programmatori fanno ogni giorno (ad esempio scrivendo librerie come quelle che loro usano per fare le amate finestre). Quindi scusate se mi innervosisco ma uno che si vanta di fare programmi a finestra invece di altro non solo non è programmatore: è un mentecatto.

Un programma come Gazebo, tanto per dirne uno che sto usando ora, è un programma estremamente sofisticato e complesso dato che serve a simulare insiemi di Robot in ambienti 3d. Eppure è un programma a riga di comando. Il tanto amato dpkg di Debian è a riga di comando eppure svolge tutto il lavoro pesante dell’installazione dei pacchetti.

Inoltre, se vogliamo dirla tutta, la programmazione una finestra grafica non è complessa (in generale), si va dalla quasi banalità del Visual Basic e del Gambas alla media complessità di Gtk e Qt. Saper fare finestre grafiche significa studiare e conoscere bene una libreria fra le infinite disponibili, non conoscere la programmazione nel suo complesso.

4 – Programmare non significa conoscere HTML e CSS

Fra i programmAttori web spesso giara questa balla. Io conosco HTML e CSS quindi sono un programmatore. Sbagliato. Al massimo sei un Web Designer ma non un programmatore.

La ragione è semplice: HTML e CSS non sono linguaggi di programmazione e, se non il presunto developer non sa questo allora è garantito che non è un developer. Essere esperti di HTML equivale ad essere esperti di CSV, LaTex e altre metodologie di formattazione dei dati. Potete fare un ciclo in HTML? No. E quindi non è chiaramente un linguaggio di programmazione.

5 – Programmare non significa scrivere codice

O almeno non significa solo quello. La programmazione è una cosa più vasta di cui lo scrivere codice è probabilmente la cosa più noiosa. L’atto di sviluppare un’applicazione parte da prima, da quando si analizzano gli aspetti di ciò che si vuole fare e si progetta l’applicazione, e arriva fino alla fase di test. È la progettazione soprattutto, la sensazione di analizzare un problema, smontarlo e risolverlo che fa di noi un programmatore. Non ha ancora scritto una riga di codice ma nella sua mente il programma è già scritto e questo, vi assicuro, da una bellissima sensazione.

Il programmAttore invece scrive codice su codice spesso in mega malloppi di file per nulla modulari e invece di lamentarsi di come sta gestendo il suo progetto probabilmente si lamenterà del linguaggio (che secondo lui non permette di fare la cosa X o la cosa Y).

6 – Programmare significa progettare strutture dati

Probabilmente, se non vi siete mai trovati a progettare una struttura dati o almeno a pensare a quale struttura dati sia migliore per la vostra applicazione, non siete veri programmatori. L’unica cosa che fanno i programmi è manipolare l’informazione e l’informazione è manipolata e memorizzata nelle strutture dati. Quindi programmare È fare strutture dati.

Molti linguaggi coprono molte funzioni base. In Python per fare una lista dinamica non ci vuole certo un tecnico esperto, ma per programmi complessi anche il Python necessita di un po’ di progettazione nelle strutture dati (anche solamente organizzare gli oggetti che popoleranno la nostra applicazione).

Tutti i programmatori che conosco e che stimo almeno una volta hanno avuto la necessità di scrivere manualmente una lista, un array, un heap e così via. Anche io ne ho avuto bisogno. Credo che tutti ne abbiano bisogno prima o poi.

Se il vostro interlocutore tentenna sulla struttura firstchild-nextsibling di un albero probabilmente siete davanti ad un programmAttore.

Per concludere. Forse ci sarebbe molto altro da dire e molte altre cose che al momento mi sfuggono ma il punto credo sia chiaro: per chi, come me, ama questa disciplina è fastidioso veder impazzare per il web tanti tromboni che vantano una conoscenza di programmazione accademica e danno la colpa dei loro fallimenti sempre a qualcos’altro. È irritante sentire cose stupide come quelle al punto 3.

C’è chi studia anni, legge libri su libri per apprendere una tecnica, che scrive tonnellate di righe di codice praticamente inutile solo per implementare e mettere a punto una particolare struttura dati o un particolare algoritmo che ha studiato. Poi arriva il ragazzino di turno che ti sbatte in faccia l’ennesimo programma con GUI per pulire il tuo sistema e pretende di parlarti alla pari.

Vorrei che tutti questi individui imparassero l’umiltà e capissero, come me, che abbiamo ancora molto da imparare. Molto.

  • http://www.nerdz.eu/ Nessuno

    I miei complimenti. Ottimo articolo!

  • Ignazio calo’

    quoto, anzi stra-quoto. Per me la programmazione ha un fascino estetico impareggiabile, solo una bella dimostrazione di matematica è bella tanto quanto un programma ben scritto.

    • Anonymous

      Esatto. :) Quando vedo programmi scritti alla “basta che funziona” è un colpo al cuore. :D

  • Scugnizzo

    Perbacco…dopo 48 ore mi aspettavo più di soli 2 commenti (questo dovrebbe far riflettere sul numero di programAttori in giro).
    Ecco il terzo….con la mia opinione.

    Ottimo articolo…..sei riuscito a far sentire me…..programmatore Cobol che guarda con ammirazione le Gui delle recenti tecnologie confrontandole con le mappe CICS di un terminale 3270…..meno dinosauro :-)
    Grazie.

    • Anonymous

      Mmm tecnicamente sono 24 ore dato che l’ho postato ieri mattina. :D

      In ogni caso grazie a te del commento. :)

  • http://picchiopc.wordpress.com Picchiopc

    complimenti davvero un ottimo post :D

  • http://chuckmonolog.blogspot.com chuck chupa

    Purtroppo questo è un problema che riguarda un po tutti gli ambiti lavorativi. I lavorATTORI son dappertutto. E tutto inizia dal mondo universitario: son tutti bravi a criticare il lavoro altrui e a sostenere che i corsi non preparino ad affrontare nella pratica ciò che si è studiato, il che è vero, ma in realtà vedo che la cosa fa comodo a tanti. Si studia il tanto per passare esami e ottenere CFU: se viene proposto un seminario, un progetto, qualcosa che esuli dalla semplice teoria del corso, fuggono tutti. Almeno che non dia CFU. Ma anche in quel caso guai a proporre qualcosa di nuovo rispetto a quanto già visto nel corso perché “è difficile”.
    Studio per diventare un buon programmatore, per ora mi sento inquadrato tra gli assemblatori, ma c’è gente che non sa fare nemmeno quello. Gli chiedi di realizzare qualcosa, gli dai pure la pappa pronta dicendo quali librerie usare e rimangono a fissare il vuoto perché “non le hanno mai usate”. Fai notare l’esistenza di google e dei reference e ti rispondono “ma è tutto in inglese”. Confondono il concetto di classe con quello di oggetto. Scrivono codice a cazzo: non nel senso di brutto, perché anche io mi accorgo di scrivere cagate, ma appunto me ne accorgo e cerco di studiare come rimediare. Molti se ne fregano di cercare il modo di renderlo ottimale: l’algoritmo è corretto? Si. Manca sempre il “posso fare di meglio?”.

    • Anonymous

      Condivido ogni singola parola. :)

  • Lorenzo

    Le tue righesono piene di sentimento e questo è bellissimo! è bellissimo per chi come me sta studiando vedere che c’è chi crede in queste cose! Hai il mio completo appoggio e la mia completa stima per quello che sostieni! Un saluto da chi ambisce a diventare un Programmatore, conscio della quantità di camice da sudare per poter diventare come Te!