Þessi grein er ætluð þeim sem hafa áhuga á að kynna sér hvað það er að forrita, og er búist við því að lesandinn viti lítið sem ekkert um forritun.

Í grunninn snýst forritun um það að leysa vandamál. Vandamálin og hvernig þau eru leyst eru jafn mörg og þau eru mismunandi, en forritarar nýta sér ýmsar aðferðir til þess að einfalda þau, og þeir geta einnig nýtt hluta af lausn á eldra vandamáli til þess að aðstoða við lausnina á því nýja. Þannig byggja forritarar upp stafrænan verkfærakassa af ýmsum nytsamlegum tólum og aðferðum.

Við ætlum að byrja á að taka vandamál og brjóta það niður.

 

BUXUR ERU FLÓKNAR

Ímyndum okkur að þú standir fyrir því vandamáli að klæða þig í buxur, sem er vandamál sem hrjáir marga Íslendinga á hverjum degi, og ímyndum okkur að það eina sem þú kannt er að beita líkamanum á sama máta og þú kannt í dag, það er að segja að hreyfa útlimina. Uppsetningin er eftirfarandi, þú ert buxnalaus og stendur fyrir framan eitt buxna par. Sumir myndu byrja á að segja, „Ég klæði mig í buxurnar.“ en það er eitthvað sem við kunnum ekki, þannig að hvernig getum við sem kunnum að klæða okkur brotið vandamálið niður í einfaldari aðgerðir sem að hægt væri að fylgja eftir? Hugsið um að setja vandamálið upp einsog uppskrift sem hægt væri að fylgja ítarlega skref fyrir skref.

Einfaldasta niðurbrotið væri að segja „Fyrst seturðu hægri fótinn í hægri skálmina á buxunum, síðan seturðu vinstri fótinn í vinstri skálmina“ en eru það nægar leiðbeiningar fyrir einhvern sem veit ekkert um buxur?

Byrjum á því að búa til lista af hlutum sem við vitum að þarf að gera:

➤ Setja hægri fót í hægri skálmina

➤ Setja vinstri fót í vinstri skálmina

➤ Hífa buxurnar upp

➤ Renna upp buxnaklauf

➤ Hneppa tölunni

Þarna erum við með fimm hluti sem þarf að gera sem tilvonandi buxnanotandi gæti fylgt eftir, það er að segja ef hann veit hvað skálm, buxnaklauf og tala er, því fyrir honum eru það mjög tæknileg orð. Nú byrjar notandinn okkar á því að fylgja skrefi eitt en stoppar, því hann kann ekki að setja hægri fót í hægri skálmina. Það eru ekki nægilegar upplýsingar. Við fylgjum sömu aðferð aftur, við tökum vandamálið og brjótum það aftur niður í einfaldari aðgerðir. Núna er vandamálið ekki að fara í buxur, núna er vandamálið að setja hægri fót í hægri skálm á buxum.

Búum til lista sem hægt væri að fylgja fyrir aðeins þá einu aðgerð:

➤ Taktu utan um buxurnar með báðum höndum

➤ Lyftu buxunum örlítið upp

➤ Lyftu hægri fæti upp þannig að hann beygist aðeins

➤ Staðsettu hægri fót fyrir ofan hægri buxnaskálm

➤ Réttu úr hægri fætinum þannig að hann fari inní hægri skálmina.

Hér erum við komin með meiri nákvæmni í þær aðgerðir sem við ætlum að framkvæma og látum það vera í þessu dæmi að fara dýpra, en hægt er mjög einfaldlega að halda þessu ferli áfram, en það verður mjög tæknilegt og nákvæmt á skömmum tíma.

En útfærsla eins og þessi opnar fyrir margar spurningar. Hversu hátt er „örlítið“? Hversu hátt á að lyfta hægri fæti upp? Hvar er rétt staðsetning til þess að vera fyrir ofan buxnaskálmina? o.s.frv. En þetta eru allt góðar og gildar spurningar sem þarf að svara ef á að útfæra þessa virkni. Glöggir lesendur taka líka eftir því að stór hluti þeirra aðgerða sem við skilgreindum fyrir hægri skálmina er hægt að endurnýta fyrir vinstri skálmina, þetta er mikilvægt atriði þegar kemur að góðri hönnun.

 

JÁKVÆTT VIÐMÓT

Til þess að stjórna sjónvarpinu þínu notar þú fjarstýringu og það er nokkuð áhugavert við hlut einsog fjarstýringu sem á við um forritun líka.

Hugsum aðeins um þær aðgerðir sem þú getur gert á fjarstýringunni (dæmið tekur mið af venjulegri fjarstýringu):

➤ Þú getur ýtt á rauða takkan í horninu sem kveikir og slekkur á sjónvarpinu

