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.




märts 18, 2017

12 prelüüdi Bachilt ja Tatjana Nikolaevalt


Need on väga lihtsad lood. Mängige ja proovige järgi teha
neid lihtsaid klahvivajutusi - teil ei õnnestu.
Aga siit ma sain esimest korda aimu, kuidas mängida prelüüdi nr. 2.

märts 11, 2017

Olulisuse olulisus ehk ikka veel hõbekuulist















Mida enam tarkvaraasjandusega tegeled, sedavõrd väheneb ka sellest kirjutamise soov.
Ometi on minus süvenenud veendumus, et nii ei ole päris õige. Nii ma proovin ikkagi jätkata tarkvara lainel kirjutamist, hoolimata asjaolust, et eestikeelset juttu tikub kodeerimise teemadel järjest harvemaks jääma ja on seda üldse iialgi piisavalt palju olnud?
Veel hirmutavam on english only suhtumise kiire levik. Ühekorraga arvavad kõik tarkvarast kirjutajad, et nad peavad hirmsat moodi hakkama oma blogis englishit purssima.
Ma õnneks ei oska seda keelt - võiksin siis slaavi ekvivalendi järgi talitada, eriti seetõttu, et voorimehe moodi vandumine vene keeles on senini ületamatu olnud...
Kui mingi loengu pidaja enam ei oska tõlkida sõna "implementation" ja paneb seejärel kõik oma slaidid englishkeelsetena hakkam, siis on midagi vist ikka väga viltu?
Sellele kõigele lükatakse praegu aga ainult tagant, meie omade eestlaste poolt, aru saamata, et see on midagi sama tähtsat, nagu mets ja maa, mis pidanuks kuuluma ju meitele...
See on see punkt Brooksi sõnumis, mida me jätame tähele panemata - ainuke, mida saab teha paremaks kodeerimiseks - olulise eraldamine - terade eraldamine sõkaldest.

Ja  keel ja mõtlemine on tähtsad. Neid ei tohi lasta risustada. Kui me ei oska oma kodeerimise asju emakeeles arutada, ei oska me üldse mitte midagi.

Hea on teada, et loll räägib kõike, mida teab ja tark teab, mida räägib. Ma lisaksin, et parema meeskonnatöö huvides tasub järelikult meeskond komplekteerida lollidest. Sest kommunikatsioon loeb. Ja parem kirjutada ja kommenteerida ja dokumenteerida, kui jätta kirjutamata ja dokumenteerimata.

Kuna Brooksi sõnumi lugemisel endiselt on rõhk sõnal HÕBEKUUL, ei ole tänaseni jõutud kohani, et peaks tegelema olulisega. Pilt ei ole aastatega muutunud paremaks, vaid pigem järjest hägusemaks.
Java ei ole asendanund näiteks C++, vaid lihtsalt asunud C++ kõrvale koos C# ja muude asjadega, tõrjudes kõrvale Delphi.
Ühekorraga on meil neid kõiki vaja teada ja need kõik kokku on asjaolud, mida võiks nimetada pigem juhuslikeks, kui olulisteks. C++ hästi oskav kodeerija ei saa paremaks inimeseks, kui õpib ära ka Java, Java äss ei saa väga palju paremaks, õppides ära Delphi ja C# ja nii edasi. See, et mitu keelt teeb sind kõvasti targemaks, on suur müüt. // pean võimalikuks neid sõnu süüa millalgi...
Kokkuvõttes oled lihtsalt raisanud rohkem aega juhusliku ja ebaolulise peale, aga kogusummas muutub see ju millekski oluliseks - olulisuse silmist kaotamine on ju oluline?
Ometi on vaja jõuda koodini, ka autos ei ole oluline, kus paikneb pidur ja sidur, ometi võtab eriti palju aeg pidurdamise reflektoorse refleksi teke. Enne seda aga ei saa rääkida vilunud autojuhist.
Aga kui ühes autos on piduri asemel sidur ja vastupidi (võrdlus Delphi ja C võrdusmärkide osas näiteks). 
Kuna aga ei saa ette öelda, mis asjad kusagil ringlevad, jõuab mingi aja möödudes keskmine kodeerija paratamatult sellest multikultist omandada üsna palju. Aga samavõrra võinuks ta tegelda võib-olla mingite olulisemate asjadega? Näiteks algoritmide analüüsiga Donald Knuthi abiga?
Seda mitmekesisust rikastab veel poliitiline maadejagamine - Linux / MS kõige ilmekama veelahkmena...
OLULINE oleks ükskord võtta aksioomiks teadmine, et hõbekuuli ei tule ja selle asemel tegelda esimese poolega - juhuslik osakaalu vähendamisega.
Mina näen siin aga juhuslikkuse osa tõusvana?

Kui ma millelegi olulisele aga olen pihta saanud, siis vahest on see võrdlus muusika või kokkamisega.
Teooriat on rakenduslikus IT-s kohati täpselt sama palju, kui kokanduses biokeemiat.
Aga võrreldav on kohutav nikerdamine, käsitsinikerdamine ja mite mingisugune erihakklihamasin ei võta seda vähemaks - vähemalt mitte meie Eesti tippkoka Dmitri Roozi puhul.
Nii ma vähemalt lugesin, kui Dmitri jamas selle Prantsuse erikanaga ja sai kokkamise maailmameistrivõistlustel finaali ja seal 14. koha! Selleks tuli tal 32 korda harjutada mingi kana valmistamist, iga korda 4.5 tundi. Ja alles 33 korral siis oli see finaalvõistlus ja siis vahest oli tal see kana valmistamine käpas. 14. maailmas on muuseas ülikõva koht!
Ja võrdlus muusikaga peab ka paika - millist üleinimlikku vaeva peab nägema pianist mõne etüüdi harjutamisel!
Võimalik, et siin IT jääb kokandusele ja muusikale küll alla.
Nii et kunst kunstiks, aga niimoodi ei saa IT-s küll ühtegi programmi valmis, et võtad mingi munavalge ja viskad lõuendile ja ongi pilt missugune!

Ja lõpuks kui kõik keeled, või väga paljud, ja enamus  raamistikud on selged, võtad sa ikkagi ette TAOCP (Donalt Knuthi peateos) või mõne sarnase asja.
Kõige alguses oli Algoritm. Ja siis tulid alles muud asjad, nagu valgus, vesi ja inimesed ...