Tämä kurssi on jo päättynyt.

Kurssin viimeisimmän version löydät täältä: O1: 2024

Luku 1.2: Ohjelmoinnista

Tästä sivusta:

Pääkysymyksiä: Mitä ovat ohjelmat ja ohjelmointi? Mihin ohjelmoija kirjoittaa ohjelmakoodin? Miten laadittu ohjelma käynnistetään? Miten kurssilla palautetaan ohjelmia arvioitaviksi?

Mitä käsitellään? Ohjelmoinnin perusajatus ja yleisiä piirteitä. Ohjelmoijan työvälineitä: ohjelmointikieli, ohjelmakoodi, sovelluskehitin, pakkaukset ja kooditiedostot.

Mitä tehdään? Luetaan sekä kokeillaan ohjelmointityökaluja. Muokataan annettuja sovellusohjelmia.

Suuntaa antava työläysarvio:? Puolitoista tuntia. Enemmänkin voi mennä, jos asennat samalla ohjelmointityökaluja omalle koneellesi.

Pistearvo: A12.

Oheismoduulit: GoodStuff (uusi), O1Library (uusi), Pong (uusi).

../_images/person01.png

Ohjelmien laatiminen ja ajaminen

Perinteikäs ja hyvä tapa kuvailla tietokoneohjelmointia on verrata sitä ruuanlaittoon. Alla tämä vertaus on vuorovaikutteisena esityksenä:

Ohjelman ajaminen

../_images/computer_as_cook.png

Ohjelmoija määrittää, miten tietokoneen halutaan toimivan ohjelmaa ajettaessa. Esimerkiksi kurssi-ilmoittautumisohjelmaa laativa ohjelmoija voi määritellä tietokoneelle ohjeen: "Kun käyttäjä painaa tiettyä nappia, lisää kyseinen käyttäjä kurssille ilmoittautuneiden luetteloon."

Sovellusohjelman käyttäjällä on käytössään kopio ohjelmasta tallennettuna tietokoneeseensa. Kun hän käynnistää ohjelman, ohjelma ajetaan eli suoritetaan (run, execute). Tällöin tietokone noudattaa sille ohjelmassa ennalta määrättyjä käskyjä.

Esimerkki: Käyttäjä antaa kuvaketta näpäyttämällä tietokoneen käyttöjärjestelmälle käskyn käynnistää tekstinkäsittelysovellus. Tällöin tietokone toimii niin kuin kyseinen sovellusohjelma määrää. Kunhan ohjelmoija on tehnyt työnsä hyvin, niin toiminta on käyttäjän kannalta mielekästä: tekstinkäsittelyä varten avautuu uusi ikkuna, joka reagoi käyttäjän toimiin halutulla tavalla.

Onko käyttäjällä sittenkään aina sovellusta itsellään?

Yllä esitetty kuvaus ohjelman ajamisesta tietokoneessa pätee edelleen monissa tilanteissa ja riittää tämän kurssin tarpeisiin. Kuitenkin uudet tietotekniset suuntaukset ovat jo muuttaneet joidenkin ohjelmien luonnetta.

Vapaaehtoinen lisätehtävä: selvitä internetin avulla, mitä ovat web-sovellus (web application), pilvilaskenta (cloud computing) ja Software as a Service.

Ohjelmointikielet

Kukin tietokoneen toimintaa ohjaava prosessori tekee vain tasan sen, mitä käsketään. Se suorittaa käskyjä yksitellen, järjestyksessä. Toisin kuin reseptiä lukeva ja asiansa osaava kokki, prosessori ei ymmärrä mitään käskyjen merkityksestä ohjelmakokonaisuudessa. Se ei osaa päätellä, arvioida eikä soveltaa. Tietokone on siis pohjimmiltaan tyhmä. Se on kuitenkin nopea, tarkka ja hyvämuistinen.

Ohjelmaa kirjoitettaessa täytyy kuvailla yksityiskohtaisesti ja kirjaimellisesti, mitä tietokoneen halutaan tekevän, kun ohjelma ajetaan. Jotta tämä onnistuisi, on käytettävien ilmaisujen oltava täsmällisiä ja yksiselitteisiä. Luonnollinen ihmisten kieli ei ole täsmällistä eikä yksiselitteistä, eikä sovellu ohjelmointiin: "suolaa maun mukaan", "kunnes on kauniin ruskea".

Ohjelmakoodi kirjoitetaan jollakin ohjelmointikielellä (programming language). Ohjelmointikielet ovat formaaleja eli muodollisia, ja niissä on rajattu määrä hyvin määriteltyjä sanoja ja ilmaisutapoja. Kustakin hyväksyttävästä ohjelmointikielen ilmaisusta voidaan tarkasti sanoa, mitä se tarkoittaa. Vertailukohdaksi voi ottaa vaikkapa kemian molekyylikaavat, joita myöskin säätelevät tietyt tarkat säännöt; ne ovat tosin ohjelmointikieliä yksinkertaisempia.

Erilaisia ohjelmointikieliä on vuosikymmenten aikana kehitetty valtava määrä. Esimerkiksi Wikipediasta löytyy nääin pitkä lista eikä sekään ole missään nimessä kaikenkattava.

Jotkut ohjelmointikielet sopivat paremmin toisiin tarkoituksiin, toiset toisiin. Osa on tarkoitettu yleiskäyttöisiksi, toiset nimenomaan tietynlaisiin tarkoituksiin. Osa on jäänyt historian romukoppaan, toiset porskuttavat vuosikymmenestä toiseen. Uusia kieliä syntyy edelleen, samoin uusia versioita vanhoista kielistä.

../_images/ohjelmointikieliä.png

Eräiden ohjelmointikielten nimiä. Käytämme yhtä näistä kielistä.

Scala, eräs ohjelmointikieli

../_images/scala_logo.png

Scala-kielen logo. Portaikko on italiaksi scala.

Tällä kurssilla käytetään modernia ja monipuolista ohjelmointikieltä nimeltä Scala. Samalla kun käytät Scalaa, opit myös yleisemmistä ohjelmoinnin käsitteistä, joita voit soveltaa muillakin kielillä ohjelmoidessasi. Kokenut ohjelmoija voi opetella uusia ohjelmointikieliä suhteellisen nopeasti.

Tässä kolme Scala-kielistä käskyä esimerkkeinä siitä, miltä kieli näyttää. Käskyjen teemana on (yksinkertainen, kuvitteellinen) kirjanpitojärjestelmä, jossa voi käsitellä yrityksen työntekijöiden tietoja.

val palkattuHenkilo = new Tyontekija("Tea Teekkari", 1992, 3200.0)
palkattuHenkilo.tyoaika = 0.5
palkattuHenkilo.korotaPalkkaa(1.2)

