november 29, 2014

II Objektid kuulutatud kahjulikuks



















Koodimaailmas natukenegi asju uurimas käinu teab, et koodiususõjad on siin igapäevane asi.
Ja mida vagam ja üllam on bitirüütlite kood eemalt vaadates, seda sügavam võib olla põhi.
Ja igal priiuserüütlite sektil on erinevatel aegadel käigus olnud erinevad reliikviad. Tänane jutt on siis praegusest koodireliikviast nimega Objektorienteeritus.
Kuid selleks, et selle reliikvia ümber toimivate vana- ja uususuliste vahelist vaidlust mõista, peab teadma eelnevate ristisõdade ajalugu ja selleks peab jätkama COBOL teemat.
Eelmises loos rääkisin põgusalt ühest varasest koodirüütlite kantsist nimega masinkodeerimine. Seal elunev kogukond oli üsnagi häiritud Grace Hopperi kompilaatorist, mis mitte ainult et ei saanud aru müstilistest assemblerikäskudest, mis oleks veel olnud kuidagi talutav, aga ta sai aru "puhtast" inglise keelest. See "puhas" inglise keel oli siiski väga, väga kaugel sellest, mis on meie mõistes inimkeel, aga masinkodeerijad olid sunnitud sellele alla vanduma ja möönma, et see oli tunduvalt lihtsam, kui nende kokkupandud bitijoru. Masinkoodis programmeerimine siiski ei hävine iial. Olemuslikult on alati tarvilik kellelgi kirjutada valmis näiteks kompilaator või vähemalt osa sellest masinkoodis, küsimus on vaid selles, et kui on võimalik oma elu lihtsustada, siis seda tasuks ka teha.
Miks selline praegu mõistusele adumatu vastuseis ikkagi tekkis?
Selleks peab mõistma kultusepreestri loogikat. Kui oled ise ikkagi istunud mingi sarnase sisuliselt 0 ja 1 välja ajava masina taga, on ehk see veel paremini mõistetav, aga sama tunne valdab kõiki, kelle käes on mõne võimsa tehnilise imevahendi rool….
 Sina oled see maag, võlur, kes toimetab muu maailma ja võlukasti vahel ja keegi teine ei jaga seda loogikat (ja ei tohigi jagada) ja siis tuleb üks vanaldane energiline daam (kes hoiab oma seinal kella, kus osutid käivad tagurpidi) ja ütleb, et preestrite asemel saab iga firma oma kontorisse palgata mõned blondiinid, kes lihtsas keeles kirjutavad üles, mida arvuti peab tegema.
Selleks keeleks sai COBOL ning ime küll, masin kompileerib pärast mõningat mõtiskelu kokku koodi, mis … üllatus üllatus, tegigi seda, mida blondiin õpetas.
Pisut hilinenult võttis arvutimaailm selle mõtte üle ja …. üritas unustada COBOL-i.
Kordan veel üle - keegi ei taha tunda pärmi maitset taignas, mis tänu pärmile on kerkinud. Pärmiks sai äriloogika, vajadus andmeid töödelda ja midagi toimivat arvutitest kätte saada mõistliku hinnaga.
Ja veel on üks asjaolu, mida akadeemilised koodipreestrid ei taha tunnistada: LIHTSUS, tõsi, sügavate puudustega lihtsus… analoogiks ehk vene tehnika. Toimib, robustne, teada head ja vead … aga toimib.
COBOL ja tema järglased (näiteks dBASE keeled) olid ja on lihtsad keeled. Nende "lihtsate" keelte abiga saab kahtlemata tekitada väga segast koodi, kuid keskmiselt oli iga keskmine blondiin võimeline koodi omandama mõne nädalaga ja asjad … toimisid.
Kuigi jah, paljud tööd ja vaeva jäi ja jääb selle koodi käimaajamisega.

Akadeemikud aga taastasid oma reputatsiooni kiiresti.
Loodi grupp, mis pani kokku arvutikeele ALGOLi standardi, mis kajastas tolleaegsete arvutiteadlaste parimaid püüdlusi. Seetõttu see keel ja eriti tema järglased saidki tunduvalt paremad kui "esimesed vasikad" nimega FORTRAN ja COBOL.

Ja ma rõhutaks veel: säilis suhteline lihtsus.
Keda sisuliselt huvitab - programmeerima saab hakata, teades vaid paari põhikonstruktsiooni:
if else …elseif lausung ning for …. ning ongi kõik.
Kes tahab hakata kodeerima, unustage preestrite manitsused ja hakake kohe pihta. Enamik moodsaid keeli sisaldavad endiselt neid põhilisi konstruktsioone ja kõike ülejäänut võib ka ignoreerida.
Näites JavaScript on üks selline keel, millega võib igaüks kohe pihta hakata, aga ka Python. JavaScripti tohutuks eeliseks on see, et iga tänapäevane sirvik sisaldab seda keelt ja seetõttu võib igasse HTML dokumenti selle keele skripte sisse kompileerida.

