Het is geen grapje, ik kon er niet tegen om dit een vierde keer te laten gebeuren, het beïnvloedt me mentaal.
Deze lijn is belangrijk, omdat het laat zien dat je het gevoel hebt dat het tijd is om te veranderen. Het laat zien dat je dit herkent als een patroon, en dat je wilt dat het patroon stopt. Die wens is waarschijnlijk het belangrijkste onderdeel van de oplossing. Bij het oplossen van dit soort situaties gaat het vaak om het veranderen van de manier waarop je zelf denkt. Het is onmogelijk voor iemand om dat voor je te doen, dus je verlangen om te veranderen zal het enige zijn dat de verandering laat gebeuren.
Voor sommige achtergrond heb ik al eerder in vergelijkbare “te goed in codering voor mijn werk” situaties gezeten, hoewel nooit in de mate die je beschrijft. Ik zou kanker kunnen genezen met sjabloonmetaprogrammering in C++, maar velen met wie ik werk zijn nauwelijks vertrouwd met de basisprincipes van Object Oriented Design. Ik schreef code die misbruik maakte van SFINAE en die tegen de exacte bewoordingen van de C++ specificaties in ging, toen veel projecten waar ik aan werkte nog steeds verouderde en buggy-versies van gcc gebruikten. Mijn aanpak was gewoon om ze te laten zien hoe geweldig deze tools zijn, en alle problemen die het kon oplossen. Ik vond het heerlijk om kleine programmeertips uit te leggen aan mensen, en ze genoten er grotendeels van.
Klinkt dat bekend?
“Ja, maar men zou een goed niveau moeten hebben om [Mik’s code] te begrijpen omdat componenten intelligent ontkoppeld zijn.”
Beschouw deze uitspraak vanuit een risico-gebaseerd perspectief. Je baas moet de dingen gaande houden, wat er ook gebeurt. Als je weggaat om achter een of andere geweldige baan aan te gaan, moet je baas er nog steeds voor zorgen dat de code wordt onderhouden. Wat je collega net zei was dat, als ze je moeten vervangen, ze noodzakelijk een zeer bekwame codeur moeten vinden, omdat iedereen die niet zo goed is, niet in staat zal zijn om het te onderhouden. Dit is een risico. Wat als ze geen goed genoeg ontwikkelaar kunnen vinden, of ze niet genoeg kunnen betalen?
Je hebt misschien wat je zou noemen “goede code” geproduceerd, maar de definitie van “goede code” is zeer afhankelijk van de context. Wat “goede code” is bij Google, met hun geavanceerde manieren van denken, kan zeer slechte code zijn voor iemand die bij de FAA werkt, en die zich voornamelijk bezighoudt met betrouwbaarheid in plaats van het bijbenen van de geavanceerde technologie. De definitie van “goede code” van je baas omvat de mogelijkheid om deze te onderhouden in allerlei situaties, ook zonder jou. Als uw medewerkers zich niet comfortabel voelen bij het onderhouden van uw code, dan bent u ineens een aansprakelijkheid voor het bedrijf, omdat u producten produceert die zij niet kunnen onderhouden als u besluit elders te gaan werken.
Vanuit dit perspectief kan men beargumenteren dat u hen dwingt uw definitie van “goede code” te accepteren. Instinctief lijkt dit misschien een goede zaak, maar het is moeilijk, zoals deze op risico gebaseerde manier van denken waar je misschien niet aan gedacht hebt.
We hebben een zinsnede, “het paard achter de wagen spannen”. Een van de vele betekenissen die eraan verbonden zijn, is dat je de inhoud die je het meest belangrijk vindt (het kunnen gebruiken van je geavanceerde technieken) over de krachten die het naar voren zouden moeten trekken (het begrip van je collega’s van deze technieken). Je hebt de code in deze geavanceerde stijl geschreven en vervolgens de andere ontwikkelaars aangemoedigd om deze stijl “in te halen”. Dit kan effectief zijn, maar als er iets met je gebeurt voordat ze “inhalen”, loopt het bedrijf plotseling gevaar omdat niemand de code kan onderhouden.
Hoe kan ik dit in de toekomst vermijden?
Dit kan een vreselijk moeilijke zaak zijn omdat het gaat om het benaderen van het probleem op een andere manier dan je normaal gesproken gewend bent. In plaats van eerst code te schrijven in deze geavanceerde stijl, en dan je collega’s te leren hoe ze op die manier moeten denken, zou je het moeten omdraaien. Leer uw collega’s die stijl van coderen leuk te vinden en begin dan met het schrijven van code in die stijl. Het lijkt misschien achterstevoren, maar het is veel stabieler. Vanuit het perspectief van de baas is er weinig tot geen risico dat het team beter leert coderen. Als ze eenmaal beter coderen, is de stijl die je wilt ontwikkelen plotseling minder riskant.
In de tussentijd zul je code moeten schrijven die, naar jouw maatstaven, “minder goed” is, maar dat is oké. Uw code is hier niet uw enige product. Je andere product helpt de andere ontwikkelaars te leren, en de waarde daarvan kan gemakkelijk de waarde van het schrijven van “perfecte code” overstijgen.
Natuurlijk kan het moeilijk zijn om te zien wanneer het veilig is om code te schrijven in de stijl waarin je wilt schrijven. Als het makkelijk te zeggen was, had je het nu zeker al uitgedokterd! Een krachtige techniek die je kunt gebruiken is om anderen te laten pushen voor de geavanceerde codeerstijlen, in plaats van er zelf voor te pushen. Het is één ding om iemand het verschil te leren tussen erfenis en compositie. Het is een heel ander ding om ze goed genoeg te leren dat ze pleiten voor het veranderen van uw bestaande codebase om duidelijker te zijn in wanneer ze gebruikt worden. Het laatste geval laat je echt weten dat ze niet alleen het concept krijgen, maar omhels het echt.
Een ideaal voor het onderwijzen van zulke concepten is om niets te leren. Laat de leerlingen iets ontdekken, en dan wijs je ze een richting aan die ontdekking kan gaan. Misschien ontdekt een van hen wel iets netjes over overerving en kun je hen wijzen in de richting van het Visitor design patroon op basis van wat ze ontdekt hebben. Geef ze niet alleen Visitor, maar geef ze ook een gevoel van richting, zodat ze zelf op zoek kunnen gaan naar Visitor.
Het is een veel moeilijkere aanpak, en je zult zeker een gelukkig medium willen vinden tussen dat en je huidige aanpak, maar het kan zeer de moeite waard zijn. Nog belangrijker voor je antwoord is dat het waarde kan bieden aan het bedrijf zonder het risico te lopen. Als u waarde levert aan een bedrijf, en het bedrijf niet in gevaar brengt, dan wordt u vrijwel altijd ontslagen. En in de weinige gevallen waarin u nog ontslagen kunt worden, zal het management daar een reden voor geven (zoals een terugval in de economie, of een verschuiving in de richting van het bedrijf). Als u het heel goed doet, zult u merken dat het management in plaats daarvan uw pad gaat bepalen, net zoals u uw collega’s vormgeeft, en u zult een merkwaardige neiging vinden om gewoon de juiste vaardigheid gewoon te hebben geleerd wanneer ze die het hardst nodig hebben.