Tätä esimerkkiä ei tarvitse (tai voi) tässä vaiheessa kunnolla sisäistää. Alta voit kuitenkin lukea lyhyen yleiskuvauksen siitä. Siirtele hiiren kursoria vihreäpohjaisten selitystekstien päällä, niin esimerkistä korostuu aina kyseiseen tekstiin liittyvä kohta. Kokeile! Voit myös klikata selitystekstiä, jolloin korostus "jää päälle".

Ensimmäinen rivi luo uuden työntekijän tiedot tietokoneen muistiin. Työntekijällä on nimi, syntymävuosi ja kuukausipalkka.
Toinen rivi asettaa työntekijän puolipäiväiseksi: työajaksi asetetaan 0.5 eli 50 prosenttia.
Kolmas rivi kirjaa työntekijälle 20 prosentin palkankorotuksen.
Näissä käskyissä on käytetty suomenkielisiäkin sanoja. Ohjelmoija voi valita monia ohjelmassa käytettäviä käsitteiden nimiä itse; tähän hän voi käyttää vaikkapa englannin tai suomen sanoja.
Eräät ohjelmatekstin sanat ovat osa Scala-kieltä eivätkä ole Scala-kieltä käyttävän ohjelmoijan itsensä valitsemia. Scala-kielen sanat perustuvat englantiin.

Scala-kielestä opit paljon lisää koko kurssin ajan. Silti kaikkia tämän monipuolisen kielen piirteitä ei käydä läpi kurssilla. Scalaa käytetään myös usealla muulla Aallon ohjelmointikurssilla ja toki myös yliopistomaailman ulkopuolella.

Käytämme Scala-kielen versiota 2.13.1.

Ohjelma — siis mikä?

Jo tässä vaiheessa kannattaa huomata, että sanalla "ohjelma" viitataan kahteen eri asiaan:

  1. Ohjelmatekstiin eli ohjelmakoodiin (program code), joka kuvaa sarjan käskyjä tietokoneen suoritettavaksi.
  2. Ohjelman suoritukseen eli niihin asioihin, jotka tapahtuvat tietokoneen suorittaessa ohjelmakoodin käskyt.

Niinpä voit sanoa laatimastasi ohjelmasta esimerkiksi "Mun ohjelmassa on 15000 riviä ohjelmakoodia." mutta myös "Klikkaa tosta napista niin toi mun ohjelma lähettää tulokset printterille."

Ohjelma on siis toisaalta staattinen, passiivinen kirjoitus tietokoneen halutusta toiminnasta. Toisaalta ohjelma on dynaaminen, aktiivinen prosessi, joka toimii tietokoneessa ja voi vuorovaikuttaa käyttäjien kanssa. Vastaava kaksinaisuus esiintyy monessa muussakin ohjelmoinnin käsitteessä, ja tähän teemaan palaamme vielä kurssin mittaan useasti.

Sovellusohjelma sisältä ja ulkoa

../_images/app_components-fi.png

Loppukäyttäjä ja sovellusohjelman osia

Sovellusohjelmassa voidaan nähdä kaksi pääosaa:

  • Käyttöliittymä (user interface eli UI) eli ohjelman ulospäin näkyvä tai muuten havaittava osa, jonka kanssa sovelluksen käyttäjä voi vuorovaikuttaa. Nykyaikaisissa sovelluksissa on usein graafinen käyttöliittymä eli GUI (graphical user interface), joka muodostuu ikkunoista, nappuloista yms.
  • "Sisuskalut": malli ohjelman aihepiiristä, ohjelman sisäinen toimintalogiikka. Esimerkiksi tekstinkäsittelyohjelmassa on sisäisesti määritelty, miten oikoluku toimii ja miten dokumentit rakentuvat tekstikappaleista ja otsikoista.

Sovelluksen käyttäjä tietää yleensä (korkeintaan) sen, miten sovelluksen käyttöliittymää käytetään. Ohjelmoijan on sen sijaan pystyttävä kuvaamaan tietokoneelle sekä ohjelman käyttöliittymän että sisuskalujen toiminta. Toisin kuin käyttäjän, ohjelmoijan on myös voitava tarkastella ja muokata sekä sovelluksen dynaamista toimintaa että sen staattista esitysmuotoa eli ohjelmakoodia.

Luvun jäljellä olevassa osassa tarkastellaan kahta valmiiksi laadittua sovellusohjelmaa "sisältä ja ulkoa". Samalla pääset tarttumaan ohjelmoijan työkalupakkiin.

Ohjelmoijan työkaluista

Ohjelmoijat käyttävät erilaisia apuohjelmia, siis toisten ohjelmoijien jo tekemiä ohjelmia, jotka auttavat uusien ohjelmien laatimisessa. Esimerkiksi:

  • Ohjelmakoodi kirjoitetaan ja tallennetaan tiedostoihin jonkin editorin avulla. (Lisää tästä ihan kohta.)
  • Kääntäjä (compiler) on apuohjelma, jolla voidaan automaattisesti muokata ihmisen laatima ohjelmakoodi tietokoneen suoritettavaksi paremmin sopivaan muotoon. (Lisää luvussa 5.4.)
  • Debuggerin avulla voi tarkkailla ohjelman sisäistä toimintaa samalla kun ohjelmaa ajetaan. Tämä on hyödyllistä varsinkin virheitä (eli bugeja) etsiessä ja ohjelmointia opetellessa.
  • Monimutkaista ohjelmaa on helpompi kehittää vähitellen, kun ohjelmoijalla tai tiimillä on apuohjelma versionhallintaan (version control, revision control). (Lisää jatkokursseilla.)
  • Virtuaalikonetta käytetään apuna muun muassa monien Scala-kielellä kirjoitettujen ohjelmien ajamiseksi. (Lisää luvussa 5.4.)

Sovelluskehitin eli IDE

Editori
Kääntäjä
Virtuaalikone
Debuggeri
Versionhallinta
Debuggeri
Kääntäjä
Editori
Versionhallinta
Virtuaalikone

Integroidusti vai erikseen?

Ohjelmoija voi käyttää erillistä apuohjelmaa — editoria, debuggeria jne. — kuhunkin eri tarpeeseen. Toinen tapa on käyttää sovelluskehitintä, apuohjelmaa joka kokoaa yhteen ohjelmien kehitystyössä käytettäviä työkaluja. Sovelluskehittimistä käytetään suomeksikin usein nimitystä IDE (eli integrated development environment).

Sovelluskehittimen avulla voi myös kätevästi jakaa tuotetun ohjelmakoodin haluamallaan tavalla erillisiin moduuleihin eli osioihin. Tämä helpottaa lukuisten kooditiedostojen käsittelemistä.

