Oppimistavoitteista

Kurssilla perehdytään ohjelmointiin käyttäen Scala-ohjelmointikieltä. Kurssin käytyäsi voit toivottavasti lausahtaa näin:

  1. Tietokoneohjelmointi on fiksua ja hauskaa hommaa.
  2. Osaan ohjelmoinnin perusteita.

Tarkoitus olisi, että kurssin lopuksi osaat kirjoittaa pieniä omia ohjelmia. Osaat myös lukea ja muokata muiden kirjoittamia vähän isompiakin ohjelmia. Lisäksi — ja ehkä ennen kaikkea — sinulla on sellaiset pohjatiedot ohjelmoinnin peruskäsitteistä, että pystyt laajentamaan ohjelmointitietojasi ja -taitojasi jatkokurssien tai omatoimisen opiskelun avulla.

Suoritettuna hyvin tiedoin eli vähintään arvosanaa kolme vastaavin taidoin kurssi tarjoaa pohjan ohjelmoinnin jatkokursseille Aallossa.

Oma tavoitetaso ja arvosanat

Kurssilla on mukana paljon erilaisia opiskelijoita. Toiset haluavat oppia enemmän, toisille riittää kurssin vähimmäistavoitteiden saavuttaminen. Voit asettaa tavoitetasosi oman motivaatiosi ja resurssiesi mukaan. Voit myös valita oman tavoitetasosi perusteella sen, mitä harjoituksia teet. Alla olevaa jaottelua voi käyttää apuna omien tavoitteiden asettelussa.

Alla kuvattu jaottelu näkyy kurssin arvostelussa. Kurssiarvosana 1 kertoo vähimmäistavoitteiden saavuttamisesta. Arvosana 3 vastaa jotakuinkin jatkokursseille riittävää vähimmäisosaamistasoa ja arvosana 5 vielä parempaa osaamista.

Vähimmäistavoitteet

Nämä perustaidot tulisi olla jokaisella kurssin käyneellä opiskelijalla.

  • Ymmärrän tietokoneohjelmoinnin keskeintä käsitteistöä erityisesti imperatiivisen olio-ohjelmoinnin näkökulmasta: ohjelmakoodi, muuttuja, luokka, olio, metodi, viittaus, tietotyyppi, parametri, palautusarvo, lauseke, alkiokokoelma, valintakäskyt (kuten if), toistokäskyt (kuten for), jne.
  • Osaan keskustella näistä käsitteistä alan termejä käyttäen. Kun minulle annetaan ohjelmointiin liittyvää materiaalia, kykenen lukemaan sitä ja pystyn oppimaan lisää sen perusteella.
  • Osaan soveltaa tuntemiani ohjelmoinnin käsitteitä, kun luen ja kirjoitan ohjelmia. Siis:
    • Osaan lukea (Scala-kielellä kirjoitettuja) ohjelmia, jotka koostuvat useista yhteen toimivista luokista, ja tehdä päätelmiä niiden toiminnasta ainakin, kun ohjelmat ovat korkeintaan sata koodiriviä pitkiä eivätkä sisällä eksoottisia kielen piirteitä tai mutkikkaita algoritmeja.
    • Osaan toteuttaa luokkia (Scala-ohjelmointikielellä), kun annettu spesifikaatio määrittelee toteutettavien luokkien julkiset rajapinnat. Toisin sanoen: osaan toteuttaa määritellyille luokille ilmentymämuuttujia ja metodeita. Osaan sekä kirjoittaa luokkia "tyhjästä" että muokata valmiina annettua ohjelmakokonaisuutta siten, että se täyttää spesifikaation.
  • Ohjelmakoodin laatimiseen liittyvät työvaiheet kuten spesifikaation lukeminen, koodin kirjoittaminen ja testaus ovat minulle tuttuja. Osaan myös käyttää ohjelmoijan aputyökaluja (erityisesti: sovelluskehitintä) tällaisten työtehtävien suorittamiseen.
  • Ymmärrän ainakin auttavasti, miten tietokone toimii suorittaessaan ohjelman. Ymmärrän auttavasti, miten olioita luodaan ja alustetaan tietokoneen muistiin. Tiedän, miten kutsupino toimii ohjelman tilan säilyttämisessä tietokoneen muistissa.
  • Tiedän, mitä ovat ohjelmakirjastot (esim. Scala API). Osaan lukea annettua dokumentaatiota ja sen perusteella käyttää valmiina annettuja luokkia omissa ohjelmissani.
  • Ymmärrän, että hyvä ohjelmointityyli on tärkeää. Osaan muotoilla ohjelmakoodin siten, että se on ihmislukijalle ymmärrettävää ja selkeää.

Jatkokursseille riittävä osaaminen