ALGOL-i aluseks aga keeleteadlase  Noam Chomsky artikkel
"On certain formal properties of Grammars"
Selle põhjal osati kirja panna oma loodava keele "grammatika" ning programmeerimiskeelte loomine sai lihtsaks tegevuseks.  Märkigem, et Chomsky ei ole arvutiteadusega seotud ja ometi põhinevad tema ideedele kaasaegse programmeerimise alused.
Varasemates keeltes FORTRAN ja COBOL, pärandina masinkeelest, kus teisiti ei saanudki mingit otsustuste järgset hargnemist teostada oli aga veel olemas GOTO.
Koodilasu tekitamisest FORTRANI ja COBOLI järglased meid ei säästnud ja tänaseni ei ole olemas võlukepikest, mis seda suudaks. Ükskõik, mis reliikviatest käib jutt, need on ainult reliikviad. Viimseks ei jää ükski neist.
Ja nüüd tuligi akadeemikutele appi maagiline GOTO, kogu kurja juur.
"GO TO statement considered harmful"
on artikkel, mille järgi praegune põlvkond arvutiteadlast Edsger W. Dijkstrat parimini tunneb ja see on tõenäoliselt ajalooliselt üks tsiteeritavamaid artikleid üldse arvutiteaduses.
Mitte sisu poolest, see on sama lihtne, kui vana ja uueusuliste vaidlus ristilöömise üle. Vanausulised toetasid kahesõrme kommet, uueusulised kolme sõrmega ristilöömise kommet.
See artikkel oli GOTO ususõja manifest ja … selle tagajärjel naudime nüüd GO TO vabasid programmeerimiskeeli.
Ega seda õnnetut GOTO-d tõesti polnudki vaja, aga meil ei ole üldse vaja läinud paljut muudki. Ei ole üldse selge, kas programmid ilma selle GO TO-ta läksid natuke paremaks.
Mingeid märkimisväärseid uurimistöid selle kohta ei ole tehtud. See alandaks usutunnistuse tavaliseks väiteks, mida see aga ei ole. Praegu on see tees kooliõpikutesse sisse raiutud ja häda õppurile, kes julgeb kahelda selles väites. Võimalik, et see ususõda, nagu järgnevadki, valmistas pinda ette sellele veel  saabuvale kaunile päevale, kui mingi kaval doktriin teeb programmeerimise tõesti meeldivaks ettevõtmiseks.

Ja nüüd täiesti tavaline asi ususõdade puhul: näidishukkamine. Kuigi COBOL ärimaailmas, nagu eelmiseski postituses mainisin, omas kaalu vähemalt 20 sajandi lõpuni, ei räägitud akadeemias sellest enam sõnagi.
Halastuslasu sooritas  Dijkstra:

COBOLI kasutamine invaliidistab mõistuse. Seetõttu tuleks selle õpetamist vaadelda kriminaalkuritööna.

Nojah. Seebiooperite vaatamise kohta ei ole mul õnnestunud välja selgitada, mis seisukohta Dijkstra omas. Põhja Koreas oli asi aga ühene - Lõuna Korea seebikate vaatamisega vahelejäänud hukati. Aga ELLUJÄÄNUD VAATAVAD edasi. "Elo lätt iks edesi ummamuuudu"… ütleks lõunaeestlane sellepeale.
 
Kuid lohutame kõiki COBOLI sõpru: sama Dijkstra on ütelnud objektOrienteerituse kohta nii:
 Objekt-orienteeritud programmeerimine on erakordselt halb idee, mis sai pärineda ainult Californiast...

Siin Dijkstra küll eksis - objektOrienteeritus mõeldi välja NORRAS ja selle asja autoriks olid Kristen Nygaard koos Ole-Johan Dahl-ga.
Esimeseks objektOrienteeritud keeleks oli SIMULA 67 ja selle kavandamist alustati 1961. 
See keel oli ette nähtud reaalse maailma asjade simuleerimiseks. (Algselt tegeles Kristen Nygaard Norra esimese tuumareaktori parameetrite rehkendamisega)
Palo Altosse tõi objektOrienteerituse idee Alan  Kay, 
keda loetakse programmeerimiskeele Smalltalk loojaks. 
Kahjuks Smalltalk ei ole omaette programmeerimiskeelena leidnud suurt rakendust.
Selleks aga, et OO saaks valitsevaks paradigmaks, lausa kultuseks, tuli leiutada programmeerimiskeel C, et sellele saaks lisada kaks plussi.

C keele tekkepõhjuseks sai vajadus vahepeal arvutikolakatele tekkinud operatsioonisüsteeme paremini kirjutada. 60-ndatel kirjutati neid assembleris.
Esimene kaasaegne operatsioonisüsteem, tänini kõikide normaalsete operatsioonisüsteemide esivanem, oli aga UNIX.

