My FeedDiscussionsHeadless CMS
New
Sign in
Log inSign up
Learn more about Hashnode Headless CMSHashnode Headless CMS
Collaborate seamlessly with Hashnode Headless CMS for Enterprise.
Upgrade ✨Learn more
Cosa vuol dire essere uno sviluppatore software?

Cosa vuol dire essere uno sviluppatore software?

Alessandro Saiani's photo
Alessandro Saiani
·Oct 22, 2021·

7 min read

L'altra sera mio figlio, che ha sei anni, mi ha posto una domanda che ogni tanto la sua curiosità fa ritornare a galla nella sua mente :

Papà, ma tu che lavoro fai?

e io in tutta tranquillità senza pensare ho risposto :

Lo sviluppatore software

Ma già mentre rispondevo, volendo rispondere velocemente per riprendere quello che stavo facendo, sapevo quale sarebbe stato il passo successivo di quella discussione:

Cosa vuol dire essere uno sviluppatore software?

Ammetto che la mia risposta sia stata banale e sbrigativa, ma è, spesso, il default che uso per evitare la complessità poi di cercare di spiegare la mia risposta a chi non è avvezzo a questo settore. Anche perché non faccio una sola cosa ma termini come Consulente IT, Senior Developer, Technical Leader etc. sono decisamente complicati poi da spiegare. Questa domanda la sento fare spesso (anche riferita al termine developer) ma dare una singola risposta, una definizione univoca è davvero complicato se si vuole dare un senso completo e compiuto alla risposta.

Certo possiamo sempre cavarcela dicendo :

Qualcuno che sa creare i programmi per il computer. Quella cosa comunemente chiamata software.

Risposta che in molte persone crea ancora più confusione finendo per essere ridotta a:

"quello che sa premere tasti velocemente e che se ho problemi con il computer posso chiamare per farmelo aggiustare il tutto gratis".

Proviamo però a dare una risposta più standard, chiamiamo in soccorso Wikipedia.

Un programmatore informatico (noto anche con le espressioni inglesi developer, ovvero sviluppatore, e coder, traducibile come "creatore di codice"), in informatica, è un tecnico che, attraverso la relativa fase di programmazione, traduce o codifica l'algoritmo risolutivo di un problema dato nel codice sorgente del software da far eseguire ad un elaboratore, utilizzando un determinato linguaggio di programmazione. La professione del programmatore è relativamente recente e si è sviluppata di pari passo con l'aumento dei campi di applicazione dell'informatica.

Per molte persone comunque questa definizione rimane nebulosa in quanto termini come algoritmo, linguaggio di programmazione, codice, informatica sono cose il cui significato non è chiaro, o magari solo associato a luoghi comuni anche se magari sono termini sentiti spesso anche nel quotidiano.

Nonostante l'esplosione di internet, nonostante quasi tutti oggi usino dispositivi su cui gira del software, nonostante le nostre vite siano "controllate" direttamente o indirettamente da programmi in tantissimi settori la conoscenza di come tutto questo funziona è davvero minima, se non nulla. Ad oggi l'analfabetismo informatico ha delle percentuali di diffusione davvero alte nonostante l'importanza che l'informatica ha assunto nelle nostre vite anche in maniera a noi "invisibile" che si spera che nel prossimo futuro si ponga rimedio già dai primi anni scolastici delle future generazioni.

Ma torniamo alla definizione facendo un piccolo glossario.

Un algoritmo è una strategia che serve per risolvere un problema ed è costituito da una sequenza finita di operazioni (dette anche istruzioni), consente di risolvere tutti i quesiti di una stessa classe.

Un linguaggio di programmazione, in informatica, è un linguaggio formale che specifica un insieme di istruzioni che possono essere usate per produrre dati in uscita

L'informatica è lo studio dei processi algoritmici, delle macchine computazionali e del calcolo stesso. L'informatica è la scienza (detta anche Computer Science) che si occupa del trattamento dell'informazione mediante procedure automatizzate.

Queste definizioni permettono di comprendere un po' meglio la definizione data sopra ma tendono a ridurre le varie definizioni per sintetizzare il tutto. Ma se prendiamo ad esempio la seguente frase relativa all'informatica nasceranno subito ulteriori considerazioni :

L'informatica (o Computer Science) è la prima disciplina ingegneristica in cui la complessità degli oggetti creati è limitata unicamente dall'abilità del creatore, e non dalla forza delle materie prime.

