juuni 05, 2016

UML kui koodinikerdajate esperanto ??



Paabeli torni lugu kordub ikka ja jälle erinevates valdades.
Koodinikerdamine ongi suuremalt jaolt lingvistika ja ühise programmeerimiskeele loomise ajalood suurelt jaolt on korranud Paabeli torni ehitamise lugu.
Võimalik, et programmeerimises oleme mingis mõttes sarnases faasis 19. sajandi lõpu Euroopaga keelteoskuse mõttes.
Kes tollal tahtis olla haritud inimene, pidi kindlasti teadma ladina ja kreeka keelt. Lisandusid aga suuremad Euroopa keeled - inglise, prantsuse, saksa. Meie keeleruumis oli vaja veel ka vene keele oskust. Lihtne see ei olnud, võimatu aga ka mitte. Võimalik, et selline mitmete keelte valdamine võimaldas eelmise sajandivahetuse inimestel panna aluse 20. sajandi tehnoloogilisele revolutsioonile (koos kõige heaga ja kõige halvaga).
Tänapäeval laiutab keelte keskel häbenematult inglise keel, küsimata, kas ta ikka on piisavalt ilus või elegantne.
Igasuguse keelteküsimuse lahendab lõppukokkuvõttes hoopis keelteväline küsimus - praegu siis anglo-ameerika impeeriumi domineerimine, kunagi varem Rooma impeeriumi hiilgus.
19. sajandi keelte Paabelis sündis aga üks ilus unistus ja puhtalt tehislik asi nimega Esperanto - “lootev”.
Keele lõi Poola silmaarast L.L. Zamenhof.
Erinevalt kõigist teistest keeltest ja nende grammatilistest õudustest ei ole esperantos (väidetavalt ) rohkem, kui 16 reeglit, mida peab teadma ja mitte ühtegi erandit.
Segadusest sündinud tarve kasvatas selle kummalise tehismoodustise oskajate arvu peaaegu miljonini ja selle juures on see arv püsinud terve sajandi jagu.
Ei ole üldse välistatud, et 21. sajandil lõpuks saab see lootus teoks, panna terve inimkond õppima ja omavahel rääkima esperanto keeles. Ja ülejäänud Paabel jäägu fännidele! (Praegu muidugi on täpselt vastupidi)

Umbes samasugune unistus vaevab praegu programmeerijaid ja üheks selliseks unistamise vormiks on UML - Unified Modeling Language.
Ladina ja kreeka keele analoogideks ehk võiks meie maailmas olla bash ja C, inglise keeleks ehk Java, muud vajalikud keeled C++, C#, Objective C (romaani keelte analoogia), JavaScript, perl, python, ruby ... jpm (Scala, Eiffel, F# ...) 
Praeguses vormis on see unistus ühiskeelest juba ilmselgelt põrunud ja ka võrdluses esperantoga on UML üsna ebamäärane kogum reegleid ja kokkuleppeid.
Hoolimata sellest on vajadus mingise ühise keele järele nii terav, et UML on praegu üsna levinud kastide joonistamise dialekt. Umbes nii nagu demokraatiaga, et hetkel ei ole keegi midagi talutavamat välja mõelnud.
Et asju lõplikult sassi ajada, on vaja arvutit.
Et neid veel lõplikumalt sassi ajada, on vaja UML-i.
Probleem on selles, et ei ole mingit ühtset skeemi, on eri tüüpi skeemid ja juba nende nimetuste hulk tõotab peavalu.
Hoolimata sellest on olemas koguni eestikeelne “UML kontsentraat”, autoriks tuntud guru Martin Fowler, tõenäoliselt parim, mis UML-st üldse saab kirjutada ja see peaks iga progeja laual/peas olema, tahab ta seda või mitte. Vähemalt objekt-orienteeritud maailmas sellest pääsu ei tundu olevat.
Mis kasu võiks UML tuua?
Me räägime erinevates keeltes! 
oli üks natuke nukker tõdemus üle laua minu kolleegilt A-lt.
Kui tuleb asju ajada andmeanalüütikutega, projektijuhtidega, klientidega, peab laual olema midagi, mille kohta on olemas võimalus, et asjaosalised võib-olla saavad sellest midagi aru.
IMHO UML ei ole selleks vist küll kõige paremini välja kukkunud, aga vt. ülalt demokraatiaga võrdlust - ei ole paremat välja mõeldud. Ja ilma on veel hullem.
Selle tõdemusega ma praegu elan. Jõudsin järeldusele, et enne igasuguseid C#, delphi ja Java peensusi on vaja saada selgeks üldised põhimõtted, s.h. UML ja see, kuidas OO süsteeme kavandatakse ja siis tahvlile / paberile joonistatakse.
"UML kontsentraat" muidugi õppimiseks ei sobi. Minule paistab praegu päris hästi sobivat selline OO disainist ja UML-st pajatav raamat -
Raamatuna siis:
Vaadake veel teisi raamatuid sellelt lingilt:
http://modeling-languages.com/list-uml-books/
Nii nagu esperanto keelega pidavat olema, võiks ehk UML oskus hiljem anda plusspunkte mõne teise, reaalse keele õppimisel. Esperantoga on tehtud uurimus, kus väidetakse, et 3 aastat prantsuse keelt ja 1 aasta esperantot annab paremaid tulemusi, kui 4 aastat prantsuse keelt.
Esperanto on lihtne ja seal ei saa teha vigu - UML ei ole (väga) lihtne, kuid seal võib teha vigu ja neid eeldataksegi disaini algfaasis ning diagrammid pigem peavad olema ebatäielikud, sest detailipuru pealekandmisel kaoks UML joonestamisel ära igasugune mõte.

Koos disainimallidega (Design Patterns) peaks UML teadmine andma erinevatele progejatele mingi ühise keele lootuse. Lihtsalt sama projekti kallal töötamine seda ühist keelt ei pruugi anda - ühes projekti osises on ühed detailid, teises osas teised detailid. Nii et isegi konkreetses arendusmeeskonnas võiks skeemide joonistamine abi tuua.
....


Ühesõnaga, UML on siis see kolmetäheline asi, millega praegu tegelen, et enda väärtust koodinikerdajate keskel ülespoole upitada.