Visandan siin C ja UNIX tekkeloo, võin detailides olla ebatäpne:
1972 tekkis operatsioonisüsteem UNIX, selle põhiautoriks või kodeerijaks oli Ken Thompson ja ta kasutas omatehtud keelt B, mis enam ei olnud assembler.
1972 lõi Dennis Ritchie B keelest keele C, mis B-d kõvasti täiendas ning kompileeris põhilise osa operatsioonisüsteemist UNIX oma C keeles. Koos Brian Kerninghamiga kirjutasid nad valmis uskumatult igava pealkirjaga bestselleri
The C Programming Language, mis autorite järgi sai lühendi K & R ja mida kuni 90-ndate lõpuni iga reaalprogrammeerija käsitles oma piiblina, k.a mina oma füüsikukarjääri ajal 80-ndate lõpus. 
Brian Kerningham sai eriti kuulsaks oma programmiga "Hello World", mis nüüdseks on tirazheeritud kõikidesse programmeerimiskeeltesse ja mida üritavad taastekitada oma arvutis/mobiilis/tahvlil miljonid, äkki varsti juba miljardid algajad arvutihäkkerid, olgu nende valitud õpikeeleks mistahes 10000-st praegu kättesaadavast programmeerimiskeelest.
C keel murdis eelarvamuse, nagu peaks arvutite operatsioonisüsteemi kirjutama  assembleris. See idee on  nüüdseks jõudnud igale poole - isegi mikrolaineahju või pesumasina juhtprogramm on nüüdseks on kirjutatud C-s või mis veel hullem, C ++ -s. Tollal oli see tohutu edusamm ja murrang süsteemiprogrammeerijate teadvuses. C stiil (äärmiselt kompaktne, sageli suhteliselt raskesti loetav, kuigi vanad C tekstid on tänapäeva krüptikaga võrreldes siiski kukepea) sobis süsteemiprogrammeerijate mõttelaadiga, kelle arvates 1 rida koodi on alati parem, kui 2 rida ja kokkuhoitud sümbol on kokkuhoitud mälu ning kõige kriteeriumiks on praktika - s.t. masina kulutatud aeg millisekundites ülesande peale. 
Endiselt on C asendamatu töövahend seal, kus määravaks on programmi täitmise aeg ja seetõttu süsteemprogrammeerijaks pürgijatele vältimatu asi selgeks saada koos C++, C# või mõne muu C OO dialektiga.

OO ajastu alguseks aga

tuleb lugeda aastat 1979, kui Bjarne Stroustrup  sai ülesandeks oma doktoritöös tegelda Simula programmeerimiskeelega.
Bjarnel tekkis mõte vana head C-d laiendada. Esialgu sai ta valmis C keele koos klassidega (C with Classes), mille peagi nimetas ümber C++. 
Esimene C ++ alane bestseller 
"The C++ programming language" ilmus 1985. Uusim C++ kehtiv standard nägi ilmavalgust 2011.
Võib julgelt öelda, et iga sügavamalt progammide hingeelusse tungida tahtev isik ei pääse C -le ühe juurdeliitmise operatsioonist kuhugi (++ tähistab C keeles ühe juurdepanekut).
Stroustrup sai hakkama sellega, millega Alan Key ei saanud - keel ja seejärel objektorienteeritus muutus valdavaks paradigmaks.
C++ on tunduvalt rikkam igat sorti raamatukogude/ teekide poolest. Paljud asjad, mis senini oli vaja teha käsitsi, läksid automaatseks, tuleb üles leida vastav teek, objekt või klass ja kasutada seal kirjapandut alamprogrammi / funktsiooni. Keel läks rangemaks, vigu tuli ka vähem ja lisatööd oli ka vähem. OO sobib suurte süsteemide kokkupanekuks, väikeste programmijuppide puhul võib kasu olla täiesti puudu või marginaalne (minugi poolt tehtud väike Trips-traps-trull ei tundu OO-sse ümberpanekust midagi võitvat).
Ka mujal, isegi nendes keeltes, kus ei räägitud väga palju objektidest, tekkis kasulikke teeke, graafilisi objekte j.m.s., mis elu lihtsamaks tegid.

Ometi on täna, anno 2014 tekkinud ka igati põhjendatud kriitika OO paradigmale. Nii nagu "struktureeritud" programmeerimine püüdis ilma GOTO-ta välja näidata, et nüüd on asjad väga hästi, programmid palju lihtsamad, kui varasemal (ütleme siis COBOL-i või FORTRANI ajastul), vaadeldakse OO-d tänapäeval kui võluravimit, millega iga programmi saab muuta tunduvalt paremaks, kui enne OO-d. 
Võib isegi väita, et OO oli ehk natuke vale valik ja "õigem" valik oleks olnud 70-ndatel panustada Funktsionaalsesse Programmeerimisesse (FP). Isiklikult ma kaldun kahe suure pesapallimeeskonna, FP ja OO duellis FP poolele, aga FP peab oma eelised panema maksma. Selleks peab aga FP omandama kõik OO kasulikud nipid ja tegema ennast laiale publikule arusaadavamaks. Ikkagi tuleb kirik lõpuks ehitada keset küla. Ja veel üks prognoos - lõpuks sekkuvad mängu andmebaasid, oma relatsiooniliste tabelitega, millega võitnud paradigma peab hästi hakkama saama (ja omandama andmebaasidele vajalikud mängureeglid ja nipid). Otsustavaks kaalukeeleks aga saab kõigele paralleelsus - OO ei suuda sellega piisavalt hästi hakkama saada, FP programmid suudavad.

Mis on OO?

Esitan siin oma, referatiivse tegevuse tagajärjel kujunenud esialgse visiooni.

