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

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

Usein kysyttyjä kysymyksiä

Tämän sivun osiot

Yleisohjeita ongelmatilanteisiin

Olen jumissa tehtävän kanssa. Mitä tehdä?!

Kysy harjoitusryhmässä, Piazza-palstalla tai Telegram-ryhmässä (ks. luku 1.1) tai etsi netistä apua.

Akuuttien jumitustilanteiden setvimiseen eivät sovi oppimateriaalin lukujen lopuissa olevat palautelomakkeet eikä sähköposti.

Mitä tarkoittaa ruudulle ilmestynyt virheilmoitus X?

Kysy harjoitusryhmässä, Piazza-palstalla tai Telegram-ryhmässä (ks. luku 1.1) tai etsi netistä apua.

Tämä oppimateriaali

Mitä vihreä tausta, harmaa reunus tms. merkintä tarkoittaa kurssimateriaalissa?

Merkintöjä on selitetty paitsi tekstin seassa myös kootusti lukuohjeessa.

Kuinka pitkään kurssin verkkomateriaali on saatavilla?

Tarkoitus on jättää materiaali näkyviin myös kurssin päätyttyä, joten sen pariin voi palata myöhemminkin.

Ohjelmointityökalut

Saanko käyttää muita Eclipse-preferenssiasetuksia kuin kurssin tarjoamia?

Saat, jos haluat ja osaat.

Saanko käyttää muuta ohjelmankehitysympäristöä kuin Eclipseä ja Scala IDE:ä?

Omalla vastuullasi saat, mutta emme tarjoa kurssin puolesta mitään tukea muille sovelluskehittimille tms. Tehtävissä ei ole mitään sellaista, mikä aivan väistämättä pakottaa käyttämään Eclipseä.

Miten voin jakaa Scalalla kirjoitetun sovellukseni toisten käytettäväksi?

Ks. harmaareunainen laatikko luvusta 5.4.

Opiskelijoilta kerätty palaute

Unohdin lähettää pakollisen lukukohtaisen palautteen. Menetinkö luvun pisteet auttamattomasti?

Et.

Jos pääsee käymään niin, että lomake jää ennen deadlinea täyttämättä, täytä se jälkikäteen. Tämä voidaan yksittäisissä tapauksissa hyväksyä, ei toistuvasti.

Aikataulusta

Voisiko tehtäväkierroksen määräajasta tämän kerran joustaa minun kohdallani?

Valitettavasti ei voi (paitsi unohtuneiden palautelomakkeiden osalta; ks. yltä).

Tässä on se ilmeinen periaatteellinen syy, että jos sinun kohdallasi joustetaan, niin pitäisi joustaa vastaavasti lukuisassa muussakin tapauksessa, mikä menee hankalaksi näin isolla kurssilla. Lisäksi deadlinen lykkääminen vaikeuttaisi esimerkkiratkaisujen julkaisemista ja sitä kautta muiden opiskelijoiden työskentelyä.

Väliin jääneitä tehtäväsuorituksia voi paikata kasaan ylempien tehtävätasojen pisteillä, kuten luvussa 1.1 kerrotaan.

Jos en ehdi ajoissa palauttaa tehtäviä, niin voinko tehdä ja palauttaa niitä silti myöhemmin harjoituksen vuoksi?

Voit. Pisteitä ei deadlinen jälkeen saa, mutta automaattista palautetta kyllä.

Mikseivät deadlinet ole harvemmin tai palautusajat muuten joustavampia?

Aiemman vuoden opiskelijan sanoin:

Tulin ajatelleeksi, että on todella hyvä että kurssilla on deadline joka viikko. Muuten kävisi helposti niin, että ohjelmointia lykkäisi aina vain eteenpäin ja kurssin lopulla olisi helisemässä. Nytkin tuntuu välillä että ohjelmointi painottuu alkuviikkoon ennen deadlinea... mutta työmäärä ei vielä tapa.

