Considera le due parole computer e scienza. I doni della prima al mondo sono enormi e vanno dall’ubiquità salvavita delle cartelle cliniche elettroniche alla possibilità di fare una rissa virtuale in un bar a qualsiasi ora del giorno su Twitter. La seconda parola, scienza, rappresenta un movimento intellettuale che ha fornito grandi progressi come il vaccino antipolio, alcuni viaggi sulla luna e troppi altri da elencare. Allora perché combinare le due parole in informatica è così poco, specialmente quando cerchiamo di formare il personale dei nostri team di programmazione?
Non è che il campo non abbia dato risultati. Ci sono petabyte di file LaTeX là fuori pieni di idee brillanti come nuovi linguaggi di programmazione, algoritmi di ricerca intelligenti, algoritmi di visione artificiale e una miriade di nozioni nel mezzo. Molte di queste sono meravigliose.
Il problema è che pochi di noi hanno davvero bisogno di molto di tutto questo. Un amico ha confessato di aver visto un team di sviluppo prosperare passando sopra i laureati in CS e assumendo solo fisici, contabili o qualche altro tipo di persona esperta di matematica. Questi nuovi dipendenti sono più pratici e si concentrano su come far funzionare le macchine, che è più o meno quello che quasi tutte le aziende vogliono fare.
Non è che le lauree in CS siano cattive; è solo che non parlano dei problemi che la maggior parte di noi ha bisogno di risolvere. Quindi ecco una lista piuttosto incompleta dei motivi per cui sarebbe meglio ignorarli.
La teoria distrae e confonde
Molti scienziati informatici sono matematici nel cuore e la mentalità ossessionata dai teoremi permea la disciplina. Un teorico mi ha detto che tutte le prove matematiche sono in realtà solo programmi e viceversa, almeno nella sua mente. Non è realmente interessato a consegnare il codice che fa il lavoro quanto a dimostrare che il suo codice è corretto. Ok.
È raro che un laureato in CS si laurei senza ricevere una sana dose di NP-completezza e macchine di Turing, due belle aree di teoria che sarebbero piacevoli se non finissero per creare cattivi istinti. Un biologo mi ha chiesto di risolvere un problema di corrispondenza di sequenze di DNA e sono tornato da lui con l’affermazione che era NP-completo, una classe di problemi che può richiedere molto tempo per essere risolto. Non gli importava. Aveva bisogno di risolverlo comunque. E si è scoperto che la maggior parte dei problemi NP-completi sono abbastanza facili da risolvere il più delle volte. Ci sono solo alcune istanze patologiche che ingarbugliano i nostri algoritmi. Ma i teorici sono ossessionati dall’insieme sottile che confonde gli algoritmi semplici, nonostante siano raramente osservati nella vita quotidiana.
Lo stesso problema accade con le macchine di Turing. I doverosi studenti di CS imparano risultati nichilistici come il Teorema di Rice, che dimostra che non possiamo davvero analizzare gli algoritmi dei computer. Ma le macchine di Turing sono un modello piuttosto scadente per il funzionamento delle nostre macchine normali e spesso è molto facile creare software che fa cose intelligenti con il nostro codice. Qualsiasi studente di CS che non prenda questi risultati teorici con una sana dose di sale rischia di rinunciare quando una risposta perfettamente utilizzabile è a portata di mano.
I linguaggi accademici sono raramente usati
Non dovremmo essere sorpresi che l’accademia allevi snobismo e amore per le soluzioni arcane. Lo fa in ogni campo. Quando ho chiesto a un laureato del MIT il suo linguaggio preferito, mi ha detto con orgoglio che era sicuro che non avevo idea di cosa fosse. Solo dopo aver insistito un po’, ha ceduto e mi ha detto che era il CLU. Aveva ragione.
Ci sono molte grandi idee là fuori da coloro che sono ossessionati dalle lingue, ma a volte queste idee finiscono per creare disordine e confusione. Se un membro del team ama qualche strana caratteristica e inizia a includerla nel codice base, tutti gli altri dovranno impararla. Se tutti fanno lo stesso, il tempo per raggiungere la velocità è brutale.
Questo è il motivo per cui Google ha scelto la strada bassa quando ha costruito Go. I creatori hanno insistito che il linguaggio dovesse avere pochi costrutti ed essere semplice da imparare nel minor tempo possibile. Questa semplicità ha aiutato tutti perché tutti conoscevano questo nucleo molto bene.
Molti professori di CS sono matematici, non programmatori
Uno degli sporchi segreti della maggior parte dei dipartimenti di informatica è che la maggior parte dei professori non sa programmare i computer. Il loro vero lavoro è dare lezioni e gestire le sovvenzioni. Capiscono i fogli di calcolo e le proposte di sovvenzione, non fanno davvero ricerca. Questo è il motivo per cui Dio ha dato loro dei laureati. L’ultima volta che molti di loro hanno effettivamente programmato un computer è stato quando loro stessi erano alla scuola di specializzazione. Da allora, il bit marcio e le ragnatele si sono insediati e i compilatori sulle loro macchine probabilmente non partiranno.
Molte materie richieste sono raramente usate
Le strutture dei dati sono spesso l’argomento principale del secondo corso che gli studenti seguono in informatica. È un peccato che pochi di noi usino ancora molte strutture di dati. O mettiamo le cose in tabelle di hash degli oggetti o le spingiamo in un database che fa il lavoro al posto nostro. È ancora abbastanza utile per tutti pensare un po’ alla complessità algoritmica, ma pochissimi hanno bisogno di preoccuparsi degli alberi B o anche delle liste collegate. Non solo, ma molti di noi hanno capito che è meglio affidarsi ad una libreria standard piuttosto che armeggiare da soli con le strutture dati. È troppo facile fare errori. Molte organizzazioni proibiscono esplicitamente le strutture dati roll-your-own con buone ragioni.
Ci sono molti altri esempi di argomenti nel curriculum classico che semplicemente non sono più così importanti. I compilatori sono complessi ed essenziali, ma le uniche persone che li scrivono sono gli studenti che sono costretti a creare versioni giocattolo in un corso semestrale. Persino Apple ha usato strumenti open source quando ha creato il compilatore per Swift.
I modelli matematici ci portano sulla strada sbagliata
Chiunque abbia imparato la teoria dei database ha scoperto l’intelligenza della forma normale di Boyce-Codd, il modo in cui scomponiamo una struttura dati elaborata in piccole tabelle. È tutto molto elegante ed efficiente – finché non si aspetta per sempre una risposta alla propria query SQL piena di comandi JOIN.
La maggior parte dei team di sviluppatori impara rapidamente a “denormalizzare” i propri database per migliorare le prestazioni. In altre parole, tolgono tutta l’intelligenza e mettono i dati in una tabella enorme. È un po’ brutto e dispendioso, ma spesso è incredibilmente veloce. Per quanto riguarda il gonfiore, lo spazio su disco è economico.
Una volta che iniziano a mettere in pratica la loro educazione, molti sviluppatori passano alcuni anni a disimparare tutte le intelligenze matematiche dei loro corsi di CS.
Le istituzioni allevano l’arroganza
Tutti pensiamo di avere ragione, ma la natura stessa dei titoli accademici è progettata per dare ai laureati la capacità di argomentare la propria superiorità con autorità. Questo può essere vero a volte, ma anche nei giorni migliori è difficile sapere cosa è veramente giusto, specialmente in un campo in rapida evoluzione.
Una persona con cui ho lavorato amava gli “standard di codifica” che aveva portato al dipartimento e amava ogni opportunità di citare gli standard durante la revisione del codice. Questi standard consistevano in opinioni pignole su dove posizionare gli spazi bianchi, ma una volta che ha iniziato a parlarne con precisione accademica, ha iniziato a brandirli come clave nelle revisioni del codice. Avrebbe colpito il codice con spazi bianchi diversi con l’affermazione minacciosa che il codice non soddisfaceva gli standard. E così eravamo tutti bloccati a contare gli spazi in modo che tutto potesse rientrare in qualche standard quasi accademico.
Molte competenze moderne sono ignorate
Molte delle competenze moderne semplicemente non sono coperte in molti dipartimenti. Se vuoi capire Node.js, React, game design o cloud computation, ne troverai molto poco nel curriculum medio. L’elenco dei corsi di una scuola media si concentra sui fondamenti – cioè, concetti profondi come le condizioni di gara che faranno parte dell’informatica ben dopo che parole come Node.js o React saranno dimenticate. Questo è un nobile obiettivo, ma il 99 per cento di ciò che la maggior parte dei programmatori fa è lottare con le idiosincrasie dell’attuale parola d’ordine del giorno.
È molto comune per i dipartimenti di informatica produrre pensatori profondi che comprendono alcune delle sfide fondamentali senza alcuna conoscenza superficiale dei dettagli che dominano la giornata dell’impiegato medio. Questo è il motivo per cui le aziende trovano altrettanto utile assumere qualcuno da un laboratorio di fisica che ha appena usato Python per massaggiare alcuni flussi di dati da uno strumento. Possono imparare i dettagli superficiali con la stessa facilità del genio della CS.
L’avanguardia accademica è lunga ad arrivare
Il machine learning e l’intelligenza artificiale sono di gran moda e molti stanno correndo a sperimentarli. Ma sono stati studiati per decenni dai dipartimenti di CS. Ha senso investigare tutte le idee che provengono dalle scuole oggi – o aspettare pazientemente fino a quando non saranno finalmente pronte per un uso generale?
Il mantenimento della cattedra può generare compiacimento
Ci sono molte meravigliose ragioni dietro l’istituzione della cattedra e la maggior parte dei professori che godono delle sue protezioni meritano pienamente tutti i benefici per i loro contributi di un tempo. Il problema è che in campi in rapida evoluzione, gli studenti di oggi hanno poco bisogno delle intuizioni di una decina di anni fa. Eppure la cattedra garantisce che molti dei professori saranno dieci, venti o anche trenta anni dopo il giorno in cui hanno avuto le più grandi intuizioni.
E poi ci sono le distrazioni che possono portare i professori lontano. Un genio di ruolo sembra bloggare all’infinito sui vari tornei di poker e sulle brutte battute che lo hanno mandato a casa. Un altro ha investito in una squadra di baseball di serie B e si vanta di uscire con i giocatori e di scoparsi le palle mentre fanno pratica di battuta.
L’intellettualismo raramente produce risultati
Quando ho detto a un docente di ruolo che uno dei miei studenti ha trovato lavoro grazie ad alcune lezioni su Angular e React, ha sorriso e ha detto: “L’ultima cosa che voglio fare è trasformare questa scuola in una scuola professionale.”
Va bene, ma non ci sono così tanti che possono giustificare la spesa di quasi mezzo milione di dollari per chiedersi se gli angeli polinomiali o esponenziali possono ballare sulla testa di uno spillo. La tradizione delle arti liberali è una cosa meravigliosa, ma incoraggia un disprezzo per la conoscenza pratica. Si tratta di verità profonde ed eterne. Ma quando la vostra azienda deve spedire qualcosa la prossima settimana entro la scadenza, nessuno ha il tempo di guardarsi l’ombelico e di interrogarsi sulle verità eterne.