Usein kysyttyjä kysymyksiä

Tämän sivun osiot

Yleisohjeita ongelmatilanteisiin

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

Kysy harjoitusryhmässä, Piazza-palstalla tai Slack-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 Slack-ryhmässä (ks. luku 1.1) tai etsi netistä apua.

Teknisiä kysymyksiä perustyökaluista

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

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

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ä.

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.

Olen ohjelmoinut koko pienen ikäni, ja alkeiskurssin asiat tuntuvat helpoilta. En keksi mitään muuta sanottavaa palautelomakkeisiin. Mikä neuvoksi?

Satunnaisena vastauksena myös pelkkä "osasin jo tämän ennestään" -tyyppinen riittää, mutta koeta keksiä muutakin sanottavaa.

Katso vielä lomakkeen ohjeet. Ehkä jokin siinä olevista ehdotetuksista kuitenkin herättäisi ajatuksia. Oman oppimisen ja osaamisen pohtiminen voi aina olla hyvästä.

Ehkä luvussa kuitenkin oli joku uusi näkökulma aiheeseen? Tai haluaisit antaa parannusehdotuksia?

Voit myös pohdiskella lyhyesti jotakin relevanttia asiaa, joka menee yli kurssin virallisista oppimistavoitteista.

Jos lukukohtaisten lomakkeiden täyttäminen silti tuntuu tervanjuonnilta, niin voidaan neuvotella jostakin vähempitervaisesta muttei vähempitöisestä ratkaisusta. Tällainen ratkaisu voisi olla esimerkiksi ohjelmointiin liittyvä esseetehtävä tai pieni ohjelmointiprojekti itse valitsemastasi aiheesta palautelomakkeiden sijaan. Jos tämä vaihtoehto kiinnostaa, ota yhteyttä opettajaan (otto.seppala@aalto.fi tai juha.sorva@aalto.fi).

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ä.

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.

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

Ovatko ylimääräiset tehtäväpisteet turhia?

Arvostelumielessä kyllä. Tehtävistä voi kuitenkin oppia jotain.

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ähän 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 Slack-ryhmässä (ks. luku 1.1).

On toki mahdollista, että tarkastimessakin on virhe. Korjaamme tarkiatimia 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änantona toimivassa Scaladoc-dokumentissa mainitut muuttujat ja metodit ovat osa pyydetyn luokan julkista rajapintaa (luku 2.7). Myös niiden nimet kuuluvat rajapintaan, sillä luokan käyttäjän on tiedettävä nuo nimet voidakseen käyttää luokkaa. 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 laatimianne luokkia käyttää tarkastinohjelma. Se ei pysty käyttämään niitä ollenkaan, jos nimet eivät vastaa spesifikaatiota.

Kirjoita pyydetyt julkiset muuttujat ja metodit juuri dokumentaation/tehtävänannon mukaisiksi. Älä muuta nimiä äläkä poista tai edes lisää 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 metodit virheiksi?

Ks. edellinen vastaus.

Tarkastimemme eivät kaikissa tehtävissä sakota ylimääräisistä julkisista metodeista, 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, vaikka kieltämättä myös mahdollisuuden kerätä muutaman pisteen 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 toisella suorittamallani kurssilla?

Ks. teknistieteellisen kandidaatinohjelman ohjesivu.

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.

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 viime aikoina 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 lynkata, 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.

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.

Scala on suhteellisen uusi ja kasvussa oleva kieli.

Käyttäjiin lukeutuu eturivin tekijöitä, mm. Twitter, PayPal, The Guardian, Zalando, 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ä).
    • Silti se sopii myös imperatiivisen olio-ohjelmoinnin oppimiseen (esim. nyt Ohjelmointi 1 -kurssilla; luku 2.1).
    • Uusilla 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.
  • Scalasta on helppo "edetä" yleisimpiin ohjelmointikieliin kuten Javaan. (Suurin haaste saattaa olla motivoitua käyttämään Javan kaltaista epäsiistimpää ja ominaisuuksiltaan rajoittuneempaa kieltä Scalan jälkeen.)
  • Kielessä on staattinen tyypitys, joka sopii fuksivuoden oppimistavoitteisiimme ja parantaa ohjelmointityökaluja. Scalassa staattinen tyypitys ei kuitenkaan tyyppipäättelyn (luku 1.8) vuoksi ole samalla tavalla "tiellä" kuin joissakin muissa kielissä.
  • Scalalla on mahdollista luoda kurssi, jossa edetään yksi asia kerrallaan suhteellisen pehmeästi, mutta kuitenkin päästään vaativiinkin aiheisiin.
  • Ohjelmointikursseillemme osallistuu taustatiedoiltaan hyvin 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 hyödyntää vanhaa osaamistaan. 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 (luku 5.2).
  • REPL-kulttuuri sopii hyvin perusopetukseen(kin).
  • Eräät yksittäiset Scalan piirteet tukevat oppimista (esim. yksittäisoliot, luku 2.1; val vs. var, luku 1.4; yms.).
  • Kirjastot ovat laajat ja käyttökelpoiset (osin Javaan nojaten; luku 5.2).
  • 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 ym.
  • Kurssiemme opettajat tykkäävät Scalasta.
  • Olemme halunneet 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. Osin ainakin siksi, että kieli on suhteellisen uusi, ja osin siksi, että monissa oppilaitoksissa johdantokurssien tavoitteet ovat vaatimattomammat tai muuten toisenlaiset kuin tällä kurssilla, jolloin muut ohjelmointikielet voivat olla perustellumpia. Osin kenties siksikin, että Scala on siinä määrin monipuolinen, että sen käyttö voi vaatia poikkeuksellisen huolellista opetuksen suunnittelua.

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

Ks. harmaareunainen laatikko luvusta 5.2.

Voiko Scalaa käyttää web-ohjelmointiin?

Voi. Ks. esim. Play.

Voiko Scalaa käyttää mobiilisovellusten ohjelmointiin?

Voi. Ks. esim. Scaloid.

Palaute

Palautusta lähetetään...

Palautus on vastaanotettu.