Hamassa menneisyydessä meillä oli deadlinet harvemmassa ja enemmän tekemistä per deadline(ilta). Se ei toiminut.

Tehtävien pisteytyksestä ja automaattisesta tarkastuksesta

Ohjelmani toimi täysin oikein, mutta automaattinen tarkastin ei antanut pisteitä! Mikä mättää?

On erittäin todennäköistä, että kyseessä ei ole virhe tarkastuksessa vaan jokin virhe palauttamassasi ohjelmassa.

Automaattisesti tarkastetuissa tehtävissä virheeksi luetaan mikä vain poikkeama tehtävänannosta, ja joskus pienikin poikkeama voi estää tarkastinta arvioimasta ohjelmaasi kunnolla, jolloin pisteet voivat jäädä hyvin mataliksi. Joskus kyseessä Voi olla näennäinen "muotoseikka", joka kuitenkin on merkityksellinen (ks. seuraava kysymys alla).

Lue huolellisesti tarkastimen antama palaute ja tehtävänannon yksityiskohdat. Tarkista oikeinkirjoitus ja isot ja pienet kirjaimet. Varmista, että olet palauttanut oikean tiedoston etkä esimerkiksi jotakin muuta saman projektin tiedostoa tai vanhaa versiota ohjelmastasi. Kysy harjoitusryhmässä, Piazza-palstalla tai Telegram-ryhmässä (ks. luku 1.1).

On toki mahdollista, että tarkastimessakin on virhe. Korjaamme tarkastimia kyllä, jos aihetta ilmenee; siinä tapauksessa annamme tarpeen mukaan lisäpalautuksia tai kirjaamme sinulle pisteitä jälkikäteen.

Laadin pyydetyn luokan täysin oikein, mutta muutin muuttujien/metodien nimiä. Miksen saanut automaattiselta tarkastimelta pisteitä?

Tehtävänannoissa pyydetään toteuttamaan luokkiin muuttujia ja metodeita, jotka ovat osa noiden luokkien julkista rajapintaa. Myös muuttujien ja metodien nimet (ja parametrityypit) kuuluvat rajapintaan, sillä luokan käyttäjän on tiedettävä ne. Nimiä ei voi mielivaltaisesti muuttaa vaikuttamatta siihen, miten luokkaa käytetään. Spesifikaation perusteella laaditun ohjelmakomponentin toiminta ei ole "täysin oikein", ellei se toteuta määrättyä rajapintaa nimineen kaikkineen.

Kurssimme tapauksessa laatimiasi luokkia käyttää tarkastinohjelma. Se ei pysty käyttämään niitä ollenkaan, jos nimet eivät vastaa spesifikaatiota. Älä muuta julkisten muuttujien tai metodien nimiä äläkä poista tai edes lisää tällaisia julkisia osia.

Laadittaviksi määrättyjen luokkien yksityiset osat voit nimetä haluamallasi tavalla. Niitä voit myös lisätä vapaasti.

Tulkitseeko automaattinen tarkastin ylimääräiset muuttujat tai metodit virheiksi?

Ks. edellinen vastaus.

Tarkastimemme eivät kaikissa tehtävissä sakota ylimääräisistä julkisista osista, mutta vältä niitä kuitenkin. Osassa tehtävistä tarkastimet myös valvovat, ettei ylimääräisiä julkisia osia ole.

Sain täydet pisteet automaattisesta tarkastuksesta, mutta tiedän, että ohjelmani toimii väärin eräällä syötteellä. Menetänkö pisteet myöhemmin?

Et menetä.

Automaattinen tarkastus ei ole täydellinen. Pyydämme ilmoittamaan tällaisista tapauksista esimerkiksi luvun palautelomakkeella tai muuta kautta, jotta voimme parantaa tarkastinta.

Tahalliset tarkastimen harhautusyritykset ovat toki kiellettyjä ja voivat johtaa pistemenetyksiin.