Lähtun õpikutest ja oma teksti alguses visandatud joonisest. 
OO lähtub objektidest. Sageli saab objektidest moodustada puukujulise süsteemi, nagu joonisel kujutatud: koer ja lammas on mõlemad loomad.
Koer ja lammas on loomad klassi alamklassid, kellel võivad olla omad alamklassid.
Igasse klassi kuuluval objektil on hulk omadusi. Osasid omadusi nimetatakse andmeteks - koeral siis tõug, kaal, peremees ... ja nii edasi ...
Osad omadused on tegevused, mida saab objektiga teha, neid nimetatakse meetoditeks. (protseduurid protseduurilises paradigmas, funktsioonid funktsioonaalse programmeerimise paradigmas). Meetodite eripära on see, et neid saab rakendada ainult sellele objektile, mille alla need meetodid kuuluvad.
Varem või hiljem leiutas iga OO keel sellele reeglile erandid, sest muidu ei saaks üldse elada ....
Matemaatik olevat ühe definitsiooni kohaselt automaat, mille ühest otsast antakse sisse kohvi ja teisest otsast tulevad välja teoreemid.
OO programmeerijale joodetakse samuti sisse kohvi, välja tulevad aga objektiklassid. Selleks tuleb eeldatavalt kasutada teiste (ülem)programmeerijate poolt loodud superklasse.
See, kuidas OO programmeerija seda teeb, peab olema pimedas ja varjatud, s.t. privaatne. Selleks on olemas ka privaatsed andmed ja privaatsed meetodid.
Aga väljapoole peab paistma pakend või liides - mingid kindlad meetodid ja mingid kindlad andmed, mida teistel programmeerijatel võib ka vaja minna.
Objekte on võrreldud nimisõnadega. Kõik tegevused peavad olema mingi nimisõnaga seotud. See on mõnikord hüve, näiteks vispel kuulub ju kööki ja praetakse midagi köögis, mitte elutoas. Aga praadida võidakse mitut sorti "objekte" ja on kohe näha, et kõik asjad OO-s ei ole roosilised, sest kartul.praadi meetod objekti liha jaoks jälle ei sobi , aga põhilises on ju kõik sama... 
Siin tuleb appi superklass, teeme superklassi toiduained ja sinna üldise protseduuri praadi.  
Toiduained.praadi olemasolul kartul.praadi ja liha.praadi võtavad oma protseduuri superklassist. Selline protseduur päritakse superklassilt.
Siin me näeme ka OO positiivset poolt - selleks, et köögiasjandust programmeerida, tuleb asju klassifitseerida või korrastada ja korralikul perenaisel peavadki asjad olema süsteemis. Nii et selline jäikus on toonud natukenegi korda muidu kaootilises progemise maailmas … diktatuur on halb, aga keegi ei ole midagi paremat ka välja mõelnud...
Mõnikord aga viskab (eriti meestel) ära, kui selleks, et muna praadida peab kurat teab mis super ja alamklassidega jamama ...
(superklass toiduaine, superprotseduur toiduaine.praadi, köök.sealOlevadAsjad.köögiRiistad.vispel.vispelda(munad, piim).... ja nii edasi...)
Hästi toimib OO sellises heas konveiersüsteemis, kus tegevused on üsna selgelt seotud objektidega ja objektid ongi kesksed tegelased.
Kinnisvarahaldus on hea näide ehk. 

Meil Eestis on OO mõtlemine väga levinud, näiteks ÜLIKOOLIS. Kõige tähtsamad on majad. Näiteks on meil 2 väga suurt ja küllalt pompöösset raamatukogu: Tartus ja Tallinnas. Aga raamatuid ei ole (näiteks ei ole OO keele Java kohta mitte midagi, v.a. 10 aasta tagusest perioodist).
Järjest ehitatakse pompöösseid klaasist õppehooneid (vanad müüakse maha või lammutatakse ära, peahoone ehk jääb). Oma inimesed aga ei ole mingi väärtus - küll kusagilt uued saab. 
OO puudused tulevad ilmsiks, kui esiplaanil on tegevused, mida ei saa seostada 
objektidega - näiteks kontoritöös nii tavalise tooli, kohviautomaadi või arvutiga - ja hierarhiline jäikus ei toimi. 
Siis on OO nagu viies ratas vankri all.
Keerukamate struktuursete suhetega on ka raske hakkama saada. Kui suhted on puukujulises süsteemis, on kõik OK, aga kõige tavalisema relatsioonilise andmebaasiga jääb OO hätta.
OO alternatiivi - Funktsionaalset programmeerimist  aga võrreldakse verbides mõtlemisega. See on sageli loomulikum, sest programm on enamasti mingi tegevus, objektid seal vahel tänapäeval on ka olemas, aga neile ei tohi anda niivõrd tähtsat rolli, kui OO-s on välja kukkunud.
Tegevused on paindlikumad, häälestatavamad ja üksteisega paremini kombineeritavad. Tegevuste sisse on juba programmeeritud paralleelsus, aeg, üheaegsus. 

...
btw: kui tekib maht, tahaks ka FP kohta samaväärselt kriitilist ülevaadet kokku panna, sest ususõdade puhul leiab piisavalt ka neid, kes on FP kohta huvitavalt öelnud. 


