![]() | ||||
Joel on Software Joel ohjelmistoista
| ||||
|
Lisää suomenkielisiä Joel on Software -artikkeleita. Lisää englanninkielisiä Joel on Software -artikkeleita. |
Kirjoittanut Joel Spolsky Kääntänyt Sami Tikka Muokannut Ville Miettinen Elokuun 9. 2000 Oletko koskaan kuullut SEMA:sta? Se on melko pienen piirin tuntema systeemi, jolla mitataan kuinka hyvä ohjelmointitiimi on. Ei, odota! Älä klikkaa sitä linkkiä! Sinulta menee kuusi vuotta pelkästään niiden juttujen ymmärtämiseen. Olen kehitellyt oman, täysin vastuuttoman ja lepsun testin ohjelmointitiimien laadun arviointiin. Mahtavaa siinä on se, että se vie noin 3 minuuttia. Voit käydä lääketieteellisen siinä ajassa, minkä säästät.
Hieno puoli Joelin Testissä on, että jokaiseen kysymykseen on helppo ja nopea
vastata kyllä tai ei. Ei tarvitse laskea koodirivejä-per-päivä tai
keskimääräistä-bugien-taittopistettä. Annat tiimillesi yhden pisteen jokaisesta
kyllä-vastauksesta. Testin huono puoli on, että sitä ei pitäisi käyttää
varmistamaan, että olet tehnyt turvallista softaa ydinvoimalaan. 12 pistettä on täydellistä, 11 siedettävää mutta 10 tai sen alle tarkoittaa, että teillä on vakavia vaikeuksia. Totuuden nimessä on sanottava, että useimmat ohjelmisto-organisaatiot saavat 2 tai 3 pistettä ja tarvitsevat paljon apua, koska Microsoftin kaltaiset yritykset pyörivät kahdellatoista koko ajan. Nämä eivät tietenkään ole ainoat asiat, jotka määräävät menestymisen tai epäonnistumisen: jos teillä on mahtava ohjelmointitiimi tekemässä tuotetta, jota kukaan ei halua, niin, no, sitä ei kukaan halua. On myös mahdollista kuvitella tiimi täynnä "guruja," jotka eivät tee mitään näistä asioista, mutta jotka silti tuottavat uskomatonta softaa, joka muuttaa maailman. Yleensä kuitenkin jos nämä 12 asiaa ovat kunnossa, teillä on kurinalainen tiimi, joka pystyy toistuvasti toimittamaan sen mitä lupaa. 1. Käytättekö
versionhallintaa? 2. Voitteko tehdä buildin
yhdellä askeleella? Jos prosessissa on enemmän kuin yksi askel, siihen tulee helposti virheitä. Kun julkaisuhetki on lähellä, "viimeiset" bugit täytyy pystyä korjaamaan nopeasti, tekemään lopulliset EXEt jne. Jos koodin kääntämisessä, asennusohjelman rakentamisessa jne. on 20 askelta, menee sekaisin ja tekee tyhmiä virheitä. Tästä nimenomaisesta syystä viimeisessä työpaikassani vaihdettiin WISE:sta InstallShield:iin. Me vaadimme, että asennus piti pystyä ajamaan skriptistä, automaattisesti, joka yö, NT:n ajastimesta. WISE:a ei pystynyt ajamaan schedulerista yön aikana, joten heitimme sen menemään. (WISE:n mukavat tekijät vakuuttavat minulle, että heidän viimeisin versionsa tukee jokaöisiä buildejä.) 3. Teettekö päivittäisiä
buildejä? Buildin rikkominen on niin paha (ja yleinen) ongelma, että buildejä kannattaa tehdä joka päivä, jotta kaikki hajoamiset varmasti huomataan. Isoille tiimeille hyvä tapa varmistaa, että hajoamiset korjataan heti, on tehdä päivittäinen buildi joka iltapäivä, vaikkapa lounasaikaan. Ennen lounasaikaa kaikki saavat lisätä koodia versionhallintaan niin paljon kuin haluavat. Kun palataan lounaalta takaisin, buildi on valmis. Jos se onnistui, hienoa! Jokainen hakee viimeisimmät lähdekoodit ja jatkaa työntekoa. Jos buildi epäonnistui, se korjataan ja sillä aikaa muut voivat jatkaa hommia käyttäen lähdekoodin edellistä, ehjää versiota. Excelin kehitystiimissä meillä oli sellainen sääntö, että jos joku rikkoi buildin, hän sai "rangaistukseksi" pitää huolta buildeistä kunnes joku toinen rikkoi sen. Tämä antoi hyvän motivaation olla rikkomatta buildiä ja toisaalta kaikki pääsivät tutustumaan buildiprosessiin ja joutuivat oppimaan miten se toimii. Lue lisää päivittäisistä buildeistä artikkelistani Päivittäiset buildit ovat ystäviäsi. 4. Onko teillä
vikatietokanta? Vikatietokanta voi olla monimutkainen tai yksinkertainen. Pienin käyttökelpoinen vikatietokanta sisältää ainakin seuraavat tiedot jokaisesta viasta:
Jos vianseurantajärjestelmien monimutkaisuus on tähän asti estänyt sinua pitämästä kirjaa vioista, teet vain taulukon, jossa on 5 saraketta ja rupeat käyttämään sitä. Enemmän vianseurannasta artikkelissa Kivuton vianseuranta. 5. Korjaatteko viat ennen kuin
kirjoitatte uutta koodia? Heille valkeni, että projektipäälliköt olivat panneet niin paljon painoa "aikataulun" pitämiselle, että ohjelmoijat olivat koodanneet hätäisesti ja tuloksena oli erittäin huonoa koodia, koska vikojen korjaamista ei oltu sisällytetty aikatauluun. Vikojen määrää ei yritettykään pitää alhaalla. Itse asiassa päinvastoin. Tarina kertoo, että eräs ohjelmoija, jonka piti kirjoittaa koodi, joka laskee rivin korkeuden, kirjoitti vain "return 12;" ja odotti vikaraporttia siitä että hänen funktionsa ei aina toimi oikein. Aikataulu oli vain ostoslista ominaisuuksille, jotka odottivat muuttumista vioiksi. Projektin jälkianalyysissä tälle annettiin nimi "äärettömien virheiden metodologia". Ongelman korjaamiseksi Microsoft otti kaikkialla käyttöön "vikoja nolla -menetelmän". Monet firman ohjelmoijista naureskelivat, koska se kuulosti siltä kuin johtajat luulisivat pystyvänsä vähentämään vikoja vain käskemällä vikojen kadota. Itse asiassa, "vikoja nolla" tarkoitti, että vikojen korjaaminen on aina tärkeämpää kuin uuden koodin kirjoittaminen. Tässä syy. Yleensä, mitä pidempään odotat ennen kuin korjaat bugin, sitä kalliimpaa se on (sekä ajassa että rahassa laskien.) Esimerkiksi, kun teet kirjoitus- tai syntaksivirheen, jonka kääntäjä huomaa, sen korjaaminen on käytännössä ilmaista. Kun koodissasi on vika, joka paljastuu heti kun yrität ajaa ohjelman, pystyt korjaamaan sen nopeasti koska koodi on vielä tuoreena muistissasi. Jos löydät vian koodista, jonka kirjoitit muutamaa päivää aiemmin, sinulta menee jonkun aikaa sen löytämiseen, mutta kun luet kirjoittamasi koodin uudelleen, muistat kaiken ja pystyt korjaamaan vian kohtuullisessa ajassa. Jos taas löydät vian koodista, jonka kirjoitit muutama kuukausi sitten, olet luultavasti unohtanut paljon siitä koodista ja sen korjaaminen on paljon vaikeampaa. Niin pitkän ajan kuluttua saatat olla korjaamassa jonkun toisen koodia, jonkun, joka on lomalla Aruballa ja tässä tapauksessa vian korjaaminen alkaa muistuttaa tutkimustyötä: on pakko edetä hitaasti, järjestelmällisesti ja harkiten etkä mitenkään pysty arvioimaan kuinka kauan korjaamiseen menee. Jos löydät vian koodista, joka on jo julkaistu, sen korjaaminen tulee aiheuttamaan huomattavia kustannuksia. Siinä on ainakin yksi syy korjata viat heti: koska se vie vähemmän aikaa. On toinenkin syy, joka liittyy siihen, että on helpompaa ennustaa kuinka kauan kestää uuden koodin kirjoittaminen kuin korjata vika. Jos esimerkiksi pyytäisiin sinua ennustamaan kuinka kauan kestäisi kirjoittaa koodi, joka järjestää listan, pystyisit antamaan melko tarkan arvion. Jos kysyisin kuinka kauan kestää korjata vika, jossa koodisi ei toimi kun Internet Explorerista on asennettuna versio 5.5, et pysty edes arvaamaan, koska et (luonnollisesti) tiedä mikä vian aiheuttaa. Syyn löytämiseen voi mennä kolme päivää tai kaksi minuuttia. Tämä tarkoittaa, että jos sinulla on paljon vikoja korjattavana, aikataulusi on epäluotettava. Jos taas olet korjannut kaikki tunnetut viat ja jäljellä on ainoastaan uuden koodin kirjoittamista, aikataulusi on valtavan paljon tarkempi. Vielä yksi lisäetu vikojen pitämisessä nollassa on se, että voit reagoida nopeammin kilpailijoidesi toimiin. Joidenkin ohjelmoijien mielestä tämä on sama kuin pitäisi tuotteen julkaisuvalmiina aina ja koko ajan. Jos kilpailija julkaisee uuden ominaisuuden, joka varastaa asiakkaitasi, voit nopeasti lisätä vain tämän nimenomaisen ominaisuuden ja julkaista heti paikalla ilman, että täytyy korjata valtava määrä kehityksen aikana kertyneitä vikoja. 6. Onko teillä ajan tasalla
oleva aikataulu? Valitettavasti se ei vain riitä. Yrityksen pyörittäminen ja sen suunnittelu vaatii monia päätöksiä, jotka on tehtävä paljon ennen kuin koodi toimitetaan asiakkaille: demoja, näyttelyitä, mainoksia jne. Ainua tapa selvitä siitä on tehdä aikataulu ja pitää se ajan tasalla. Toinen tärkeä asia aikataulussa on, että se pakottaa päättämään mitkä ominaisuudet toteutetaan ja se myös pakottaa valitsemaan vähiten tärkeät toiminnot ja karsimaan ne ennen kuin joudutaan tilanteeseen, jossa lisätään vielä tämäkin ominaisuus, koska se on niin kiva. Aikataulussa pysymisen ei tarvitse olla vaikeaa. Lue artikkelini Kivuttomat Ohjelmoijan Aikataulut, joka kertoo yksinkertaisesta tavasta tehdä hienoja aikatauluja. 7. Onko teillä
vaatimusmäärittely? En ole varma miksi näin on, luultavasti siksi, että ohjelmoijat vihaavat dokumenttien kirjoittamista. Jos tiimi, jossa on pelkästään ohjelmoijia, käy jonkun ongelman kimppuun, heidän mielestään on parempi ilmaista ratkaisu ennemmin koodina kuin dokumentteina. He paljon mieluummin vain hyppäävät sekaan ja rupeavat koodaamaan sen sijaan että tuottaisivat ensin vaatimusmäärittelyn. Kun ongelma havaitaan suunnitteluvaiheessa, se voidaan korjata helposti muuttamalla muutama rivi tekstiä. Kun koodi on kirjoitettu, ongelmien korjaaminen on paljon kalliimpaa, sekä tunnetasolla (ihmiset eivät halua heittää pois koodia), että ajassa mitattuna, joten ongelmien korjaamista itse asiassa vastustetaan. Ohjelma, jota ei ole rakennettu vaatimusmäärittelyn pohjalta, on yleensä huonosti suunniteltu ja aikataulu karkaa käsistä. Tämä näyttää olleen ongelmana Netscape:lla, jossa neljä ensimmäistä versiota kasvoivat sellaiseksi sopaksi, että johtoporras teki tyhmän päätöksen heittää kaiken koodin pois ja aloittaa alusta. He tekivät saman virheen taas uudelleen Mozillan kanssa luoden hirviön, joka ei ollut kenenkään hallinnassa ja jolta meni useita vuosia ennen kuin se saavutti alfa-tason. Oma teoriani on, että tämä ongelma voidaan korjata opettamalla ohjelmoijat vähemmän vastahakoisiksi kirjoittajiksi. Heidät voi lähettää kirjoittamisen intensiivikurssille. Toinen vaihtoehto on palkata fiksuja tuotepäälliköitä, jotka kirjoittavat vaatimusmäärittelyn. Kummin päin vain, periaatena tulisi aina olla "ei riviäkään koodia ilman speksiä". Opi kaikki vaatimusmäärittelyjen kirjoittamisesta lukemalla neljäosainen juttuni. 8. Onko ohjelmoijien
työympäristö hiljainen? Ongelma on tämä: Me kaikki tiedämme, että tietotyöläinen työskentelee parhaiten pääsemällä "vuohon", toiselta nimeltään "vyöhyke", jossa he ovat täysin keskittyneitä työhönsä ja pihalla ympäristöstään. He menettävät ajantajun ja tuottavat hienoja asioita keskittymällä täydellisesti. Tässä tilassa tehdään kaikki tuottava työ. Kirjoittajat, ohjelmoijat, tiedemiehet ja jopa koripallon pelaajat voivat kertoa sinulle, että he ovat olleet vyöhykkeellä. Ongelma on se, että "vyöhykkeelle" pääsy ei ole helppoa. Kun sitä yritetään mitata, näyttää siltä, että kestää noin 15 minuuttia ennen kuin työskentely maksimitehokkuudella alkaa. Joskus, jos olet väsynyt tai olet jo tehnyt paljon luovaa työtä samana päivänä, et millään pysty pääsemään vyöhykkeelle ja vietät loput päivästä vain näpertelemällä, lukemalla weppisivuja ja pelaamalla Tetristä. Toinen pulma on, että vyöhykkeeltä on niin helppo pudota pois. Melu, puhelu, lounaalle lähtö, 5 minuutin matka kahvia hakemaan ja työtovereiden aiheuttamat keskeytykset -- erityisesti työtovereiden aiheuttamat keskeytykset -- ne kaikki pudottavat pois vyöhykkeeltä. Jos työtoveri kysyy sinulta kysymyksen ja aiheuttaa 1 minuutin keskeytyksen ja tämä pudottaa sinut niin pahasti pois vyöhykkeeltä, että tuottavaan työhön pääsemiseen menee puoli tuntia, koko päivän tuottavuutesi alkaa olla vaarassa. Jos teet töitä ympäristössä, joka on kuin meluisa leikkikehä, eli juuri sellaisessa, joita kofeiininkyllästämät nettiyritykset rakentavat, jossa myyntimiehet huutavat puhelimeen ohjelmoijien vieressä, tuottavuutesi laskee koska tietotyöläisten ajatus keskeytyy kerran toisensa jälkeen ja he eivät koskaan pääse vyöhykkeelle. Ohjelmoijille tämä on erityisen hankalaa. Tuottavuus riippuu kyvystä pitää paljon pieniä yksityiskohtia lyhyen aikavälin muistissa. Yksikin keskeytys voi saada kaiken pyyhkiytymään. Kun pääset jatkamaan työtä, et muista mitään niistä yksityiskohdista (kuten käyttäämsi paikallisten muuttujien nimet tai missä kohtaa olitkaan sen hakualgoritmin toteutuksessa) ja sinun pitää etsiä ja lukea kaikki uudelleen, mikä taas hidastaa menoa kunnes lopulta pääset taas täyteen vauhtiin. Tässäpä yksinkertainen laskutoimitus: Oletetaan (kuten todistusaineisto näyttää vihjaavan), että jos keskeytämme ohjelmoijan, vaikkapa vain yhdeksi minuutiksi, olemme oikeasti heittäneet taivaan tuuliin 15 minuuttia tuottavaa työaikaa. Esimerkiksi, pannaan kaksi ohjelmoijaa, Jeff ja Mutt, viereisiin työpisteisiin standardinmukaisessa Dilbert-avokonttorissa. Mutt ei juuri nyt muista strcpy-funktion Unicode-version nimeä. Hän voisi etsiä sen, mikä kestää 30 sekuntia tai hän voi kysyä Jeffiltä, mikä kestää 15 sekuntia. Koska hän istuu Jeffin vieressä, hän kysyy Jeffiltä. Jeffin ajatus katkeaa ja häneltä menee 15 minuuttia tuottavaa työaikaa (jotta Mutt säästi 15 sekuntia). Siirretäänpä heidät nyt omiin huoneisiinsa, joissa on oikeat seinät ja ovet. Nyt kun Mutt ei muista sen funktion nimeä, hän voisi etsiä sen, mikä kestää edelleen 30 sekuntia tai hän voi kysyä Jeffiltä, mikä kestää nyt 45 sekuntia ja sitä varten pitää nousta ylös (ei niin helppoa keskimääräisen ohjelmoijan lihaskunnolla!). Hän siis etsii sen. Nyt Mutt menettää 30 sekuntia tuottavaa työaikaa, mutta säästimme sitä 15 minuuttia Jeffille. Ahhh! 9. Käytättekö parhaita
työkaluja mitä rahalla saa? Käyttöliittymäkoodin kehittäminen vain yhdellä monitorilla on kivuliasta, jollei jopa mahdotonta. Jos olet käyttöliittymäkoodaaja, kahden monitorin käyttäminen tekee asioista paljon helpompia. Useimpien ohjelmoijien täytyy joskus muokata bittikarttoja ikoneihin ja toimintopalkkeihin ja eikä useimmilla ole hyvää bittikarttaeditoria. Bittikarttojen muokkaaminen Microsoft Paint:llä on vitsi, mutta silti useimpien on pakko sitä käyttää. Viimeisessä työpaikassani ylläpitäjä lähetteli minulle automaattisia sähköposteja, joissa valitettiin, että minä käytin -- ajatelkaas -- 220 megatavua levytilaa tiedostopalvelimella. Huomautin hänelle, että ottaen huomioon levytilan hinnan näinä päivinä, käyttämäni levytila maksaa paljon vähemmän kuin käyttämäni vessapaperi. Jos käyttäisin edes 10 minuuttia hakemistoni siivoamiseen, olisi se mahtavaa tuottavuuteni hukkaamista. Huipputiimit eivät kiusaa ohjelmoijiaan. Alitehoisten työkalujen käyttämisen aiheuttamat pienetkin harmit kasaantuvat, tehden ohjelmoijista kärttyisiä ja onnettomia. Kärttyinen ohjelmoija ei ole tuottelias ohjelmoija. Kaiken lisäksi... ohjelmoijat ovat helposti lahjottavissa uusimmilla ja viileimmillä vehkeillä. Tämä on itse asiassa paljon halvempi konsti houkutella heidät töihin kuin kilpailukykyisen palkan maksaminen! 10. Onko teillä
testaajia? Lue Viisi parasta (väärää) syytä siihen ettei sinulla ole testaajia, kirjoittamani artikkeli tästä aiheesta. 11. Joutuvatko työnhakijat
kirjoittamaan koodia haastattelussa? Palkkaisitko pitopalvelun hoitamaan häidesi tarjoilun maistamatta heidän ruokiaan? Tuskin. (Ellei kyseessä ole Marjatta-täti, koska hän vihaisi sinua ikuisesti jos et antaisi hänen tehdä sitä hänen "kuuluisaa" jauhemaksakakkuaan). Silti, joka päivä, ohjelmoijia palkataan pelkästään hienon näköisen ansioluettelon perusteella tai koska haastattelijan mielestä oli mukava jutustella hakijan kanssa. Tai sitten heiltä kysytään yhdentekeviä kysymyksiä ("mikä ero on CreateDialog()- ja DialogBox()-kutsuilla?"), joihin pystyy vastaamaan lukemalla manuaalia. Ei sillä ole väliä ovatko he opetelleet ulkoa tuhansia ohjelmoinnin pikkujuttuja. Väliä on vain sillä pystyvätkö he koodaamaan. Tai vieläkin pahempaa, heiltä kysytään "AHA!"-kysymyksiä, niitä sellaisia, jotka tuntuvat helpoilta kun tiedät vastauksen, mutta ovat mahdottomia vastata muuten. Olkaa niin kiltit, lopettakaa sen tekeminen. Tehkää haastatteluissa mitä hyvänsä, mutta laittakaa hakija koodaamaan. (Lisää neuvoja löydät lukemalla Sissioppaani työhaastatteluja varten.) 12. Teettekö
käytäväkäytettävyystestausta? Hyvä käyttöliittymäsuunnittelu ei ole niin vaikeaa kuin luulet ja se on elintärkeää jos haluat asiakkaiden rakastavan ja ostavan tuotettasi. Voit lukea ilmaisen online-kirjani käyttöliittymäsuunnittelusta, lyhyt oppimäärä ohjelmoijille. Kaikkein tärkeintä käyttöliittymissä on, että jos näytät ohjelmasi kouralliselle ihmisiä (viisi tai kuusi todellakin riittää) löydät nopeasti kaikki käyttäjien pahimmat ongelmat. Lue Jakob Nielsenin artikkeli, joka selittää miksi. Vaikka taitosi käyttöliittymäsuunnittelun alalla olisivat kuinka huonot tahansa, sinulla ei ole mitään hätää niin kauan kuin pakotat itsesi tekemään käytäväkäytettävyystestejä. Ne eivät edes maksa mitään. Neljä tapaa käyttää Joelin Testiä
Artikkeli on alunperin esiintynyt englanniksi nimellä The Joel Test: 12 Steps to Better Code | |||
![]() Joel Spolsky on Fog Creek Softwaren, pienen New Yorkilaisen ohjelmistoyrityksen, perustaja. Hän valmistui Yalen yliopistosta ja on työskennellyt ohjelmoijana ja esimiehenä Microsoftilla, Viacomilla ja Junolla. | ||||
Nämä sivut esittävät vain yhden henkilön mielipiteitä.
Kaikki sisältö Copyright ©1999-2005 Joel Spolsky. Kaikki oikeudet pidätetään.