Non è uno scherzo, non potrei sopportare che accadesse una quarta volta, mi sta influenzando mentalmente.
Questa linea è importante, perché dimostra che si sente che è il momento di cambiare. Mostra che lo riconosci come uno schema, e vorresti che lo schema si fermasse. Questo desiderio è probabilmente la parte più importante della soluzione. Per risolvere questo tipo di situazioni spesso è necessario cambiare il modo in cui voi stessi pensate. È impossibile che qualcuno lo faccia per te, quindi il tuo desiderio di cambiare sarà l'unica cosa che farà sì che il cambiamento avvenga.
Per alcuni precedenti, mi sono già trovato in situazioni simili “troppo bravo a codificare per il mio lavoro”, anche se mai nella misura da te descritta. Potrei curare il cancro con la metaprogrammazione di modelli in C++, ma molti di quelli con cui lavoro hanno a malapena familiarità con le basi del design orientato agli oggetti. Ho scritto codice che ha abusato di SFINAE e si è spinto proprio contro la formulazione esatta delle specifiche C++, quando molti progetti a cui ho lavorato utilizzavano ancora versioni antiquate e buggy di gcc. Il mio approccio era semplicemente quello di mostrare loro quanto questi strumenti siano stupefacenti, e tutti i problemi che potevano risolvere. Mi piaceva spiegare piccoli consigli di programmazione alla gente, e a loro piaceva molto.
Suona familiare?
“Sì, ma si dovrebbe avere un buon livello di comprensione [del codice di Mik] perché i componenti sono intelligentemente disaccoppiati”.
Considerate questa affermazione da una prospettiva basata sul rischio. Il tuo capo ha bisogno di far andare avanti le cose, a qualsiasi costo. Se te ne vai a caccia di qualche fantastica opportunità di lavoro, il tuo capo deve comunque assicurarsi che il codice venga mantenuto. Quello che il vostro collega ha appena detto è che, se devono sostituirvi, hanno bisogno di trovare un codificatore molto abile, perché chi non è così bravo non sarà in grado di mantenerlo. Questo è un rischio. E se non riescono a trovare uno sviluppatore abbastanza bravo, o non possono permettersi di pagarli abbastanza?
Avrete anche prodotto quello che chiamereste “buon codice”, ma la definizione di “buon codice” dipende molto dal contesto. Quello che è “buon codice” in Google, con i loro modi di pensare all'avanguardia, può essere un pessimo codice per qualcuno che lavora alla FAA, che si preoccupa principalmente dell'affidabilità piuttosto che di stare al passo con l'avanguardia. La definizione di “buon codice” del vostro capo include la capacità di mantenerlo in ogni tipo di situazione, anche senza di voi. Se i vostri colleghi non si sentono a proprio agio nel mantenere il vostro codice, allora siete improvvisamente una affidabilità per l'azienda, perché producete un prodotto che non possono mantenere se decidete di andare altrove.
Da questo punto di vista, si può sostenere che li state costringendo ad accettare la vostra definizione di “buon codice”. Istintivamente, può sembrare una cosa buona, ma è irta di difficoltà, come questo modo di pensare basato sul rischio, a cui forse non avete pensato.
Abbiamo una frase, “mettere il carro davanti ai buoi”. Uno dei molti significati associati ad essa è mettere il contenuto a cui tieni di più (essere in grado di usare le tue tecniche avanzate) sopra le forze che dovrebbero tirarlo in avanti (la comprensione di queste tecniche da parte del tuo collega). Avete scritto il codice in questo stile avanzato, e poi avete incoraggiato gli altri sviluppatori a “mettersi in pari” con questo stile. Questo può essere efficace, ma se vi succede qualcosa prima che “recuperino il ritardo”, l'azienda è improvvisamente a rischio perché nessuno può mantenere il codice.
Come posso evitare questo in futuro?
Risolvere questo problema può essere una cosa terribilmente difficile da fare perché comporta l'approccio al problema in un modo diverso da quello che si è abituati ad affrontare. Invece di scrivere prima il codice in questo stile avanzato, e poi insegnare ai vostri colleghi a pensarla in questo modo, dovreste capovolgerlo. Insegnate ai vostri colleghi ad apprezzare questo stile di codifica e poi iniziate a scrivere codice in questo stile. Può sembrare al contrario, ma è molto più stabile. Dal punto di vista del capo, c'è poco o nessun rischio che il team impari a codificare meglio. Una volta che codificano meglio, lo stile che si vuole sviluppare è improvvisamente meno rischioso.
Nel frattempo, si dovrà scrivere codice che, secondo i vostri standard, è “meno buono”, ma va bene così. Il vostro codice non è il vostro unico prodotto. Il vostro altro prodotto sta aiutando a insegnare agli altri sviluppatori, e il valore di questo può facilmente superare il valore della scrittura di “codice perfetto”.
Naturalmente, può essere difficile capire quando è sicuro scrivere codice nello stile in cui si vuole scrivere. Se fosse facile da capire, l'avreste già capito! Una tecnica potente che si può usare è quella di lasciare che altri spingano per gli stili di codifica avanzati, piuttosto che spingerli da soli. Una cosa è insegnare a qualcuno la differenza tra eredità e composizione. È una cosa completamente diversa insegnargliela abbastanza bene da fargli capire che è favorevole a cambiare la vostra base di codice esistente per essere più chiaro quando la usa. Quest'ultimo caso ti fa capire che non solo ottengono il concetto, Un ideale per insegnare questi concetti è quello di non insegnare nulla. Lasciate che gli studenti scoprano qualcosa e poi indirizzateli in una direzione che la scoperta può andare. Forse uno di loro scoprirà qualcosa di interessante sull'eredità e potrete indirizzarli verso il modello di design dei Visitatori in base a ciò che hanno scoperto. Non date loro solo il Visitor, ma date loro un senso di orientamento in modo che possano uscire e trovare il Visitatore da soli.
È un approccio molto più difficile, e sicuramente vorrete trovare un mezzo felice tra questo e il vostro approccio attuale, ma può essere molto gratificante. Ancora più importante per la vostra risposta, può fornire valore all'azienda senza rischi. Se state fornendo valore a un'azienda e non la mettete a rischio, non sarete praticamente mai licenziati. E nei pochi casi in cui è ancora possibile essere licenziati, il management fornirà una ragione per questo (come ad esempio un rallentamento dell'economia, o un cambiamento di direzione dell'azienda). Se lo fai molto bene, scoprirai che il management invece inizierà a plasmare il tuo percorso, proprio come tu plasmi i tuoi colleghi, e troverai una curiosa tendenza ad aver imparato solo la giusta abilità solo quando ne hanno più bisogno.