U prošloj kolumni pisao sam o milijunima linija izvornog koda u vozilima, letjelicama, operacijskim sustavima. Upotrebljavati takvu metriku za mjerenje učinka programera je pogrešno, ali kad se usporedi broj linija koda onda se može dobiti dojam o tome koliko je uloženo posla da bi pojedini posao završio. Nije isto ako projekt ima 500, 50.000 ili 5.000.000 linija koda.
Programiranje je posao gdje svaki zadatak možete napraviti na nekoliko različitih načina. Ako za njega angažirate nekoliko programera velika je vjerojatnost da će svaki od njih to napraviti drugačije i u različitom vremenskom rasponu. Broj linija koda će se sigurno razlikovati. Neki će najboljima smatrati one koji to naprave u najkraćem vremenu i s najmanjim brojem linija koda, ali takvi će sasvim sigurno zaboraviti neku iznimku ili obraditi ulazne podatke na potreban način.
Ovaj tjedan sam bio produktivan -2000 linija koda
Oni koji šefuju programerima, a sami nisu nikada bili programeri (ne računamo one koji su napravili program koji crta krug na zaslonu) često se nađu u situaciji da vrednuju njihov rad i za to traže konkretnu metriku.
Appleov tim koji je 1982. radio na razvoju programa za Lisu bio je u gužvi jer je isporuka slijedila za 6 mjeseci. Neki šefovi su se dosjetili da bi mogli mjeriti učinkovitost programera po količini koda koju tjedno napišu pa su zatražili od njih da svaki petak prijave koliko su linija koda napisali. Jedan od najvažnijih ljudi na projektu, Bill Atkinson, smatrao je da se tako ne može mjeriti produktivnost programera jer mu je cilj bio da piše što brže i što manje programe.
Kako je baš taj tjedan radio na optimizaciji koda kojom je uštedio 2000 linija koda Bill je taj jedan prijavio da je napisao -2000 linija. Nije poznato kako su šefovi reagirali, ali za par tjedana su prestali tražiti od Billa da ispunjava taj formular.
Što bi napravili konformisti?
Bill je pokazao kako je takva metrika besmislena, nemam podatak kako su reagirali drugi u tom Apple timu, ali sasvim sigurno znam kakva bi bila reakcija konformista programera. Oni bi najprije pisali jako puno nepotrebnog koda dok se ne bi dosjetili da bi mogli napisati i generator koda koji bi sam pisao kod koji ne bi radio ništa korisno, ali bi povećao broj linija koda. Šefovi bi sigurno bili iznenađeni kako se produktivnost iznenadno povećala, možda bi si isplatili i pokoji bonus zbog toga. Sve dok im stvarnost ne bi lupila u glavu kad bi vidjeli da se povećana produktivnost nije očitovala i u samoj aplikaciji koja bi postala sve lošija i lošija.
Koje je rješenje problema?
Nema rješenja. Kod se ne može ocjenjivati niti plaćati po broju redova. To vam može biti indikator, ali ne i konačna metrika. Kod bi mogli usporediti s periodnim sustavom elemenata. Par stotina redova nekog algoritma koji rješava određeni problem može biti teže (i skuplje i za njihovo pisanje treba puno više vremena) od aplikacije koja rješava uobičajene probleme i čiji se broj linija koda mjeri u tisućama. Problem je u tome što takav periodni sustav ne postoji i teško da će ikada postojati za programiranje.
Jedno je sigurno, mjerenje linija koda nije rješenje.