märts 24, 2017

MOV AX, 723h ; R.I.P.L.V.B.















See krüptiline pealkiri (koos natukene vähem krüptilise nooditekstiga) on maha kirjutatud lõiguke surematust teosest  Code Complete ...
Nagu gurud ütlevad, see asi tuleks igasse ITfirmasse riiulisse saada ja seal ribadeks lugeda.

See ühe programmi kommentaar aga, ainukene üldse terve programmi peale, pärineb reaalsest juhtumist ühe reaalse programmeerija tööst, kus ta pidi üleöö muutma
teise reaalse programmeerija koodi.
See on assembler, selline lihtne ja arusaav asi. Registrisse kirjutatakse number
1827, mis 16 -nd süsteemis on 723h.
Nüüd vist taiplikumad juba mõikavad. Sel aastal suri Ludvig Van Beethoven.
Noh, ma tegin küll dekodeerijate ülesande siin lihtsamaks - panin pildi tema kõige kuulsama motiivi noodiga ka lisaks juurde..
...

Kuigi reaalsed programmeerijad ei kirjuta kommentaare, sest nende kood on isedokumenteeruv
ja on üllatavalt palju netisaite, kus seda seisukohta põhjendatakse ja üritatakse algajatele
kodeerijatele selgeks teha (pähe määrida), et "kommentaar on nõrkadele", olen alati olnud ja olen ka edaspidi,
selle koha pealt nõus Komissaroviga:

EI USU!

Vist ka kuni lõpuni välja.
(Mõtte pähe määrimine, et kommenteerimine on natuke paha, muidugi nii lihtsalt ei käi. Kommentaar hm. jah, aga kõige parem asi on ikkagi see kood kuidagi nii vingelt ümber kirjutada, et iga loll kohe saab aru .... ja siis on kommentaar puhas ajaraisk).
Ja kõik muu ilujutt, kuidas mingi metoodika, kõrgkeel, kõrgmõtlemine, struktueeritus, objektorienteeritus ja muu väga palju parandab ja muudab kõik iseenesestmõistetavaks ... ei tundu väga usutav.
Isegi egüptoloogid eelistavad inglise keelt oma armastatud hieroglüüfidele.
Loomulikult ma olen teadlik arvamusest, et kui midagi on juba vaja kommenteerida, siis tuleks kood ümber kirjutada ja selle tagajärjel nagu muutuks see tohutult arusaadavamaks. Võtsin CC-st toodud näited. (Code Complete, on selline piibel, mida peab peast teadma ja tsiteerima).
Üks oli paha näide, kus kasutati muutujaid i ja j ja teine oli hea, kus oli muutujanimes kuidagi ära mainitud, et mingit pidi on tegemist algarvudega mehkeldamisega.
Peaaegu mõlemaga läks ühepalju aega.
Selle lihtsa võimaluse peale aga, et selle jupikese ette kirjutada, see arvutab, kas mingi asi on algarv või ei ole, CC autor millegipärast ei tulnud.
Ja nii võikski ju olla.
Mingi IBM uuring väitis, et 1:10 võiks kommentaaride % olla.
See tähendakski, et inglise-eesti-suahiilikeelne jutt oleks 1:10 koodi mahust ja see võiks selle koodi läbivaatamist paar korda kiirendada küll. Sest seda on juba mahuliselt vähem, 10 x vähem.
Kindlasti kommentaarid ei suuda ja ei pea kõike väljendama, mida kood teeb, aga mõnikord on see võimalus olemas, öelda - siin kontrollime, kas N on algarv. Punkt.
Võimendusteguriga 1:10 või isegi enam (tavaliselt enam) saab kõik ära öelda.
Ja see ülihästi struktureeritud või struktureerimata koodiläbu seal taga ei huvita MITTE KEDAGI.
Kui seal aga on viga, siis see ongi väga hea, et rida seal ees ütleb - kood võiks tuvastada, kas N on algarv ja kui näiteks 15 ei tule algarv, siis oleme leidnud vea.
Võib juhtuda, et Komissarovi kuulsat EI USU ütlust võib pruukida veel ja veel.
Näiteks programmeerimise klassik Edsger Dijkstra arvas kunagi, et GOTO on harmful.
Võib-olla natukene oli ka.
Aga kui tänapäevaseid asünkroonseid koodimonstrumeid puurida-uurida (ja neid ei päästa mistahes kommenteerimine), siis on kõik kuradima OK.
Aga asünkroonne progemine tegelikult ongi üks varjatud GOTO-tamine üle terve programmi, nii et silm ka ei pilgu.
Aga sellest kunagi mõnes teises jutus - praegu ma siis lihtsalt olen CC läbi sirvinud ja julgen teistele ka soovitada. Mingi vana versioon oli pdf-na netist kättesaadav, uut ei tabanud.
Soovitan ühesõnaga.