Ik vat hier 'kwaliteit van code' even op als design kwaliteit omdat ik mij daar meestal het meest aan erger. Ik vis deze guidelines, of 'odors of rotting software', uit het boek Agile Software Development van Robert C. Martin:
1. Rigidty: the system is hard to change because every change forces many other changes to other parts of the system
2. Fragility: changes cause the system to break in places that have no conceptual relationship to the part that was changed
3. Immobility: it is hard to disentangle the system into components that can be reused in other systems
4. Viscosity: doing things right is hard than doing things wrong
5. Needless complexity: the design contains infrastructure that adds no direct benefit
6. Needless repetition: the design contains repeating structures that could be unified under a single abstraction
7. Opacity: it is hard to read and understand. It does not express its intent well.
Als ik die 7 richtlijnen bekijk (die ik zelf wel ondersteun) is het meer een vakmanschap dan een exacte wetenschap. Ik weet mij nog een vak te herinneren, 'software management', dat maar met een zeer beperkt en discutabele set aan meeteenheden voor code kwaliteit kwam aanzetten.
Bij een vakmanschap is het vooral de ervaring die spreekt en een zeker talent. Vergelijkbaar met hoe koks smaken leren te onthouden en te combineren en daardoor beter gaan koken. Een kok opgeleid onder een meester met 2 michelinsterren zie je vaak dat de leerling ook een michelinster weet te halen, en het is bekend hoe lastig die te krijgen zijn. Tegelijk zal een meesterkok niemand aannemen die geen enkele aanleg voor koken heeft. Iemands aanleg is in grote mate -in mijn ervaring als studentassistent- gerelateerd aan iemands interesse/doortastenheid (welke hier de oorzaak of gevolg zijn durf ik niet te zeggen).
Ik durf de stelling neer te leggen dat de beste programmeurs diegenen zijn die voordat ze een universitaire opleiding begonnen al regelmatig wat progten. Iemand die alles alleen doet leert niet samenwerken, iemand die de theoretische basis heeft maar geen ervaring heeft niet het noodzakelijke gevoel om in te schatten wanneer een design elegant is; die gaat teveel op de ideële toer (of heeft geen idee).
Het is een proces van vallen en opstaan. In hetzelfde boek over agile development bespreken ze een lang voorbeeld over het ontwikkelen van een score systeem voor bowlen. Als ik eerlijk ben vond ik dat ze het nogal bagger deden maar uiteindelijk rolt er een ontwerp uit waarin de lezer zich kan vinden; met name omdat ze de visie achter de ontwikkeling doorhebben. Als de ontwikkelingsvisie niet duidelijk is kan code door de één beoordeeld worden als briljant en eenvoudig, en door de ander als moeilijk uitbreidbaar.
Nog een interessante: C. Martin beweert dat twee redelijk/matige ontwikkelaars die goed met elkaar communiceren beter is dan twee zeer goede ontwikkelaars die nauwelijks weten te communiceren.
Leg niet te snel de schuld bij iemand maar kijk zeker ook naar het proces.
[
Voor 5% gewijzigd door
Verwijderd op 22-12-2010 20:04
]