Jotkin [kurssin alkupään] tehtävistä tuntuvat olevan ratkaistavissa vain kopioimalla annettu koodi ja katsomalla vastaus. Onko tässä järkeä?

Nekin tehtävät tarjoavat mahdollisuuden oppia. Kieltämättä ne tarjoavat myös mahdollisuuden olla oppimatta. Panostamme siihen, että opiskelijat motivoituvat käyttämään ensin mainitun mahdollisuuden. Suurin osa kurssin pisteistä joka tapauksessa tulee muunlaisista tehtävistä.

Luonnollisista kielistä

Miksi kurssilla käytetään suomea? / Miksi kurssilla käytetään englantia?

Kielikysymys puhuttaa aina. Toisaalta opiskelijapalautteessa on valiteltu suomenkielisten nimien käyttöä joissain koodiesimerkeissä ja suomenkielisten termien "turhuutta", toisaalta on pidetty dokumenttien englanninkielisyyttä haasteena ja kommentoitu esimerkiksi näin:

Kannattaa ottaa huomioon, etteivät kaikki ole ehkä niitä maistereita enkussa, ja pitää vaatimuustaso siinä määrin kuitenkin alhaisena.
Aiemmin olen opetellut ohjelmointia ainoastaan englanninkielisiltä nettikursseilta. Tämä suomen kielellä opiskelu on huomattava etu, enkä ole enää ymmärtämisen rajamailla.
Osaltaan käsitteiden ymmärtäminen englanniksi on helpompaa, toisaalta taas kääntäminen suomeksi pakottaa miettimään käsitteiden perusteita.
Konstruktori kuulostaa aika rumalta anglismilta. Itse olen tottunut käyttämään rakentaja-termiä.

On totta, että ohjelmistoprojekteissa usein suositaan englantia ja monet hyvät lähteet ovat englanninkielisiä. Ohjelmoinnin englantia tulee siksi tarkoituksella vastaan tälläkin kurssilla. Toivottavasti tästä ei ole muodostunut kenellekään kynnyskysymystä.

Varsinkin näin peruskurssilla on aloittelijan etu, että ohjelmoijan valitsemat nimet voidaan välillä erottaa itse ohjelmointikielen sanoista helposti.

Joka tapauksessa tästä suomenkielisestä kurssimateriaalistahan on tämän suomenkielisen lisäksi olemassa myös kokonaan englanninkielinen versio.

Entä ovatko suomenkieliset ohjelmointitermit turhia?

Uskommeko, että kieli on keskeinen ajattelun väline? Että äidinkieli on oppimisen kannalta tärkeä? Että suomi ansaitsee paikan akateemisessa kielenkäytössä? Että suomi yleensäkään on tärkeä asia ja kannattaa pitää elossa? Että tietotekniikka on ala, joka ansaitsee omat terminsä myös suomeksi siinä missä muutkin alat? Haluammeko miettiä kielen ja kulttuurin yhteyksiä, kuten vaikkapa Hesarin sivuilla ovat tehneet kirjailija Sofi Oksanen ja kielentutkija Janne Saarikivi? Ehkä pelkäämme jopa, että sivistyksemme on jo kärsinyt "kielipuolisuudesta"?

Tällä kurssilla voit käyttää suomen- tai englanninkielisiä termejä oman valintasi mukaan, eikä sinua teilata, teit kummin vain. Kannattaa kuitenkin uhrata asialle muutama ajatus.

Kurssin opettaja ainakin pyrkii suosimaan suomenkielisiä termejä, mutta päästelee kyllä sekaan englanninkielisiäkin menettämättä yöuniaan.

Yksiä voi huolestuttaa ja toisia lohduttaa tieto, että monilla jatkokursseilla englanninkielistä materiaalia on verrattain paljon Ohjelmointi 1 -kurssiin verrattuna.

Scalasta

Onko Scala yleisesti käytetty ohjelmointikieli?

Suhteessa sattumanvaraiseen ohjelmointikieleen: kyllä.