Sovelluskehittimen käyttöä suositellaan tällä kurssilla, ja tämä materiaali on muotoiltu sen oletuksen pohjalta, että käytät erästä sovelluskehitintä.

IntelliJ IDEA

../_images/ij_logo.png

IntelliJ’n logo.

Kurssin virallisena ohjelmointityökaluna käytetään IntelliJ IDEA-nimistä sovelluskehitintä. Kutsumme sitä lyhyemmin vain IntelliJ:ksi.

Kokonaisuutena IntelliJ on monipuolinen ja monimutkainen kuten monet muutkin IDE:t. Tällä kurssilla käytämme kuitenkin vain pientä osaa sen toiminnoista.

IntelliJ’hin on saatavilla mitä erilaisimpia lisäosia (plugin), joilla sen toiminnallisuutta voi laajentaa. Käytämme sen Scala-lisäosaa sekä tarkoituksiimme räätälöityä A+ Courses -lisäosaa. Jälkimmäinen helpottaa kurssin ohjelmointitehtävien noutamista ja palauttamista A+:n arvosteltaviksi (ja muutenkin parantaa IntelliJ’n käyttömukavuutta).

Käytämme IntelliJ’n versiota Community Edition 2020.2. Sekä tuo Community Edition että mainitut lisäosat ovat ilmaisia.

Saa tehdä toisinkin

Joillakin kurssin osallistujilla on entuudestaan suosikkityökaluja, joita he ovat käyttäneet aiemmin ohjelmoidessaan. Vaikka käytämme virallisesti IntelliJ-sovelluskehitintä, on sallittua käyttää sen sijaan muuta työkalustoa. Moinen tapahtuu kuitenkin täysin opiskelijan omalla vastuulla, eikä kurssihenkilökunta osaa neuvoa kaikkien muiden työkalujen käytössä. Tehtävien noutaminen ja palauttaminen on myös selvästi vaivalloisempaa ellet käytä IntelliJ’tä A+ Courses -lisäosineen.

Aallon opiskelijat voivat käyttää IntelliJ’tä Aalto IT:n Linux-työasemilla. Niiltä löytyy valmiina IntelliJ’n kurssille sopiva versio.

IntelliJ Aallossa

IntelliJ’n kurssille sopiva versio tarvittavine lisäosineen löytyy ainakin useimmilta Aalto IT:n Linux-työasemilta. Yliopiston tarjoama Linux-ympäristö on kurssin virallinen ohjelmointiympäristö. Voit ohjelmoida näillä koneilla ilman ylimääräisiä etukäteisvalmisteluja.

Huomaa, että ainakaan useimmilla Aallon Windows-koneilla ei ole tarvittavia ohjelmia asennettuna.

Aallon virtuaalinen Linux-työpöytä

Aalto tarjoaa opiskelijoilleen virtuaalisia työpöytiä, joilla voit käyttää Aallon tietokoneiden ohjelmia verkon välityksellä. Sujuvammin IntelliJ’n käyttö yleensä käy, kun IntelliJ on asennettu juuri käyttämällesi koneelle, mutta tässä kuvattu virtuaaliympäristö (VDI) on kuitenkin kelpo varavaihtoehto.

Pääset virtuaalityöpöydän ääreen seuraamalla Aallon yleisiä ohjeita. Työpöytää voi käyttää joko erillisen apuohjelman (VMware Horizon Client) tai web-selaimen kautta (vdi.aalto.fi). Näistä ensimmäinen toimii tyypillisesti vähän sulavammin.

Aallon virtuaalityöpöydistä Ubuntu 18.04 on se, johon on asennettu IntelliJ ja sen A+ Courses -lisäosa, joten valitse se, kun käynnistät työpöydän. Tämän jälkeen voit seurata alla olevia ohjeita käynnistääksesi IntelliJ’n.

IntelliJ omalle koneelle

Jos haluat ohjelmoida omalla koneellasi, sinun täytyy itse asentaa IntelliJ lisäosineen. Tästä on ohjeita erillisellä sivulla. Kun noudatat tuon sivun ohjeita, saat juuri oikeat version itsellesi.

Lue tätä kurssimateriaalia tästä eteenpäin koneella, jolla voit käyttää IntelliJ’tä.

Jos käytät IntelliJ’tä omalla koneellasi ja olet juuri asentanut sen ohjeemme mukaisesti, voit ohittaa seuraavan osion ja siirtyä suoraan osioon Valmiina annetut ohjelmat tällä kurssilla alempana tällä sivulla.

Ensimmäinen IntelliJ’n käynnistyskerta

Ensimmäisellä IntelliJ’n käynnistyskerralla on tarpeen tehdä asetuksia IntelliJ’n sujuvaa kurssikäyttöä varten. Se käy seuraavasti.

IntelliJ käyntiin

Aallon IT-palvelukeskuksen Linux-koneilla IntelliJ löytyy valikosta nimellä IntelliJ IDEA. (Jos ei löydy, käynnistä se avaamalla Terminal-ikkuna ja kirjoittamalla sinne idea. Viimeistään ensimmäisen käyttökerran jälkeen IntelliJ’n pitäisi löytyä myös valikosta.) Muissa ympäristöissä IntelliJ käynnistyy esimerksi Start-valikosta tai näpäyttämällä asennushakemistosta löytyvää komentotiedostoa (nimeltään Idea, idea64.exe tai vastaava).

Ensimmäisellä käynnistyskerralla IntelliJ kysyy käyttötilastojen jaosta ja vanhojen asetusten palauttamisesta. Voit valita Do not import settings ja painaa OK.

Seuraavissa ruuduissa voisit tehdä erinäisiä asetuksia, mutta älä muuta niitä nyt. Valitse vain Next pariin kertaan, niin päädyt Featured Plugins -ruudulle.

Paina Start using IntelliJ IDEA. IntelliJ ehdottaa nyt, että luot tai valitset ns. projektin, jonne laatimasi ohjelmat tallennetaan. Valitse New Project. Valitse aukeavassa ikkunassa Empty project ja paina Next.

Syötä seuraavan ikkunan kohtaan Project name kurssiprojektillesi jokin kuvaava nimi (esim. o1, o1ohjelmat tai ScalainenKansio). Kirjaa Project location -kohtaan sijainti kansiolle, johon haluat tuon projektin tiedostot. Ehdotettu oletussijainti kelpaa, jos et tiedä haluavasi muokata sitä.

Paina Finish. IntelliJ käynnistyy ja näyttää päivän vinkin, jonka voit sulkea. Esiin jää Project Structure -ikkuna.

