Ilusaima hingega robot

Eelmisel reedel toimus järjekordne Robotex 2009 võistlus, kus võistlesid omavahel Eesti robootikahuvilised. Proekspert oli seekord kohal, et anda auhind ilusaima programmikoodiga robotile. Kuigi see võib kõlada mõneti pealiskaudne ja subjektiivne, siis päris nii see siiski ei ole. Ilus kood on eeldus koodist aru saamiseks, arusaamine on aga eeldus edukaks edasiarenduseks, vigade kiireks parandamiseks ja tiimitööks. Võib ju öelda, et Robotexi robotikood ongi ühekordseks kasutamiseks kirjutatud, kuid varem või hiljem osutub vajalikuks osata ka ilusamat koodi kirjutada.

Lühidalt siis sellest üritusest.

Hindamisviis oli suhteliselt subjektiivne, sest meil ei olnud väljakirjutatud näitajaid ega nende kaale, vaid istusime Arneliga ja lasime arendajal endale koodi näidata ja kommenteerida, ise sealjuures märkmeid tehes. Vaatamata subjektiivsusele langesid meie märkmed ja arvamused üldjuhul kokku, sest on ikkagi terve hulk detaile, millele me mõlemad tähelepanu pöörasime modulaarsus, asjade nimetamine, kommenteerimine, surnud kood ja isegi tühjade ridade ning tühikute kasutamine jne. Boonusküsimusena küsisin mina kõigi käest versioonikontrolli kasutamise kohta ja otse loomulikult jäi silma ka sisuline pool.

Üldine pilt oli meeldivalt hea. Minu robotexi-robotite kood on olnud ikka palju halvem, kui halvim kood, mida ma sel päeval nägin. Juba esimese meeskonna koodi vaadates, kus ei olnud praktiliselt mitte millegi üle nuriseda, tekkiski idee uurida versioonikontrolli kohta juhuks, kui kõigil on nii hea kood ja tekib raskusi võitja valimisega. Õnneks nii ühtlane see tase siiski ei olnud ja võitja väljaselgitamisel ei olnud raskusi. Üldpilti kirjeldades võib öelda, et koodi ilu hinnates oli väga hästi näha, kas koodi on arendanud üks inimene või terve meeskond, samuti paistab eredalt välja varasem kogemus ja viimasel ööl arendatud lõigud. Sisulisemast poolest oli üllatav näha, et paljud tiimid oli kasutanud mitut erinevat keelt tüüpiline kombinatsioon oli C mikrokontrolleri arendamiseks, C# roboti loogikaks ja C++ kujundituvastuseks. Samuti olid kõik tuttavad olekumasinaga ja osadel tiimidel olid olekud ajapiiranguga.

itjaks valisime TTÜ Robotiklubi roboti “Printer Bob”. Nende kood oli peajagu teistest üle nii ilu kui ka sisu poolt ning seetõttu polnud valik üldse keeruline. Kui rääkida lühidat koodi ilust, mida me siis põhiliselt hindasime, siis nende puhul oli märkimisväärne fakt, et kogu kood oli ühtlaselt väga hea kvaliteediga. Koguhtud kood oli modulaarne, kõik elemendid olid hästi nimetatud, kõik kohad olid korralikult kommenteeritud, ma ei näinud mitte ühtegi maagilist konstanti ja mis põhiline – vaatamata kõige pikemale hindamissessioonile ei olnud selle koodi läbivaatamine väsitav. Lisaks ei olnud autoril kordagi probleeme enda koodist arusaamisel. Need faktid ilmestavad väga hästi ilusa koodi eeliseid. Ka sisulise poole pealt oli neil palju huvitavaid lahendusi, mida teistel ei märganud, nagu oma paketipõhine USB protokoll, mitte USB-serial, automaatne kalibreerimine jne. Ja kuigi sel aastal nad ei võtnud, siis kindel on see, et ükskõik, milline ülesanne või raud järgmise aasta võistlusel tuleb, saavad nad oma koodist suurt osa taaskasutada ja ma arvan, et see annab neile eelise.

Väikese kommentaari tahaks lisada ka boonusküsimuse kohta. Nimelt enamik vastas musimusele versioonikontrolli kohta, et neil ei olnud seda vaja, sest nad ei töötanud kordagi üheaegselt sama koodi kallal. Ma tahaks rõhutada, et see pole ainus versioonikontrolli kasutamise eelis. Nagu nimi vihjab, annab see teie koodile versioonimise võimaluse, ehk teil on koodi kohta ajalugu ja harude tegemise võimalus. See imaldab teil palju julgemini koodiga eksperimenteerida ja alati jääb võimalus töötava versiooni juurde tagasi minna. Ja tänapäeval pole enam vabandus, et meil pole serverit, sest hajusversioonikontrollid, nagu Git ja Mercurial ei vaja mitte mingit serverit ja annavad igasuguseid huvitavaid võimalusi. Mina kasutan isegi oma koduste pisiasjade tegemiseks Git’i. Aga see kõik on juba teise blogipostituse teema.

Leave a Reply

Your email address will not be published. Required fields are marked *