Kurssin viimeisimmän version löydät täältä: O1: 2024
Usein kysyttyjä kysymyksiä
Tämän sivun osiot
- Yleisohjeita ongelmatilanteisiin
- Tämä oppimateriaali
- Ohjelmointityökalut
- Saanko käyttää muita IntelliJ-asetuksia kuin kurssin tarjoamia?
- Käytän Mac-konetta, ja IntelliJ’ssä eivät toimi esimerkiksi dollarimerkki
$
ja hakasulut[]
. Mikä neuvoksi? - Saanko käyttää muuta ohjelmointiympäristöä kuin IntelliJ’tä?
- Mitä jos IntelliJ’n A+ Courses -lisäosa ei toimi koneellani tai en halua käyttää sitä?
- Miten voin jakaa Scalalla kirjoitetun sovellukseni toisten käytettäväksi?
- Opiskelijoilta kerätty palaute
- Aikataulusta
- Tehtävien pisteytyksestä ja automaattisesta tarkastuksesta
- Ohjelmani toimi täysin oikein, mutta automaattinen tarkastin ei antanut pisteitä! Mikä mättää?
- Laadin pyydetyn luokan täysin oikein, mutta muutin muuttujien/metodien nimiä. Miksen saanut automaattiselta tarkastimelta pisteitä?
- Tulkitseeko automaattinen tarkastin ylimääräiset muuttujat tai metodit virheiksi?
- Sain täydet pisteet automaattisesta tarkastuksesta, mutta tiedän, että ohjelmani toimii väärin eräällä syötteellä. Menetänkö pisteet myöhemmin?
- Jotkin [kurssin alkupään] tehtävistä tuntuvat olevan ratkaistavissa vain kopioimalla annettu koodi ja katsomalla vastaus. Onko tässä järkeä?
- Luonnollisista kielistä
- Scalasta
- Palaute
- Tekijät
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 IntelliJ-asetuksia kuin kurssin tarjoamia?
Saat, jos haluat ja osaat.
Käytän Mac-konetta, ja IntelliJ’ssä eivät toimi esimerkiksi dollarimerkki $
ja hakasulut []
. Mikä neuvoksi?
Kurssin oletusarvoiset näppäimistöasetukset, jotka IntelliJ’n A+ Courses -lisäosa asentaa, eivät ole kaikilta osin yhteensopivat Mac-näppäimistöjen kanssa. Asian voi korjata seuraavasti.
Valikosta: IntelliJ IDEA → Preferences → Keymap ja sitten otsikon alla näkyvästä pudotusvalikosta O1 MacOS Keymap. Paina OK. Nyt pitäisi toimia.
Jos ei onnistunut, lue seuraava:
Mikäli olit hyvissä ajoin liikkeellä ja asensit IntelliJ’n ennen kurssin virallista alkua 9.9.2020, niin (hyvin toimittu, mutta) et välttämättä löydä mainittua valintaa O1 MacOS Keymap. Siinä tapauksessa toimi näin:
- Valitse ylävalikosta A+ → Reset A+ Courses Plugin Settings ja hyväksy.
- Valitse samasta valikosta A+ → Turn Project into A+ Project ja hyväksy taas ehdotetut toimenpiteet.
- Nyt O1 MacOS Keymap pitäisi löytyä asetusvalikosta IntelliJ IDEA → Preferences → Keymap.
(Tulemme parantamaan A+ Courses -lisäosaa niin, että tuo käy automaattisesti, mutta toistaiseksi se pitää tehdä itse; onneksi vain kerran. Pahoittelut lisävaivasta.)
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 opiskelijaprojektina vuoden 2020 aikana ja on koekäytössä syksyllä 2020. 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 virtuaalityöpöydän (VDI) kautta. 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. 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?
Ikävä kyllä 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 vaikeuttaa 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?
Aiemman vuoden opiskelijan sanoin:
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. 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:
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 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? 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 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 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, LinkedIn, Intel, Samsung, 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 voi 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ää mobiilisovellusten ohjelmointiin?
Voi. Vilkaise esimerkiksi mitä Google-haku sanoo.
Mikä on monadi?
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, 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.
Joidenkin lukujen lopuissa on lukukohtaisia lisäyksiä tähän tekijäluetteloon.