➤ Þú getur haldið inni plús takkanum hjá hljóðinu til þess að hækka

➤ Þú getur ýtt á SETUP til þess að fara í stillingarmyndina fyrir sjónvarpið.

Og allt þetta hljómar mjög augljóst fyrir þig sem vanur fjarstýringarnotandi en það eru ýmsir hlutir sem þú tekur sem sjálfsögðum hlut, jafnvel bara með hækka og lækka virknina.

➤ Ég ýtti á takkan til þess að slökkva á sjónvarpinu og núna virkar ekki að hækka og lækka

➤ Ég er í SETUP ham og það er lítið tíst sem heyrist þegar ég fer á milli valmöguleika, afhverju virkar ekki að nota hækka takkan til að hækka í því hljóði

➤ Ég lækkaði alveg í neðsta, slökkti á sjónvarpinu og kveiki aftur og afhverju (er það enþá í lægsta)/(er það aftur komið í venjulegu stillinguna.

Þú ert notandi af viðmóti og viðmótið er hannað á ákveðin máta og flest fjarstýringaviðmót eru hönnuð eins. Sama með flest bíla viðmót (stýri, gírstöng, bensíngjöf), lyftu viðmót (listi af hæðum og opna/loka takkar sem virka aldrei) og svo framvegis. En veist þú sem notandi viðmótisins hvernig virknin er á bakvið hvern takka? Hvað gerist í raun þegar þú ýtir á POWER takkan á fjarstýringunni? Hvað gerist í raun þegar ýtt er á bensíngjöfina á bílnum?

Önnur spurning getur líka verið. Er þér ekki bara alveg sama? Svo lengi sem að niðurstaðan sé sú sem þú bjóst við. Þér er sama um hvaða flóknu eða einföldu kerfi eru á bakvið öll þau viðmót sem þú notar á hverjum degi því að þér er bara sama um niðurstöðuna (sem notandi). Smíði góðra viðmóta er eins mikil stærðfræði og hún er list. Mikil hugsun þarf að fara í allar þær aðgerðir sem mögulegar eru og hvað gerist þegar þær eru notaðar, sérstaklega ef þær eru notaðar í mjög skrítinni röð.

Annað sem gott viðmót býður uppá, að hægt er að skipta algjörlega um baklandið. Hægt er að einfalda það, hægt er að bæta við fídusum og einnig er hægt að lagfæra vandamál. Svo lengi sem að upprunalega viðmótið virki enþá einsog það gerði áður.

Þetta er það sem átt er við þegar talað er um að forrit séu vel hönnuð forritunarlega séð, bæði fyrir aðra forritara sem nota þau viðmót sem eru í boði og einnig fyrir þá forritara sem vinna í kerfinu, því þeir búa einnig til góð viðmót fyrir sig og sína samstarfsfélaga til þess að einfalda alla vinnu sem skal gera í kerfinu í framtíðinni.

 

FORRITUN

Nú þegar við erum búin að tala um tvær mikilvægar hugmyndir sem tengjast forritun ætlum við að tala örlítið um forritun beint.

Forritun er sú vinna sem felst í því að skrifa skipanir sem að tölva skilur til þess að hún geri það sem við viljum að hún geri.

Tölvur eru gífurlega heimskar vélar sem þekkja aðeins nokkrar mjög einfaldar aðgerðir einsog að leggja saman tvær tölur, færa tölur frá einum stað yfir á annan og athuga hvort ein tala sé stærri eða minni en núll. Þær hugsa aðeins í tölum en þær gera það gífurlega hratt.

Forritarar hafa byggt upp forritunarmál og stýrikerfi sem bæta upp fyrir einfaldleika tölvurnar með því að bjóða upp á viðmót sem auðvelda líf annara forritara. Þannig að þótt tölvan sé einföld eru til fjöldinn allur af tólum sem hafa þróast í gegnum árin til þess að nýta afl tölvunar.

Forritunarmál virka nokkuð einsog töluð mál nema þau eru mun strangari á stafsetningu og málfarsreglum. Annaðhvort er það sem þú skrifaðir nákvæmlega rétt uppá staf og punt eða hún neitar að hlusta á neitt sem þú hefur að segja. Það er ekkert pláss fyrir ágiskanir hér.

Ef ég myndi búa til gerfi forritunarmál og gerfi kóða til þess að sýna hvernig forrit eru skrifuð og lesin þá gæti það litið einhvernvegin svona út. Línunúmerin eru ekki hér hluti af kóðanum heldur aðeins til þess að vísa í seinna meir.

1. integer number_of_users = 0;
2. integer number_of_countries = 0;
3. number_of_users = get_number_of_users();
4. number_of_countries = get_number_of_countries(america) + get_number_of_countries(europe);
5 if number_of_users == 100
6 {
7. print(number_of_countries);
8. }

Hér er margt í gangi og margt sem þarf að útskýra og ég hef meira að segja sett inní þetta litla forrit nokkrar villur og við skulum einnig tala um þær.

Forrit eru lesin í sömu röð og þau eru skrifuð. Aðgerð í línu númer 1 mun vera keyrð fyrst og lína 2 getur treyst því að lína 1 verður búin með alla sína vinnu áður en kemur að línu 2. Semíkomman í endan á sumum línum táknar að þessi aðgerðaröð er nú búin og má forritið búast við nýrri aðgerð sem kemur fyrri aðgerð ekki beint við.

Línur 1 og 2 eru að búa til hlut sem heitir breyta. Breytur eru leiðir til þess að geyma upplýsingar sem hægt er að skoða svo seinna. Það má ímynda sér breytur sem kassa sem þú hendir hlutum ofaní og svo seinna í forritinu geturu skoðað kassan eða breytt honum eftir vild. Hér búum við til tvær breytur, number_of_users og number_of_countries. Mikilvægt er nöfn á breytum lýsi hvað innihaldið á að tákna en ekki hvað innihaldið nákvæmlega er. Það gengur ekki að skrifa integer seven = 7; því ég get svo breytt innihaldinu í næstu línu og þá er nafnið tilgangslaust.

integer eru heiltölur þannig að við erum að segja að það sé til breyta sem kallast number_of_users af tegundinni integer og hún inniheldur núll. Samansem merkið hér er ekki spurning heldur er notað til þess að setja gildi.

Og einmitt í línum 3 og 4 breytum við innihaldinu til þess að innihalda fjölda notenda og fjölda landa í Ameríku plús fjölda landa í Evrópu.

Þessar aðgerðir ímyndum við okkur að séu hluti af því viðmóti sem við fáum að nota, annaðhvort frá umhverfinu sem við erum í eða frá öðrum forritara.

Hér er möguleg villa, kannski viljum við líka telja fjölda landa í asíu og öðrum heimsálfum. Kannski hefði verið betra að bjóða uppá viðmót sem að býst ekki við af þeim sem notar það að þylja upp allar heimsálfur í hvert sinn.

get_number_of_users og get_number_of_countries eru föll (e. functions) og eru einingar sem framkvæma eina einangraða vinnu og eru tegund af viðmótum. Í get_number_of_users er í raun aðeins ein leið til þess að nota þetta viðmót en í get_number_of_countries er hægt að skilgreina hvaða heimsálfu ég hef áhuga á að fá niðurstöðuna fyrir.

Lína 5 spyr síðan spurningar. Ef gildið sem er inní number_of_users er nákvæmlega 100 þá fer forritið innfyrir slaufusvigana í línu 7 og keyrir þá línu sem að prentar á skjáinn gildið. En ef number_of_users er ekki 100 (annaðhvort hærra eða lægra) þá sleppir hún öllu því sem er innfyrir og heldur áfram fyrir neðan þá, sem er ekkert í okkar tilfelli.

 

NÆSTU SKREF

Nú er búið að skyggnast aðeins inní heim forritunar. Ef þú ert áhugasöm/samur þá mæli ég með eftirfarandi tólum á netinu til þess að læra meira og sem bjóða upp á að forrita sjálfur ýmsar æfingar.

  • Khan Academy bjóða uppá mjög góðan og einfaldan kúrs á netinu þar sem þú getur fylgt eftir leiðbeiningum og forritað á mjög myndrænan hátt.
    .
  • Try Ruby leiðbeiningarnar eru mjög skemmtilegar, fljótar og sýna hversu öflug sum forritunar mál geta verið.
    .
  • Code.org býður upp á einfaldari forritunarkennslu sem er í boði á Íslensku, hannað fyrir yngri notendur en kennir þrátt fyrir það margar góðar hugmyndir.

 

Gangi ykkur vel.

 

Höfundur er Ólafur Waage, forritari

 

Í grunninn snýst forritun um það að leysa vandamál.

Buxur2_ss

Mynd: Shutterstock

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

RemoteControl_wc

Mynd: Wikimedia Commons (Inter Oficial)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Forritun er sú vinna sem felst í því að skrifa skipanir sem að tölva skilur til þess að hún geri það sem við viljum að hún geri.

 

 

 

Forritunarmál virka nokkuð einsog töluð mál nema þau eru mun strangari á stafsetningu og málfarsreglum. Annaðhvort er það sem þú skrifaðir nákvæmlega rétt uppá staf og punt eða hún neitar að hlusta á neitt sem þú hefur að segja. Það er ekkert pláss fyrir ágiskanir hér.