Kuidas hinnata koodi ilu?

Proekspert annab igal aastal Robotexil välja ilusa koodi auhinna. Miks see ilus kood üldse oluline on? Kas pole nii, et kui robot mängib jalgpalli nagu Lionel Messi, siis võib ta kood olla kole kui öö? Ja mis on üldse kriteeriumid, mille järgi robotite koodi ilu hinnata saab?

Istusime Proeksperdis kogenud koodihindajate ja Robotexil osalejatega maha (Vambola Kotkas! Roland Tepp! Indrek Mägi! Indrek Tamm! Eric Johann Istal!) ja nende mõtted väärivad jagamist.

Kui Barbara Schwarz 9 aastat tagasi ootamatult kiirendama hakanud Toyotas hukkus, ei osatud ka esialgu arvata, et selle põhjustas lihtsalt üks eriti kole kood. Eksperdid tõestasid hiljem, et ameeriklase surma põhjuseks oli aja jooksul spagetihunniku sarnaseks arenenud autotarkvara, mis loojate kontrolli alt oli ammu väljunud.

Enamasti kole kood inimesi ei tapa, kuid ta võib muuta meie elu keeruliseks. Ta on nagu küberrünnak iseenda vastu, mis trollib inimesi ja äriprotsesse. Musta auku kaduv tööaeg, suured kulud, krussis närvid, rikutud kasutajakogemus. Ilus kood võib seevastu teha inimeste elu paremaks, olla majanduslikult kasulikum ja kindlasti ka turvalisem kui kole kood.

Kui nüüd konkreetselt Robotexist rääkida, siis seal ilusat koodi hinnates on meil välja kujunenud juba üsna selged kriteeriumid.

Me otsime koodi, mis oleks loetav nagu hea lühijutt, kus poleks liigseid sõnu ega ridu ning kus iga funktsioon näeb vaeva suurepärase terviku nimel. Otsime koodi, mis ei ole arusaadav ainult masinale, vaid ka teisele inimesele, kes seda tulevikus edasi peab arendama.

Mõned näited:

  • inimkeskse koodi eraldi tükid võiksid mahtuda ühele leheküljele
  • read ei tohiks olla hoomamatult pikad,
  • iga koodijupp võiks teha ühte selget asja,
  • muutujad võiksid olla nimetatud nii, et nende funktsioon oleks koheselt arusaadav
  • kirjavahemärgid võiksid olla lahendatud läbivalt ühtses stiilis.

Ilus kood ei sisalda ajalookihte, milles sumbates keegi ühel päeval võib avastada muistse viikingilaeva jäänused. Avastamisrõõm on muidugi tore, kuid kui me ei tea, mis minevikuloori taga peidus on, siis me ei tea lõpuni ka seda, mida kood teeb ja kuidas seda vajadusel parandada.

Ilus kood sisaldab kommentaare, kuid mitte liiga palju, sest see, kui sa pead juba oma tööd kommenteerima, tähendab tõenäoliselt seda, et kood on liiga keeruline. Ilusat koodi on raske ehitada copy+paste’iga, sest selline buldooserimeetod ei arvesta nüanssidega, millest võib sõltuda väga palju. Lisaks toob kopeerimine endaga kaasa ka vigade paljundamise ohu.

Kindlasti on Sinul oma kogemustele tuginedes veel palju rohkem häid mõtteid, milline peaks olema üks ilus kood. Kõik täiendused ja kommentaarid on oodatud!

 

Pro tiim hindab Robotexil koodi ilu

Robots will take over the world. W will be right behind them.

Kui sa tuled Robotexile ja plaanid seal robotit progeda, siis loe alljärgnevat erilise tähelepanuga, sest see aitab sul võita 500 eurose auhinna. Asi on selles, et Proekspert annab ka sel aastal Robotexil välja auhinna kõige ilusama koodi eest ja siin on mõned vihjed, mida me hindame.

Mis on ilus lähtekood?

Ilus lähtekood on selgesti mõistetav ja hõlpsasti loetav. Loomulikult võiks hakata rääkima siin igasugustest tekstifaili küljendamise võimalustest: taanetest ja tühikutest kuni tühjade ridadeni ja kommentaaride stiilideni välja. Aga kuna me ei dikteeri Robotexi osalistele mingit konkreetset keelt, arendusvahendit ega platvormi, siis jääb ka koodi stiil nende enda valikuks. Küll aga hindame me stiili ühtsust (taane käib kas tühikutega või tabidega, sa ei saa neid vaheldumisi kasutada — või vähemalt ei peaks seda tegema, kui tahad kirjutada koodi, mis on arusaadav ka homme). Sarnaselt peab ka koodi blokke läbiva stiiliga esitama. Muutajate ja meetodite nimed on ilusas koodis alati arusaadavad ja sisu kirjeldavad. Kindlasti ei tohi need olla eksitavalt nimetatud.

Miks me seda hindame?

Jah tõesti? Miks ME (Proekspert) seda hindame? Tegelikult peaks iga Robotexil osalev tiim seda ise juba hinnata oskama. Teisest küljest mäletan ma oma tudengipõlve ja Robotexi kogemusest, et alati jääb üks öö puudu. See aga omakorda tähendab, et hakatakse _kiiruga_ lisama elutähtsat funktsionaalsust, mis pahatihti tuleb muude aspektide (koodi ilu/loetavuse) arvelt. Meie auhind on siinkohal lisaks vaimsele rahuldusele väikeseks lisamotivaatoriks, et koodi ilu mitte ohvriks tuua.

Kuna robotid, või peene välismaise nimega tööstusautomaatika on üks Proeksperdi peamisi tegevusalasid, siis arvame, et robotiprogemispraktikutena ja koodi ilu pühaks pidava ettevõttena saame oma kogemusi teiega jagada.

Miks keegi üldse peaks tahtma oma koodi meile näidata?

Ideaalses maailmas tahavad kõik tudengid oma koodi teistele näidata. Kas selleks, et saada tunnustatud õigeaegselt ja iseseisvalt sooritatud ülesande eest või selleks, et saada väärtuslikku nõuannet mõne ülesande optimeerimiseks või siis võistlemaks teise tudengiga, et näha, kelle kood käib kiiremini. Aga päriselus, kus on päris tähtaeg ja päriselt saavad (t)öötunnid otsa enne, kui võistlus pihta hakkab, on kood tihtipeale sama korras kui tudengi /homework folder (või kirjutuslaud) keset sessi.

Selleks, et Robotexil osalejaid ikkagi motiveerida meile oma koodi näitama (ning taluma meie žürii Priit P. ja Lauri V. piinlike küsimusi), on Proekspert välja pannud ka 500 eurolise auhinna kauneima koodiga tiimile. Kohtume peagi Robotexil ja seal ronime me juba teie robotite ajudesse!