Suhteessa maailman kaikkein yleisimmin käytettyihin kieliin (joita ovat mm. Java, JavaScript, C, C++): ei.

Käyttäjiin lukeutuu eturivin tekijöitä, mm. Twitter, PayPal, The Guardian, Zalando, Capital One, Blizzard, Netflix, suomalainen Reaktor, finanssialan yrityksiä, laskennallisen tieteen harjoittajia jne. Pieni luettelo löytyy Wikipediasta.

Miksi kurssille on valittu juuri Scala?

Tähän ei ole yhtä ratkaisevaa "killerisyytä", vaan valinta on tehty monien eri kriteerien perusteella. Kaikki syistä eivät liity vain Ohjelmointi 1 -kurssiin, vaan arvioimme ensimmäisen vuoden ohjelmointikursseja ja Aallon tutkintoja kokonaisuutena.

Seuraavaksi luetelluista Scalan ominaisuuksista kaikki eivät suinkaan toteudu ainutlaatuisesti vain Scalassa. Yksittäiset piirteet voivat toteutua jossain toisessa kielessä paremminkin. Tämä ominaisuuksien yhdistelmä oli kuitenkin houkuttelevin.

  • Scala on moniparadigmakieli, jolla voi ohjelmoida eri tavoilla.
    • Scala sopii funktionaalisen ohjelmoinnin oppimiseen (mitä Aallon kursseilla tehdään erityisesti fuksivuoden keväällä mutta jo tällä johdantokurssilla).
    • Silti se sopii myös imperatiivisen olio-ohjelmoinnin oppimiseen (esim. nyt Ohjelmointi 1:ssä).
    • Ohjelmointikursseillamme on paljon oppimistavoitteita, ja kielen vaihtaminen kesken kurssiputken ei olisi mahtavaa.
  • Scala on "katu-uskottava" kieli, vaikkei aivan kaikkein yleisimpiin lukeudukaan. Sillä on käyttöä ja kysyntää paitsi akateemisessa myös yritysmaailmassa.
  • Scalassa on useaa muuta ohjelmointikieltä johdonmukaisemmat käsitteet ja termit (esim. puhdas olio-ohjelmointimalli toisin kuin vaikkapa Javassa). Tämä on hyödyksi aloittelijoille, ammattilaisohjelmoijille ja muille siltä väliltä.
  • Scalalla monien asioiden ilmaiseminen on varsin yksinkertaista. Monissa muissa kielissä yksinkertaisiinkin asioihin voi joutua kirjoittamaan enemmän koodia.
  • Scalasta on helppo "edetä" yleisimpiin ohjelmointikieliin kuten Javaan. (Suurin haaste saattaa olla motivoitua käyttämään rajoittuneempaa kieltä Scalan jälkeen.)
  • Kielessä on staattinen tyypitys, joka sopii fuksivuoden oppimistavoitteisiimme ja parantaa ohjelmointityökaluja. Scalassa staattinen tyypitys ei kuitenkaan tyyppipäättelyn vuoksi ole samalla tavalla "tiellä" kuin joissakin muissa kielissä.
  • Scalalla on mahdollista luoda pedagogisesti laadukkaita kursseja, joilla edetään yksi asia kerrallaan suhteellisen pehmeästi mutta kuitenkin päästään vaativiinkin aiheisiin.
  • Ohjelmointikursseillemme osallistuu taustatiedoiltaan erilaisia opiskelijoita. Paitsi että sillä voidaan sopivasti käytettynä tarjota pehmeähkö lasku aloittelijoille, niin Scalassa on paljon esim. Pythonilla, C:llä tai Javalla aiemmin ohjelmoineille tuttua, joten he voivat rakentaa vanhan osaamisensa varaan. Toisaalta Scalalla on helppo tarjota näille aiemmin ohjelmoineille uuttakin (kuten polku aiemmin imperatiivisesti ohjelmoinneille funktionaaliseen ohjelmointiin).
  • Scalalla on modernille ohjelmoinnille ja modernille ohjelmoinnin peruskurssille sopiva korkea abstraktiotaso. Esimerkkejä: hyvät alkiokokoelmatyypit, ei manuaalista muistinhallintaa vaan automaattinen roskankeruu.
  • REPL-kulttuuri sopii hyvin perusopetukseen(kin).
  • Eräät yksittäiset Scalan piirteet tukevat oppimista (esim. yksittäisoliot; val vs. var; etc.).
  • Kirjastot ovat laajat ja käyttökelpoiset (osin Javaan nojaten; luku 5.4).
  • Työkalut ja dokumentaatio ovat riittävät. (Joskin tämä on osin ongelmallinen kohta.)
  • Scalalla on jatkokurssien näkökulmasta kiinnostavia ominaisuuksia kuten tehokkuus ja kätevyys esimerkiksi rinnakkaislaskennassa, datatieteessä, palvelinohjelmoinnissa ym.
  • Kurssiemme opettajat tykkäävät Scalasta.
  • Haluamme tarjota jotain vähän erilaista ja tuoretta teille hyville opiskelijoille.

