I200:KKK

From ICO wiki
Jump to navigationJump to search


Misasi see programmeerimine üldse on?

Programmeerimine on programmi kirjutamine. Nojah, see on vist niigi selge. Aga misasi see programm on? Üldiselt on programm nagu üli täpsed juhised, kuidas mingit eesmärki saavutada. Lihtsustatult on programm ka pannkoogiretsept: "Võta jahu, piim, suhkur, sool, muna, õli. Vahusta muna, suhkur ja sool. Lisa piim ja jahu ning sega korralikult ära. Aseta pann pliidile, lülita pliit sisse, vala pannile õli. Kuni taigent jätkub: vala kulbiga taigent pannile; oota veidi; pööra kook ümber; oota veidi; tõsta pannilabidaga kook taldrikule;". Panid tähele kui täpselt ma praadimise osa kirjeldasin? See toidu tegemisel ei ole tarvilik, kuna inimene oskab lihtsamad lüngad täita oma elukogemusega, aga arvutitel ei ole elukogemust. Arvuteid peab väga spetsiifiliselt juhendama, iga liigutus on oluline.

Arvuti tarkvara kontekstis on tulemuseks mitte pannkook vaid programm, mis toimetab arvutis, internetis või suhtleb kasutajaga. Toome mõned näited. Kõige tuntum programm üldse on tõenäoliselt Windows ise. Muidugi, nii Mac OSX ja iga Linux on samuti programmid. Aga ka Chrome või Firefox on programmid. See wiki, mida praegu loed, on samuti programm. Lühidalt kõik mis ekraanil näed on programmid programmide sees. Kas see on veidi hirmutav? Pole midagi. Meie ei hakka siin operatsioonisüsteemi looma, meie hakkame lihtsaid ja mõnusaid programme kirjutama.

Mida me siin aines õpime?

Programmeerimise alustalasid. Tehniliselt on kõik kirjas ka joonisel, mille leiad pealehelt, aga lisaks ka seda metoodikat, kuidas programmeerimisele läheneda. Kuna projektil on päris suur rõhk, võiks õppeprotsessi lõpuks sul midagi lahedat ka valmis olla.

Mulle ei meeldi matemaatika

Mulle ka mitte. Matemaatikas on kõik nii teoreetiline, programmeerimises lood aga (digitaalseid) füüsilisi asju! Tulemus on silmaga nähtav ja nutitelefonis katsutav.

On levinud arusaam, et programmeerimine on nagu eriti keeruline matemaatika. Ja nagu ikka väärarusaamadega, on neil tõepõhi all. Nimelt programmeerimine kasutab põhikooli matemaatikat. Läks süda rahulikumaks? Hirmus on hoopis see, et programmeerimise põhiline vajalik oskus on loogiline mõtlemine ja see ei ole õpitav. Aga ka see ei ole tegelikult nii hirmus midagi, sest baastasemel on meil seda kõigil ja see on ka treenitav (katse-eksituse meetodil).

Kas programmeerimine ei olegi keeruline?

On küll! Aga mitte sellepärast, mis sa arvad. Programmeerimise põhitõed (need, mida siin aines õpime) on suhteliselt lihtsad, aga need on hoopis teistmoodi, kui oled harjunud mõtlema. Selle jaoks on isegi väljend: "Lähim arengu tsoon" (ingl. zone of proximal development) ja seda kirjeldab järgmine joonis:

Nimelt programmeerimine on sellest tsoonist päris kaugel. See on sisuliselt nagu prantsuse keele õppimine, kui pole seda veel kuulnudki. Nüüd, kui me seda probleemi endale teadvustame, on minul, kui õppejõul, ja sinul, kui tudengil, lihtsam programmeerimise kontseptsioonidega tegeleda. Mina pean olema eriti hoolas, et oskaksin siduda uued teemad kuidagi tava eluga (näiteks pannkoogiretsepti analoogia) ja sina, tudeng, pead olema eriti hoolas, et sa harjutad, otsid lisa informatsiooni kust vähegi saad ja loed-loed-loed, kirjutad-kirjutad-kirjutad koodi!

Nii palju on ju vaja teada, kuidas ma näiteks klaviatuuril kirjutatu omale programmi saan?