Pelkät vähimmäistavoitteet eivät riitä ohjelmoinnista enemmän kiinnostuneille eivätkä niille, jotka jatkavat ohjelmoinnin opiskelua myöhemmillä kursseilla. Esimerkiksi keväisillä jatkokursseilla Ohjelmointi 2 ja Ohjelmointistudio 2 edellytetään Ohjelmointi 1:n vähimmäistavoitteita laajempaa osaamista.

Ohjelmoinnin parissa jatkaville ainakin seuraavat oppimistavoitteet ovat keskeisiä:

  • Tiedän, mitä ovat kääntäjä, tavukoodi, virtuaalikone ja konekieli.
  • Tunnen eräitä funktionaaliseen ohjelmointiparadigmaan liittyviä ohjelmointitekniikoita, joiden perusteella voin tutustua tähän ohjelmointitapaan syvällisemmin. Erityisesti:
    • Ymmärrän, millainen on muuttumaton alkiokokoelma tai muu olio (immutable).
    • Osaan soveltaa eräitä funktionaalisessa ohjelmoinnissa usein käytettyjä standardifunktioita (kuten map ja filter) ohjelmissani.
    • Osaan lukea ja kirjoittaa koodia, jossa välitetään funktioita parametreiksi.
    • Osaan lukea ja kirjoittaa ohjelmia, joissa käytetään nimettömiä funktioita.
  • Ymmärrän, mitä ovat periytyminen (inheritance) ja piirreluokat (traits). Osaan soveltaa näitäkin tekniikoita lukiessani ohjelmia ja toteuttaessani luokkia annetun spesifikaation mukaisesti.
  • Tunnen useita erilaisia tapoja varastoida lukuisia data-alkioita (esim. puskurit, taulukot, hakurakenteet). Osaan yksinkertaisissa tapauksissa valita, mikä tapa on tiettyyn ohjelmaan kätevin.
  • Olen harjoitellut hahmottamaan ja muokkaamaan myös hieman isompia ohjelmakokonaisuuksia, jotka ovat kooltaan satoja rivejä tai noin kymmenen luokkaa, ja hieman monimutkaisempia algoritmeja.
  • Osaan käyttää ohjelmakirjastoa apuna laatiakseni ohjelman, joka lukee ja kirjoittaa (teksti)tiedostoja.
  • Osaan käyttää debuggeria virheiden etsimiseen ohjelmista.
  • Minulla on ainakin auttava käsitys siitä, että ohjelmakoodin laadun määrittävät muutkin seikat kuin sen toimivuus. Tiedän esimerkiksi, että ohjelmoijan tekemät ratkaisut vaikuttavat ohjelman muokattavuuteen ja tehokkuuteen, ja olen nähnyt tästä esimerkkejä. Tiedän, mitä on refaktorointi. (En silti välttämättä itse osaa vielä laatia ohjelmista erityisen muokattavia tai tehokkaita.)
  • Minulla on ainakin auttava käsitys siitä, miten graafinen käyttöliittymä toimii yhteen muun ohjelman kanssa. (En silti välttämättä itse osaa laatia graafista käyttöliittymää.)

Mitä vielä on tarjolla?

Kurssilla voi oppia myös muista ohjelmoinnin perusteisiin liittyviä aiheista. Alla on esimerkkejä aiheista, joiden sisällyttäminen omiin oppimistavoitteisiin on suositeltavaa ja hyödyllistä, mutta ei pakollista.

  • Olen kokeillut suunnitella itse pienehköjä ohjelmia tai ohjelmien osia annettujen toiminnallisten vaatimusten perusteella. Toisin sanoen: olen suunnitellut ohjelmia ilman, että minulle on ollut tarjolla spesifikaatiota, joka määrittää ennalta ohjelman rakenteen (luokat ja metodit). Olen toteuttanut ohjelmia tai ohjelman osia oman suunnittelutyöni perusteella.
  • Osaan tunnistaa, edustaako annettu ohjelma (tai ohjelman osa) imperatiivista vai funktionaalista ohjelmointitapaa. Tunnen eräitä näiden ohjelmointiparadigmojen hyviä puolia.
  • Ymmärrän rekursion käsitteen ja olen nähnyt esimerkkejä rekursiivisesta tiedosta ja rekursiivisista metoditoteutuksista. Osaan suunnitella ja kirjoittaa yksinkertaisen rekursiivisen metodin.
  • Osaan kirjoittaa yksinkertaisen graafisen käyttöliittymän apukirjastoa hyödyntäen.
  • Minulla on ainakin auttava käsitys siitä, että ohjelma voi käsitellä toisia ohjelmia ja ohjelmointikielellä voi toteuttaa toisen ohjelmointikielen.

Palaute

Palautusta lähetetään...

Palautus on vastaanotettu.