Aga aitab lobast, jõuame autoriteetide tsitaatide juurde:
"Objekt orienteeritud programmeerimine on erakordselt halb idee, mis saab pärineda ainult Californiast."
Edsger Dijkstra
      
"Objektorienteeritud disain on sama, mis Rooma arvud arvutamises"
 Rob Pike

      "Fraas 'objektorienteeritud' tähendab palju asju. Pool on ilmsed, teine 
       pool aga koosneb vigadest."
Paul Graham 

       "Objekt orienteeritud mudel teeb kergeks programme konstrueerida juurdelisamise meetodil. Mida see sagli praktiliselt kaasa toob, on see, et ta võimaldab struktureeritud meetodil kirjutada spagetti koodi."

Paul Graham 

Pärimise realiseerimine põhjustab samasugust põimumist ja rabedust, mida on jälgitud goto avaldiste kasutamisel. Tulemina kannatavad OO süsteemid keerukuse käes ning ei ole taaskasutatavad.
 John Ousterhout

Sageli on elegantseks realisatsiooniks lihtsalt funktsioon. Mitte meetod. Mitte klass. Mitte raamistik. Lihtsalt funktsioon.
 John Carmack

Probleemiks objekt-orienteeritud keeltes on see, et nad saavad kaudselt kaasa kogu selle keskkonna, mida nad endaga kaasas tassivad. Sa tahad banaani, aga sa said gorilla, mis hoiab käes banaani ja koos temaga kogu dzungli.
Joe Armstrong

Kunagi armastasin objekt-orienteeritud programmeerimist. Nüüdseks kaldun arvama, et see on vandenõu, mis on kavandatud selleks, et hävitada nauding.

Eric Allman

Väga tähtis ObjektOrienteeritud koodi omadus on see, et see võimaldab väikestel, lihtsatel probleemidel näida suurte ja keerukatena. 

 tundmatu anonüüm


Aga nüüd üritan teid säästa lõpus toodud linkide läbijäramisest ja natukene ise kokku võtta, mida OO kohta on olnud öelda, järjestades neid asju enda järgi.


 I  OO haip ja reaalsus.


Kuigi ülikoolide õppeprogrammid esitlevad OO-d kui mitte just ainumõeldava, siis siiski valdava paradigmana koodinikerdamise vallas.
See ei ole nii. 

Näiteks andmebaaside programmeerimises ollakse endiselt hädas OO rakendamisega. Selle taga on lihtne asjaolu - andmebaaside loogika ei allu OO loogikale üldse.
vaadake [3]. Seal nimetatakse probleemi näitlikult "Vietnami sõjaks". Üritus andmebaase hakata programmeerima OO stiilis on seni läbi kukkunud. Ja juba möödunud sajandi 80-ndatel aastatel tehti manifeste, kuidas kõik andmebaasid hakkavad varsti OO välja nägema. 35 aastat võiks olla piisavalt pikk aeg, et manifeste realiseerida. Selgub aga, et suuremat pole välja tulnud. 
On tekkinud soov relatsiooniline andmebaaside teooria nurka visata ja teha omamoodi, OO andmebaase. Või vastupidi, visata mõte andmebaaside korral OO koodi kirjutada nurka ja teha rahulikult nii edasi, nagu kogu aeg on tehtud.
Ka veebiprogrammeerimine ei hiilga väga OO-ga. On küll olemas DOM, Document Object Model, aga selle muutmise ja näitamise koodid väga ei ole OO. 
Räägitakse, et javaScript on OO keel. Lähemalt analüüsil aga selgub, et ka see on natukene ülepakutud, et javaScriptil on küll võimalused OO programmeerimiseks, aga neid väga ei rakendata ja kui rakendatakse, siis igaüks teeb omamoodi - ei ole ühtset objektimudelit, ei ole klasse ja palju muud, mida OO vajaks (Veel vähem on PHP puhul OO-d rakendatud).
Võimaluste paljusus ja nende kohmakus tähendab aga, et ühest meeskonnast tulnud võib kasutada javaScirpti hoopis ühel moel ja mõelda OO-st javaScriptis omamoodi ... ja nii edasi.
Ühesõnaga - Veebiprogrammeerimine ei ole eriti OO praegu.
Kindlalt OO alla liigitatakse Java ja C uuemad derivaadid, C++ ja C#. Nii et nendes keeltes progejad võivad küll ennast OO programeerijateks kutsuda. Teistega pole see nii selge. 


II OO efektiivsus on endiselt mõõtmata.