Edessäsi on nyt tämänkaltainen näkymä:

../_images/ij_preconfig.png

JDK-työkalupakki osaksi IntelliJ-projektia

IntelliJ’ssä ohjelmoidessasi tarvitsesi JDK:ksi kutsuttua työkalupakkia. Sen asennus käy seuraavasti.

Esillä pitäisi olla Project Structure -ikkuna. (Jos hukkasit sen jonnekin, löydät sen uudestaan File-valikosta.) Valitse tuossa ikkunassa Project Settings -otsikon alta Project.

Näet Project SDK -pudotusvalikon. Löytyykö tuosta valikosta OpenJDK 11?

  • Jos sattuu löytymään, valitse se.
  • Jos ei löydy, valitse pudotusvalikosta Add SDK → Download JDK. Kenttään Vendor tulee AdoptOpenJDK (HotSpot) ja kenttään Version tulee 11.0.8. Voit valita itse, mihin JDK ladataan; oletussijainti käy hyvin. Paina lopuksi Download, jolloin IntelliJ noutaa tuon työkalupakin.

Voit sulkea Project Structure -ikkunan painamalla OK.

A+ Courses -lisäosa

Valmistele kurssiprojektisi näin:

  1. Valitse IntelliJ’ssä A+ → Turn Project Into A+ Course Project.
  2. Esiin tulee pieni ikkuna. Valitse kielivalikosta Finnish. IntelliJ ilmoittaa samalla muokkaavansa asetuksia kurssille sopiviksi. Paina OK hyväksyäksesi.
    • Tuo kielivalinta vaikuttaa vain siihen, kummat kieliversiot eräistä kurssin alkupään tehtävistä palautat. Tätä suomenkielistä oppikirjaa lukevien on syytä valita Finnish. IntelliJ-ympäristö on joka tapauksessa englanniksi.
  3. IntelliJ ehdottaa uudelleenkäynnistystä, jotta asetukset tulevat voimaan. Paina Yes, ja IntelliJ käynnistyy uudelleen. (Saattaa kulua pieni tovi ennen kuin uudelleenkäynnistysehdotus ilmestyy.)
  4. IntelliJ’n ikkunan oikean reunan A+ Courses -välilehdeltä löytyy nyt O1-kurssin sisältöä, jota tarvitset myöhemmin.

Pääsyavain tehtävien palauttamiseen

Jotta IntelliJ voi palauttaa tehtäviä A+:n arvioitaviksi, on sille annettava lupa toimia nimissäsi A+:ssa. Lisää luvan antava "pääsyavain" (API Access Token) näin:

  1. Avaa selaimessa oma profiilisivusi A+:ssa.
  2. Kohdassa API Access Token / API-pääsyavain on pitkä merkkijono. Kopioi se leikepöydälle. (Älä kerro tuota henkilökohtaista pääsykoodiasi muille.)
  3. Valitse IntelliJ’ssä A+ → Set A+ Token.
  4. Laita avain sille varattuun kenttään ja paina OK.

Valmiina annetut ohjelmat tällä kurssilla

Tällä kurssilla tehdään usein näin: otat jonkin enemmän tai vähemmän valmiin ohjelman, jota tutkit. Usein sinun tulee myös jatkokehittää tai muuten muokata annettua ohjelmaa.

Paitsi että pääset näin oppimaan esimerkkien kautta, niin tämä on tyypillinen tilanne myös ammattiohjelmoijalle. Ohjelmoija ei läheskään aina aloita puhtaalta pöydältä vaan muokkaa jotakin olemassa olevaa järjestelmää tai käyttää olemassa olevaa ohjelmakoodia osana uutta ohjelmaa.

GoodStuff-ohjelmasta

Haetaan nyt tarkasteltavaksi GoodStuff-muistikirjaohjelma. GoodStuff on tätä kurssia varten laadittu esimerkkisovellus, johon käyttäjä voi kirjata kokemuksiaan ja niille antamiaan arvosanoja. Kokemukset voivat olla vaikkapa hotelleja, joissa käyttäjä on asunut.

GoodStuff on annetussa muodossa varsin alkeellinen ja puutteellinenkin. Se on kuitenkin kehityskelpoinen, ja ennen kaikkea se sopii monen ohjelmoinnin käsitteen esittelemiseen. Palaammekin tähän sovellukseen vielä useita kertoja tulevissa luvuissa.

Vaikka nyt kurssin alussa ei vielä olekaan riittävästi tietoa ohjelmoinnista GoodStuff-sovelluksen ohjelmakoodin ymmärtämiseksi, voimme jo hieman tutkia sitä. Näin saat kokonaiskuvan siitä, miltä ohjelma näyttää IntelliJ’ssä ja miten sitä voi käsitellä. Tässä luvussa tehdään seuraavaksi näin:

  1. Noudetaan GoodStuff-sovellus IntelliJ’hin.
  2. Katsotaan yleisellä tasolla, millaisiin osioihin sovellus on jaettu.
  3. Ajetaan sovellus IntelliJ’stä käsin ja kokeillaan, mitä sovelluksella voi tehdä.
  4. Kurkistetaan hieman sovelluksen ohjelmakoodiin ja korjataan siitä pienen pieni virhe.

Ohjelma IntelliJ’ssä

../_images/ij_apluscourses.png

Oikean reunan A+ Courses -napilla löydät kurssisisältöä.

IntelliJ’ssä ohjelmat jäsennetään moduuleihin. Ohjelmoija voi koota moduuliin tiedostoja ja asetuksia, jotka kuuluvat yhteen. O1-kurssin esimerkkiohjelmat ja ohjelmointiharjoitukset ovat tarjolla moduuleina. Suuremmat ohjelmat voivat koostua useasta moduulista.

Kurssimoduulin noutaminen IntelliJ’hin

Huomaa oikean reunan A+ Courses -nappula, jolla saat esiin luettelot kurssin moduuleista ja tehtävistä. Kokeile. Sama nappula piilottaa nuo luettelot, jos haluat ne välillä pois näkyvistä.

Valitse nyt Modules-luettelosta GoodStuff-niminen moduuli. Napsauta sitä kahdesti, niin IntelliJ lataa moduulin verkosta ja tuo sen käyttämällesi tietokoneelle.

../_images/ij_modules.png

Kaksi moduulia IntelliJ’n Project-välilehdellä.

Moduulit ja pakkaukset

GoodStuff-moduuli näkyy nyt Project-välilehdellä IntelliJ’n vasemmassa laidassa.

../_images/ij_files.png

GoodStuff-sovelluksen ohjelmakoodi on neljässä tiedostossa.

