Le caratteristiche del buon programmatore

Qualche mese fa Daniel Tenner ha scritto sul suo blog un incredibile post sulle caratteristiche a cui badare quando si cerca un programmatore da assumere.

Normalmente su Stacktrace cerchiamo di pubblicare “notizie fresche”, ma l’articolo di Daniel è così calzante nei riguardi del mondo del lavoro italiano che non potevo esimermi dal citarlo (ringrazio Slashdot per il link).

Secondo Daniel le cinque caratteristiche comuni a tutti i buoni programmatori sono queste:

  • passione
  • autodidatticità ed amore per l’apprendimento
  • intelligenza
  • esperienza nascosta
  • varietà tecnologica

Non posso che concordare completamente con questi punti comuni a tutti i programmatori che conosco degni di tale nome.

Mi piacerebbe che più aziende in Italia selezionassero la gente in base ai principi delineati da Daniel, che rafforzano un’idea che ho sempre avuto: il programmatore non è un muratore, ma un musicista. La programmazione è un atto di creazione artistica, non un semplice assemblare pezzi di codice.

Con questo non voglio assolutamente condonare il lavoro di chi scrive codice senza riflettere o si diletta a scrivere in modo smart ma incomprensibile per gli altri. Mi piacerebbe semplicemente che si diffondesse una concezione del programmatore come professionista, e non operaio.

Quali sono state le vostre esperienze lavorative? Come siete considerati sul posto di lavoro?