Selle juurutamise ajal märgiti vaid, et vana, protsduuriline meetod tegelikult oli kiirem ja efektiivsem, aga see vist ei olnud oluline - Moore'i seadus tegi võimalikuks järjest ebaefektiivsema koodi kirjutamise, nii et see kedagi oleks väga häirinud.
Ok, tänapäeval ei ole see enam nii tähtis, aga tähtis võiks olla see, kui kiirelt programmeerija oma tööga hakkama saab. 
Ja siin on endiselt mõõtmata, kas mingi ütleme vaid protseduuriliselt töötama harjunud meeskond teeb valmis halvema koodi, võtab oma töös rohkem aega, teeb rohkem vigu või nende töö tulemus on halvemini loetavam, muudetav ...
Programmeerimise vallas on selliste asjade mõõtmine endiselt vaid helesinine unistus ja kõik otsustused tehakse kõhutunde põhjal, või üksikute näidete põhjal, mille puhul väga vabalt võib olla tegemist lihtsalt haipimisega.
Järelikult on see üldine probleem ja muudab vaidluse ka natukene mõttetuks, sest tuginema peabki vaid kaudsetele argumentidele, mitte otsestele.
Ometi on märgatud, et OO kood on MAHUKAM, s.t. rohkem ridu sisaldav.
OO kood ei ole samas kergemini muudetav. Pigem vastupidi, klassidesse sisseraiutud andmestruktuurid ja meetodid on raskesti muudetavad.
Veel hullem - superklassides tehtavad muudatused (isegi positiivsed) võivad kaasa tuua laviini - alamklasside kood jookseb kõik täiega pange.
Ka vigade avastamine on keerukas, sest viga võib peituda kusagil superklassis, mille puhul võib olla isegi puudu algtekst - on ette antud objekt, mis mingitel imelikel asjaoludel teeb imelikke asju. Ja juuniorprogejad peavas sellega lihtsalt leppima.
Hoiatatakse ka, et OO programmeerijad võivad hakata kirjutama massiliselt klasse, millest mingit kasu ei ole (koodi taaskasutatavuse eesmärgil).
Ja seda tõesti tehakse ja OO gurud ise ka hoiatavad selle eest...
Aga ikkagi ei saa väita, et OO oleks olnud viga või vale tee, sest selliseid asju ei ole osatud või tahetud mõõta.
Aga ei saa ka väita, et oleks õige tee ja ei saa vältida selliseid paradigma vigu tulevikus. 
Kui nüüd tuleb varjusurmast välja seksikam FP, võime olla 30 aasta pärast sama tõdemusega  - äkki FP oli viga.


III OO õppimine on raskem, kui vanema, protseduurilise raamistiku omandamine.



Lisaks kõigele on OO väga erinev erinevate keelte puhul, erinevad koolkonnad ja jüngrid mõistavad OO-d erinevalt. 
Võimalik, et praegune koodnikerdajate defitsiit on sellega seotud.

IV OO meetod ei ole toonud kaasa revolutsiooni ja uusi algoritme. 


Põhilised algoritmid on vaja realiseerida vanas, protseduurilises maailmas. Pigem on tegemist koodi korrastamise filosoofiaga, mis aga kahjuks eriti hästi ei toimi.
Seetõttu ei saa seda meetodit nimetada ka kuigivõrd revolutsiooniliseks.
Ka ajafaktor näitab seda - 35 aastat oleks piisav aeg enese tõestamiseks.
Süüdistatakse isegi autoreid, kes püüavad Donald Knuthi "Art of Computer programming" tekste ümber panna OO -sse. 

V OO-d praegusel kujul ei saa hästi paralleelseks teha



FP meetodid alluvad sellele hästi - siit ka minu panus selle paradigma kasuks.

.....
ja nii edasi ja nii edasi, nagu Kurt Vonnegut tavatses kirjutada...
Võtan nüüd pärast sellise diatriibi kirjutamist OO suunal ette Java keele ja küllap pärast näeme, kas minust on saanud OO jünger, kelle põhjamaine iseloom on halastamatu igasuguste kõrvalekallete suhtes OO -s sätestatud käitumisnormidest, või vastupidi - FP adept.
Ilmselt tõe tempel kerkib kusagile vahepeale või leiutatakse pärast Moore seaduse lõppu tõesti midagi uut ka programmeerimise vallas ...
Selle prognoosimiseks, mis aga saab, tuleb endiselt vaadata kohviube või edasijõudnutel kasutada
Math.random() funktsiooni.
FP suunal võtan mõttepausi. Aeg ei võimalda FP kriitikute ja pooldajate sõnasõda refereerida...


Linke OO kriitika kohta:


1) http://harmful.cat-v.org/software/OO_programming/


2) http://www.softpanorama.org/SE/anti_oo.shtml



3) http://blog.codinghorror.com/object-relational-mapping-is-the-vietnam-of-computer-science/

4) http://pivotallabs.com/all-evidence-points-to-oop-being-bullshit/

5) http://c2.com/cgi/wiki?ArgumentsAgainstOop

























 



























november 01, 2014

9 aastat grafomaaniat kuulaeval




















Eile, 9 aastat tagasi käivitasin oma võimatu missiooni ja kirjutasin I kandes 
järgmised tähelepanuväärsed read: 

Täna teen ühe väikese ja olulise sammu Sekeldaja jaoks. Ma väga loodan, et mitte inimkonna jaoks, sest kui inimkonna mõttekapatsiteet on minusuguse mõtetest võimeline innustuma, siis on meie ahvitõu tulevikuga midagi väga tõsist lahti.