Lisäksi kurssiprojektistasi löytyy jo moduuli O1Library. Tarvitset sitä koko kurssin ajan. O1Library-moduuli sisältää ohjelmointityökaluja, joita useat kurssilla käytetyt ohjelmat (mm. GoodStuff) tarvitsevat toimiakseen. Voit jättää sen nyt muuten huomiotta.

Selaile Goodstuff-moduulin tiedostoja Project-välilehdellä. Neljä tiedostoa määrittelevät GoodStuff-ohjelman: CategoryDisplayWindow.scala, GoodStuff.scala, Category.scala ja Experience.scala. (IntelliJ näyttää nimet ilman .scala-päätettä.)

Mainitut tiedostot jakautuvat pakkauksiin (package). Voit ajatella pakkausten olevan Scala-kielen vastine tiedostokansioille. Ne helpottavat varsinkin isompien ohjelmien jäsentämistä ja toisiinsa liittyvien osien ryhmittelyä kokonaisuuksiksi. Pakkauksilla voidaan esimerkiksi ryhmitellä käyttöliittymä ja aihealueen malli omiksi kokonaisuuksikseen.

GoodStuff-ohjelman neljästä osasta: Experience ja Category kuvaavat ohjelman "sisuskaluja" eli muistikirjaan kirjattavia kokemuksia ja niiden kategorioita. Ne on tallennettu suoraan pakkauksen o1.goodstuff sisään. Kaksi jälkimmäistä osaa liittyvät ohjelman käyttöliittymän toteutukseen ja ovat pakkauksessa o1.goodstuff.gui.

Nuo pakkaukset sisältävät siis GoodStuff-ohjelman varsinaisen toteutuksen: ohjelmakoodin. Moduulissa voi olla ohjelmakoodin lisäksi muutakin. GoodStuff ja monet muut O1-kurssin moduulit sisältävät esimerkiksi doc-kansion, joissa on ohjelmaa kuvailevia dokumentteja. Palaamme näihin dokumentteihin myöhemmin (luku 3.2).

Käynnistetään nyt se vihdoinkin

Scala-sovelluksessa on aina jokin tiedosto, joka toimii sen ns. käynnistystiedostona. GoodStuff-ohjelman käynnistystiedosto on pakkauksen o1.goodstuff.gui sisältämä GoodStuff. Etsi se Project-välilehdeltä ja napsauta hiiren oikealla nappulalla saadaksesi esiin valikon. Valitse Run 'GoodStuff'.

GoodStuff-ohjelman käyttöliittymä käynnistyy erilliseen ikkunaan ja näyttää tältä:

../_images/godstuff.png

Koska tämä esimerkkisovellus on tulevissa luvuissa toistuvasti esillä, niin siihen on nyt hyvä hieman tutustua ihan käyttäjänkin näkökulmasta. Kokeile GoodStuff-ohjelman käyttöä hetken ajan: käytä Add new hotel -nappulaa ja syötä parin, kolmen hotellin tiedot (jotka voit vetää hatusta). Huomaa ainakin seuraavat asiat sovelluksen toiminnassa:

  • Tässä yksinkertaisessa sovelluksessa on vain yksi kokemuskategoria: hotellimajoitukset.
  • Sovellus laskee kullekin syötetylle kokemukselle hinta–laatu-suhteen jakamalla arvosanan hinnalla.
  • Sovellus irvistää käyttäjän suosikkikokemuksen ikkunan vasempaan laitaan. Suosikkikokemukseksi katsotaan se, jolla on korkein arvosana.

Sulje lopuksi GoodStuff-ikkuna.

Kurkistus ohjelmakoodiin

Napsauttamalla kooditiedostojen nimiä kahdesti saat tiedostojen sisällön näkyviin IntelliJ’n editoriin. Kokeile!

Kommentit

Yksi silmiinpistävimmistä asioista GoodStuffin ohjelmakoodissa on se, että koodiin sisältyy varsinaisten Scala-kielisten käskyjen lisäksi myös paljon IntelliJ’n vihreäksi tai tummanharmaaksi värittämää tekstiä, joka ei ole Scalaa vaan englantia.

Kooditiedostoihin yleisesti kirjoitetaan mukaan kommentteja (comment) eli selitystekstiä. Kommenteilla voidaan esimerkiksi avata ohjelman osien merkitystä ja käyttötapoja toisille ohjelmoijille. Kommentin kirjoittanut ohjelmoija itsekin hyötyy siitä, kun hän palaa työstämään osin jo unohtunutta ohjelmakoodiaan.

Ohjelmakoodia ei kirjoiteta vain tietokonetta varten!

Kommentit ovat ensimmäinen kohtaamamme osoitus siitä, että vaikka ohjelmat laaditaankin tietokoneiden suoritettaviksi, on tärkeää huomioida myös ihmislukijat. Fiksusti käytettyinä kommentit voivat olla hyvän ohjelmointityylin kulmakivi.

Kommenttimerkinnät Scalassa

Scala-kielessä merkintöjen /* ja */ välissä oleva teksti tulkitaan kommentiksi eikä vaikuta ohjelman toimintaan. Tästä on esimerkkejä pitkin GoodStuffin ohjelmakoodia.

Kaksi kauttaviivaa eli // puolestaan aloittaa kommentin, joka jatkuu rivin loppuun. IntelliJ’n Scala-editori osaa monien muiden ohjelmointityökalujen tapaan automaattisesti värittää kommentit, jotta ne erottuvat muusta koodista.

Tällä kurssilla ei yleisesti ottaen ole pakollista, että itse kirjoitat kommentteja ohjelmakoodiisi. Hyvä idea se voi silti olla. Joka tapauksessa tulet lukemaan paljon valmista koodia, jossa on kommentteja.

Silmäile vähän

Käytä muutama minuutti GoodStuff-ohjelman koodin tutkailuun. Vaikka suurin osa ei olekaan opetetun perusteella ymmärrettävissä — kommenteissakin kun esiintyy tuntematonta ohjelmoinnin termistöä — niin saat käsitystä siitä, miltä Scala-koodi näyttää. Ohjelmassa voi myös hyvinkin olla kohtia, joissa ohjelmakoodi näyttää järkeenkäyvältä tai joiden toiminnan pystyt arvaamaan. Jos kaikki näyttää täysin käsittämättömältä, niin sekään ei tässä vaiheessa haittaa.

Seuraavassa luvussa 1.3 ryhdymme käsittelemään ohjelmakoodiin liittyviä käsitteitä ja Scala-kielisiä käskyjä pieni palanen kerrallaan. Aikanaan pystyt ymmärtämään esimerkiksi GoodStuff-ohjelman koodin ja monimutkaisempiakin ohjelmia, sekä laatimaan omia ohjelmia.

