.st0{fill:#FFFFFF;}

IT õppimine – 4. semester 

 May 28, 2022

By  Marko Rillo

2020.a. sügisel tulin taas tudengiks. Nüüd on neljas semester TalTech IT Kolledžis IT süsteemide arenduse õppurina möödas ja saab teha tagasivaate.

Patarei oli eelmise semestri lõpuks tühi. Niisiis otsustasin jaanuaris võtta akadeemilise puhkuse ja keskenduda vahelduseks ka tööle ja perele. Akadeemilisel olles saab deklareerida semestriks kuni 18 EAP väärtuses aineid ja juhul kui ühtegi neist ei tee, siis ei juhtu midagi. Saab lihtsalt vajadusel vabalt hinge tõmmata. Selle semestri lõppsaak oligi seega 4 ainet ja 18 EAPd:

  • Python edasijõudnutele (ICS0019) – Einar Kivisalu – 3EAP, valikaine
  • Java (ICD0019) – Märt Kalmo – 6EAP, kohustuslik
  • Operatsioonisüsteemid ja nende haldamine (ICA0001) – Edmund Laugasson – 6EAP, kohustuslik
  • Liikumisharrastuse alused I ja II (MK 3001/3002) – Lilian Valge – 3EAP, vabaaine.

Kirjutan allpool igast neist pisut täpsemalt.

Python edasijõudnutele

Einar Kivisalu juhendatud aine oli minu selle semestri vaieldamatu lemmik. Kivisalu laseb õppeaines teha neli ülesannet, mis kõik on olulise praktilise väärtusega.

Pythoni teegi koostamine

Esimese ülesande raames tuli ise kirjutada Pythoni pakett (teek). Tavapäraselt õpivad kõik progejad oma elu lihtsustamiseks kasutama teiste progejate koostatud koodijuppe, mida saab erinevatest repositooriumitest alla laadida ja vajadusel uuendada. Tihtipeale ei süvene aga enamik arendajatest sellesse, et kuidas need koodijupid hallataval kujul valmis meisterdada ja teistele kasutada anda.

Lähteülesande esimene osa oli lihtne. Tuli kirjutada Pythoni rakendus, mille abil konverteerida geoinfosüsteemis üleilmselt kasutatav WGS84 koordinaatide põhjal määratud asukoht ümber Eestis Maa-ameti poolt kasutatavaks L-Est97 koordinaatidel tuginevaks asukohaks.

Seejärel tuli sellele rakendusele lisada Tkinter abiga lihtne graafiline liides. Kõige lõpuks tuli rakendus paketeerida PyPI testkeskkonda sobivasse formaati, et seda saaksid teised kasutajad omakorda alla laadida ja oma rakendustes kasutada. Minu üllitis on nähtaval ja kasutatav siin.

Pythoni andmebaasihaldur

Teine ülesanne oli koostada rakendus, mille abil hallata andmebaasi loomist, kirjutamist, muutmist ja kustutamist kasutades kahte Pythoni töövahendit – SQLAlchemy ja SQLite.

Ülesanne oli iseenesest lihtne – luua lihtne andmebaas, kus on tabelid, mida saab hallata kas luues objektide-suhete kaardistamist ORM-põhimõttel toimiva SQLAlchemy süntaksiga või siis kirjutades SQLite’is ise SQL koodi, mis haldab rohkem rohujuure tasandil SELECT FROM filtreid ja FOREIGN KEY ning LEFT JOIN käsklusi.

Matplotlib ja Cartopy

Kolmas ülesanne oli joonistada Cartopy abiga Tallinna lennujaamast väljuvate lendude graafik, kus oleksid kuvatud nii enne-koroona kui koroonajärgsed sihtkohad. Ülesandes oli alguses põhjust võtta ette andmefail kõikide maailma lennujaamadega – nende nimetuste, asukohtade, riikide ja linnade tähiste, geograafiliste koordinaatidega. Seejärel tuli võtta ette Tallinna Lennujaamast väljuvate lendude loend aastal 2020 ning teine loend aasta 2022. alguses. Teha pisut andmetöötlust, et massiivist vastavate lennuväljade koordinaadid tuvastada, asetada nad kaardipildile ja see kenasti välja trükkida. Minu sellekohane “teos” on siin all.

Selle ülesande suurimaks väljakutseks oli M1 Maci jaoks andmeanalüüsiga seotud Pythoni teekide paigaldamine, mis ilmselt vajaks eraldi peatükki. Selgus nimelt, et Anaconda, Matplotlib ja Numpy läksid vahelduva eduga konflikti Maci jaoks vaikimisi paigaldatud Python ver. 3.6 versiooniga. Niisiis tuli erinevaid Pythoni versioone küll paigaldada ja uuesti eemaldada. Seejärel mängida erinevate virtuaalsete keskkondadega ja taas nende eemaldamistega. Ma arvan, et selle ülesande lahendamiseks läks mul tehniliste probleemidega tegelemisele ca 80% ajast. Andmeanalüüs ja tulemuste kuvamine oli peale seda käkitegu.

Edaspidiseks kirjutan siia lihtsalt soovituse, mis ehk hoiab aega kokku:

  • Paigalda Python versioon 3.9 – muuda see oma arvutis vaikimisi Pythoni versiooniks, lisades ta arvuti PATHi ja võimalusel eemalda PATHist muud Pythoni versioonid.
  • Juhul kui arvutisse on Conda poolt paigaldatud Proj, Geos ja Shapely, siis eemalda need kõik! Selgub, et pakettide paigaldaja Pip kipub neid olemasolevaid teeke kasutama ning seal on meetodite määratlus pisut teistsugune sellest, et mida Cartopy soovib näha.
  • Paigalda Anaconda ja käivita Conda virtuaalne keskkond.
  • Paigalda Proj. Selle paigaldus võib toimida nii: https://proj.org/install.html conda install -c conda-forge proj conda install -c conda-forge proj-data. Juhul kui kasutad Windowsi, siis on teine alternatiiv kasutada OSGeo4W installerit: https://trac.osgeo.org/osgeo4w/  ja paigalda selle abil üksteise järel Proj, Geos, Shapely. Lase installeril ühtlasi paigaldada kõikvõimalikud dependency’d.
  • Alles seejärel paigalda Cartopy ja impordi Matplotlib.
  • Andmeanalüüs ja graafikute joonistamine alaku – elu on ilus!

Pythoni veebiämbliku koostamine

Viimaseks ülesandeks oli meisterdada lihtne Pythoni veebiämblik, millega saaks hakata avalikelt veebilehtedelt kokku korjama infot, mida kirjutada JSONi faili eraldi töötlemiseks. Lähteülesandeks oli taas antud kaks töövahendit – üks neist Scrapy ja teine Beautiful Soup.

Võtsime kodutöös eesmärgiks veebiämblik tööle panna erinevatel internetipoodide lehekülgedel, kust kraapida kokku tooteinfot ja salvestada seda kohalikku andmebaasi või failidesse.

Beautiful Soup abil toimub veebi kraapimine suhteliselt tekstilähedase Pythoni koodi kirjutamise teel, mille abil tuleb kõigepealt teha haaratava veebilehe HTML-failiga lähemat tutvust ja otsida div-tagide seast elemendid, mida regulaaravaldiste formaadis hakata veebilehtedelt välja filtreerima. Seejärel tuleb kirjutada mõned funktsioonid, millest esimene liigub mööda kraabitavat internetipoe veebilehte ja kogub sealt vajaliku info toodete kohta, teine otsib veebilehe lõppu jõudes üles “next” nupu ning avab rekursiivselt järgmise lehekülje uute toodetega, kolmas puhastab loetud veebilehekülje sisu ebasoovitavast infost ja neljas kirjutab selle faili.

Scrapy üritab seda protsessi automatiseerida. Selle puhul käivitub skript, mis tekitab failistruktuuri, mille ühte elementi tuleb lisada kraabitava veebilehe detailid klassi formaadis. Seejärel lisada väljundina tekkiva faili nimi käsureal ning loota, et skript on piisavalt nutikas ja universaalne, et kõik veebipoest leitav lõpetab loodud failis.

Pythoni kursuse lõpuks õpetas Einar Kivisalu veel Flaski ja Jinja2 süntaksi abil lihtsamate veebilehekülgede tegemist, testimist ja PyDoc dokumentatsiooni kirjutamist. Niisiis – kokkuvõtteks veel: kasulik ja praktiline aine, kus sai juhiste põhjal teha läbi asju, mida kindlasti edaspidi tarvis läheb.

Java

Aasta tagasi kirjutasin 2. semestri peegeldustes kuidas ma ei saanud Märt Kalmo Java õppeaine tempoga sammu pidada. Kuuldes minu saatust, soovitasid mõned kursusekaaslased uuel aastal asendada selle aine Ago Lubergi poolt informaatikutele suunatud ainega ITI0202 – Programmeerimise põhikursus, mis samuti Javat harjutab.

Toona üritasin oma Java teadmisi Codingbati, Helsingi Ülikooli Java MOOCi ja Sololearni abiga turgutada. Tundus, et piisavalt, et 3. semestril sain puhtalt Javal süntaksil tugineva algoritmide ja andmestruktuuride kursusega päris edukalt hakkama.

Seetõttu otsustasin taas Kalmo kursuse juurde naasta. Kalmo näitab alguses kätte Java erinevused Pythonist. Seejärel annab näpunäited Giti, IntelliJ ja automaattestide kasutamiseks. Siis süvenetakse üheskoos andmetüüpide maailma – vaadatakse, et kuidas erinevad primitiivid ja objektid. Tehakse selgeks valiklaused, tsüklid. Siis läheb keerulisemaks. Kogu fookus keskendub objekt-orienteeritud arusaamade omandamisele. Tehakse selgeks klasside pärimine, polümorfism, abstraktsioon ja liidesed. Olulisemad andmestruktuurid. Meetodite ülelaadimine. Seejärel vigade haldus ja erindid. Projekti struktuuride haldamine – moodulid, paketid, klasside struktuuri loomine. Funktsionaalse programmeerimise alused, lambda ja Stream API kasutamine. Mitmelõimeliste programmide kasutamine, sissejuhatus välistesse teekidesse. Kõige lõpuks puudutatakse põgusalt ka Java sugulaskeelt Kotlinit.

Lisaks süntaksile oli Kalmo kursuse käigus üpris süvenenud koodi silumisse. Ehk teisisõnu – kuidas kood muuta nii endale kui teistele edaspidi lihtsalt mõistetavaks. See on mõttemänguna päris huvitav. Koledat koodi on palju lihtsam kirjutada kui ilusat. Sellist, mis moodustab selge struktuuri.

Java ja Programmeerimise põhikursuse võrdlus

Ago Lubergi programmeerimise põhikursust pole ma läbinud. Lihtsalt olen lapanud läbi selle kursuse materjalid ja koduülesanded. Seega ei tugine alltoodud hinnang vahetu osaleja kogemusel. Sellegipoolest – tundub, et kes tahaksid Javaga eriti hästi tuttavaks saada, sel on mõtet võtta nii Kalmo kui ka Lubergi kursus. Ago Lubergi poolt õpetatavast annab vast kõige parema ülevaate tema poolt tehtud populaarne YouTube’i kana nimega TalTech Coding ja avalik Javadoc juhendmaterjal, mis lihtsas eesti keeles selgitab kõige olulisemaid süntaksi nippe.

Kui Kalmo kursusel liigutakse didaktiliselt lihtsamast keerulisemani, siis Lubergi kursusel visatakse osalejad kohe sügavas basseini otsas vette ja kursuse käigus tuleb endal üha uute ülesannete käigus paljud teemad katsetamise käigus selgeks teha. Ago Luberg lisab samuti oma kursusel teises pooles SOLID põhimõtted ja teeb sissejuhatuse olulisematesse disainiprintsiipidesse.

Mitmed Märt Kalmo ülesanded on kas selgelt tehnilised, mis keskenduvad konkreetsele Java teemale või siis kuidagi seotud müügiinfosüsteemidega (nt loe kokku müüdud toodete müügikäibed ja grupeeri need ette antud kategooriate põhjal, loo klientide boonuspunktide haldamise süsteem, võrdle tavaklientide ja kuldklientide oste). Üheks lõbusamaks ülesandeks oli Kalmol Game of Life algoritmi koostamine ja selle visualiseerimine tema poolt kaasa antud GUI abiga.

Ago Lubergi ülesannetes on ülesanded nädalast nädalasse eripalgelisemad – loo loomade varjupaiga infosüsteem, kohviku kaubahaldus, sotsiaalmeedia andmemudel, loomaaia andmebaas, logistika infosüsteem, arvutikaupluse infostruktuur, komplekteeri arvutikomponentide ja koosta Pokemonide konkursi simulaator. Lõpuks avab Ago Luberg Java abiga APIde haldust, kus on võimalik koostada lihtsamaid veebiämblikke ja kirjutada ka plokiahela halduseks mõeldud koodi.

Niisiis kui üldistada, siis Kalmo abiga on võimalik javat õppida lihtsast->keeruliseks->lihtsaks, siis Lubergi lähenemine tundub olevat keeruline->lihtsam->keeruline->lihtsam.

Mõnus võimalus üksteise koodist õppida

Kalmo aine oli ka teistkordsel tegemisel paras pähkel. Õppeaine raames toimus kokku 16 loengut ja 16 harjutustundi. Loengutes oli võimalik kuulata Java programmeerimise baasteooriat, näha erinevaid parimaid praktikaid. Harjutustundides oli harjutamist ja seejärel 12 kohustuslikku ja 6 vabatahtlikku ülesannet. Märt Kalmo on suure osa oma harjutustundidest teinud oma YouTube’i kanalis avalikult kättesaadavaks, mistõttu näpuharjutuste tegemine on kõigile huvilistele vaba.

Uuendusena oli sel semestril kõige sümpaatsem uus võimalus analüüsida mõne ülesande esitamise järgselt kahe kaastudengi koodi ja saada ka oma kirjutatud koodile tagasisidet. See andis võimaluse hinnata, et keegi teine võis probleemi hoopis teise nurga alt lahendada või soovitada kellegi teise koodi analüüsides enda rakursist lihtsamaid viise tulemuseni jõudmiseks.

Alltoodud pildil üks näide kaastudengi poolt minu koodile kirjutatud kommentaaridest.

Java eksam kui tempokas pähkel

Keerulisemaks väljakutseks on aine sooritamisel eksami suur kaal lõpptulemusest. Kuna semestri vältel sooritatu moodustab vaid 20% lõpphindest, siis enda mobiliseerimine 90 minutiks aine eksamit andes on oluline oskus, millega mul on raske toime tulla. Olen koodi kirjutamisel aeglane. Süvenen ja enne kui mingit asja lahendama hakkan, tuleb mul probleem mõttes tükkideks lahti võtta ja alles siis kui suudan selle kontseptuaalselt oma peas ära lahendada asun koodi kallale.

Sellest tulenevalt õnnestus eksam positiivse tulemusega läbida teisel katsel. Esimesel korral jäin ühte ülesannet lahendades kinni piirangutesse, kus ette antud andmete sorteerimise käigus ei olnud lubatud kasutada rohkem kui ühteainsat tingimuslauset või tsüklit. Eksamiks ette antud aja jooksul ei suutnud läbi hammustada pähklit, et kuidas massiivi filtreerimisega toime tulla pelgalt abstraktsiooni abil, mida õppejõud ise oli ülesande kirjelduses soovitanud kasutada. Hiljem kangastus muidugi “ahhaa”-moment, et tegelikult oleks saanud Stream APIga lahendada veelgi lihtsamini.

Teisel eksamikatsel läks paremini – keerulisema programmeerimisülesande puhul tuli luua algoritm, millega käsklustega robotit juhtida kahedimensioonilises ruumis. Programm pidi kõik senised käigud mällu jätma. Niisiis – tester kontrollis, et kas igal hetkel oli võimalik roboti asukohta määrata ja suvaline arv seniseid käike tagasi võtta või mitte. Kuna olin sarnast geomeetriat ja stacki andmetüüpi kombineerivat ülesannet eelmisel semestril juba C# aines läbi mõelnud, siis sellega läks nobedalt. Lihtsam praktiline ülesanne, mis keskendus geneerilistele andmetüüpidele sai testrist pooled punktid ja tulemus käes.

Õppeainele tagasi vaadates on põhjust rahuloluks. Programmeerimise oskus selle käigus kindlasti paranes.

Operatsioonisüsteemid ja nende haldamine

Edmund Laugassoni juhendatud aine eesmärgiks oli õppida Linuxi ja Windowsi süsteemide paigaldamist arvutisse või virtuaalseadmesse. Seejärel infoturvet ja tulemüüre, elementaarset sissejuhatust arvutivõrkudesse, tarkvarahaldust, salvestusseadmete haldust, kasutajate õiguste korraldamist, käideldavust ja dokumenteerimist, süsteemi kui terviku haldust ning IT taristu kui tervikuga toime tulemist.

Üsna oluline osa kursusest moodustas elementaarse Linuxi ja Windowsi käsurea omandamine. Kuidas kirjutada BASH skripte, mille abil tööjaamas või serveris töövoogu lihtsustada.

Õppeaine oli jätkuvalt distantsõppe režiimis. Kuigi selle käigus oli võimalik käia TalTechis koha peal arvutiklassis erinevaid asju katsetamas, siis kuna loengud olid õppejõu poolt üles salvestatud ja materjalid nii TalTech Wikis ja praktikumide materjalid saadaval erinevates Notioni kataloogides vabalt kõikidele huvilistele saadaval, siis kursuse käigus läks põhiline fookus sellele, et kuidas iseseisvalt teemad omandada.

Teemade omandamsieks oli mõistlik endale virtuaalmasinas (Oracle VM VirtualBox abil) püsti panna erinevad Windowsi ja Linuxi installatsioonid ning seejärel asju lihtsalt katsetada.

Õppeaines oli tulemuse saavutamiseks tarvis läbi teha 7 individuaalset testi, mille puhul tuli igaühe käigus 1-tunnise ajapiirangu jooksul anda vastuseid erinevatele valikvastustega küsimustele. Juba kõikide testide positiivse sooritamise korral oli võimalik saada õppeaines positiivne tulemus. Kes soovis oma tulemust parandada, võis sellele lisada ka veel 2-tunnise Moodle’i valikvastustega eksami.

Tagasivaates õppeainele – ennekõike andis see teadmisi kuidas süsteemide turvalisust suurendada ja käsitööoskusi mingite lihtsate ning korduvate ülesannete lahendamiseks.

Liikumisharrastuse alused

Kõige omapärasema otsuse sel semestril võtsin seoses vabaõppe kategooriasse kuuluva õppeainega, millel pole midagi tarkvaraarendusega pistmist. Nimelt saavad TalTech tudengid soodsalt osaleda Männiliiva tänaval paiknevas Spordiklubis toimuvates treeningutes. Tudengitel on see võimalus olemas ka täiesti tasuta. Aga selle eelduseks on deklareerida sport eraldi õppeainena, mis pakub 3 EAPd. Kui juba deklareeritud, siis on kohustus vähemalt 24 korral ennast jõusaali, ringtreeningusse, rühmatrenni või pallimängu treeningule vedada.

Mulle tundus see päris omapärase viisina nügida iseenda kehalist aktiivsust takka ja panna katsetama uusi spordialasid, millega seni kokku pole olnud põhjust puutuda. Rühmatreeningute tunniplaan nägi ette päris huvitava loetelu nimetustest: BodyFit, FatBurn, Endurance, Kõht-selg-tuhar, Mobility Yoga, Vinyasa Yoga. Kuna iga nimetus sisaldas piisava hulga uudisväärtust, siis käisin neid läbi.

Semestri alguses kippus rühmatrennis osalejaid veel koroonapiirangute valguses vähevõitu olevat. Niisiis kippusin ma pisut kontekstiväliselt mõjuma. Nimelt enamik trennikülalistest olid pigem noored rahvusvahelised bakatudengid, kes olid Erasmuse raames TalTechis õppimas. Semestri teises pooles olid saalid juba rohkem täis ja trennidesse tuli ka rohkem minu vanuseklassi kuuluvaid osalejaid.

Minu lemmikuks kujunesid lõpuks erinevad joogatrennid. Kuigi mõni neist tundub esmapilgul pigem füüsiliselt lihtne, siis tasakaalu ja painduvuse arendamine nõuab arvatavast tunduvalt tublimat pingutust. Igatahes – enda mentaalset paindlikkust sai kindlasti erinevate füüsilise paindlikkuse ülesannetega suurendada.

Kehalise aktiivsuse turutõrke adresseerimine?

Huvitav on tagantjärgi see, et veel umbes 10 korda 1-tunnises joogatrennis käies ei paista olevat mitte mingisugust arengut. Siis ühtäkki hakkad muutusi tajuma. Kaelavalu kaob ära. Põlved ei raksu enam kükitades. Selg on palju rohkem lahti. Hingamine on vabam. Üleüldine toonus ja enesetunne mõnusam.

Kogu see kogemus pani mõtlema kehalise aktiivsuse turutõrke peale. Kui keegi oleks mind lihtsalt 9 korral tasuta joogatrenni kaasa tassinud, siis see poleks pannud mind joogas edasi käima. Alles piisava hulga pingutuste möödumisel tekkis tunnetus, et see on mõnus ja mõjub.

Ehk siit suure pildi küsimus – äkki tuleks ka riiklikult kuidagi nügida inimesi füüsilise aktiivsuse suunas, et tekitada neis piisaval hulgal positiivset sõltuvust ja seeläbi vähendada märkimisväärselt suuremaid raviarveid?

Lisaks trennis osalemisele oli selles aines lisaülesandeks osaleda mõnedel TalTechi võrkpalli- ja korvpallitiimi kodumängudel. Koroonajärgsel ajal oli ka kehakultuuri nägemine päris mõnus kogemus.

Kokkuvõttes – kui ka seda ainet uuesti õnnestuks võtta, siis teeks seda kõhklematult.

Semestri kokkuvõte ja siit edasi

Tänaseks on möödunud kaks aastat õpingute algusest. Kogu õppekavast on 20 ainet sooritatud, 9 jäänud veel teha. Punktide osas: 108 EAP-d käes, 72 veel teha. Ehk õppekava moodulite järgi on pilt all:

Seni tegemata ainete seas on küll kaastudengite hinnangul ühed suuremad pähklid, mis eeldavad päris suurt iseseisvat tööpanust – Andres Käveri ICD0021 Hajussüsteemide ehitamine ja ICD0006 Javascript, mis pakuvad kombinatsioonis teadmised full-stack rakenduste loomiseks .NET tagaraamistiku ja React.JS või Angular.JS eesrakenduse põhjal. Samuti seisab veel ees 24 EAP mahus 3-kuuline praktika.

Järgmise – akadeemilisel puhkusel viibitud kevadsemestri kohta saab lugeda siit.

Autorist ...

Marko Rillo on juhtimiskonsultant, koolitaja ja executive coach. Temaga saab ühendust siit

Blogipostitused:

Leave a Reply:

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

{"email":"Email address invalid","url":"Website address invalid","required":"Required field missing"}