See samm ei toonud kindlasti kaasa midagi väga tähelepanuväärset. 9 aastat on täpselt see aeg, mil tasub mõelda - kannatan ma ära veel 1 aasta, et järgi jõuda enda astroloogilisele teisikule, Ristikivile, kes kirjutas päevikut 10 aastat.
(Oleme juhtumisi ühel kuupäeval sündinud)
Tema kirjutas teistmoodi, kirjutaski üles kõik asjad, mis juhtusid. Seda, millest Karl mõtles selle 10 aasta jooksul, me aga päevikust teada ei saa.
 Ma ei ole niimoodi tahtnud blogi teha, sest tegelikult ühe inimese elus ei juhtu õieti midagi. Need paar sündmust, mis juhtunud on, ei ole jälle kirjeldatavad - laste sünd, näpuotsatäis armastust ja keskmiselt lõputu rutiin/orjamine, mida läbustab aeg ajalt mõni konflikt. Mul on neidki liiga harva, mõnel on ülepäeviti ja näe, midagi hullu pole lahti. On saanud ennast välja elada ja tore on.
Minu blogimise ajal tegelikult ei sündinud mitte üldse midagi. Orjasin ülikooli,
kes selle tasuks mulle jalaga andis. Tänud, Alma ja selle imeväärsed juhid kaptenisillal!
Konfliktid on peamiselt iseendast sündinud, aga alati on saatusel olemas mõni isik, kes oskab siin vinte peale ja üle keerata.
Kunagi keeras vindi üle sellesama blogi kohta lausutud hinnang, saadud 5 minutilise lehitsemise tagajärjel: 
"Sa oled ikka tõeline grafomaan!"
Ma ikkagi ei ole küll. Tõeline grafomaania algab sealt, kus enam kuidagi muidu ei saa, kui oled sunnitud välja andma raamatu. Mina ei ole olnud sunnitud raamatut välja andma, ma lootsin, et niisama väiksel viisil saab ka grafomaaniat harrastada. Lootsin, et tekib selline blogihiirte kogukond, kelle toodetud sisu sunnib inimesi oma mõttemalle muutma. 
Kahjuks on asjad pigem alla-, kui ülesmäge käinud. 
Naiste läbu on tulnud ja võitnud. Klaaritakse oma arveid ja armukesi, nii et suled lendavad ja need asjad on oi kui popid.
Aga nii ongi, sest meie ühiskonnas on ainukesed lugevad ja kirjutavad isendid enamasti naised, naistekate rõhuv ülekaal on selle selge märk. Mehed ehitavad, joovad, peksavad, sukelduvad poliitikasse, aga ei kirjuta midagi, v.a. mõni poliitik näguderaamatus.
On meeldivaid erandeid, kõik blogijad ei ole veel naised.
Ma lootsin tõsiselt, et 9 aasta jooksul jõuab mõni asi saada oma seadusliku lahenduse - kaksiktornid, kuumisiooni võimatus jpm
Ei, sama tuim vale jätkub, samad tuimad ja verdtarretavad asjad kestavad edasi, pannakes pomme, kaotatakse reisilennukeid, tulistatakse neid alla ja süü aetakse nende kaela, kellele on vaja süüd veeretada.
Vahest on see vale muutunud rutiinsemaks, tuimemaks, jultunumaks. Ei ole vaja sündmusi peaaegu redigeerida, ei ole üldse vaja alluda mitte mingisugustele füüsikaseadustele ega loogikale. Meie ütleme, et on nii ja ongi nii.
Sellest hoolimata on hea meel: 1914 EI ALGA III Maailmasõda. Väga lähedal olime küll ja hirmuäratavalt kõlab Vanga - sõda algab siis, kui Süüria läheb nende kätte, keda ei oodata. ISIS tuleb meelde. Ja kõik need jälkused sõjas, Ukrainas ja Süürias ja Iraagis … 
 Ometi on jäässe pragusid tekkinud ja mõni koht on tõusnud ja jälle langenud - telegramm.ee tuleb meelde.