Comments

  1. Bhè, dove lavoro spero sinceramente di essere considerato un musicista, per citare la tua metafora, e non un muratore 😛

    Comunque io aggiungerei un’altra caratteristica all’elenco che ritengo quantomeno necessaria: senso della praticità 🙂

    Stare li a teorizzare su cose e concetti e poi non sapere come concretizzarli può essere molto dannoso ai fini del lavoro e delle tempistiche 🙂

  2. Non sempre ti lasciano fare il musicista quando c’e’ in gioco del denaro; una personalita’ forte che sappia imporsi e’ quindi un’altra caratteristica che il buon programmatore dovrebbe avere per riuscire ad avere la meglio su manager e imprenditori “miopi” 😉
    Devo pero’ ammettere che ogni tanto in ambito aziendale bisogna anche saper usare la cazzuola senza vergognarsene!

  3. La cazzuola sarebbe il buon vecchio Copy\Paste che non passa mai di moda 😀 ?

  4. Tendenzialmente quando mi presentavo come “Programmatore” il risultato era esattamente quello di essere considerato di primo impatto un banale esecutore.
    Non è che sia molto simpatica come cosa, ma purtroppo è percezione diffusa, troppo diffusa. 🙁

    Credo che sia anche il motivo per cui le persone tendono un po’ a svicolare da tale identificazione professionale. E non posso darle torto. :/

    In ogni caso, se ci fosse anche “enorme curiosità” credo che più di programmatore si dovrebbe parlare di hacker. 🙂

  5. In genere quando qualcuno mi chiede cosa faccio, gli dico che sono “un informatico”, cosi mi cavo di’mpaccio. Chiedimi qualsiasi cosa, luna compresa :P, basta che paghi !

  6. @attilio viscido Esattamente 🙂

  7. Il problema tra l’altro si presenta anche a chi lavora in proprio sotto forma di “far percepire” al proprio cliente la qualità del proprio lavoro per poter chiedere più soldi 🙂

  8. Non so dire altro se non “Concordo pienamente!”.
    Soprattutto il secondo punto, autodidatticità , anche io sono autodidatta e non programmo solo per soldi, ma anche per passione. Questo sta al principio base dell’open source.

  9. Ci sarebbe da aggiungere una cosa seconde me: le caratteristiche individuate fungono sicuramente da “cartina di tornasole” per individuare un buon programmatore; il problema e’ che in alcuni casi o per certe posizioni, in ottica aziendale (e quindi di profitto), semplicemente *non* serve un buon programmatore ma semplicemente un ottimo esecutore, che costa meno.

  10. Beh, credo che a volte servano degli esecutori non solamente in ottica di profitto, ma banalmente perché comunque di eccellenti programmatori non ve ne sono poi così tanti e vanno comunque affiancati con esecutori, che comunque non sono ruoli meno importanti. 🙂

  11. In effetti hai ragione, a volte leggendo blog e frequentando gruppi di persone in rete ci si fa l’idea che di veramente talentuosi ce ne siano tantissimi in realta’ nel mondo reale sono una nicchia e te ne rendi conto quando metti piede in azienda 🙂

  12. Ma perchè le SEI caratteristiche nel post sono diventate CINQUE nella lista? :-p

    A parte questo refuso minuscolo, ho particolarmente gradito il post originale e anche il vostro adattamento alla realtà in cui viviamo ogni giorno.

    Tra l’altro penso di riconoscermi nella lista, ma io ho iniziato a programmare seriamente solamente all’università… cercherò di tenerlo nascosto.

  13. maelstrom la sesta caratteristica era un’anti-caratteristica, per questo non l’ho riportata.

  14. Paole sante. Dissento blandamente solo su un aspetto, piu’ nella forma che nella sostanza: non mi ha mai convinto l’idea che i programmatori siano degli artisti ==> manca la finalita’ artistica e l’estetica del software mi fa venire i brividini freddi lungo la schiena. Detto cio’, esiste un’eleganza propria del codice scritto bene che cattura caratteristiche che sebbene piu’ difficili da maneggiare sono sicuramente piu’ oggettive. Ad esempio, low coupling, high cohesion, SRP, ecc.

    Cio’ nonostante, ancora una volta condivido quasi tutto quello che dice Paul Graham, ma il bravo programmatore mi sembra di piu’ un artigiano rinascimentale (ed e’ un complimento, ci mancherebbe!).

  15. Condivido in toto su tutto.
    Qualche considerazione sparsa: in base alla mia esperienza (ormai ho lavorato in tutti i settori dal privato alla pubblica amministrazione) quando si deve produrre, la bravura e la passione sono solo un optional. La “proprietà” vuole il risultato e poco importa se lo fai in modo sporco, elegante o appassionato: il comprenso economico sarà sempre lo stesso.
    Chi non mette la passione in questo mestiere, probabilmente non ha neanche la fantasia necessaria per aggiornarsi o aumentare il proprio know-how: lo fa in maniera meccanica e basta, tipo catena di montaggio.
    Sempre in base alla mia esperienza (e questo lo dico con rammarico) purtroppo spesso chi mette la passione ed è più bravo in questo mestiere è anche quello che poi ci guadagna di meno …

  16. tra noi 5 programmatori ci chiamiamo (e facciamo chiamare, ormai) “pestellatori”

  17. @thebox: ti sfido a non chiamare artisti gli artigiani rinascimentali 🙂

  18. @thebox: giovanni ti ha ben risposto. In ogni caso dipende da cosa tu intenda per artista… il concetto di arte è noto, ma se scendiamo a trovarne una definizione universalmente accettata uscirebbe un dibattito infinito. 🙂

    Anche a me piace la definizione di ‘artigiano’ e l’altro giorno riflettevo con Ludo sulla possibilità che possa essere anche un ‘alchimista’. 🙂

    Io preferisco la concezione di artista come qualcuno che riesce a mettere anima creativa in quello che fa. E non è detto che il risultato debba rientrare nel concetto comune di “bello”, perché, come fai notare poco dopo, un codice ben scritto è bello… ma bisogna saperlo vedere. 🙂

    @cristiano: il punto è che le persone che fanno meccanicamente il programmatore, solitamente mettono più passione nel marketing. Ecco perché vengono pagati di più. 😉
    In ogni caso, a me piace fare le cose, piace spiegarle e piace farle bene. E non uso “piace” a caso. Quindi, anche se in definitiva c’è gente che sa vendersi meglio, io preferisco il mio approccio, perché lo ritengo più completo ed educativo, anche per il cliente.
    Ho un po’ l’animo dell’evangelista. O dello scassamaroni, fai tu. 😀

  19. @giovanni, @Folletto: la finalita’ e’ essenziale, sta tutta li’ la differenza secondo me. Io scrivo codice per risolvere un problema, non per il gusto del bello. E’ solo questo il motivo per cui secondo me e’ piu’ appropriato parlare di artigiano che di artista. Ma questi in fondo sono solo dettagli, mi sembra che siamo tutti sulla stessa lunghezza d’onda.

  20. Sulla questione artigiano-artista secondo me ha ragione TheBox: è un tema su cui si dibatte da tempo, ad esempio, nell’architettura. Il termine artigiano nella sua concezione più elevata si applica perfettamente al mestiere di programmatore come è descritto qui. L’arte è un’altra cosa, anche se a volte il confine è abbastanza sfumato.

  21. Far eil programmatore oggi e’ molto difficile, no nin termini tecnici, ma “professionali”.
    L’utenza ha ormai metabolizzato che i pc fanno tutto premendo un bottone. E per loro fare il programma significa mettere il bottone in una schermata. Quante volte vi e’ capitato di usare programmi e dire “figata, fa anche questo.” e pensare Bravo chi lo ha fatto, chissa’ come?. A me capita spesso, Non do mai per scontato che una funzione/funzionalità sia intrinseca od ovvia, cosa che purtroppo fanno abitualmente i clienti. Poi a loro interessa il risultato, poco importa che codice ci sta dietro. Per questo ritengo che farsi pagare il giusto sia molto difficile.
    IMHO ovviamente!

    Max.

  22. Shameless plug: questa cosa dell’artista-artigiano mi fa venire in mente una cosa che avevo scritto anni fa su Perlmonks. La linko, senza grandi pretese: Discipline. Se qualcuno la legge sono curioso di sapere cosa ne pensa.

  23. @TheBox: uhm, un “artista” che fa qualcosa per il puro gusto del bello, secondo me ha poco dell’artista, che credo per essere tale debba avere doti di creatività, tecnica, empatia. 🙂
    E non c’è arte senza tecnica, anche questo dovrebbe dire molto. 🙂

    Che poi, volendo ben vedere, anche l’esteticità fine a sé stessa… è un fine. Nel momento in cui andiamo a fare distinguo risalendo alla fonte, si nota che tutto diventa sfumato e indeterminabile: c’è sempre uno scopo, c’è sempre la passione, c’è sempre la creatività, etc.

    Comunque si, alla fine anche questa discussione è più sui dettagli che altro: siamo tutti d’accordo sul concetto primo. 🙂
    E poi mi piace molto di più il termine “artigiano” che peraltro ha comunque la stessa radice latina “arte”. 😛

  24. Lo slogan di WordPress è “code is poetry”.
    Il concetto di arte è strettamente correlato al concetto di bellezza. L’idea di una bellezza oggettiva è difficile da comprendere. Se qualcosa appare bello non a pochi individui, ma ad una moltitudine, si può parlare di arte (motivo per il quale il disegno di un anonimo bambino di 3 anni attaccato al frigo non è artistico come un picasso, nonostante siano entrambi dei dipinti).
    Un esempio: la danza. C’è chi la considera arte, io la considero ginnastica sincronizzata con la musica. Un programmatore può vedere come arte una classe astratta in C++ mentre un ballerino non vedrebbe altro che tante righe senza senso. Evidentemente il ballerino non arriverà mai a definire il pezzo di codice “arte” come io non arriverò mai a definire artistica la sua disciplina.

    Ciò che per me è arte per te puo’ non esserlo. La parola “arte” è troppo sputtanata e alla fine non ha molto senso.

  25. Folletto, una grande distinzione è che l’artigiano deve (dovrebbe, visti i prodotti di certi designer) produrre oggetti che oltre a rispettare tecniche/tecnologie e conoscenze specifiche siano anche “usabili”.

    Nel senso che una sedia di un mastro ebanista del ‘700 è pur sempre una sedia, e ti ci puoi sedere sopra, anzi probabilmente è anche più comoda di una sedia moderna fatta in serie. O una casa deve avere pavimenti diritti, tetti che non perdono, stanze asciutte e illuminate, ecc.

    Mentre un quadro non deve rispettare un bel niente, nemmeno il requisito minimo di poter essere appeso a una parete. In questo senso, quindi, scrivere software è artigianato, non arte. Progettare edifici è artigianato, non arte (con buona pace di tanti esaltati innamorati della propria supposta creatività).

    Oltretutto, l’estetica di un codice non è probabilmente evidente a chi lo usa se non sotto forma, appunto, di usabilità. Mentre l’estetica di un testo, di un edifico, e anche di una sedia è immediatamente apparente agli utilizzatori finali. In questo senso il software è ancora meno artistico di questa altre discipline, che abbiamo già definito essere più artigianato che arte.

    Il software secondo me ha molti più punti di contatto con il diritto, almeno nell’accezione romana/italiana/europea, che con la creazione artistica. Siamo “creativi” (brutta parola, e troppo abusata) lo stesso, solo non è arte.

  26. Marco, stai dicendo fesserie. Un prodotto non è “artistico” per chi lo crea, ma per chi lo consuma. E BTW, hai mai dato un’occhiata al codice di WordPress? Se anche la programmazione fosse arte, WordPress sarebbe il software meno artistico che esiste, slogan di marketing a parte.

  27. Ludo: l’arte non si consuma.

  28. Ludo, beh, un quadro *ha* requisiti, semplicemente son differenti da quelli necessari per una sedia. 🙂

    Il fatto che possano essere “infranti”, crea qualcosa di differente (non più un quadro)… come lo creerebbe anche nel caso di un edificio o di un software. 🙂 E c’è chi lo fa. 🙂

    Ma ripeto, sto soltanto “difendendo” la tesi for discussion’s sake, più che altro. A me piacciono entrambi i termini, con una preferenza per “artigiano” in quando meno abusato di “artista”, e se ti ricordi quello scambio di battute tempo fa, potrei buttare dentor anche “alchimista”. 😉

    Comunque, condivido: “Code is Poetry” è marketing e nient’altro. WordPress dovrebbe dire “Code is Pasta”. 😀

  29. Cmq questo è quello che intendevo quando dicevo che parlare d’arte aprirebbe un dibattito voragine pieno di posizioni differenti, sfumate o contrastanti. 😀

    Potrei fare un post intitolato “L’arte del web2.0”. 😛

  30. E comunque si, sono d’accordo sullo slogan merchandiser di WP…ed era provocatoria la mia citazione, bastava leggere il resto del mio commento

  31. Folletto non fare l’azzeccagarbugli. 🙂 Un quadro non ha requisit, a parte quello (spesso contraddetto nell’arte moderna) di essere in due dimensioni. Una sedia invece deve stare in pedi da sola, reggere un centinaio di chili che si muovono e la trascinano/inclinano, essere abbastanza comoda, ecc. Tutte cose che pongono forti vincoli, ma soprattutto che determinano un grado minimo di “usabilità” che un quadro o un’opera musicale non devono avere. E se iniziamo a parlare di edific le cose si complicano parecchio. Poi gli estremi ci sono sempre ovviamente, ma pensare che un brano musicale abbia vincoli semplicemente perchè possi immaginarne uno con un suono che ti perfora il timpano è, appunto, una estremizzazione. E un brano che ti perfora i timpani non è comunque artistico (e se pensi che lo sia, ehm ho un buon analista da consigliarti). 🙂

  32. Marco beh, se era provocatoria allora ha tutto un altro senso. E il mio commento è venuto fuori un po’ forte, dopo “fesserie” mi sono perso uno smiley… 🙂

  33. Ragazzi a mio avviso manca il Problem Solving, quello scavalcare i problemi che sembrano invalicabili visti dal basso ma semplici da arginare se visti dall’alto…

  34. Mica faccio l’azzeccagarbugli, al più filosofeggio. 😉 Il fatto che i requisiti sian più labili non significa che non ci sian, non trovi? In ogni caso era una estremizzazione: si va agli estremi per vedere se una tesi è valida, no? In fisica come in filosofia. 🙂

    Infatti: un brano che perfora i timpani è come un codice brutto e che non funziona. 🙂

    E comunque son sicuro che qualcuno potrebbe comunque definirlo arte… (per tornare sul discorso che non ne verremo mai a capo :D). 😀

  35. @Antonio: beh, “intelligenza” credo includa “problem solving”, no? 😀

  36. @Folletto: più che un “evangelista” io mi ritengo un “romantico”, comunque condivido l’astrazione.
    Ad ogni buon conto non facciamo confusione tra “programmatore” e “codificatore”. L’immagine del programmatore intesa come 25 anni fa, ad esempio, non è più applicabile allo stato dell’arte.
    Io preferirei parlare di “sviluppatore” o “progettista”, altrimenti si rientra del discorso del mero esecutore, ovverosia di colui che scrive codice solo dietro specifiche e lascia l’analisi ai “piani alti”, ma non mi sembra che sia questo il soggetto o obiettivo della discussione 😉

    @ ludo: condivido il giudizio sul codice di WordPress e non esprimo altri giudizi in merito 🙂

    @ TUTTI: discussione veramente coinvolgente. Complimenti a tutti davvero …

  37. @cristiano: verissimo. Ottima precisazione.

    Liguisticamente forse si potrebbero introdurre termini come suggerivi tu, qualcosa tipo esecutore/programmatore o programmatore/sviluppatore.

    Mi fa pensare però il tuo commento… perché se il programmatore di ieri è il progettista di oggi (opinione che condivido) in realtà il problema è soltanto che il termine “programmatore” è ha perso valore sociale – se mi permettete l’esagerazione – e non quale sia il “vero programmatore”.

    Una sorte simile al concetto di hacker, se vogliamo. Possibile?

  38. @Folletto: la metamorfosi del “programmatore” in “progettista” è dovuta sostanzialmente a due fattori:
    1) la maggiore complessità sia delle problematiche che degli strumenti adoperati per risolverle
    2) la filosofia aziendale (tutta italiana purtroppo) delle PMI nostrane relativa al concetto: 1 man 1 project. Nella logica del risparmio si affida tutto ad un un solo “professionista” che, giocoforza, non può non essere all-in-one 😉
    Da cui l’evoluzione del vecchio programmatore in una sorta di guru dell’applicativo, se mi si permette il termine.
    La confusione è senz’altro imbarazzante: di ciò dobbiamo ringraziare i media che con le loro informazioni approssimate (e a volte eccessivamente o riduttive o sensazionalistiche) trasmettono immagini errate ai nostri interlocutori.

    Sorte analoga anche al concetto di hacker: il personaggio non è più appunto un romantico anarchico dedito alla scoperta di falle nei sistemi per il semplice gusto della ricerca, ma o uno squallido sviluppatore di virus o malware, o un prezzolatissimo giovinastro sul foglio paga di qualche ente governativo.

  39. Mi è venuto in mente che questo potrebbe essere interessante, vista la piega presa dal thread:

    http://www.ted.com/index.php/talks/view/id/66

    A typical review: “If you have not yet seen Sir Ken Robinson’s TED talk, please stop whatever you’re doing and watch it now.”

  40. Alessandro says:

    Discussione molto interessante, imho il codice può persino divenire una forma d’arte, quando raggiunge il perfetto equilibrio tra funzionalità e forma, è naturale che la bellezza del codice sorgente non sia percepibile da chi non la comprende, per comprenderla è necessaria una forte sensibilità artistica e una grande competenza tecnica, qualità e competenze spesso necessarie per comprendere la bellezza di alcune opere di Boccioni, Fontana, molti astrattisti ecc…
    Fate una punta qui: http://epidemic.ws/fg.html
    Ciao

  41. Concordo pienamente con i cinque punti elencati nell’articolo. Per esperienza devo dire che troppe volte il programmatore è considerato un operaio. Mi riferisco per esempio a quante volte si consideri più il numero di programmatori, che lavorano in un dato progetto, a scapito della qualità.
    Penso inoltre che solo la nostra grande passione ci permette di andare avanti felicemente , anche mandando giù TANTI BOCCONI AMARI

  42. Colgo l’occasione per intervenire.
    Considerati i progetti che vengono svolti in italia il lavoro di programmatore è effettivamente quello dell’operaio.
    Sono lavori banali che non richiedono nessuno sforzo cognitivo o capacità particolari di implementazioni algoritmiche.
    Io personalmente, dopo anni di programmazione devo realmente accettare questo fatto come una realtà.

    La gestione dei progetti è fatta in maniera tale che cio che veramente conta è il numero di operai che ci lavorano. L’ingegneria del software è distrutto la figura del programmatore artigiano, dell’artista o del musicista, è solo un esecutore.
    Il singolo sviluppatore con intelligenza sopra alla media potrebbe realizzare soluzione SMART, costumizzabili, generali e scrivere in 100 righe quello che invece viene scritto in 10000 da un team di sviluppo.

    Nei progetti si scrive una valanga di codice ridondante, si risolve lo stesso problema un milione di volte, è ovvio che le soluzioni implementate saranno banali, è programmazione di bassa manavolanza.
    Purtroppo è cosi, prendete la professione del programmatore come punto di inizio, ma poi puntate a fare l’analista o il progettista software perchè in un azienda grande ,il programmatore è equivalente al muratore, con ragionevole certezza, oppure fate di meglio.
    METTETEVI IN PROPRIO.

    Ciao.

  43. E questa considerazione del programmatore operaio prescidende dalle effettive capacità del programmatore stesso.

    Che io sappia implementare un automa a pila non deterministico come mezzo per il parsing di un file XML o che io usi la classe del framework, cambierà qualcosa nella percezione della figura professionale se il risultato è lo stesso?

    .NET framework o il set di classi JAVA semplificano molto le cose ma questo significa che si puo’ sviluppare software trascurando troppi dettagli che un vero programmatore invece dovrebbe conoscere e sono quelle conoscenze o meglio ricchezze cognitive che fanno la vera differenza.
    Aggiungo un’altra considerazione:
    FATICA FISICA MURATORE = FATICA MENTALE DEL PROGRAMMATORE

  44. Michele Simionato says:

    roger: Stacktrace ha una rubrica “IT Business”
    che si occupa di queste tematiche. Se hai voglia
    di estendere il tuo commento e di trasformarlo
    da rant ad articolo, sei invitato a farlo!

Policy per i commenti: Apprezzo moltissimo i vostri commenti, critiche incluse. Per evitare spam e troll, e far rimanere il discorso civile, i commenti sono moderati e prontamente approvati poco dopo il loro invio.