Vastus on väga lihtne: kasuta õiget käsku! Õnneks ei pea meie riistvara ja tarkvara vahelist suhtlemist programmeerima, see on meie eest juba tehtud. Javas kutsud välja Scanner objekti ja küsid temalt mida kasutaja on kirjutanud. Samamoodi kui tahad kasutajale ekraanile midagi kuvada on selleks ka vaid üks käsk. Suurem osa tööst on meile juba ette ära tehtud, meie peame vaid klotsid kokku panema. See on nagu Lego, mille igal klotsil on oma tegevus.

Programmeerimine on ju arvuti keel, miks siis arvuti ise ei kirjuta oma programme?

Tegelikult on programmeerimise keeled kirjutatud just inimesele, et meie arvutist midagi aru saaksime. Arvuti peab ekstra vaeva nägema, et meie keelt endale mõistetavaks tõlkida. Lihtsustatult öeldes on see inglise keel. Näiteks on siin koodi jupp ühest mängust, mis sa arvad, et see programm teeb?

Character toomas  new Character()
while (keyboard.isPressed()) {
    if (keyboard.key  'left')
        toomas.liiguSammVasakule();
    }
    if (keyboard.key  'right')
        toomas.liiguSammParemale();
    }
}

"while" käsku nimetame tsükliks, sest mis iganes on tema { loogeliste sulgude } vahel, ta käitab uuesti ja uuesti, nii kaua kuni tema ( tavaliste sulgude ) vahel olev tingumus on tõene, ehk programm on tsüklis. While tsükli { sees } on kaks "if" tingimust. See on samuti formaadis käsk (tingimus) {tegevus}, aga siin ei satu koodijupp mitte tsüklisse, vaid käivitub ainult ühe korra.

Programm siis esiteks loob uue tegelase nimega "toomast" Character toomast new Character(); ja liigutab teda paremale või vasakule niikaua kuni parem või vasak klaviatuuri klahv on vajutatud. Antud kood on veidi lihtsustatud, aga süntaks (grammatika), ehk sulud, semikoolonid ja muud märgid on õigesti paigas.

Kui see programm tööle panna tõlgib arvuti selle esiteks endale masinkeelde ja siis alles oskab ta seda käivitada.

Käin küll loengutes ja teen praktikumides kaasa, aga ikka ei haaku mitte midagi..

Programmeerimist ei ole võimalik õpetada nii, et asi lihtsalt saab selgeks. Erinevalt matemaatikast (ja suurem osa kooli ainetest) ei ole võimalik programmeerimist pähe õppida. Programmeerimist tuleb mõista. Kui piisavalt eesmärgi nimel tegutseda jõuab teema ka lõpuks kohale. Tarkvara arendus ongi selline ala, kus tuleb esiteks palju pimeduses kompida, kuni lõpuks "klikib". Aga rõhutan, et "klikkimine" ei toimu puhtalt õppejõudu kuulates. "Klikkimine" toimub ainult juhul, kui mõtled ise endale ülesandeid juurde, uurid ja katsetad omast vabast ajast. Muide, kui sul lõpuks toimub see ära "klikkimine" anna mulle, õppejõule, teada, mis täpsemalt aitas, et saaks veelgi paremini teisi aidata. Inimesi on meil palju ja igaühel on kuskil temale paras õppimise meetod.

Programmeerimiseks peab olema annet.

Tõsi. Ei vaidle vastu. Tõenäoline on, et kõik ei hakkagi tarkvara arendamist oskama. Aga veel tõenäolisem on see, et kui sa investeerid siia korralikult aega ja vaeva saad sa asjale ikkagi pihta. Pealegi, on tuntud tõde (vähemalt inglise keeles), et oskus võidab talendi.

Lugedes saan koodist aru, aga minul ei tööta

See on tuntud fenomen. Koodi lugemine tihtipeale ongi arusaadav ja lihtne. Kui aga ise kirjutamiseks läheb ei saa mitte midagi aru. Programm ei käivitu, tulevad ainult errorid, ei saa aru ka mis viga. Eks ta ole samuti ka kirjandi kirjutamisega. Üht head kirjandit lugedes saad selgelt aru millest ta räägib ja lugemine on mõnus. Aga püüa ise sellist kirjandit kirjutada ja saad teada, et seal on palju rohkem teadust, kui oskasid arvata.

Mis on parim viis selle probleemi lahendamiseks?

Ma ütleks, et programmeerimine on kunst, sest ühel probleemil on sama palju lahendusi, kui on lahendajaid ekraani ees. Tõenäoliselt on võimalik mistahes programmi paremini kirjutada. Alates Google otsingumootorist kuni meie ÕISini.