Ka need kohad juhitakse sujuvalt ohutu esoteerika teele, mõtleme maailma paremaks ja saamegi parema paiga.
Aga suuremalt jaolt olen liitunud Madis Kõivu arvamusega: maailma ei saa muuta. Madis Kõiv lahkus siit päris hiljuti. Ka mul oli ühelt poolt õnn olla temaga natuke tuttav, sest ta juhendas mu diplomitööd. Aga sellel ajal olin mina tehnopaat ja ei teadnud Madise kirjanduslikest harrastusist midagi. Teisalt ei tea muu rahvas peale füüsikute, et Madis oli ka briljantne teadlane 
Tegelikult oli ta väga tähtis inimene nii füüsikas kui kultuuris, unikaalne saavutus meie ajaloos!
Alliksaar arvas maailma muutmise kohta teisiti ja ma olen endiselt tema hingesugulane, aga mina ei suuda nii tervet elu ilusti välja mängida, nagu tema tegi. Sellel täna puudub ka mõte, sest enam ei ole seda publikut, mis oli 60-ndatel.
Küllap see mõte jälle tekib, sest sellest põlvkonnast see osa, kes lahkub ja siiski tagasi tuleb, nemad on natuke teistmoodi suhtumist ka näinud ja tahavad muutusi ja tunnetavad maailma teisiti.
Aga palju aega läheb veel, talumatult kaua aega. On natuke erinev olukord Palat nr. 6-s kirjeldatust, aga on ka sarnasust. On talumatult rumal meedia.
On talumatult palju pugemist ja valetamist. Heast elust aga lolliks veel ei lähe, sest head elu eestlane ei ole veel isegi näinud. Võib-olla mõni on, kes väljamaal, ja mõni rikkur siin. 
Olen hästi säilinud. Külastasin koolivenda, teda vaevab ülekaal ja võtab tablette, mis lühimälu ära kaotab. Tõesti, tundus küllaltki zombie-na ja ta peab seda veel jaanuarini tegema. Siit minejate veel noorte meeste vanuse järgi võib jääda olnud ka mõni aasta, aga võib-olla ka rohkem, keegi ei tea. Tänapäeval võib tulla ajuvähk ja äkki selgub, et elad vaid mõne nädala. Üks neiu 19 aastasena mängib korvpalli, kuigi elada on jäänud mõni nädal. Opereerida ei saa, ajutüves on sees ja nii kiirelt läheb see asi. 
Tõenäoliselt lähevad asjad veel hullemaks. Üsna tõenäoliselt tuleb üle elada veel Fukushimast kordi, kordi hullem tuumaavarii ja siis läheb vähk väga, väga tavaliseks. Praegu veel on uudis see ajuvähk, siis enam ei ole. 
Ja saastamine ka on ainult jätkunud. Mõni ökoasi oleks küll nagu positiivne.
Näiteks võetakse juba teadmiseks, et igat saasta ei tasu süüa. Minu abikaasa, kelle jaoks ma olen "tõeline grafomaan", ise veenab mind mitte mingit 
bolognese pakikest ostma. Aga ma ostan, sest ma olen natuke väsinud ja saab õhtueine kiirelt valmis. 
Kusagilt aetakse sulle ikkagi mingisugune saast sisse säravate nägudega libaekspertide mulina saatel - sööge sööge ja jooge Cocat peale, hästi palju jooge ja siis …. vaktsineerima! Hurraa!
Ühesõnaga, muutusi, kui on neid on, tuleb otsida tikutulega ja püüda neid võimendada, kui saab. Aga üldiselt on sarnane positsiooniline seis males, kus maletaja / meie elus oleja peab püüdma pigem rahulduda filosoofiliste muutuste tuulega. Näiteks seegi on muutus, et tunnetatakse juba, et tegelikult on räige stagnaaeg ja neid poliitmaske meie ees tunnetatakse ka teistmoodi, mitte enam elusatena, vaid automaatidena.
Ja Maupassant-i ütlus - kunagi pole asjad nii hullud, kui arvatakse, ja kunagi pole ka nii head, kui arvad - või midagi sarnast - on tähtis meeles pidada.
Et inimene ainult mõtleb, et mõtleb. Tegelikult oleme väga paljus zombid.
Lugege viimast National Geographicut, kuidas parasiidist ussivastne paneb kilgi õigel ajal otsima veekogu. See olend ei armast iial vett, aga ühel hetkel oskab parasiit tema aju nii mõjutada, et see putuk ise sibab ja viskub lähimasse veekogusse, kus ta muidugi upub. Seejärel parasiit saab edukalt edasi paljuneda ja parasiteerida.
Tuleb vist tuttav ette? 
Ka inimkonnal on vaja vabaneda parasiitidest. Nende toimimine on väga hõlbus meie eesotsas laiutavate psühhopaatide abiga, aga sellele peab saama piiri panna, muidu me hukkume. 
Meie loetakse peale säravates silmadega tehnoloogia mantrat - inimkond nagu hukkuks ilma tehnoloogiata. …
Tehnoloogia ei ole kõige tähtsam ja isegi kui selle areng seiskuks (sest tagasi minna on üsna raske, kõige realistlikum võimalus on küll olemas, III Maailmasõda), saaksime palju paremini hakkama, eeldusel, et me võtame mõistuse pähe ja vabaneme parasiitidest ja hakkame üksteisesse normaalselt suhtuma. 
Aga nemad, näe, on süstinud ajusse mõtte - kui mobiili ei näpi, siis elad halvasti…
Täna ma lõpetan, aga veel ei pane blogitoru päris hargile. 
Keda huvitavad mu plaanid: 
Arvutialased asjad tahaksin üle viia oma virtuaalpinnale, sest blogikeskkonnas muud asjad hästi ei taha toimida peale JavaScripti, aga praegu jätkan veel siin, ilmselt kusagil aasta lõpuni. Jquery peaks näiteks saama ilusti toimima etc...
Muusika alane töö peab sellel aastal jätkuma (marsid, valsid on plaanis). 
Filosoofiline hädaldamise ja pättide toimetamiste käsitlemise (mõni allakõmmutatud lennuk, mõni torn, etc…) viin miinimumini.
Lihtsalt ei oma mõtet peaga müüri tagumine. Liiga palju inimesi siin Läänemere kaldal endiselt magavad, nagu Alliksaar neid kirjeldas.
Tahaksin edasi mõtiskleda Maa, Kuu, Päikese kolmiksüsteemi üle ning tutvuda Bosnia, Egiptuse ja Ameerika püramiididega. 
… 
Nii et jätkan ja kui maagiline 10 aastat täis on, siis ütlen otsuse: kas kirjutada edasi naiste läbu keskele või lihtsalt asjad sulgeda ja jätta nii nagu on, ühe ajastu kokkuvõttena.