Aallossa Scala on ollut perusopetuskielenä vuodesta 2013, ja kokemukset ovat olleet erinomaisia.

Lundin yliopisto Ruotsissa aloitti opettamaan ohjelmointia Scalalla vuonna 2016; he ovat kertoneet omista syistään.

Onko Scala erityisesti aloittelijoille tai opiskelijoille suunniteltu kieli?

Ei. Scala on nimenomaan ammattikäyttöön suunniteltu ohjelmointikieli.

Scalan käyttö perusopetuksessa on itse asiassa huomattavan harvinaista. Yksi syy on, että kieli ei ole erityisen vanha; vakiintuneita opetuskieliä ei usein vaihdeta, ja aloittelijaystävällistä Scala-oppimateriaalia on suhteellisen niukasti.

Toinen syy on, että monissa oppilaitoksissa johdantokurssien tavoitteet ovat vaatimattomammat tai muuten toisenlaiset kuin tällä kurssilla, jolloin muut ohjelmointikielet voivat olla perustellumpia.

Kolmas on kenties se, että Scala on siinä määrin monipuolinen, että sen valjastaminen opetukseen vaatii poikkeuksellisen huolellista opetuksen suunnittelua.

Voiko Scalaa käyttää web-ohjelmointiin?

Voi. Ks. esim. Play ja Scala.js.

Voiko Scalaa käyttää mobiilisovellusten ohjelmointiin?

Voi. Vilkaise esimerkiksi mitä Google-haku sanoo.

Palaute

Tekijät

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

Kierrokset 1–13 ja niihin liittyvät tehtävät ja viikkokoosteet on laatinut Juha Sorva.

Kierrokset 14–20 on laatinut Otto Seppälä. Ne eivät ole julki syksyllä, mutta julkaistaan ennen kuin määräajat lähestyvät.

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 ovat suunnitelleet Juha Sorva ja Teemu Sirkiä. Niiden teknisen toteutuksen ovat tehneet Teemu Sirkiä ja Riku Autio käyttäen Teemun toteuttamia Jsvee- ja Kelmu-työkaluja.

Muut diagrammit ja materiaaliin upotetut vuorovaikutteiset esitykset on laatinut Juha Sorva.

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

Opetustapa, jossa 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+ on luotu Aallon LeTech-tutkimusryhmässä pitkälti opiskelijavoimin. Pääkehittäjänä toimii tällä hetkellä Jaakko Kantojärvi, jonka lisäksi järjestelmää kehittävät useat tietotekniikan ja informaatioverkostojen opiskelijat.

Kurssin tämänhetkinen henkilökunta on kerrottu luvussa 1.1.

Joidenkin lukujen lopuissa on lukukohtaisia lisäyksiä tähän tekijäluetteloon.

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