Ultimamente, sembra esserci molto entusiasmo intorno al artigianato del software .
È un concetto ben definito? Cosa implica? In che misura la programmazione è efficacemente un'attività artigianale?
Tra gli altri usi della parola, il termine Craft può essere definito come:
Il concetto di artigianato del software è stato gettato in giro per molti anni. Ricordo di aver discusso di questo con i colleghi fin dalla fine degli anni '90, tuttavia probabilmente è stato preso un po 'più sul serio da quando è stata rilasciata la prima copia del Pragmatic Programmer - come indicato nei commenti elencati nella domanda sugli OP.
Per quanto riguarda una definizione specifica, non conosco personalmente alcuna singola affermazione chiara che dice "questo [inserire le cose qui] è ciò che significa essere un artigiano del software". L'unico documento a cui riesco a pensare con il massimo della mente che si avvicina, è la dichiarazione e i 12 principi che definiscono il Manifesto Agile.
L'implicazione tuttavia è relativamente chiara, in quanto per fornire un software della massima qualità possibile, è necessario:
Ottenere tutto quanto sopra "giusto" richiede un professionista altamente qualificato - o una squadra - con l'esperienza e la dedizione per ottenere il miglior risultato possibile.
La principale differenza tra i professionisti di oggi e gli sviluppatori di software professionali dipende in realtà da come sono educati, dal corpus di conoscenze che dovrebbero assorbire e dalla loro rapida diffusione nel mondo del lavoro. Un altro è quanto velocemente la conoscenza attuale diventa obsoleta e richiede nuove conoscenze per tenere il passo con le tendenze e i cambiamenti del settore. Gli sviluppatori di software sono tenuti a continuare la loro formazione per l'intera carriera, al fine di rimanere adeguatamente qualificati, mentre scambia conoscenze come carpenteria o cambiamenti di muratura raramente, se non mai durante la carriera del commerciante.
Come mestiere, puoi tracciare una serie di parallelismi tra lo sviluppo del software e alcuni dei vecchi mestieri:
Per quanto riguarda il livello effettivo di sviluppo del software, ciò dipende dalla professionalità del singolo programmatore e dallo standard a cui quel programmatore è disposto a lavorare per fornire la massima qualità possibile nel proprio lavoro . Il fallimento dell'analogia degli artigiani è che ci sono molte persone in ruoli di gestione degli alti e medi che sono arrivate alla loro posizione senza effettivamente imparare come ottenere un elevato standard di qualità nel loro lavoro, e in qualche modo l'industria nel suo insieme ha sofferto di conseguenza. Questo è probabilmente il motivo per cui quelli di noi che considerano lo sviluppo del software più un'arte che una scienza cercano di lavorare con altri che pensano allo sviluppo del software in modo simile.
Come piccola annotazione / aneddoto, ho recentemente intervistato un laureato e gli ho fatto la domanda: "Vedi lo sviluppo del software più come un'arte, o una scienza?". Senza neanche un battito di ciglia, né prendendosi il tempo per tirare un respiro, la sua risposta immediata fu "Arte". Il suo ragionamento era basato su problemi di qualità, e solo su questa domanda l'avrei assunto sul posto se non fossi stato incalzato dalla direzione a trovare qualcuno più anziano. Inutile dire che ho tenuto quella C.V. di quel ragazzo, e lo terrò d'occhio per l'anno prossimo o per due.
Per dimostrare quanta variazione c'è nella definizione, aggiungerò la mia vista alla risposta eccellente di S.Robins.
L'artigianalità del software è riconducibile all'idea dell'artigiano, come un falegname. È un uomo esperto nel suo campo, capace di trasformare la richiesta del cliente in un oggetto fisico. Può farlo perché ha una serie specifica di abilità:
Quindi, quando l'artigiano si trova ad affrontare un problema per un cliente, non solo ha tutti i prerequisiti per costruire sull'oggetto in questione, ha le capacità necessarie per risolvere qualsiasi problema lungo il percorso, apprende nuove abilità se necessario, e per tutto il tempo si comportano in modo professionale.
Come professionista, sa che sono affari. È fuori a fare il meglio per tutti gli interessati (incluso se stesso), producendo la migliore soluzione possibile entro i vincoli dati. Capisce che l'emozione non ha posto qui (è un affare, non personale), e che quando si verificano errori ed errori che possono essere affrontati e risolti dalle sue abilità esistenti.
Leggi altre domande sui tag software-craftsmanship