Usein kysyttyjä kysymyksiä
Yleisohjeita ongelmatilanteisiin
Olen jumissa tehtävän kanssa. Mitä tehdä?!
Kysy harjoitusryhmässä. Tai Piazza-palstalla tai Telegram-ryhmässä (ks. luku 1.1).
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
Kuinka pitkään kurssin verkkomateriaali on saatavilla?
Materiaali jää näkyviin myös kurssin päätyttyä, joten voit palata sen pariin myöhemminkin ihan rauhassa. Mitään poistopäivämäärää ei ole suunniteltu. Automaattipalaute toimii myös kurssin jälkeen.
Ohjelmointityökalut
Saanko käyttää muita IntelliJ-asetuksia kuin kurssin tarjoamia?
Saat, jos haluat ja osaat.
Saanko käyttää muuta ohjelmointiympäristöä kuin IntelliJ’tä?
Täysin omalla vastuullasi saat, mutta emme tarjoa kurssin puolesta mitään tukea muille työkaluille. Tehtävissä ei ole mitään sellaista, mikä aivan väistämättä pakottaa käyttämään IntelliJ’tä.
IntelliJ’n käyttö on sikälikin suositeltavaa, että sen A+ Courses -lisäosa helpottaa harjoitustehtävien noutamista ja palauttamista sekä hieman parantaa IntelliJ’n käyttömukavuutta muutenkin.
Mitä jos IntelliJ’n A+ Courses -lisäosa ei toimi koneellani tai en halua käyttää sitä?
A+ Courses on luotu avoimen lähdekoodin opiskelijaprojektina. Jos sen toiminnassa ilmenee häiriöitä, pyydämme ilmoittamaan joko O1:n palautekanavia pitkin tai suoraan A+ Courses -ohjelman sivustolla.
Yksi mahdollisuus on käyttää IntelliJ’tä ja A+ Courses -lisäosaa Aallon Open OnDemand -ympäristön kautta, jolloin IntelliJ toimii selaimessa ilman asennusta. Siitä kerrotaan harmaassa laatikossa luvussa 1.2.
Vaihtoehtoisesti mutta työläämmin voit noudattaa IntelliJ-ohjesivumme lopusta löytyviä ohjeita, joiden avulla tehtävät saa noudettua ja palautettua ilmankin tuota lisäosaa.
IntelliJ-ohjesivumme lopusta löytyy ohjeet siihen, miten tehtävät saa noudettua ja palautettua ilmankin tuota lisäosaa, joskin työläämmin.
Miten voin jakaa Scalalla kirjoitetun sovellukseni toisten käytettäväksi?
Ks. iso 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
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ä.
Miksi deadlinet ovat kuudelta eivätkä päivän lopussa, keskiyöllä?
Realiteetti on, että oli deadline milloin tahansa, turhankin iso osa opiskelijoista työskentelee sen läheisyydessä enemmän tai vähemmän kiireessä ja usein apua kaivaten.
Kun deadline on päivällä meillä on mahdollisuus järjestää harjoitusryhmiä ja muuta neuvontaa sen aikoihin.
Emme myöskään halua erityisesti kannustaa öiseen opiskeluun, vaikka se sallittua onkin.
Mikseivät deadlinet ole harvemmin?
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.
Miksi kuutoskierroksen deadline on "tenttiviikolla"?
Fukseilla, joille kurssi ensisijaisesti rakennettu, ei ole isoa tenttipläjäystä keskellä syksyä. Jos vaihtoehtona on se, että tekemistä on syksyn mittaan sama määrä mutta tenttiviikko pidetään tyhjänä, tarkoittaa se isompaa työmäärää muille viikoille, mikä on kokemustemme mukaan huonompi ajatus. Aihetta on lyhyesti käsitelty luvussa 1.1.
Asiaa voi ajatella myös näin: Moni kurssi vaatii opiskelijoita osallistumaan tenttiviikolla parin, kolmen tunnin mittaiseen kokeeseen ja lisäksi lukemaan siihen lukuisia tunteja. Tätä pidetään luentoihin ja tentteihin perustuvilla kursseilla aivan tavanomaisena. O1:n kuutoskierros — joka on juuri tenttiviikon vuoksi hieman kevennetty verrattuna muihin kierroksiin — ei oikeastaan eroa noista muista kursseista kuin sikäli, että opetus- ja arviointimenetelmät ovat "tenttiviikolla" toisenlaiset ja toisen nimiset.
Suoritan varusmiespalvelusta ja kotiudun vasta syyskuun puolivälissä — miten minun pitäisi toimia?
Ensimmäinen tehtäväpalautusten määräajoista on ke 13.9. klo 18:00. Sitä ennen on jo paljon tekemistä tehtävien parissa. (Monella menee näihin ensimmäisiin tehtäviin yli kymmenen tuntia aktiivista työaikaa.) Toimi seuraavasti.
Oppimateriaali ja tehtävät julkaistaan täällä A+:ssa viimeistään elo–syyskuun vaihteessa. Jos sinulla on mahdollisuus tehdä ensimmäisen viikon tehtävät etänä (edes osittain tai mieluummin kokonaan), tee ne. Tämä on hyvä ajatus, koska kukin kurssin viikko rakentuu edellisten varaan, ja aikatauluongelmat voivat muuten kasautua.
Jos näyttää siltä, että et ehdi tehdä kaikkia ensimmäisen kierroksen tehtäviä ajoissa, ilmoita meille etukäteen(!). Voit lähettää viestin kurssin pääassaritiimille osoitteeseen o1-head-assistants-sci@list.aalto.fi. Jos noin käy, voimme joustaa 1. kierroksen aikataulusta kohdallasi. Varaa runsaasti aikaa kalenteriin, jotta saat kurssin rytmin kiinni mahdollisimman pian. Toisen tehtäväkierroksen määräaika viikkoa myöhemmin, ja sitä ennen on taas paljon lisää tekemistä.
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.
Automaattitarkastin lukee virheeksi minkä vain poikkeaman tehtävänannosta. Pienikin poikkeama saattaa 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. 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. Jos ohjelmoija laatii ohjelmakomponentin vastaamaan tiettyä spesifikaatiota, niin komponentin 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.
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ä silti. 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ä.
Korvaavuuksista
Voinko korvata tutkinnossani tämän kurssin Aallon kurssilla Ohjelmoinnin peruskurssi Y1?
Et. Tuo toinen kurssi (CS-A1111 / CS-A1113) on paljon O1-kurssia suppeampi.
Voinko korvata tutkinnossani tämän kurssin toisella suorittamallani ohjelmoinnin peruskurssilla?
Ehkä. Jotta korvaaminen onnistuu, Aalto edellyttää, että a) haet korvaamista eli hyväksilukua Sisu-järjestelmän kautta ja b) olet suorittanut kurssin tai kursseja, jotka vastaavat sisällöllisesti O1:ä.
Huomaa siis, että edellytetään sisällöllistä vastaavuutta. Esimerkiksi se ei yksinään riitä, että kyseessä on jokin ohjelmoinnin peruskurssi, josta saa saman verran opintopisteitä. Ohjelmointikieli ei ole ratkaiseva, vaan korvaavien opintojen pitäisi perehdyttää vastaaviin ohjelmoinnin peruskäsitteisiin ja -taitoihin. Esimerkiksi olio-ohjelmointia on täytynyt käsitellä kattavasti ja myös funktionaalisesta ohjelmoinnista vähintäänkin perusasiat (sisältäen mm. korkeamman asteen funktioiden käyttöä).
Jos teet hakemuksen O1:n korvaamiseksi, huomioi seuraavat asiat:
Selvennä yksityiskohtaisesti, mitä sisältöjä suorittamissasi opinnoissa on käsitelty ja kuinka laajasti. Liitä mukaan omat perustelusi sille, kuinka hyvin nuo opinnot vastaavat O1:n sisältöjä. (Tavoitesivu kuvaa O1:n sisältöä tiiviisti. Selaa muutenkin kurssimateriaaliamme.)
Muiden suomalaisten yliopistojen ensimmäiset ohjelmoinnin peruskurssit ovat ainakin tyypillisesti sekä erilaisia että suppeampia kuin O1. Tällöin ne eivät riitä yksin korvaamaan O1:ä.
Mikäli olet suorittanut useampia ohjelmointikursseja toisessa yliopistossa, voi O1:n mahdollisesti korvata esimerkiksi kahden kurssin yhdistelmällä, jos johdantokurssi yksinään ei ole riittävän kattava.
Lopuksi vielä: Suosittelemme O1:n suorittamista. Hyvin moni sellainenkin, joka on aiemmin jonkin ohjelmointikurssin suorittanut tai muuten aiemmin ohjelmoinut, on kertonut oppineensa kurssilla paljon, etenkin kun ihan ensimmäisistä viikoista vähän edetään. Erityisesti suosittelemme O1:n suorittamista, jos aiot käydä jatkokursseja Aallossa.
Voinko korvata tämän kurssin työkokemuksella, menestyksellä ohjelmointikilpailuissa tms. aiemmalla kokemuksella?
Lainaus Tietotekniikan laitoksen yleisestä linjauksesta:
"Kannustamme opiskelijoita harrastamaan kisakoodausta ja tunnustamme mieluusti tällä tavoin hankittua osaamista antamalla siitä opintopisteitä. Välineenä tähän voi olla esimerkiksi kurssin CS-E4590 Competitive Programming suoritusmerkinnän saaminen osittain tai kokonaan aiemmalla kisakoodauskokemuksella tai muu valinnainen kurssi.
Opiskelija voi hyödyntää näitä ainakin valinnaisissa opinnoissa, ja minä [koulutusohjelman johtaja, professori Jukka Suomela, jukka.suomela@aalto.fi] voin hoitaa tällaisten suoritusmerkintöjen jakamista. Tämä olisi nähdäkseni Aallon hyväksilukuohjeen hengen mukainen mahdollisuus tunnustaa muualla hankittua osaamista sisällyttämällä tutkintoon.
Pelkällä kisakoodauskokemuksella ei kuitenkaan suoraan voi korvata keskeisiä peruskurssejamme (esim. Ohjelmointi 1, Programming 2, Ohjelmointistudio 2, Data Structures and Algorithms), koska tyypillisessä ohjelmointikilpailussa pärjääminen ei vielä osoita näiden kurssien kaikkien keskeisten asioiden hallintaa. Aallon hyväksilukuohje on korvaamisen osalta tiukka ("edellyttää sisällöllistä vastaavuutta"), ja esimerkiksi kisakoodauksessa sisällöllinen vastaavuus sopisi minusta lähinnä kurssiin CS-E4590.
Vastaavasti työkokemuksen osalta ensisijainen väline saada opintopisteitä on SCI.harj/SCI.khar, joka myös menee valinnaisiin opintoihin. Työskentely ohjelmointitehtävissä ei vielä itsessään osoita peruskurssiemme keskeisten asioiden hallintaa riittävässä laajuudessa."
Kurssin korvaaminen noin ei siis tule kyseeseen. Tehtävien suorittaminen on keskeinen tapa, jolla opiskelija osoittaa osaavansa kurssien asiat, ja siksi edellytämme sitä. O1:n tehtävät käyvät kokeneelta nopeammin kuin aloittelijalta. Ks. myös edellisen kysymyksen vastaus; kurssi voi kokeneellekin olla opettavainen.
Kuitenkin jos sinulla on erittäin runsasta aiempaa kokemusta, olet tutustunut koko oppimateriaaliin ja katsot osaavasi suvereenisti kurssin sisällön kokonaan tai lähes kokonaan (sisältäen myös esim. ohjelmakoodin laatuun ja funktionaaliseen ohjelmointiin liittyvät asiat), niin voit olla yhteydessä O1:n vastaavaan opettajaan (ks. luku 1.1). Kuvaile osaamisesi tarkasti, niin harkitsemme, olisiko kurssi kohdallasi mahdollista suorittaa jollakin vaihtoehtoisella tavalla.
Luonnollisista kielistä
Miksi kurssilla käytetään suomea? / Miksi kurssilla käytetään englantia?
Kielikysymys puhuttaa aina. Joissakin 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 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 laitos.
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, varsinkin nyt, kun ohjelmointia opetetaan ala-asteillakin? 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"?
Nyt kun ohjelmointi on jossain muodossa tullut ala-asteillekin, on mielenkiintoista nähdä, millaista termistöä nykylapset myöhemmin käyttävät. Kun ohjelmointia harjoittavat erilaiset ihmisryhmät — esimerkiksi ammattiohjelmoijat ja muun työn tueksi ohjelmoivat — heille muodostunee omanlaisiaan tapoja puhua ohjelmoinnista.
Tällä kurssilla voit käyttää suomen- tai englanninkielisiä termejä oman valintasi mukaan, eikä sinua teilata, teit kummin vain. Kannattaa silti uhrata asialle muutama ajatus.
Kurssin opettaja suosii 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 ihan kaikkein yleisimmin käytettyihin kieliin (joita ovat mm. Java, JavaScript, C, C++): ei.
Käyttäjiin lukeutuu eturivin tekijöitä, mm. Twitter/X, PayPal, The Guardian, Zalando, Capital One, Blizzard, Netflix, suomalainen Reaktor, Disney, LinkedIn, Intel, Samsung, Spotify, Airbnb, Morgan Stanley, Goldman Sachs, Duolingo, jne. Toinen pieni luettelo löytyy Wikipediasta.
Osaa kurssilaisista saattavat kiinnostaa Li Haoyin blogikirjoitukset, joissa hän
kuvailee Scalan käyttöä merkittävässä datatiedefirmassa: Scala at Scale at Databricks
vertailee kieltä eräisiin muihin: From First Principles: Why Scala?.
Myös esimerkiksi Duolingon ja Zalandon päätöksistä käyttää Scalaa on kirjoitettu (ei välttämättä puolueettomasti, mutta kuitenkin).
Ohjelmointikielten käyttömääriä on yritetty eri tavoin vertailla, mutta ei mikään mittareista taida olla erityisen hyvä. Tässä eräs: RedMonk Programming Language Rankings.
Miksi kurssille on valittu juuri Scala?
Tähän ei ole yhtä ratkaisevaa "killerisyytä", vaan valintaan vaikuttivat monet kriteerit. 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. Jotkin ominaisuudet toteutuvat 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ämän Ohjelmointi 1 -kurssin myöhemmillä viikoilla).
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ästä hyötyvät aloittelijat, ammattilaisohjelmoijat ja muut 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 voi luoda pedagogisesti laadukkaita kursseja, joilla edetään yksi asia kerrallaan suhteellisen pehmeästi mutta silti päästään vaativiinkin aiheisiin.
Ohjelmointikursseillemme osallistuu taustatiedoiltaan erilaisia opiskelijoita. Scalalla voidaan sopivasti käytettynä tarjota pehmeähkö lasku aloittelijoille, minkä lisäksi kielessä 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 aiemmin imperatiivisesti ohjelmoineille polku 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. Se on tehokas ja kätevä 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. Vuonna 2021 julkaistu Scala 3 paransi tilannetta entisestää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.
Joissain lähteissä Scala näyttää selvästi erilaiselta kuin O1:n esimerkeissä. Kieliversioistako on kyse?
Voi hyvin olla, että kyse on kieliversioista.
Scalasta julkaistiin vuonna 2021 merkittävä uusi versio, Scala 3. Ohjelmoijat ovat vähitellen siirtymässä siihen; O1:llä olemme käyttäneet Scala 3:a vuodesta 2022. Joissakin nettilähteissä ja kirjoissa jo käytetään Scala 3:a, mutta vähänkään vanhemmissa lähteissä ei.
Scala 3:lla kirjoitettu koodi näyttää jossain määrin erilaiselta kuin Scala 2 -koodi,
mutta kaikki tärkeimmät perusperiaatteet ovat kieliversioissa samat. Näkyvin muutos
on, että Scala 2:ssa on käytettävä varsin paljon aaltosulkeita {
ja }
koodin osien
rajaamiseen, kun taas Scala 3:ssa aaltosulkeet eivät ole pakolliset (kuin harvoissa
erikoistilanteissa) eikä niitä yleensä käytetä. Tästä on hieman lisätietoa
tyylioppaassamme.
Ulkoasumuutosten lisäksi Scala 3 tuo mukanaan muitakin parannuksia. Valtaosa niistä ei kuitenkaan ole ohjelmoinnin alkeiden oppijalle merkityksellisiä.
Voiko Scalaa käyttää web-ohjelmointiin?
Mihin kaikkeen Scalaa voi käyttää? Millaisia Scala-työkaluja on olemassa?
Scalaa voi käyttää moneen asiaan ja monella eri tavalla. Kirjastoja eri käyttötarkoituksiin on lueteltu Scala Awesome -sivulla.
Palaute
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.
Joidenkin lukujen lopuissa on lukukohtaisia lisäyksiä tähän tekijäluetteloon.