Luku 1.2: Ohjelmoinnista
Ennen kuin jatkat
Olethan jo ilmoittautunut kurssille täällä A+:ssa? (Ei vain Sisussa.)
Jos olet, hyvä homma. Sen kun jatkat tässä luvussa eteenpäin saman tien!
Jos et, käy ensin etusivullamme ja seuraa ilmoittautumislinkkiä sen alussa. Tämä ilmoittautuminen vaaditaan voidaksesi jatkaa tehtävien parissa.
Ohjelmien laatiminen ja ajaminen
Perinteikäs ja hyvä tapa kuvailla tietokoneohjelmointia on verrata sitä ruuanlaittoon. Alla tämä vertaus on vuorovaikutteisena esityksenä:
Ohjelman ajaminen
Ohjelmoija määrittää, miten tietokoneen halutaan toimivan, kun ohjelma ajetaan. Esimerkiksi kurssi-ilmoittautumisohjelmaa laativa ohjelmoija voi määritellä tietokoneelle ohjeen: "Kun käyttäjä painaa tiettyä nappia, lisää tuo käyttäjä kurssille ilmoittautuneiden luetteloon."
Sovellusohjelman käyttäjällä on käytössään kopio ohjelmasta tallennettuna tietokoneellaan. 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ä näpäyttää kuvaketta ruudulla ja antaa näin 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. Uudet tietotekniset suuntaukset ovat kuitenkin 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 kirjoittaessa 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ä.
Scala, eräs ohjelmointikieli
Tällä kurssilla käytämme 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.
Alla on kolme Scala-kielistä käskyä esimerkkeinä siitä, miltä kieli näyttää. Käskyjen teemana on yksinkertainen (ja kuvitteellinen) kirjanpitojärjestelmä, jossa voi käsitellä yrityksen työntekijöiden tietoja.
val palkattuHenkilo = 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".
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; val
on lyhennetty
sanasta "value".
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 3. (Tarkemmin sanoen käytämme Scala 3:n aliversiota 3.3). Vuonna 2021 julkaistu Scala 3 poikkeaa vanhemmasta Scala 2:sta, joten jos luet muita lähteitä, kannattaa pitää silmällä, mistä kieliversiosta niissä on kyse.
Ohjelma — siis mikä?
Jo tässä vaiheessa kannattaa huomata, että sanalla "ohjelma" viitataan kahteen eri asiaan:
Ohjelmatekstiin eli ohjelmakoodiin (program code), joka kuvaa sarjan käskyjä tietokoneen suoritettavaksi.
Ohjelman suoritukseen eli niihin asioihin, jotka tapahtuvat tietokoneen suorittaessa ohjelmakoodin käskyt.
Niinpä voit sanoa laatimastasi ohjelmasta esimerkiksi "Mun ohjelmassa on 15000 riviä koodia." mutta myös "Klikkaa tosta napista, niin 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. Sama kaksinaisuus esiintyy monessa muussakin ohjelmoinnin käsitteessä, ja tähän teemaan palaamme vielä kurssin mittaan useasti.
Sovellusohjelma sisältä ja ulkoa
Sovellusohjelmilla on 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" eli malli (model) 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.)
Ohjelmointiympäristö (IDE)
Kääntäjä
Virtuaalikone
Debuggeri
Versionhallinta
Integroidusti vai erikseen?
Ohjelmoija voi käyttää erillistä apuohjelmaa — editoria, debuggeria jne. — kuhunkin eri tarpeeseen. Toinen tapa on käyttää apuohjelmaa, joka kokoaa yhteen ohjelmien kehitystyössä käytettäviä työkaluja. Tällaisesta apuohjelmasta käytetään suomeksikin usein nimitystä IDE (sanoista integrated development environment; sovelluskehitin tarkoittaa suunnilleen samaa). IDE:ssä voi myös kätevästi jakaa tuotetun ohjelmakoodin haluamallaan tavalla erillisiin moduuleihin eli osioihin, mikä helpottaa lukuisten kooditiedostojen käsittelyä.
Suosittelemme IDE:n käyttöä tällä kurssilla, ja tämä materiaali on muotoiltu sen oletuksen pohjalta, että käytät erästä IDE:tä.
IntelliJ IDEA
Kurssin virallisena ohjelmointityökaluna on IDE nimeltä IntelliJ IDEA. Kutsumme sitä lyhyemmin IntelliJ’ksi; tuttavallisimmat sanovat vain IJ.
Kokonaisuutena IntelliJ on monipuolinen ja monimutkainen kuten monet muutkin IDE:t. Tällä kurssilla käytämme vain pientä osaa sen toiminnoista.
IntelliJ’hin on saatavilla mitä erilaisimpia lisäosia (plugin), joilla sen toimenkuvaa 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 2024.2. Sekä tuo Community Edition että mainitut lisäosat ovat ilmaisia.
Aallon opiskelijat voivat käyttää IntelliJ’tä Aalto IT:n Linux-työasemilla. Niiltä löytyy valmiina IntelliJ’n kurssille sopiva versio.
Saa tehdä toisinkin
Joillakin kurssin osallistujilla on entuudestaan suosikkityökaluja, joita he ovat käyttäneet aiemmin ohjelmoidessaan. Vaikka käytämme virallisesti IntelliJ’tä, on sallittua käyttää sen sijaan muuta työkalustoa. Moinen on kuitenkin täysin opiskelijan omalla vastuulla, eikä kurssihenkilökunta osaa neuvoa kaikkien muiden työkalujen käytössä. Tehtävien nouto ja palautus on myös selvästi vaivalloisempaa, ellet käytä IntelliJ’tä ja sen A+ Courses -lisäosaa.
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ö.
Ainakaan useimmilla Aallon Windows-koneilla ei ole tarvittavia ohjelmia asennettuna. (Jos jostain syystä on tarve käyttää IntelliJ’tä Aallon Windows-koneilla, voit kokeilla OOD-ympäristöä, joka toimii selaimessa; ks. alta.)
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.
Vaihtoehto: IntelliJ selaimessa, ilman asennusta
Aallolla on koekäytössä Open OnDemand (OOD) -niminen ympäristö, jota voi käyttää selaimella ja johon IntelliJ on asennettu. Näin on mahdollista käyttää IntelliJ’tä verkon yli sen sijaan, että asentaisit sen omalle koneelle. Tai ehkä vain haluat kokeilla tätä, vaikka asentaisitkin IntelliJ’n?
Kokeilujemme perusteella IntelliJ toimii OOD-ympäristössä yllättävänkin jouheasti, kunhan verkkoyhteys on kunnossa. OOD on kuitenkin nyt vasta koekäytössä, emmekä voi luvata, että se toimii saumattomasti. Jos kokeilet sitä, otamme erittäin mielellämme vastaan palautetta siitä!
(Huomaa: Muutamissa O1:n alkupään tehtävässä luodaan tietokoneella ääniä, mutta äänet eivät kuulu OOD:n kautta. Nuo tehtävät voi silti läpäistä OOD-ympäristössä, mutta ne ovat tylsempiä.)
OOD-ympäristöön pääsee näin:
Kirjaudu Aalto-tunnuksillasi osoitteeseen https://ood.cs.aalto.fi/.
Valitse sivun yläreunan valikosta Interactive Apps ja esiin tulevasta pudotusvalikosta palvelimeksi IntelliJ IDEA (O1). Istunnon pituudeksi on automaattisesti valittu yksi tunti, mutta voit halutessasi pidentää sitä.
Paina Launch käynnistäksesi istunnon. (Tässä voi mennä hetki.)
Kun istunto on valmiina, valitse Connect to the Container. IntelliJ’n pitäisi avautua selaimessa uudelle välilehdelle
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 saattaa kysyä käyttötilastojen jaosta ja vanhojen asetusten palauttamisesta. Jos näin käy, voit valita Do not import settings ja painaa OK.
IntelliJ toivottaa sinut tervetulleeksi:
A+ Courses -lisäosa
Asenna lisäosa IntelliJ’hin näin:
Valitse IntelliJ’n tervetuloikkunan vasemmasta reunasta Plugins.
Esiin tulee luettelo lisäosista. Kirjoita yläreunan hakukenttään A+ Courses, niin kyseinen lisäosa ilmestyy luettelon kärkeen. Paina Install.
IntelliJ varoittaa, että olet asentamassa kolmannen osapuolen laatiman lisäosan. Paina Accept hyväksyäksesi.
Paina Restart IDE viimeistelläksesi asennuksen.
Mikäli tuota nappulaa ei ilmesty, sulje itse IntelliJ ja käynnistä uudelleen.
Saatat nähdä varoituksen keskeneräisestä "indeksoinnista", mikä ei ole vakavaa.
IntelliJ’n käynnistyttyä uudelleen olet taas Welcome-näkymässä.
Kurssiprojektin pohjustus
IntelliJ ehdottaa, että luot tai valitset ns. projektin, jonne laatimasi ohjelmat tallennetaan. Valitse New Project.
Esiin ponnahtaa New Project -ikkuna, jonka vasemassa reunassa on luettelo erilaisia projektityyppejä. Valitse A+ Courses eli kurssiprojekti ja sitten kurssiksi O1 2024. Paina Next.
Kielivalinta ja JDK-työkalupakki
Sinulla pitäisi nyt olla edessäsi uusi näkymä, jossa voit valita kielen sekä asentaa JDK:ksi kutsutun työkalupakin, jota tarvitset ohjelmoidessasi:
Valitse yläreunasta kieli, jota käytät kurssilla.
(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. Valintaa voi myös muuttaa myöhemmin.)
Samassa näkymässä on JDK-pudotusvalikko. Löytyykö tuosta valikosta versionumero 17?
Jos sattuu löytymään, valitse se.
Jos ei löydy, toimi alla olevien kuvien mukaisesti: Valitse pudotusvalikosta Download JDK. Valitse kentästä Version 17 ja kentästä Vendor esimerkiksi Amazon Corretto. Voit valita itse, mihin JDK ladataan; oletussijainti käy hyvin. Paina lopuksi Select, jolloin IntelliJ noutaa tuon työkalupakin.
Paina Next jatkaaksesi.
Projektikansion luonti
Syötä viimeisen näkymän kohtaan Project Name kurssiprojektillesi jokin kuvaava nimi (esim.
o1
, o1ohjelmat
tai ScalainenKansio
). Kirjaa Location -kohtaan
sijainti kansiolle, johon haluat tuon projektin tiedostot. Ehdotettu oletussijainti kelpaa,
jos et tiedä haluavasi muokata sitä. Paina Create.
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:
Avaa selaimessa oma profiilisivusi A+:ssa.
Kohdassa API Access Token / API-pääsyavain on pitkä merkkijono. Kopioi se leikepöydälle. (Pääsyavain vastaa salasanaa. Älä kerro tuota henkilökohtaista pääsykoodiasi muille.)
Palaa IntelliJ’hin ja etene seuraavasti.
Ikkunan oikean reunan A+ Courses -välilehdellä näet kentän, jossa lukee A+ Token. Liitä avaimesi siihen.
Paina Set.
A+ Courses -välilehden oheen ilmestyy nyt lisää välilehtiä: Assignments, Modules ja News. Tulet käyttämään niitä kurssilla usein.
Valmiina annetut ohjelmat tällä kurssilla
Tällä kurssilla tehdään usein näin: materiaali esittelee jonkin enemmän tai vähemmän valmiin ohjelman, minkä jälkeen itse tutkit sitä ja usein myös jatkokehität tai muuten muokkaat tuota 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.
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.
Vielä emme ole opiskelleet riittävästi ohjelmointia GoodStuff-sovelluksen ohjelmakoodin ymmärtämiseksi, mutta 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:
Noudetaan GoodStuff-sovellus IntelliJ’hin.
Katsotaan yleisellä tasolla, millaisiin osioihin sovellus on jaettu.
Ajetaan sovellus IntelliJ’stä käsin ja kokeillaan, mitä sovelluksella voi tehdä.
Kurkistetaan hieman sovelluksen ohjelmakoodiin ja korjataan siitä pienen pieni virhe.
Ohjelma IntelliJ’ssä
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
Pidä mielessä IntelliJ-näkymän oikean yläkulman A+ Courses -nappula , joka tuo esiin luettelot kurssin moduuleista (Modules) ja tehtävistä (Assignments) sekä kurssiuutisista (News). Sama nappula piilottaa nuo luettelot, jos haluat ne välillä pois näkyvistä.
Valitse nyt Modules-luettelosta GoodStuff-niminen moduuli. (Huom. se löytyy juuri Modules-luettelosta, ei Assignments.) Napsauta sitä ja paina Install, niin IntelliJ lataa moduulin verkosta ja tuo sen käyttämällesi tietokoneelle.
Mitään kauhean näkyvää ei kylläkään vielä tapahtunut, mutta tutkitaanpa tarkemmin.
IntelliJ’n Project-välilehti
IntelliJ’n toisessa reunassa, lähellä vasenta yläkulmaa, on toinen tärkeä nappula . Tällä nappulalla säädät, näkyykö Project-välilehti, jossa näkyy oman kurssiprojektisi sisältö: ohjelmat, joita työstät kurssilla. Ota tuo välilehti näkyviin. (Yleensä se kannattaa pitää näkyvissä jatkossakin.)
Moduulit ja pakkaukset
Juuri noutamasi GoodStuff-moduuli näkyy nyt Project-välilehdellä.
Lisäksi kurssiprojektistasi löytyy jo moduuli O1Library. Tarvitset sitä koko kurssin ajan. O1Library-moduuli sisältää työkaluja, joita useat kurssilla käytetyt ohjelmat (kuten 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ä:
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 harmaaksi 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älinen 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 automaattiseen tarkastukseen.
Ikkunan otsikko on määritelty GoodStuff-käyttöliittymän ohjelmakoodissa. Jos haluat etsiä virheellisen tekstin itse, niin sekin käy, mutta sopii tuo tästäkin katsoa:
Toimi seuravaasti:
Lisää mainitulle riville yksi o-kirjain asiaankuuluvaan paikkaan.
Kokeile, toimiko: käynnistä ohjelma uudelleen
GoodStuff
-tiedoston oheisvalikosta. Ikkunan otsikon pitäisi nyt olla kunnossa.Aiotko palauttaa yksin vai parin kanssa? Jos parin kanssa, varmista että olette muodostaneet täällä A+:ssa valikon kautta ryhmän.
Olet valmis palauttamaan ratkaisusi:
Etsi IntelliJ’n oikeasta laidasta jälleen A+ Courses ja sieltä Assignments-osio, joka luettelee kurssin tehtävä viikoittain.
Etsi ykkösviikon GoodStuff-tehtävä. Valitse se. Paina sitten Submit-nappulaa luettelon yläpuolella. (Tai tuplaklikkaa New submission, joka toimii sekin.)
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.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.
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 napsauttaa tiedostoa tai kansiota oikealla napilla ja valita Local History.
A+ esittää tässä kohdassa tehtävän palautuslomakkeen.
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:
Etsi Pong-moduuli A+ Courses-välilehden Modules-osiosta ja napauta kahdesti noutaaksesi sen kurssiprojektiisi.
Aja ohjelma: Etsi Project-välilehdeltä pakkaus
o1.pong.gui
ja sen tiedostoaPongApp.scala
. Napsauta sitä hiiren oikealla napilla ja valitse Run 'runPong'.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ä
Voit kokeilla tehdä muitakin muutoksia. Esimerkiksi:
Mitä tapahtuu, jos muutat
package.scala
sta vaikkapaSize
n jaThickness
in toisiin lukuarvoihin?Löydätkö
package.scala
sta kohdan, joka määrittelee, kuinka nopeasti mailat liikkuvat?Löydätkö käyttöliittymän (GUI) 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 lukisikinpush(Right)
eikäpush(Up)
?
Tehtävän päätteeksi
Jos nautit Pongin vääntelystä, saatat nauttia myös seuraavasta lainauksesta. Se 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. Tuon laskennan voi 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 (iloisestikin) erosta potentiaalisen ja kineettisen laskennan välillä.
—Gary Flake (käännetty ote kirjasta The Computational Beauty of Nature)
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ä -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 -napin vieressä. Sieltä voi valita ajettavaksi jonkin aiemmin ajetuista ohjelmista.
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ä, ilmastonmuutosta 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 sekä 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
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, ohjelmointi on 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 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 ammattinsa yhteydessä ohjelmoivista ihmisistä on päätoimisia ohjelmistokehittäjiä, 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
Kun tietokone ajaa eli suorittaa 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ä ohjelmointiympäristöä. Tällainen ympäristö, IDE, 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 voi 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; IDE eli sovelluskehitin.
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, Kaisa Ek, Joonatan Honkamaa, Antti Immonen, Jaakko Kantojärvi, Onni Komulainen, Niklas Kröger, Kalle Laitinen, Teemu Lehtinen, Mikael Lenander, Ilona Ma, Jaakko Nakaza, Strasdosky Otewa, Timi Seppälä, Teemu Sirkiä, Joel Toppinen, Anna Valldeoriola Cardó 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, Juha Sorva ja Jaakko Nakaza. 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; sitä 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 suunnitteluun ja toteutukseen on osallistunut useita opiskelijoita yhteistyössä O1-kurssin opettajien 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, Open OnDemand -ympäristöstä kertova puolestaan Ilona Man kirjoittamaan.
IntelliJ’n käyttöönotosta kertova osio perustuu Niklas Krögerin kirjoittamaan ohjeeseen.
Ensimmäinen rivi luo uuden työntekijän tiedot tietokoneen muistiin. Työntekijällä on nimi, syntymävuosi ja kuukausipalkka.