Questa è una delle frasi che mi piace di più per far cogliere la bellezza e complessità dell'informatica. Le cose che affascinano di questa definizione sono che nonostante si parli di disciplina ingegneristica, e quindi poter quasi pensare ad una scienza matematica, c'è un grosso potere nel definire la creazione di nuove entità in base all'abilità del creatore e quindi ad un processo creativo. Cosa che spesso invece assoceremmo ad una definizione di un arte, come potremmo immaginare la pittura, la musica o tutte le attività creative in genere.

Inoltre in tutte le altre discipline o professioni l'abilità di chi le pratica hanno dei limiti imposti; un matematico, per esempio, non può creare un teorema, lo può scoprire, lo può dimostrare ma esisteva prima che lui lo trovasse. (su questo parzialmente anche per gli algoritmi vale questa cosa).

Un muratore può creare delle mura ma può farlo solamente seguendo le leggi della fisica e difficilmente potrà farlo sospeso nel vuoto senza nulla a reggerne il peso.

Nell'informatica si creano dei prodotti creativi che non esistono nella realtà (salvo la loro rappresentazione magari in segnali elettrici o quantici), che possono rappresentare o meno cose della realtà ma possono essere clonati a costo nullo e che possono continuamente essere modificati, cambiati, ricreati per quante volte si vuole.

E' possibile creare dei programmi, se immaginiamo gli albori dell'intelligenza artificiale in cui ci troviamo ora, dove del software riesce ad imitare/emulare l'intelligenza umana con a volte risultati superiori ai nostri. Non c'è paragone e non c'è limite a quello che un software può fare se non di conoscenza o di potenza di calcolo a disposizione del suo creatore (e questo limite continua a spostarsi in avanti di giorno in giorno). Si può creare del software che crea in autonomia altro software, o software che compone musica e cosi via gli esempi potrebbero continuare a lungo.

Si può creare un mondo virtuale, si può creare un simulatore della realtà, si può creare un software che può salvare delle vite o può rovinarne delle altre. Possiamo creare del software che prevede il futuro (basti pensare a tutti i software legati alla meteorologia o tutte le simulazioni mediche di impatto dei medicinali ancor prima di essere creati) dando applicazione pratica ai modelli teorici delle scienze matematiche.

Tutto questo può essere realizzato in tantissimi modi : diverso linguaggio di programmazione, diverso algoritmo per risolvere il problema, diversa velocità di esecuzione, diversa qualità del risultato. Questo aspetto rappresenta in se una meraviglia ma anche una "maledizione".

Se dovete risolvere un problema di un vostro cliente dovrete trovare la soluzione migliore per il suo problema in un tempo fisso dato dal suo budget/scadenza e riuscire a codificarlo senza la presenza di errori.

Anche questa può essere una buona descrizione di cosa fa uno sviluppatore software.

Probabilmente é fra le professioni che si sono sviluppate in minor tempo e che continua a cambiare più rapidamente delle altre. Un muratore quando ha imparato a costruire un muro può migliorare nella tecnica di costruzione ma in generale i principi su cui si basa il suo lavoro non cambieranno nel tempo. Per gli sviluppatori software le cose cambiano di giorno in giorno, frutto dello sviluppo tecnologico di questa era in cui viviamo.

Ma nonostante questo é una disciplina aperta a tutti, senza particolari limitazioni per potervi accedere se non tempo e volontà per imparare le cose. Molti bambini riescono ad avvicinarsi oggi a questo mondo con risultati straordinari. Questo é chiaramente anche un grande limite nel mondo lavorativo in quanto sono pochi quelli realmente bravi e che rimangono al passo con i cambiamenti tecnologici contribuendo ad aumentare la difficoltà di realizzazione dei software nei tempi e nei costi previsti (oltre alle difficoltà naturali di questa disciplina)

Quindi cosa vuol dire essere uno sviluppatore? Come abbiamo capito ci sono molteplici risposte possibili. Questo anche perché ci sono diverse tipologie di sviluppatori.

La mia personale definizione però é la seguente :

Una persona appassionata della Computer Science che sviluppa un modo di pensare, un modo di essere molto razionale e algoritmico, amante dei problemi complessi di cui riesce a trovare le migliori soluzioni e tradurle in modo efficiente in qualcosa di digeribile da parte di un computer.

Poi possono essercene altre riconducibili alla sola professione, ma dal mio punto di vista il vero sviluppatore non é strettamente legato ad un lavoro. Parlo appunto di passione come carburante fondamentale, d'altronde chi te lo fa fare di imparare ogni giorno da capo la tua professione un po' come succedeva al protagonista del film "Memento".

Ma ci sarebbe tanto altro da dire su questo argomento e magari ci tornerò sopra nei prossimi articoli di questo blog.