Kokeillaan koodin muokkaamista

Huomasitko muuten kirjoitusvirheen GoodStuff-käyttöliittymäikkunan otsikossa? Siinähän lukee GodStuff!

Tämän korjaamiseen ei vielä kummempia ohjelmointitaitoja tarvita. Korjataan virhe ja kokeillaan samalla ohjelman palauttamista automaattista tarkastusta varten.

Ikkunan otsikko on määritelty GoodStuff-käyttöliittymän ohjelmakoodissa, tarkemmin ottaen tiedoston CategoryDisplayWindow.scala rivillä 35.

Toimi seuravaasti:

  1. Lisää mainitulle riville yksi o-kirjain asiaankuuluvaan paikkaan.
  2. Kokeile, toimiko: käynnistä ohjelma uudelleen GoodStuff-tiedoston oheisvalikosta. Ikkunan otsikon pitäisi nyt olla kunnossa.
  3. Aiotko palauttaa yksin vai parin kanssa? Jos parin kanssa, varmista että olette muodostaneet ryhmän valikon kautta täällä A+:ssa.

Olet valmis palauttamaan ratkaisusi:

  1. Etsi IntelliJ’n oikeasta laidasta jälleen A+ Courses ja sieltä Assignments-osio, joka luettelee kurssin tehtävä viikoittain.
  2. Etsi ykkösviikon GoodStuff-tehtävä. Valitse se. Paina sitten Submit-nappulaa submit luettelon yläpuolella.
  3. Avautuu pikkuikkuna. Valitse palautatko yksin vai parin kanssa. Näet samalla, että IntelliJ tulee lähettämään tarkastettavaksi juuri tiedoston CategoryDisplayWindow.scala. Paina OK.
  4. Näet ilmoituksen, että tehtävä on lähetetty ja palaute tulee myöhemmin. Pienen odottelun jälkeen näet toisen ilmoituksen: palaute on saatavilla täällä A+:ssa.
  5. Pääset palautteeseen IntelliJ’stä helposti linkkiä seuraamalla, jolloin kyseinen sivu avautuu selaimeen. A+ on antanut sinulle automaattisesti palautetta ja tehtäväpisteitä.

Tiedostojen tallentaminen ja palauttaminen IntelliJ’ssä

IntelliJ tallentaa tiedostosi automaattisesti työskennellessäsi ja pitää kirjaa muutosten historiasta. Jos haluat lisävarmistuksen, voit painaa Ctrl+S (Macilla Cmd+S) tallentaaksesi kaikki muutokset kaikkiin avoimiin tiedostoihin, mutta käytännössä tätä ei tarvita.

Jos joskus päädyt tilanteeseen, jossa on tarpeen palauttaa aiempi versio tiedostostasi (eikä Undo riitä), voit klikata tiedostoa tai kansiota oikealla napilla ja valita Local History.

A+ esittää tässä kohdassa tehtävän palautuslomakkeen.

Vinkki: vaihtoehtoisia käynnistystapoja

Edellä mainittiin, että sovelluksen voi käynnistää käynnistystiedoston (kuten GoodStuff tai PongApp) oheisvalikosta. Toinen tapa on valita tuo tiedosto Project-välilehdellä ja painaa Ctrl+Shift+F10.

Jos sinulla on kyseinen käynnistystiedosto (esim. GoodStuff.scala) auki editorissa, voit vaihtoehtoisesti painaa pientä play-kuvaketta vasemmassa marginaalissa (rivillä, joka alkaa sanalla object).

Tulet kurssin mittaan käynnistämään ohjelmia toistuvasti. Käytä mielestäsi luontevinta tapaa.

Yllä mainituissa käynnistystavoissa pitää aluksi valita tai avata käynnistystiedosto. Vaihtoehtoisesti voit painaa Shift+F10, jolloin ajettavaksi valiutuu automaattisesti se ohjelma, jonka viimeksikin ajoit. Tämä on usein kätevää.

Vielä yksi mahdollisuus on pikkuvalikko IntelliJ’n oikeasta ylänurkassa play-napin vieressä. Sieltä voi valita ajettavaksi jonkin aiemmin ajetuista ohjelmista.

Toinen muokkaustehtävä: Pong-peli

Pohjustus

Tutustu vielä toiseen sovellukseen, versioon mailapeliklassikosta Pong.

Scala-kielinen ohjelma löytyy Pong-nimisestä kurssimoduulista. Ota moduuli käyttöön samaan tapaan kuin GoodStuff äsken ja kokeile peliä. Näin:

  1. Etsi Pong-moduuli A+ Courses-välilehden Modules-osiosta ja napauta kahdesti noutaaksesi sen kurssiprojektiisi.
  2. Aja ohjelma: Etsi Project-välilehdeltä pakkaus o1.pong.gui ja sen tiedostoa PongApp.scala. Napsauta sitä hiiren oikealla napilla ja valitse Run 'PongApp'.
  3. Vasemmanpuoleista mailaa liikutetaan W- ja S-näppäimillä, oikeanpuoleista nuolinäppäimillä.

Tehtävänanto, osa 1/2

Pakkauksen o1.pong tiedostossa package.scala on määritelty mm. eräitä lukuarvoja, jotka vaikuttavat Pong-pelin ulkomuotoon ja toimintaan. Avaa sen sisältämä ohjelmakoodi editoriin.

Eräällä tiedoston alkupään riveistä määritellään BallRadius. Vaihda tuolta riviltä luku 10 luvuksi 50.

Käynnistä peli uudelleen. Huomaat muutoksen pallossa.

Tehtävänanto, osa 2/2

Pakkauksen o1.pong tiedostossa Ball.scala on määritelty säännöt, joita Pong-pelin pallo noudattaa liikkuessaan. Eräällä riveistä lukee:

this.velocity = this.velocity.switchY

Tämä käsky saa pallon vaihtamaan suuntaa sen kimmotessa kentän ylä- tai alareunasta. Kommentoi rivi ulos, kuten sanotaan. Siis: kirjoita rivin alkuun kaksi /-merkkiä, jolloin se muuttuu kommentiksi eikä ole enää osa suoritettavaa ohjelmaa.

Käynnistä peli uudelleen.

Onko pelissämme nyt bugi (bug) eli toimintavirhe? No, mehän halusimme muokata siitä tuollaisen, joten kyseessä ei ole bugi vaan ominaisuus (feature).

Palauta muokattu peli arvioitavaksi.

A+ esittää tässä kohdassa tehtävän palautuslomakkeen.

Lisää Pong-leikkejä

Jos haluat, voit kokeilla tehdä muitakin muutoksia annettuun Pong-ohjelmaan. Esimerkiksi:

  • Mitä tapahtuu, jos muutat package.scalasta vaikkapa Sizen ja Thicknessin toisiin lukuarvoihin?
  • Löydätkö package.scalasta kohdan, joka määrittelee, kuinka nopeasti mailat liikkuvat?
  • Löydätkö koodista osia, jotka määräävät piirtämisessä käytettyjä värejä? Onnistutko vaihtamaan niitä?
  • Osaatko vaihtaa näppäimiä, joilla PongApp.scala määrittelee mailoja ohjattavan?
  • Mitä jos PongApp.scala:ssa lukisikin push(Right) eikä push(Up)?

Tehtävän päätteeksi

Jos nautit Pongin vääntelystä ja vääntelyn tulosten ihmettelystä, saatat nauttia myös seuraavasta lainauksesta (joka sisältää myös syvemmän viestin ohjelmien staattisesta ja dynaamisesta olomuodosta):

Yksi fysiikan alkeiskursseilla ensimmäisinä käsiteltävistä asioista on potentiaalienergian ja kineettisen energian välinen ero. Potentiaalienergian voi mieltää energiaksi, joka on varastoituneena vaikkapa akkuun tai mäen huipulle asetettuun kiveen. Kineettinen energia on energiaa, joka on parhaillaan muutostilassa kuten akkuun varastoituneen sähkön liikuttaessa moottoria tai kiven pyöriessä alas mäenrinnettä.


Vastaavasti kun ihminen suunnittelee ohjelman, syntyy potentiaali laskennalle, joka pääsee valloilleen kun ohjelma suoritetaan tietokoneessa. Laskennan voi tuolloin mieltää kineettiseksi, liikkuvaksi.


Aivan kuin papattia kokeileva lapsi voi yllättyä erosta potentiaalisen ja kineettisen energian välillä, myös tietokoneohjelmoijat usein yllättyvät (jopa iloisesti) erosta potentiaalisen ja kineettisen laskennan välillä.


—Gary Flake (käännetty ote kirjasta The Computational Beauty of Nature)

Ohjelmointi aktiviteettina

Päätetään luku pohtimalla, millaista touhua ohjelmointi on.

Ohjelmointi ongelmien ratkaisemisena

Ohjelmoijan työ lähtee tyypillisesti liikkeelle ongelmasta tai tarpeesta, johon etsitään ratkaisua. Alla on muutama esimerkki ongelmista, joita voidaan ratkoa tietokoneen avulla.

  • Halutaan puhua puhelimella internetin yli toiselle puolelle maapalloa.
  • On saatava yritykselle uudenlainen laskutussovellus.
  • Tarvitaan paras reitti kohteeseen autolle. Tai avaruusalukselle.
  • Halutaan laatia malli, joka kuvaa tai ennustaa ihmisten käyttäytymistä sosiaalisessa verkossa, tautien leviämistä, ilmantonmuutosta tai eri sanojen käyttöä menneinä vuosikymmeninä.
  • Halutaan tarjota käyttäjälle mahdollisimman hyviä muita ostossuosituksia, kun hän ostaa tietyn tuotteen verkkokaupasta.
  • Tarvitaan työkalu, jolla voidaan muokata mittausdataa sopivaan muotoon jatkokäsittelyä varten.
  • Halutaan simuloida alkeishiukkasten liikettä ilmiöiden ennustamiseksi.
  • Halutaan simuloida tunteikkaiden siivekkäiden liikettä painovoimakentässä kohti sorkkaeläimiä.
  • Ja niin edelleen. Ja niin edelleen.

Uusia kiinnostavia ongelmia luodaan koko ajan. Niitä luovat ohjelmoijat itse että muut. Tuttuihinkin ongelmiin voi etsiä aina aiempaa parempia ratkaisuja.

Algoritmit

Ohjelmoijat puhuvat usein algoritmeista (algorithm). Lyhyesti kuvailtuna algoritmi tarkoittaa vaiheittaista ratkaisumenetelmää jollekin tietylle ongelmalle. Leivonnankin puolella on algoritmeja, vaikka termiä ei siellä käytetäkään: esimerkissämme mestarileipurin idea siitä, miten kakku pitäisi tehdä, on hänen keksimänsä algoritmi. Hän kirjoitti tämän ajatuksensa muistiin reseptitekstiksi. Vastaavasti ohjelmoija toteuttaa algoritmeja — ongelmien ratkaisuja — ohjelmakoodiin.

Osaongelmien ratkaisuina voi käyttää eri algoritmeja. Esimerkiksi tekstinkäsittelyohjelmassa yhtä algoritmia voidaan käyttää oikolukuun ja toista etsimistoimintoon.

Ohjelmoijana voit keksiä osan käyttämistäsi algoritmeista itse ja soveltaa muiden kehittämiä algoritmeja joihinkin osaongelmiin. Ainakin on keksittävä se, miten osaongelmia ratkovat algoritmit toteutetaan ja yhdistellään tietyssä ohjelmassa.

Minitehtävä: algoritmit ja ohjelmat

Mikä seuraavista pitää parhaiten paikkansa? Huomaa, että saat palautetta oikeista ja vääristä vastauksista. Tehtävistä saatu palaute on osa tämän vuorovaikutteisen oppikirjan tekstiä ja syytä lukea.

Ohjelmoinnin piirteitä

Ohjelmointi on siis eräs ongelmien ratkomisen muoto. Ohjelmoijan tehtäviin kuuluu miettiä, millainen algoritmi (osa-algoritmeineen) sopii annetun ongelman ratkaisuksi ja miten algoritmi kuvataan tietokoneelle ohjelmana. Vastauksia ei käytännössä koskaan ole yhtä ainoaa. Ohjelmoijan onkin vertailtava erilaisia mahdollisuuksia ja pohdittava, miten ohjelmasta saadaan mahdollisimman laadukas: esimerkiksi nopeasti toimiva, käyttäjäystävällinen, turvallinen tai helposti jatkokehitettävä.

Ohjelmoinnissa tarvitaan järjestelmällistä ajattelua, luovuutta ja huolellisuutta. Monen mielestä se on hauskaa aivojumppaa, ja lähes kaikkien mielestä ohjelmoimalla voidaan luoda hyödyllisiä työkaluja ja tuotteita.

Toisin kuin usein kuvitellaan, ohjelmointiin liittyy myös paljon ihmislähtöistä. Vaikkapa ohjelmakoodin jatkokehityskelpoisuutta ja helppokäyttöisyyttä täytyy arvioida inhimillisistä lähtökohdista. Ja tietysti ohjelmia laaditaan ihmisten tarpeita varten.

Ohjelmia on hyvin erikokoisia ja niin on ohjelmankehitysporukoitakin: ohjelmia tehdään niin yksittäisten ihmisten kuin suurten kansainvälisten tiimien voimin. Käytännön ohjelmointityössä ihmisten välinen viestintä on usein huomattavassa roolissa.

Osa ohjelmointia ammattinsa yhteydessä harjoittavista ihmisistä on päätoimisia ohjelmoijia, jotka pyrkivät luomaan laadukkaita ohjelmia kaupallisiin tai muihin tarkoituksiin. Vielä suuremman ryhmän muodostavat muiden alojen ammattilaiset, joille ohjelmointi on työkalu oman alan ongelmien ratkomiseen: talousanalyytikot, sosiaalitieteilijät, lääke- ja geenitutkijat, fyysikot, graafikot, kielitieteilijät, ilmastotutkijat, insinöörit ja muut. Jotkut valjastavat ohjelmoinnin taiteen välineeksi.

Ohjelmoimalla voi laatia työkaluja, jotka helpottavat arjen rutiineja ja tehostavat omaa sovellusten — vaikkapa taulukkolaskennan tai jonkin pelin — käyttöä. Voi jopa sanoa, että ohjelmointi on kasvavassa määrin sivistyneen ihmisen perustaito, joka auttaa hyödyntämään tietotekniikan mahdollisuuksia ja ymmärtämään ympärillämme olevia tietotekniikkaan nojaavia järjestelmiä.

Keksitkö itse jonkin ohjelman, jollaisen haluaisit olevan olemassa? Jollaisen haluaisit itse luoda? Millainen ohjelma tekisi maailmasta paremman?

Yhteenvetoa

  • Tietokoneen ajaessa eli suorittaessa ohjelman se seuraa ohjelmoijan laatimaa ohjeistusta vaihe vaiheelta pilkulleen.
  • Ohjelmointi on luovaa ratkaisujen etsimistä ihmisiä kiinnostaviin ongelmiin.
  • Ohjelmat kirjoitetaan jollakin ohjelmointikielellä, tämän kurssin tapauksessa Scalalla.
  • Kurssilla käytetään IntelliJ-nimistä sovelluskehitintä. Sovelluskehitin kokoaa yhteen useita ohjelmoijan tarvitsemia työkaluja.
    • IntelliJ’ssä voi muun muassa muokata ohjelmakoodia sekä ajaa ohjelman tutkiakseen, miten muutokset vaikuttivat sen toimintaan.
    • Scala-ohjelman osat voidaan ryhmitellä pakkauksiin. Pakkaus voi sisältää useita ohjelman osia omissa tiedostoissaan.
    • IntelliJ’ssä eri ohjelmat voi ryhmitellä moduuleiksi. Moduuli voi sisältää useita pakkauksia.
    • Moniin kurssimateriaalin lukuihin liittyy valmiina tai osittain valmiina annettuja ohjelmia, jotka tarjotaan käyttöösi IntelliJ-moduuleina.
  • Ohjelmakoodi ei ole tarkoitettu vain tietokoneen luettavaksi. Kommentit selventävät ohjelmakoodin merkitystä ihmiselle.
  • Lukuun liittyviä termejä sanastosivulla: ohjelmointi, ohjelma; sovellusohjelma, käyttöliittymä; algoritmi; dynaaminen, staattinen; ohjelmakoodi, ohjelmointikieli, Scala; kommentti; sovelluskehitin eli IDE.

Palaute

Huomaathan, että tämä on henkilökohtainen osio! Vaikka olisit tehnyt lukuun liittyvät tehtävät parin kanssa, täytä palautelomake itse.

Tekijät

Tämän oppimateriaalin kehitystyössä on käytetty apuna tuhansilta opiskelijoilta kerättyä palautetta. Kiitos!

Materiaalin luvut tehtävineen ja viikkokoosteineen on laatinut Juha Sorva.

Liitesivut (sanasto, Scala-kooste, usein kysytyt kysymykset jne.) on kirjoittanut Juha Sorva sikäli kuin sivulla ei ole toisin mainittu.

Tehtävien automaattisen arvioinnin ovat toteuttaneet: (aakkosjärjestyksessä) Riku Autio, Nikolas Drosdek, Joonatan Honkamaa, Jaakko Kantojärvi, Niklas Kröger, Teemu Lehtinen, Strasdosky Otewa, Timi Seppälä, Teemu Sirkiä ja Aleksi Vartiainen.

Lukujen alkuja koristavat kuvat ja muut vastaavat kuvituskuvat on piirtänyt Christina Lassheikki.

Yksityiskohtaiset animaatiot Scala-ohjelmien suorituksen vaiheista suunnittelivat Juha Sorva ja Teemu Sirkiä. Teemu Sirkiä ja Riku Autio toteuttivat ne apunaan Teemun aiemmin rakentamat työkalut Jsvee- ja Kelmu.

Muut diagrammit ja materiaaliin upotetut vuorovaikutteiset esitykset laati Juha Sorva.

O1Library-ohjelmakirjaston ovat kehittäneet Aleksi Lukkarinen ja Juha Sorva. Useat sen keskeisistä osista tukeutuvat Aleksin SMCL-kirjastoon.

Tapa, jolla käytämme O1Libraryn työkaluja (kuten Pic) yksinkertaiseen graafiseen ohjelmointiin, on saanut vaikutteita tekijöiden Flatt, Felleisen, Findler ja Krishnamurthi oppikirjasta How to Design Programs sekä Stephen Blochin oppikirjasta Picturing Programs.

Oppimisalusta A+ luotiin alun perin Aallon LeTech-tutkimusryhmässä pitkälti opiskelijavoimin. Nykyään tätä avoimen lähdekoodin projektia kehittää Tietotekniikan laitoksen opetusteknologiatiimi ja tarjoaa palveluna laitoksen IT-tuki. Pääkehittäjänä on tällä hetkellä Markku Riekkinen, jonka lisäksi A+:aa ovat kehittäneet kymmenet Aallon opiskelijat ja muut.

A+ Courses -lisäosa, joka tukee A+:aa ja O1-kurssia IntelliJ-ohjelmointiympäristössä, on toinen avoin projekti. Sen ovat luoneet Nikolai Denissov, Olli Kiljunen ja Nikolas Drosdek yhteistyössä Juha Sorvan, Otto Seppälän, Arto Hellaksen ja muiden kanssa.

Kurssin tämänhetkinen henkilökunta löytyy luvusta 1.1.

Lisäkiitokset tähän lukuun

IntelliJ’n käyttöönotosta kertova osio perustuu Niklas Krögerin kirjoittamaan ohjeeseen.

a drop of ink
Palautusta lähetetään...