Ero sivun ”Kurssikuvauksia” versioiden välillä

Fuksiwikistä
Ak: Uusi sivu: == Pakollisia kursseja == Tietojenkäsittelytieteen laitoksen tutkintouudistus astuu voimaan lukukaudelle 08-09, monista asioista on vielä epäselvyyttä eikä uusista kursseista ol...
 
 
(149 välissä olevaa versiota 20 käyttäjän tekeminä ei näytetä)
Rivi 1: Rivi 1:
== Pakollisia kursseja ==
== Perusopinnot==


Tietojenkäsittelytieteen laitoksen tutkintouudistus astuu voimaan lukukaudelle 08-09, monista asioista on vielä epäselvyyttä eikä uusista kursseista ole voitu vielä kirjoittaa kuvauksia. Lisäksi opetuskieli on mahdollisesti vaihtumassa Javasta Scalaksi.
'''Perusopintoja on mahdollista suorittaa myös avoimessa yliopistossa.


=== Tietokone työvälineenä (2 ov, 4 op) ===
<strong style="color:red;font-size:1rem">Monet kurssien kuvauksista ovat edelleen vanhan opetussuunnitelman (2020-2023) mukaisia. Toisaalta monet kurssit ovat myös pysyneet hyvin samanlaisina, vaikka nimi olisikin muuttunut uudessa opetussuunnitelmassa (2023-2026).</strong>


* Tunnetaan myös nimellä Lapiokurssi tai pelkkä Lapio
=== Tietokone ja Internet (5 op) ===
* Tiiviskurssi lukuvuoden alussa (pääaineopiskelijat) sekä normaali kurssi 3. periodissa (sivuaineopiskelijat)
{{hatnote|Tunnetaan myös nimellä Tintti}}


Työvälinekurssi on peruskurssi, jolla opetellaan myöhemmillä kursseilla välttämättömiä
Kurssi tiivistää aikaisemmat kurssit Tietokoneen Toiminta ja Tietoliikenteen Perusteet yhdeksi yhtenäiseksi kokonaisuudeksi. Tähän kuuluu mm.: Tietokoneen osien toiminta, sekä kommunikointi näiden osien välillä, Konekielen opettelua (Risc-V), Eri binääri muotojen tulkitsemista, Internet protokolla pinon toiminta, Internet tietoliikenteen toiminta sekä Virtuaaliympäristöjen perusteita. Kurssin koostuu pääasiassa näitä aiheita käsittelevistä pienryhmissä tehtävistä esseistä. Näiden lisäksi kurssilla myös moodlessa tehtäviä yksilötehtäviä. Tietokone ja internet kurssia suositellaan otettavaksi heti fuksisyksyyn. Kurssi kestää kaksi periodia, eli jouluun asti. Kurssi saattaa tuntua haastavalta heti opiskelujen alkuun, mutta pitkä pinna ja toimiva ryhmätyö on avain onneen.
käytännön taitoja. Kurssilla opetellaan käyttämään laitoksella käytössä olevia
ohjelmistoja ja laitteistoja sekä valitsemaan tehtävään sopiva työkalu. Keskeisimmät
Unix/Linux-komennot, HTML-perusteet, tekstieditorien ja tekstinkäsittelyohjelmien käyttö
jne. kannattaa osata, ettei sitten myöhemmin kulu pään raapimiseen enemmän aikaa kuin
itse tekemiseen. Kokeneet tietokoneharrastajat voivat kyllä suorittaa kurssin
tenttimällä, mutta kurssilla on pakollisia harjoitustöitä, jotka täytyy tehdä, vaikka
menisi suoraan kokeeseen. Monelle kokeneellekin tietokoneenkäyttäjälle kurssilla todennäköisesti on uutta asiaa ainakin laitoksen järjestelmistä, joten kurssimateriaali ainakin kannattaa lukea läpi. Kurssi on esitietovaatimuksena muille peruskursseille.


Kurssi on tutkinnonuudistuksen jälkeen pakollinen osa tietojenkäsittelytieteen kieli- ja viestintäopintoja.
=== Ohjelmoinnin perusteet (5 op) ===
{{hatnote|Tunnetaan myös nimellä OhPe}}
 
Kurssilla opetetaan fukseille mitä ovat algoritmit, muuttujat, lauseet, lausekkeet, ohjausrakenteet ja erityisesti oliot. Heti alusta alkaen tehdään omia ohjelmia koneella. Kurssi on tarkoitettu ensisijaisesti niille, joilla ei ole olio-ohjelmointitaustaa, mutta osaavienkin ohjelmoijien on syytä vilkaista kurssimateriaaliin yhteisen kielen omaksumiseksi ja mennä sitten heti tenttiin. Toisinaan kun käy niinkin, että moni aiemmin ohjelmoinut luulee osaavansa, mutta saakin tentissä kuvannoillisesti lapiosta naamaan. Kurssi on hyvin työpainotteinen ja tehtävien tekeminen korreloi tilastollisestikin suoraan läpipääsyn kanssa. Opetuskielenä on Python.
 
=== Ohjelmoinnin jatkokurssi (5 op) ===
{{hatnote|Tunnetaan myös nimellä OhJa}}
 
Nimensä mukaisesti kurssilla jatketaan siitä, mihin ohjelmoinnin perusteella jäätiin. Opetus järjestetään myös samaan tapaan. Perusasioiden ollessa hallussa, harjoitustehtävien ohjelmat laajenevat ja tulevat entistä mielenkiintoisemmiksi - ja haastavammiksi. Ohjelmoinnin jatkokurssin jälkeen opiskelija pystyy ohjelmoimaan itsenäisesti ja hyödyntämään internetiä ohjelmointitaitojensa kehittämisessä.
 
=== Tietokantojen perusteet (5 op) ===
{{hatnote|Tunnetaan myös nimellä Tikape}}
 
Tämä kurssi on murrosvaiheessa, ja kuvauksemme saattaakin olla auttamatta vanhentunut tätä luettaessa. Mutta yritetään! Tietokantojen perusteisiin kuuluu tietokantojen suunnittelu ja lukuisten erilaisten kaavioiden piirrustelu, tietokannan käyttö Javalla, sekä SQL:n käyttö. Toteutukseen kuuluu viikottaisia yksin tai pajassa tehtäviä harjoituksia, sekä jokaviikkoinen ryhmätapaaminen. Lisäksi kurssin aikana tehdään ryhmätyönä tietokantaa hyödyntävä mallisovellus.


Anni Rytkönen <br />
=== Tietorakenteet ja algoritmit I (5 op) ===
Marja Huovinen
{{hatnote|Tunnetaan myös nimellä TiRa I}}


=== Johdatus tietojenkäsittelytieteeseen (2 ov, 4op) ===
Tietorakenteet ja algoritmit on mielenkiintoinen ja hyödyllinen kurssi sekä algoritmeista että ohjelmointitouhusta kiinnostuineille (yleensä nämä leirit omaavat hyvin poikkeavat mielipiteet perus- ja aineopintojen kursseista). Käytännön ohjelmointiprojekteissa tulee jatkuvasti vastaan tilanteita, joissa pitäisi käsitellä suuria tietomääriä: lisätä, poistaa, etsiä ja järjestellä tietoa. Tällä kurssilla opetetaan lukuisia toinen toistaan näppärämpiä keinoja hallita tietoalkiota. Oikeastaan vasta kurssin asiat hallittuaan voi sanoa oikeasti osaavansa koodata. Tietorakenteet ja algoritmit on myös ensimmäisiä peruskursseja, joilla kurkistetaan tietojenkäsittelyn teoreettisempaan puoleen (algoritmit ja niiden analysointi).


* 1. ja 2. periodissa
TiRa I käsittelee ensisijaisesti Tirakirjan luvut 1-7. Kuten kurssin nimestä voi aavistellakin, valtaosa opetuksesta keskittyy erilaisten tietorakenteiden käsittelyyn. Opiskelija voi olla varma, että kurssin suoritettuaan ainakin perustietorakenteet (taulukko, pino, lista) ovat syöpyneet lähtemättömästi tajuntaan. Hämäriä muistikuvia saattaa löytyä jopa hieman eksoottisemmistakin tietorakenteista kuten puista, hajautustauluista ja verkoista. Tietorakenteiden lisäksi kurssilla käydään läpi muutamia mielenkiintoisia haku- ja järjestysalgoritmeja ja tehdään algoritmien tehokkuusanalyysiä.


Kurssi on luonteeltaan yleiskatsaus tietojenkäsittelytieteeseen, sisältäen paljon asiaa laidasta laitaan.  Kurssilla esitellään myös laitoksen tutkimustoimintaa liittyen kuhunkin osa-alueeseen. Kurssin suoritustapa poikkeaa lähes kaikista muista tietojenkäsittelytieteen kursseista, sillä kurssi suoritetaan tekemällä oppimispäiväkirjoja pienryhmissä. Koska kurssilla ei ole koetta, kurssilla on yleensä pakollinen läsnäolo, joka on suunnilleen 3/4 osaa kerroista.
Kurssin esitietovaatimus on "Johdatus yliopistomatematiikkaan". Matemaattista esitietovaatimusta ei kuitenkaan ole syytä kavahtaa, sillä loppujen lopuksi itse käsiteltävät asiat ovat suhteellisen yksinkertaisia ja liittyvät oikeastaan vain tietorakenteiden formaaliin esittämiseen.  


Kaikkein hyödyllisin kurssi on juuri fuksisyksynä, sillä kurssi sisältää kattavan yleiskatsauksen tietojenkäsittelytieteeseen ja valmistaa opiskelijaa myöhempiin opintoihin antamalla raamit kokonaisuudelle, johon koota tutkintosa. Kurssi pyrkii antamaan yleiskäsityksen alasta.
Kurssi on sinänsä erikoinen, sillä syksyn ja kevään toteutukset eroavat jonkin verran. Viime vuosina Antti Laaksonen on pitänyt kurssin syksyllä, jolloin ei ole ollut tenttiä. Jyrki Kivinen pitää kurssia keväisin, jolloin tenttiä on järjestetty.


Eeva Nevalainen
Laskuharjoitusten tekeminen on tässä kurssissa en-si-si-jai-sen tärkeää! Suurin ongelma opiskelijoille on, että kelkasta putoaa hyvin helposti. Jos jokin asia menee yli ymmärryksen, kannattaa heti vaatia luennoijaa tai assaria vääntämään asia rautalangasta, ettei tajuntaan jää mustia aukkoja. Toisaalta laitokselta on vaikea löytää henkilöä, joka ei pitäisi kurssia ainakin jossain määrin ehdottoman hyödyllisenä. Syksyllä hyvin menestyneelle opiskelijallekin koe saattaa tulla järkytyksenä - ei sen takia, että se olisi vaikea, mutta kokeesta ei pääse läpi, jos ei osaa soveltaa. Tästä kertoo sekin, että kokeeseen saa ottaa A4-muistilapun mukaan. Perinteisesti läpipääsyprosentti on kuitenkin ollut vähintään syksyn ohjelmointikurssien tasoa. Kurssi tosin on monelle työläs. Laskuharjoitukset / Algoritmitehtävät saa ratkaista joko Pythonilla tai Javalla.


=== Ohjelmoinnin perusteet (5 op) ===
Tietorakenteet -kurssi on tietojenkäsittelytieteelle "sitä itseään" ja Helsingin yliopiston TKT-laitoksen erikoisuus ja ylpeys. Monien huippuyliopistojen (MIT) tietojenkäsittelytieteen opetukselle tyypillistä on, että tietorakenteita opetetaan kattavasti heti ensimmäisenä opiskeluvuonna. Muissa Suomen yliopistoissa käpistelijöiden ymmärrys tietorakenteista ja tehokkaista ratkaisuista on matalahkolla tasolla verrattuna laitoksen opiskelijaan. Kuulostaako hypettämiselta? Ota selvää ja varmistu.
 
<del>'''Älä käy tiraa fuksisyksynä! Suorita ensin JYM.'''</del> Katso myös [[Fuksisyksyn_mallilukujärjestys]].
 
<div style="border: 1px solid red; padding: 10px; margin: 10px;">
<strong style="color:red;font-size:1rem">Vanha opetussuunitelma (2020-2023):</strong>
=== Johdatus tietojenkäsittelytieteeseen (5 op) ja Englanti (4 op) ===
{{hatnote|Tunnetaan myös nimellä JTKT}}
 
Kurssin tarkoitus on johdatella uudet oppilaat (“fuksit”) tietojenkäsittelytieteen ihmeelliseen maailmaan. Kurssin toteutus elää vuosittain opiskelijapalautteen myötä, mutta suuri osa toteutuksesta tulee olemaan pienryhmässä kirjoitettuja, lyhyitä, viikottaisia esseitä TKT:hen liittyvistä aiheista. Lisäksi samoista aiheista pidetään pieniä esitelmiä, ja opponoidaan muiden vastaavia.
Bonuksena kurssin fuksitoteutukseen on sisäänleivottu 4 op:ta (eli TKT kanditutkintoon vaadittavat) englannin opintoja, jotka ilmenevät muutaman englanninkielisenä esseenä ja esityksenä. Englannin opinnot suositellaan lämpimästi suoritettavaksi JTKT:n ohessa.
HUOM! JTKT-toteutetaan useimmista muista kursseista poiketen kahdessa jaksossa!
 
=== Tietokoneen toiminta (5 op) ===
{{hatnote|Tunnetaan myös nimellä TiTo}}
 
Tämä kurssi on perusopinnoista haastavin, mutta ei mitenkään mahdoton! Muihin perusopintoihin poiketen, kurssin luennot ovat tärkeä osa kurssia, joskaan eivät siltikään pakollisia. Olennaista on oppia nopeasti rytmiin, jossa jokin tietokoneen asiakokonaisuus käydään läpi luennolla, sitä opiskellaan viikkotehtäviä (‘laskareita’) tehdessä, ja lopulta kerrataan minikokeeseen. Kun luennolla heprealta kuulostava, vaikea asia on läpikäyty kolmeen kertaan, huomaat kokeeseen tullessasi yhtäkkiä ymmärtäväsi ja osaavasi käyttää konekieltä kuin luennoitsija itse!
 
Kurssilla opitaan perusteet siitä, mitä tietokoneen sisällä oikeasti tapahtuu, eli tutustutaan mm. prosessorin toimintoihin, yhden ohjelman suoritukseen koneessa ja opetellaan hiukan symbolista konekieltä. Tällä konekielellä tosin ei ole kovinkaan paljon tekemistä "oikeiden assemblerien" (Masm, Nasm, Fasm) kanssa vaan kurssilla käytetään laitoksen omaan opetuskäyttöön väsättyä TTK91-assemblyä ja Titokone-simulaattoria. Pääpaino on kuitenkin enemmän teorian ymmärtämisessä. Kurssin sisältö jakaa opiskelijoita ehkä selvimmin kahteen leiriin: niihin jotka hehkuttavat ja niihin jotka vihaavat yli kaiken.
 
Laskuharjoituksiin tulee varata kohtuullisesti aikaa, sillä vastaukset harvemmin löytyvät suoraan lähdekirjallisuudesta. Ne on itse löydettävä soveltamalla opittua asiaa. TTK91-symbolinen konekieli vaikuttanee hieman kankealta, mutta ajaa tehtävänsä. Moni on ihmetellyt, miksei opetuskielenä käytetä jotain oikeaa assemblyä. Vastaus on melko yksinkertainen: Kurssilla on tarkoitus oppia tietokoneen toimintaa eikä nykyisten assemblerien ominaisuuksia makroineen ja muine asioineen, joilla toimintaan liittyvät yksityiskohdat voisi sivuuttaa. Tietokoneen toimintaankin kurssi on loppujen lopuksi melko pintaraapaisu, josta voi jatkaa syventävään Tietokoneen Rakenne-kurssiin.
 
Kurssi on siitä erikoinen, että kurssin loppukokeen voi korvata neljällä kurssin aikana tehtävällä minikokeella.
 
P.S.
Kurssista liikkuu jäärien keskuudessa paljon meemejä, mutta parasta on jättää ennakkohype väliin ja mennä kurssille avoimin mielin.
</div>
 
== Pakolliset Aineopinnot ==
 
=== Tietorakenteet ja algoritmit II (5 op) ===
{{hatnote|Tunnetaan myös nimellä TiRa II}}
 
TiRa II on TiRa I:n jatko-osa. Kurssi jatkaa siitä mihin TiRa I jäi. Kurssi käsittelee Tirakirjan luvut 8-14, joissa aiheina ovat rekursiiviset algoritmit (dynaaminen ohjelmointi, peruuttava haku yms.) ja verkko-algoritmit (Dijkstra, Bellmanin ja Fordin, Floyd Warshall, Ford Fulkerson yms).
 
Samoin kuin OhJa:ssa niin TiRa II harjoitustehtävät laajenevat ja tulevat entistä mielenkiintoisemmiksi - ja haastavammiksi. Älä sure, jos tehtävät tuntuvat liian vaikealta. Kurssin algoritmit ovat tosi haastavia monelle, etenkin rekursiiviset algoritmit tuntuvat olevan monelle tosi epäselviä ja vaikeasti ymmärrettävissä. Jos koet, että tehtävät ovat liian haastavia, kannattaa ehdottomasti käydä algoritmipajassa!
 
Kurssi kannattaa suorittaa heti TiRa I:n jälkeen, jolloin TiRa I:n asiat ovat vielä tuoreena muistissa. TiRa II:ssa oletetaan kaikki TiRa I:n asiat tutuksi.
 
=== Tietokannat ja web-ohjelmointi (5 op) ===
 
Kurssilla tehdään Pythonin Flaskillä vapaavalintainen web sovellus joka käytää pientä SQL-tietokantaa apuna. Projekti on melko itsenäinen ja periodin pituisen kurssin aikan on vain muutama välipalautus joissa palautusten kriteerit nousevat kurssin edetessä. Näin saadaan kurssin mittaan tasainen eteneminen. Kurssissa materiaali jossa opastetaan HTML ja SQL perusteet. Ennakkotietona tälle kurssille on hyvä olla kurssi 'Tietokantojen perusteet' käytynä. 
 
'''Huom''' Voit myös ilmoittaa kurssin vetäjälle, että haluat tehdä kurssin omassa aikataulussasi. Tällöin palautat vain lopullisen sovelluksen kun se on valmis. Tässä toteutuksessa välipalautuksia ei pisteytetä ja arvosana tulee täysin lopullisen palautuksen perusteella.
 
=== Laskennan mallit (5 op) ===
{{hatnote|Tunnetaan myös nimellä Lama}}
 
Laskennan mallit on teoreettinen kurssi, jolla opetellaan varsin käytännöllisiä työvälineitä. Kurssilla käsitellään mm. laskennallisia ongelmia, äärellisiä automaatteja, säännöllisiä lausekkeita, kontekstittomia kielioppeja ja Turingin koneita. Kurssi saattaa tuntua hankalalta alun pallo-nuoli-automaattipiirtelyiden jälkeen, mutta kun tottuu lukemaan täsmällistä formaalia esitystapaa, itse asia ei olekaan niin kovin kummallista. Loppujen lopuksi kysymys on vain menetelmistä, joilla voidaan jäsentää ja käsitellä erilaisia määrämuotoisia merkkijonoja, kuten aritmeettisia lausekkeita, päivämääriä ja muuta vastaavaa. Tutuiksi tulevat myös Turingin koneet, jotka ovat äärimmäisen kömpelö tietokoneen teoreettinen malli, mutta samalla myös yksinkertaisin mahdollinen mekaanisen laskentakoneen malli. Loppuhuipennuksena törmätään surullisenkuuluisaan pysähtymisongelmaan. Kun sen merkityksen onnistuu ymmärtämään, ymmärtää jo paljon siitä, mitä ohjelmallisesti on mahdollista tehdä.
 
Kurssin viikkotehtävissä ("laskareissa") harjoitellaan paljon todistamista, etenkin ristiriita todistamista. Todistaminen oletetaan tutuksi, joten sitä ei käydä läpi kurssin aikana. Todistaminen voi tuntua tosi hankalalta ja turhauttavalta, etenkin kun sitä on tosi hankalaa opettaa. Kurssikirjassa, Introduction to the Theory of Computation (Michael Sipser), käydään tunnetuimmat todistustekniikat läpi.
 
Älä turhaan masennu, jos pumppauslemma ja kumppanit menevät aluksi kertakaikkiaan yli hilseen, monella muulla on sama tilanne. Eräs vitsi laitoksella onkin, että laitokselta on vaikea löytää opiskelijaa, joka osaisi pumppauslemman selittää ("meni kokeessa oikein, en tiedä mitä tein"). Kurssia käydessä ei välttämättä ole minkäänlaista mielikuvaa, mihin kurssilla käsiteltäviä asioita voisi ikinä tarvita, mutta myöhemmin opinnoissa asioihin voi törmätä esim. Ohjelmointikielten kääntäjien tai rakenteisten dokumenttien käsittelyn yhteydessä, joista voitaneen mainita esimerkiksi XML-dokumenttien muuttaminen esimerkiksi HTML-esitysmuotoon. Kurssi kannattaa kuitenkin käydä läpi ajatuksen kanssa, koska mekaaninen ulkoapänttääminen ei juuri auta. Tietorakenteet -kurssin tapaan asiat pitää oikeasti tajuta, jotta kurssista suoriutuu.
 
Tira:ssa voi pärjätä aika hyvin ilman JYM:ä, mutta Lama:ssa ei. On ehdottomasti suositeltu, että olet käynyt vähintään JYM:n ennen Lamaa.
 
=== Tietojenkäsittely ja yhteiskunta (5 op) ===
 
=== Ohjelmistotuotanto (5 op) ===
{{hatnote|Tunnetaan myös nimellä Ohtu}}
 
Kurssilla perehdytään ohjelmistotuotantoon, sen ongelmiin ja ketterään prosessimalliin. Ohjelmistotuotanto-kurssia voidaan pitää Ohjelmistotekniikka-kurssin jatkeena. Viikottaisten laskaritehtävien lisäksi toteutetaan neljä viikkoa kestävä miniprojekti ryhmätyönä. Projektin ideana on harjoitella ketterää ohjelmistokehitystä Ohjelmistotuotantoprojektia varten.
 
Kurssin hyväksytty suorittaminen on vaatimus Ohjelmistotuotantoprojekti-kurssille.


* Tunnetaan myös nimellä Ohpe
Kurssiin kuuluva miniprojekti on mahdollista hyväksilukea työkokemuksen perusteella. Kts [[Ohtun_ja_ohtuprojektin_hyväksilukeminen]]
* 1. periodissa sekä uudelleen 3. periodissa


Kurssilla opetetaan fukseille, mitä ovat algoritmit, muuttujat, lauseet, lausekkeet,
=== Tietoturvan perusteet (5 op) ===
ohjausrakenteet ja erityisesti oliot. Heti alusta alkaen tehdään omia ohjelmia koneella.
Kurssi on tarkoitettu ensisijaisesti niille, joilla ei ole olio-ohjelmointitaustaa,
mutta osaavienkin ohjelmoijien olisi syytä lukea kurssimateriaali yhteisen kielen
omaksumiseksi ja mennä sitten heti tenttiin. Opetuskielenä on Java.


=== Ohjelmoinnin jatkokurssi (4 op) ===
Tietoturvan perusteet pyörii tällä hetkellä vain englannin kielisenä itsenäisesti suoritettava MOOC kokonaisuutena. Kurssi koostuu käytännön koodaus tehtävistä sekä esseistä ja näiden vertaisarvioinneista. Esitietona tälle kurssille voi suositella "Tietokanta ja Web ohjelmointi"-kurssia, koska monet kurssin tehtävistä, mukaanlukien loppuprojekti,  sisältävät tietokannan ja selaimen välistä kommunikaatiota ja näihin liittyviä haavoittuvuuksia.


* Korvaa kurssin Java-ohjelmointi, joka tunnetaan myös nimellä Java
=== Laskentaympäristöt (5 op) ===
* 2. periodissa sekä uudelleen 4. periodissa


Kurssin Java-ohjelmointi kuvaus:
=== Introduction to Artificial Intelligence (5 op) ===
{{hatnote|Tunnettiin ennen myös nimellä johdatus tekoälyyn (JohTek)}}


Kun ohjelmoinnin perusteet ovat hallussa, syvennytään Javaan, luokkiin ja olioihin.
Datatieteen maisteriopintojen ensimmäisiä kursseja. Voi suositella myös kandivaiheen opiskelijoille
Kurssilla on perinteisesti työläät laskarit, mutta opittavaa asiaakin on paljon ja harva fuksi sisäistää aivan kaiken kurssilla.
Kurssilla ei käsitellä Javan kirjastopakkauksia, vaan kielen välineiden (luokat,
oliot, metodit, perintä, koosteisuus) hyödyntämistä harjoituksina tehtävissä ohjelmissa.
Kuten Ohjelmoinnin perusteet, tämäkin kurssi on erittäin käytännönläheinen - koko ajan
ohjelmoidaan. Suurimmat ongelmat tulevat mainittujen käsitteiden ymmärtämisestä, mutta
toisin kuin matematiikassa, täällä asioille löytyy heti järkevä käyttötarkoitus.


Kummallakin kurssilla on käytössä suomenkielinen perusopetusteos Ohjelmoinnin perusteet
Tämän kurssin tarkoituksena on johdattaa tekoälyn eri osa-alueisiin, tutkimusongelmiin ja alan kulmakiviin. Teemoina käsitellään niin koneoppimista, perinteistä logiikkaa kuin pelitekoälyjäkin. Kurssista pitäisi jäädä käteen jonkinlainen kuva alan valtavasta kirjosta. Kurssilla on käytännön ohjelmointitehtäviä ja teoreettisempi tentti.
Java-kielellä, jonka on kirjoittanut kurssia syksyisin luennoiva Arto Wikla. Materiaali
löytyy myös verkosta laitoksen www-sivuilta.


Kurssia seuraava erillinen harjoitustyö (2 ov, 4 op) on syytä suorittaa mahdollisimman pian
=== Ohjelmistoprojekti (10 op) ===
näiden kurssien jälkeen. Huomaa kuitenkin, että harjoitustyön saa aloittaa vasta, kun
{{hatnote|Tunnetaan myös nimellä Ohtuprojekti}}
nämä kurssit on suoritettu (eli siis niistä on suoritusmerkintä)! Ohjelmat kannattaa
molemmilla kursseilla heti kättelyssä alkaa tehdä koneilla, ettei sitten harjoitustyössä
mene sormi suuhun - siellä kun ei ole enää aikaa opetella UNIX-perusteita ja ohjelmien
kääntämistä.


=== Ohjelmoinnin harjoitustyö (4 op) ===
Kurssin esitietovaatimuksena on suoritettu Ohjelmistotuotanto-kurssi sekä yksi aineopintojen harjoitustyö (kts. alla).


* Tunnetaan myös nimellä Java-labra
Ohjelmistotuotantoprojektissa harjoitellaan projektin toteuttamista jotakuinkin reaalimaailmaa vastaavin menetelmin. Projekti toteutetaan 5-6 hengen ryhmässä. Projektilla on siis ihkaoikea asiakas (yleensä laitokselta, yliopistolta tai jostain yrityksestä), joka asettaa vaatimukset tuotteelle. Näihin vaatimuksiin ryhmän pitäisi sitten pystyä ohjelmistollaan vastaamaan mahdollisimman hyvin. Projektin aiheeseen ei voi vaikuttaa, mutta haluamastaan ryhmästä voi esittää toiveen. Aihe voi olla periaatteessa mikä tahansa. Ei ole ollenkaan tavatonta, että ensitöikseen joutuu opettelemaan uuden ohjelmointikielen.
* Ryhmiä joka periodissa sekä kesäisin


"Java-labra" laajentaa Java-kurssin asioita. Javan loppupuolen laskarit ovat juuri sitä
Kurssin päätyttyä tuotteeseen ei sisälly ylläpitovastuuta. Useat projektit menevät keskeneräisenä tuleville osanottajille jatkokehitykseen, mutta osa on päätynyt oikeaan tuotantoonkin. Kurssin perimmäinen tarkoitus on kuitenkin harjoitella prosessia enemmän kuin itse projektin toteuttamista. Ei kannata liikaa stressata, että tuotteen tulisi olla valmis kurssin päättyessä. Ohjelmoimaankin pääsee varmasti tarpeeksi, ja ohessa mahdolliset uudet työkalutkin tulevat väkipakostakin tutuksi.
tärkeää ja olennaista kamaa, jonka joutuu viimeistään täällä opettelemaan, vaikka se
kurssilla skipataankin nopeasti ja kiireellä. Tätä tärkeää kamaa ovat mm. tiedostojen
käsittely, poik-keukset, rajapintaluokat sekä pakkaukset. Kannattaa siis höristää
korviaan jo Java-kurssilla näitä avainsanoja kuullessaan, vaikka mieli tekisikin jättää
parit viimeiset laskarit väliin. Myös Java-kurssin aikana mahdollisesti hankittu
API-kuvausten lukutaito on hyödyllinen esitieto.


Labrassa on myös runsaasti kokonaan ohi Ohjelmoinnin perusteiden ja Java-kurssin
Projekti toteutetaan käyttäen laitoksen omaa ketterää ohjelmistokehitysmenetelmää (Scrum-variaatio). Varsinaista projektipäällikköä ei ryhmässä ole, ellei ryhmä sellaista keskuudestaan välttämättä halua valita. Kurssi on hyvin opettavainen ja ryhmä saa käytännössä lähes vapaat kädet itsensä toteuttamiseen. Ryhmätyön merkitys ja asiakkaan kanssa vaatimuksista vääntäminen ovat kurssin ydinkauraa. Ongelmilta (lue: haasteilta) ei voi projektin edetessä välttyä ja moiset kannattaa ottaa oppimiskokemuksena. Kurssin arvostelu perustuu pitkälti ryhmän vertaisarviointiin. Asiakkaan antamalla arvosanalla ei juuri merkitystä ole.
vaatimusten olevaa uutta ja ihmeellistä asiaa: kirjastopakkaukset eli Javan valmiit
työkalut, graafisen käyttöliittymän ohjelmointi (Swing-komponenteilla),
ohjelman suunnittelu olioita käyttäen, koodin kommentointi ja testaus, projektin
dokumentointi... Lisäksi pitää vielä oppia pysymään projektin aikataulussa ihan ilman
äidin apua. Ajankäytön opettelu on jo itsessään aikamoinen työmaa.


Kurssilla tehdään oma, kokonainen, pienehkö mutta toimiva ohjelma. Ohjelmasta saa tehdä
Kurssista saa eniten irti, jos sopii ryhmän kanssa erilaisten työtapojen ja menetelmien (esim. eri pituiset sprintit) kokeilemisesta, koska oikeilla työpaikoilla tällaisia kokeiluja harvemmin pääsee enää toteuttamaan. Kurssin tärkein opetus lienee, että asiakkaan kaikkiin vaatimuksiin ei missään nimessä ole pakko suostua, ja että tekniset hankaluudet pystytään todennäköisesti ohittamaan onnistuneilla neuvotteluilla.
niin upean kuin osaa, mutta parasta olisi tässä vaiheessa pitää liika into pussissa.
Palkkana on kuitenkin vain oppia ja 4 opintopistettä, eikä niitäkään saa, jos megamahtava
Hekumometri joka-suuntaisella kutkulaattorilla ei toimi, leviää käsiin ja kaataa
kääntäjän kotiovella. Lisäksi ruutia pitää jättää myös ohjelman dokumentin
kirjoittamiseen. Ja tämä kaikki pitäisi saada valmiiksi 6 viikossa! Nopea laskutoimitus
osoittaa, että jos otat löysästi labran alkupuoliskon, loppupuolella sinulle rapsahtaa
jo lähes 30 viikkotuntia pelkkää labratyötä, jos aiot saada ohjelman valmiiksi...


Labraopetus koostuu alun yhteisluennoista, ryhmätapaamisista ja viikoit-taisista
Koko kurssi on mahdollista hyväksilukea työkokemuksen perusteella. Kts [[Ohtun_ja_ohtuprojektin_hyväksilukeminen]]
henkilökohtaisista ohjauspalavereista. Alkuluennoilla käydään läpi mm. graafisen
käyttöliittymän laatimisen perusteita ja dokumentointia, ryhmä-tapaamisissa esitellään
omaa työtä muille. Huomaa että alkuluennolle osallistuminen on labraan osallistumisen kannalta pakollista. Ohjauspalavereissa raportoidaan ohjaajalle työn edistymisestä ja
ihmetellään yhdessä vaikeita kohtia. Tapaamisten lisäksi ohjaajilla on päivystysajat,
jolloin päivys-tävältä ohjaajalta saa käydä kysymässä apua. Labraneuvonta toimii
kakkoske-rroksen aulassa (tarkat neuvonta-ajankohdat ilmoitetaan kurssilla).


Työn alkaessa pääsee yleensä itku. Joudut synkkään metsään vain voiveitsen kanssa. Työsi
=== Kandidaatintutkielma (6 op) + Äidinkieli (3 op) + Tutkimustiedonhaku (1 op) ===
ohjaajalta, kavereilta ja verkosta saat kyllä apua. Ryhmätapaamisiin, ohjelman
{{hatnote|Tunnetaan nimellä kandi}}
suunnitteluun ja dokumentointiin, Javan hienouksien opetteluun sekä varsinaiseen
koodaukseen menee joka tapauksessa paljon aikaa. Kalenteriin onkin parasta merkitä jo
kurssia aloittaessaan ne 80 tuntia, jotka käytät tämän kurssin suorittamiseen ennen
deadlinea. Jos Ohjelmoinnin perusteet ja Java-ohjelmointi on tullut suoritettua hieman
horjuen (alle kolmosen arvosanalla), on syytä suosiolla lisätä parikymmentä tuntia
aikatauluun. Joskushan ne esitiedot on hankittava - viimeistään labratyön ohessa ne saa
kantapään kautta, mutta ei ilmaiseksi, vaan useiden hikisten lisätyötuntien hinnalla.
Esitiedoista on hyötyä: jos sinulla on jo ammattillista kokemusta koodauk-sesta tai
tieteellisten raporttien kirjoittamisesta, voit ehkä hieman pienentää arviota
tuntimäärästäsi.


=== Ohjelmistojen mallintaminen (4 op) ===
Tämä kolmen kurssin kokonaisuus on käytännössä yksi iso suoritus. Kandidaatintutkielman kirjoittamisen ohessa opetellaan tieteellistä kirjoittamista, tutkimustiedonhakua sekä esiintymistä. Arvostelu koostuu seuraavista osasuorituksista: 2-4 sivun referaatti, 10 sivun aine, 1.5-2 sivun kypsyysnäyte, 15-20min esitelmä ja ~20 sivun tutkielma. Näistä viimeinen on se varsinainen "kandi", joka on samalla ainoa arvosanaan vaikuttava komponentti. Muut suoritukset on pakko tehdä, mutta ne arvostellaan binäärisesti "tehty/ei tehty".


Korvaa kurssin Ohjelmistotekniikan menetelmät (4 op), jonka kuvaus seuraavassa:
Optimaalisessa tilanteessa opiskelija kirjoittaa kurssin aikana yhtä tekstiä, jonka eri vaiheet muodostavat tarvittavat kirjalliset komponentit. Monen tulee kuitenkin *pivotattua* jossain vaiheessa, jolloin siihen mennessä kirjoitetusta iso osa pitää heittää roskiin. Tämän välttää parhaiten ottamalla alun aiheenvalinnan tosissaan.


Kurssilla annetaan perustiedot ohjelmistojen mallintamisessa käytetyistä työkaluista.
Käpistelijälle on tunnetusti tekstin tuottaminen ongelma, tieteellisestä kirjoittamisesta nyt puhumattakaan. Kurssissa ei välttämättä pärjää tosin hyväkään kirjoittaja, koska tieteellisten artikkelien kirjoittaminen ottaa hieman eri lähtökohdan kuin esseen, raporttien tai dokumentaation laatiminen. Hermot menevät takuuvarmasti jossain vaiheessa mitättömiltä tuntuvien pikkuasioiden viilaamiseen, joita ohjaaja jaksaa ja jaksaa kaivaa esiin joka kerralla.
Kurssilla piirretään ja luetaan kaavioita jotka kuvaavat ohjelman korkean tason rakennetta. Lisäksi opetukseen sisältyy hitusen testausta ja versionhallintaa, jotka ovat tärkeitä ohjelmointityön apuvälineitä.
Tämän kurssin asioista huhutaan olevan hyötyä
Ohjelmoinnin harjoitustyön dokumentoinnissa ja erityisesti kurssista on hyötyä harjoitustyössä "Tietokantasovellus", jolle se on pakollinen esitietokurssi.


=== Tietokantojen perusteet (4 op) ===
Ryhmät jaetaan sen perusteella, minkä olet ilmoittautumisessa ilmaissut mahdolliseksi maisterilinjaksesi. Ryhmässä on 5-6 henkilöä, ohjaaja sekä valvoja. Valvojalla ei ole juuri muuta virkaa kuin varsinaisen tutkielman tarkastaminen. Ohjaajan kanssa sovitaan (yleensä) viikoittainen tapaamisaika. Ohjauksen laatu vaihtelee, eikä suoria neuvoja välttämättä saa ohjaajalta missään vaiheessa.


* Tunnetaan myös nimellä Tikape
Esitelmä (15-20min) pidetään oman pienryhmän kesken omasta aiheesta, yleensä aineen pohjalta. Tätäkään ei kannata stressata liikaa, sillä "arvostelu" on ihan oikeastikin tasolla "suoritettu jos jotain mumisee ryhmän edessä".  
* 2. periodissa sekä uudelleen 4. periodissa


Tietokantojen perusteet -kurssi opettaa relaatiokannat ja SQL:n. Nämä kannattaa painaa
Kurssi sisältää ohessa myös ns. kypsyysnäytteen, jossa pitää laatia parin sivun mittainen kielellisesti huoliteltu teksti jostain tutkielman aihepiiristä. Tämä vastaa teknisesti toisen kotimaisen kielen kurssia sikäli, että kypsyysnäyte on todistus siitä että opiskelija osaa oman äidinkielensä "virkamiestasolla".
alusta alkaen hyvin päähän, sillä niitä tullaan tarvitsemaan lähes joka välissä. Erikoista tässä kurssissa on
se, että perinteisiä laskareita ei ole, vaan kaikki tehtävät tehdään koneella
www-liittymän kautta ja vain oikeat ratkaisut tuottavat harjoituspisteitä. Järjestelmä
myös opastaa tarvittaessa. Tämän lisäksi kurssilla suunnitellaan ryhmätyönä tietokanta.
Relaatioalgebran ja joskus hankalaltakin tuntuvan
SQL-kielen opettelu on kurssin suorituksen kannalta olennaisen tärkeää.  


Kummankin kurssin suoritus tapahtuu käymällä luennoilla ja kurssikokeissa ja
Aiheenvalintakäytäntö vaihtelee ohjaajittain. Tutkielman aihepiirin aihe valitaan useimmiten valmiista listasta, mutta joissakin ryhmissä aihetta saa itsekin ehdottaa. Moni on ampunut itseään jalkaan ehdottamalla omaa aihepiiriä, ja on huomannutkin jälkeenpäin, että tutkimustietoa aihealueesta ei joko löydy ymmärrettävässä mudossa tai sitten löytyy aivan liikaa. Ennen oman aiheen ehdottamista kannattaa varmistaa, että aiheesta todellakin löytyy riittävästi "lukukelpoista" tutkimustietoa. Aihepiiri valitaan jo ensimmäisessä tapaamisessa.  
suorittamalla lasku- ja mikroharjoituksia. Vain ahkera harjoittelu tekee mestarin, ja
juuri siksi kurssin harjoitukset on suunniteltu mahdollisimman hyvin opetusta
palvelevaksi. Pelkällä erilliskokeella kurssien läpäiseminen voi onnistua, mutta vaatii
jonkun verran hyvää pohjatietoa aiheesta. Harjoituksia kannattaa tehdä huolella.
Laiskottelu näillä kursseilla voi kostautua myöhemmin tehtävässä harjoitustyössä "Tietokantasovellus", jossa opiskelijoiden oletetaan osaavan käyttää oikeita apuvälineitä.


=== Tietokantasovellus (4 op) ===
Kurssiin sisältyy myös kymmenisen luentoa, joilla opetetaan tieteellisen kirjoittamisen tyyliä ja tiedonhaun perusteita. Näistä ainakin ensimmäisellä on pakollinen läsnäolo.


* Aikaisemmin Tietokantasovellusten harjoitustyö eli Tsoha, vanhusten kesken Infolabra tai Infon labra
==== Kandin aikataulusta ====
* Ryhmiä joka periodissa sekä kesäisin


Ohjelmistotekniikan menetelmät ja Tietokantojen perusteet ovat esitietovaatimuksena
Kanditutkielma kurssi kestää yhden lukukauden ja se on tarjolla sekä syksyisin, että keväisin. Usein kandin kirjoittaminen on opiskelijoille se mistä aletaan ensimmäisenä luistamaan, kun periodissa on liikaa tekemistä. Näin kandi jää kesken ja venyy tuskallisen pitkäksi projektiksi. Kesken jäävät kandit siirtyvät yleensä kurssin vastuuhenkilön ohjattaviksi. Tunnetaan myös tapauksia missä opiskelija anoo lisäaikaa, sama ohjaaja säilyy ja opiskelija kirjoittaa tutkielman esim joululomalla valmiiksi.
Tietokantasovellus-harjoitustyölle. Se on pääasiassa pienen WWW-sovelluksen
laatimista SQL-kantaa hyväksi käyttäen.
Tämän harjoitustyön keskeinen teema on tietokantojen hallintaan liittyvät asiat sekä
myös huolelliseen suunnitteluun keskittyminen.  


Opiskelijasta voi kurssilla kirjoitettavan dokumentaation määrä turhauttavalta ja suuri houkutus onkin tehdä dokumentit vasta viimeisenä iltana. Dokumenttien tarkoitus on kuitenkin opastaa opiskelijaa oikeaan suuntaan suunnittelessaan omaa sovellustaan. Harjoitustyön ohjaajaa saa käyttää surutta apuna sekä ohjelmiston suunnittelun ongelmien että dokumenttien laatimisen kanssa.
Osaston tarjotessa niukasti kesäopiskelumahdollisuuksia on kandin kirjoittaminen kesällä laiturin nokassa houkutteleva vaihtoehto. Virallisesti tätä mahdollisuutta ei ole tarjottu, mutta omatoiminen opiskelija voi kirjoittaa tutkielman kesällä ja tehdä esitelmän ym. pakolliset osat syksyn kurssilla. Kannattaa harkita jo kevään luennoilla käyntiä, jos tämä vaihtoehto kiinnostaa..


Itse toteutuksen tekeminen onkin sitten vähemmän työlästä, jos suunnittelu on kunnolla
<div style="border: 1px solid red; padding: 10px; margin: 10px;">
tehty. WWW-sivustolle tulevan rakennelmansa saa toteuttaa varsin monella tavalla tietokantamoottoreissakin on valinnan varaa. Suurin osa kurssin toteutuksista tehdään joko PHP:llä tai Javalla, mutta jos intoa löytyy jonkin eksoottisemman ympäristön opettelemiseen niin sekin onnistuu.
<strong style="color:red;font-size:1rem">Vanha opetussuunitelma (2020-2023):</strong>


Jani Kielenniva <br />
=== Tietoliikenteen perusteet (5 op) ===
Niki Eskola <br />
{{hatnote|Tunnetaan myös nimellä Tilpe}}
Eeva Nevalainen


=== Tietokoneen toiminta (4 op) ===
Kurssilla paneudutaan internetin peruskäsitteistöön ja -tekniikoihin. Kurssi etenee opettelemalla TCP/IP-pinoa taso tasolta. Tutuksi tulee siis pääpiirteittäin kaikki WWW-selaimen sielunelämästä aina verkkokortin bittitasolle asti. Kurssi antaa hyvät perustiedot tietoliikenteestä, jotka ovat tarpeen kaikkien eri linjojen opiskelijoille.


* Tunnetaan myös nimellä Tito
Kurssin sisältö on huomattavan laaja ja yksityiskohtainen opintopistemäärään nähden. Opiskelu perustuu paljolti TCP/IP-pinon kerrosten ja mekanismien toiminnan ulkoa opettelemiseen (esim. TCP-ruuhkanhallintamekanismit). Kokeessa ongelmaksi saattaa koitua hahmottaa, millä tasolla, ja kuinka yleinen vastaus kysymykseen halutaan (kokeessa saatetaan esimerkiksi kysyä, mitä tapahtuu kun opiskelija klikkaa linkkiä selaimellaan). Mikäli kurssilla vastaantuleva lyhenteiden ja käsitteistön määrä alkaa hirvittää, kurssilla käytettävä kurssikirja on mitä mainion apu pelonlievitykseen. Varoitettakoon, että asian ja detaljien suuresta määrästä johtuen kurssista on melko vaikea saada täyttä arvosanaa.
* 2. periodissa sekä uudelleen 4. periodissa


Kurssilla opitaan perusteet siitä, mitä tietokoneen sisällä oikeasti tapahtuu, eli
=== Käyttöjärjestelmät (5 op)===
tutustutaan mm. prosessorin toimintoihin, yhden ohjelman suoritukseen koneessa ja
{{hatnote|Tunnetaan myös nimellä Käjä}}
opetellaan hiukan symbolista konekieltä. Tällä konekielellä tosin ei ole kovinkaan
paljon tekemistä assemblerin kanssa vaan kurssilla käytetään laitoksen omaan
opetuskäyttöön väsättyä Titokone-simulaattoria. Pääpaino on kuitenkin enemmän teorian
ymmärtämisessä. Monet väittävät kurssin olevan työläimpiä ensimmäisen vuoden
peruskursseista. Oppimisessa auttaa Häkkisen hyvä kurssimoniste, jossa monet
monimutkaisetkin asiat on selitetty varsin helppotajuisesti. Laskuharjoituksiin tulee
varata kohtuullisesti aikaa, sillä vastaukset harvemmin löytyvät suoraan
lähdekirjallisuudesta - ne on itse löydettävä soveltamalla opittua asiaa.


Anni Rytkönen <br />
Kurssin voi käsittää siltana Tietokoneen toiminta -kurssin ja Ohjelmoinnin perusteet -kurssin välillä. Käsiteltävät asiat sisältävät käyttöjärjestelmien rakenteen ja toimintaperiaatteet, rinnakkaisuuden toteutuksia ja ongelmia, muistinhallintaa ja virtuaalimuistia, prosessorin vuoronantoa jne.
Jenny Sandgren <br />
Niki Eskola


=== Tietorakenteet (8 op) ===
Samoin kuin TiTossa, Käjänkin tentin voi suorittaa neljällä minitentillä kurssin aikana.
</div>


* Tunnetaan myös nimellä Tira
== Aineopintojen harjoitustöiden valintakori ==
* 1. ja 2. periodissa sekä uudelleen 3. ja 4. periodissa


Kas tässäpä vasta mielenkiintoinen ja hyödyllinen kurssi, varsinkin ohjelmointitouhuista
Tästä korista tulee valita yksi suoritus. Sen pitää olla valmiina ennen Ohjelmistoprojektia (kts. yllä).
innostuneille. Käytännön ohjelmointiprojekteissa tulee jatkuvasti vastaan tilanteita,
joissa pitäisi käsitellä suuria tietomääriä: lisätä, poistaa, etsiä ja järjestellä
tietoalkiota. Tietorakenteet-kurssilla opetetaan lukuisia toinen toistaan näppärämpiä
keinoja hallita tietoalkioröykkiöitä. Oikeastaan vasta kurssin asiat hallittuaan voi
sanoa oikeasti osaavansa koodata. Tirakurssi on myös ensimmäisiä peruskursseja, joilla
kurkistetaan tietojenkäsittelyn teoreettisempaan puoleen (algoritmit ja niiden
analysointi).


Kuten kurssin nimestä voi hieman aavistellakin, valtaosa opetuksesta keskittyy
=== Ohjelmistotekniikka (4 op) ===
erilaisten tietorakenteiden käsittelyyn. Voitte olla varmoja, että kurssin
{{hatnote|Tunnetaan myös niemellä Ohte}}
suoritettuanne ainakin perustietorakenteet (taulukko, pino, lista) ovat syöpyneet
lähtemättömästi tajuntaanne. Hämäriä muistikuvia saattaa löytyä jopa hieman
eksoottisemmistakin tietorakenteista kuten puista, hajauttimista ja verkoista.
Tietorakenteiden lisäksi kurssilla käydään läpi muutamia mielenkiintoisia haku- ja
järjestysalgoritmeja ja raapaistaan kevyesti aikavaativuusanalyysiä.


Kurssin sisällön luonteesta johtuen opiskelijan on hyvä verestää matematiikan taitojaan ennen kurssia ja kurssin pakollinen esitietovaatimus onkin "Johdatus diskreettiin matematiikkaan". Matemaattista esitietovaatimusta ei kuitenkaan ole syytä kavahtaa, sillä loppujen lopuksi itse käsiteltävät asiat ovat suhteellisen yksinkertaisia.  
Kurssilla annetaan perustiedot ohjelmistojen mallintamisessa käytetyistä työkaluista. Kurssilla piirretään ja luetaan kaavioita jotka kuvaavat ohjelman korkean tason rakennetta. Lisäksi opetukseen sisältyy testausta ja versionhallintaa, jotka ovat tärkeitä ohjelmointityön apuvälineitä. Tällä kurssilla tehdään myös oma kokonainen ohjelmistoprojekti. Arvosana koostuu projektin loppuarvosanasta, projektin viikkodeadlinesta ja muutaman ensimmäisen viikon laskaritehtävistä.


Lajitovereideni keskuudesta on kuulunut hieman jupinaa, että TIRA:n kurssi olisi aika
=== Algoritmit ja tekoäly (4 op) ===
vaikea ja työläs - itse en tällaista havainnut, koska kaikki oli mielestäni niin
{{hatnote|Tunnetaan myös nimellä Tiralabra}}
kiinnostavaa, että asioita oli suorastaan ilo opiskella (olenko perverssi?).
Myönnettäköön, että kurssille on tungettu runsaasti tavaraa ja osa laskaritehtävistä
vaatii kohtuuttoman paljon aikaa, paperia ja hermoja, mutta ahkeralla ja huolellisella
työskentelyllä niistäkin selviää. Parhaiten asiat oppii, kun tekee kiltisti
laskaritehtävät (ainakin edes yrittää) ja osallistuu aktiivisesti luennoille ja
laskareihin. Jos jokin asia menee yli ymmärryksen, kannattaa heti vaatia luennoijaa tai
laskarinpitäjää vääntämään sama rautalangasta, ettei tajuntaan jää mustia aukkoja.


Pauli Misikangas <br />
Tietorakenteiden harjoitustyö eli Tiralabra on käytännön jatkoa Tietorakenteet-kurssille. Kurssilla pääsee leikkimään tietorakenteilla ihan oikeasti, eli tekemään kokonaisen ohjelman, jossa hyödynnetään joitain tietorakenteita ja algoritmeja. Ohjelma tulee tietenkin myös testata ja dokumentoida, mutta dokumentointivaatimukset ovat minimaaliset aiempiin harjoitustöihin verrattuna. Sallitut ohjelmointikielet riippuvat pitkälti harjoitustyön ohjaajasta, mutta laitoksella opetettavat kielet ovat yleensä käytettävissä.
Marja Huovinen


=== Tietorakenteiden harjoitustyö (4 op) ===
Harjoitustyö on vaativampi kuin Ohjelmoinnin harjoitustyö, joten kurssille ei kannata ilmoittautua, ellei ole varannut riittävästi aikaa työn tekemiseen. Keskimäärin työhön menee n. 80 työtuntia, mutta tehtävän aiheesta ja omista taidoista riippuen työtuntimäärä saattaa vaihdella huomattavastikin suuntaan tai toiseen. Jos työn aloittaa, sitä ei kannata lopettaa kesken, vaikka vähän vastustaisikin: Harjoitustyön keskeyttäneet ovat muita heikommassa asemassa, kun valitaan labraryhmään pääseviä.


* Tunnetaan myös nimellä Tiralabra
Kurssilta kannattaa ottaa kaikki hyöty irti, koska seuraava paikka, jossa ohjelmointitaitoja koetellaan, on yleensä Ohjelmistotuotantoprojekti ja siellä ohjelmoinnin oletetaan jo sujuvan rutiinilla.
* Ryhmiä joka periodissa sekä kesäisin


Tietorakenteiden harjoitustyö eli TIRA:n labra on suoraa jatkoa
===Tietoliikenne (4 op)===
Tietorakenteet-kurssille. Kurssilla pääsee leikkimään tietorakenteilla ihan oikeasti,
{{hatnote|Tunnetaan myös nimellä Tilpelabra}}
eli tekemään kokonaisen ohjelman, jossa hyödynnetään joitain tietorakenteita ja
algoritmeja. Ohjelma tulee tietenkin myös testata ja dokumentoida, mutta
dokumentointivaatimukset ovat varsin minimaaliset aiempiin harjoitustöihin verrattuna.
Sallitut ohjelmointikielet riippuvat pitkälti harjoitustyön ohjaajasta, mutta yleensä
laitoksella opetuskielinä olevat ohjelmointikielet ovat käytössä.


Harjoitustyö on huomattavasti vaativampi kuin Ohjelmoinnin harjoitustyö, joten
Järjestetään toukokuun intensiivijaksolla, Tietoliikenne-kurssin jälkeen. Osallistuminen edellyttää vähintään arvosanaa 3 Tietoliikenteen perusteet -kurssilta. Huonommallakin arvosanalla saattaa päästä mukaan jos osaa selittää vakuuttavasti.
kurssille ei kannata ilmoittautua, ellei ole varannut riittävästi aikaa työn tekemiseen.
Keskimäärin työhön menee n. 80 työtuntia, mutta tehtävän aiheesta ja omista taidoista
riippuen työtuntimäärä saattaa vaihdella huomattavastikin suuntaan tai toiseen. Jos työn
aloittaa, sitä ei kannata lopettaa kesken, vaikka vähän vastustaisikin: harjoitustyön
keskeyttäneet ovat muita heikommassa asemassa, kun valitaan labraryhmään pääseviä.


Monet ovat kokeneet TIRA:n labran varsin antoisaksi kurssiksi: työtä tehdessä saa
Harjoitustyössä ei lähtökohtaisesti ohjelmoida mitään, vaan enemminkin määritellään jokin tutkimusongelma johon etsitään itse vastaus. Perusratkaisu on analysoida jonkinlaista verkkoliikennettä. Muunkinlaisia projekteja on kuitenkin hyväksytty.
rutkasti käytännön kokemusta mm. UNIX-käyttöjärjestelmästä, ohjelmointityökaluista ja
tekstinkäsittelyohjelmista. Kurssilta kannattaa ottaa kaikki hyöty irti, koska seuraava
paikka, jossa ohjelmointitaitoja koetellaan, on yleensä Ohjelmistotuotantoprojekti ja
siellä ohjelmoinnin oletetaan jo sujuvan rutiinilla.


Pauli Misikangas
<div style="border: 1px solid red; padding: 10px; margin: 10px;">
<strong style="color:red;font-size:1rem">Vanha opetussuunitelma (2020-2023):</strong>


=== Laskennan mallit (6 op) ===
=== Tietokantasovellus (4 op) ===
{{hatnote|Tunnetaan myös nimellä Tsoha tai Tsohalabra}}


* Tunnetaan myös nimellä Lama
Kurssi on käytännössä pienen SQL-relaatiotietokantaa käyttävän WWW-sovelluksen laatimista (esim. yksinkertainen verkkokauppa). Tämän harjoitustyön keskeinen teema on tietokantojen hallintaan liittyvät asiat sekä myös huolelliseen suunnitteluun keskittyminen. Kurssi on monen webbikoodariksi aikovan mielestä erittäin hyödyllinen ja palkitseva. Jos tunnistit itsesi, kannattaa varoa ettei innostu liikaa ja tee vahingossa muutaman tuhannen rivin harjoitustyötä.
* Syksyisin


Kurssi luennoidaan koko lukukauden mittaisena niin, että viikossa on kaksi luento- ja kaksi laskarituntia.
Opiskelijasta voi kurssilla kirjoitettavan dokumentaation määrä turhauttavalta ja suuri houkutus onkin tehdä dokumentit vasta viimeisenä iltana. Dokumenttien tarkoitus on kuitenkin opastaa opiskelijaa oikeaan suuntaan suunnittelessaan omaa sovellustaan. Harjoitustyön ohjaajaa saa käyttää surutta apuna sekä ohjelmiston suunnittelun ongelmien että dokumenttien laatimisen kanssa.


Laskennan mallit on teoreettinen kurssi, jolla opetellaan varsin käytännöllisiä työvälineitä. Kurssilla käsitellään mm. laskennallisia ongelmia, äärellisiä automaatteja, säännöllisiä lausekkeita, kontekstittomia kielioppeja ja Turingin koneita. Kurssi saattaa tuntua hankalalta alun pallo-nuoli-automaattipiirtelyiden jälkeen, mutta kun tottuu lukemaan täsmällistä formaalia (matemaattista) esitystapaa, itse asia ei olekaan niin kovin kummallista. Loppujen lopuksi kysymys on vain menetelmistä, joilla voidaan jäsentää ja käsitellä erilaisia määrämuotoisia merkkijonoja, kuten aritmeettisia lausekkeita, päivämääriä ja muuta vastaavaa.
Itse toteutuksen tekeminen onkin sitten vähemmän työlästä, jos suunnittelu on kunnolla tehty. WWW-sivustolle tulevan rakennelmansa saa toteuttaa varsin monella tavalla ja tietokannoissakin on valinnan varaa. Suurin osa tekee harjoitustyönsä joko PHP:llä, Javalla, tai Ruby on Railssillä, mutta jos intoa (tai aiempaa osaamista) löytyy jonkin eksoottisemman ympäristön käyttämiseen, niin sekin on usein kelvannut ohjaajalle.
</div>


Tutuiksi tulevat myös Turingin koneet, jotka ovat äärimmäisen kömpelö tietokoneen teoreettinen malli, mutta samalla myös yksinkertaisin mahdollinen mekaanisen laskentakoneen malli. Loppuhuipennuksena törmätään Ricen lauseeseen (Kaikki Turingin koneiden epätriviaalit semanttiset ominaisuudet ovat ratkeamattomia.), jonka todistus vääntää ensinäkemältä aivot umpisolmuun. Jos lauseen merkityksen onnistuu ymmärtämään (spoileri: tietokoneohjelma ei voi yleisessä tapauksessa selvittää, mitä toinen ohjelma tekee), ymmärtää jo paljon siitä, mitä ohjelmallisesti on mahdollista tehdä. Epäselvää on, mitä tämä kertoo ihmisen ajattelun rajoista. Vallitseva uskomus on, ettei ihminenkään voi yleisessä tapauksessa selvittää, mitä jokin tietokoneohjelma tekee.
== Aineopintojen valinnaiset kurssit ==


Älä turhaan masennu, jos pumppauslemma ja kumppanit menevät aluksi kertakaikkiaan yli hilseen, monella muulla on sama tilanne. Kurssia käydessä ei välttämättä ole minkäänlaista mielikuvaa, mihin kurssilla käsiteltäviä asioita voisi tarvita, mutta myöhemmin opinnoissa asioihin voi törmätä esim. ohjelmointikielten kääntäjien tai rakenteisten dokumenttien käsittelyn yhteydessä, joista voitaneen mainita XML-dokumenttien muuttaminen esimerkiksi HTML-esitysmuotoon. Kurssi kannattaa kuitenkin käydä läpi ajatuksen kanssa, koska mekaaninen ulkoapänttääminen ei juuri auta. Asiat pitää oikeasti tajuta, jotta kurssista suoriutuu.
Osaston kurssitarjonta muuttuu valinnaisten kurssien osalta jatkuvasti, tarkista ajantasainen kurssitarjonta esim. Weboodista tai https://studies.helsinki.fi/opintotarjonta .


Aineopintoihin tulee sisällyttää vähintään 5 op tietojenkäsittelytieteen valinnaisia aineopintoja tai tietojenkäsittelytieteen syventäviä opintoja eli maisterikursseja. Tutkintorakenteessa on listattu seuraavat esimerkit:


Maria Huovinen<br>
* BSCS2011 Programming for Performance 5 op
Jouni Siren<br>
* CSM13401 Human Computer Interaction 5 op
Tommi Tuura
* TKT21003 Web-palvelinohjelmointi Ruby on Rails 5 op
71660185027256859176578
* TKT21004 Computer Architecture 5 op
* TKT21012 Algoritmit ongelmanratkaisussa 10 op
* TKT21018 Elements of AI: Tekoälyn perusteet 2 op
* TKT21026 Network Programming 5 op
* TKT21029 Functional Programming I 5 op
* TKT21030 Functional Programming II 5 op
* TKT21031 Tekoälyn etiikka: Johdanto 2 op
* TKT21032 Kilpaohjelmoinnin harjoittelu 1 3 op
* TKT21033 Kilpaohjelmoinnin harjoittelu 2 2 op
* TKT21034 Kilpaohjelmoinnin harjoittelu 3 3 op
* TKT21035 Kilpaohjelmoinnin harjoittelu 4 2 op
* TKT21036 DevOps with Docker 1 op
* TKT21037 DevOps with Docker: docker-compose 1 op
* TKT21038 DevOps with Docker: security and optimization 1 op
* TKT21039 Core 5G and Beyond 2 op
* TKT21040 Test-Driven Development 4 op
* TKT21041 Test-Driven Development: Full Stack 1 op
* CSM141081 Full Stack -websovelluskehitys 5 op
* DATA11001 Introduction to Data Science 5 op
* DATA20041 AI in Society: Introduction 1.5 op
* DATA20042 AI in Society: AI and Discrimination 0.5 op
* DATA20049 AI in Society: AI, Justice and Security 0.5 op
* DATA20050 AI in Society: AI and Democracy 0.5 op
* TKT210241 Ohjelmointihaasteita 1 1 op
* TKT210242 Ohjelmointihaasteita 2 1 op
* TKT210243 Ohjelmointihaasteita 3 1 op
* TKT210281 Elements of AI: Building AI - Intermediate 1 op
* TKT210282 Elements of AI: Building AI - Advanced 1 op


=== Tietoliikenteen perusteet (4 op) ===
<div style="border: 1px solid red; padding: 10px; margin: 10px;">
<strong style="color:red;font-size:1rem">Vanha opetussuunitelma (2020-2023):</strong>


* Tunnetaan myös nimellä Tilpe
===Cyber security with F-Secure (5 op)===
* 4. periodissa
{{hatnote|Tunnetaan myös nimellä Titu}}


Kurssilla paneudutaan internetin peruskäsitteistöön ja -tekniikoihin. Kurssi etenee käymällä lävitse TCP/IP-pinoa taso tasolta. Tutuksi tulee siis pääpiirteittäin kaikki WWW-selaimen sielunelämästä aina verkkokortin bittitasolle asti. Kurssi antaa hyvät perustiedot tietoliikenteestä, jotka ovat tarpeen kaikkien eri linjojen opiskelijoille.
Suoritetaan verkkokurssina, jolla käsitellään kyberturvallisuutta, operatiivista tietoturvaa, turvallisen web-ohjelmiston kehitystä, web-ohjelmistojen tyypillisiä haavoittuvuuksia ja niiden korjaamista sekä vastatoimia.


Mikäli kurssilla vastaantuleva lyhenteiden ja käsitteistön määrä alkaa hirvittää, kurssilla käytettävä kurssikirja on mitä mainion apu pelonlievitykseen.
=== C-ohjelmointi (5 op) [Deprekoitu] ===
{{hatnote|Tunnetaan myös nimellä C}}


Harri Hämäläinen
C on aineopintojen valinnainen kurssi, joka on tarkoitettu ohjelmoinnin perusasiat osaaville ja perustietorakenteet tunteville. Ensin kannattaa siis suorittaa suosiolla ensimmäisen vuoden ohjelmointikurssit harjoitustöineen sekä Tietorakenteet. Javalla ohjelmoineille kielen syntaksin omaksuminen on helppoa, mutta pelkän ulkoisen samannäköisyyden ei kannata antaa pettää itseään. C on käsitemaailmaltaan ja rakenteiltaan varsin erilainen kieli kuin Java ja sitä myös käytetään hieman erilaisiin tarkoituksiin. C:llä tehdään mm. koneenläheisiä, suurta tehoa vaativia, usein tekstipohjaisia työkaluohjelmia. Javalla taas on mukavampi rakennella sekä ohjelmoijan että käyttäjän kannalta turvallisia sovelluksia, usein graafisia sellaisia - mikäli nopeus ei ole kriittisin tekijä.


=== Tietoturvan perusteet (4 op) ===
Muistiosoittimien ja muistinhallinnan kanssa pelaaminen, joka Javassa on automaattista, voi osoittautua hankalaksi omaksua. Myöskään linkitettyjen listojen ohjelmointi, johon perehdytään varsin tarkkaan, ei tule vastaan ohjelmoinnin perus- ja jatkokurssilla. Kurssilla opetetaan nykyään myös puiden ja verkkojen (tietorakenteita nämäkin) käsittelyä, tosin vähemmällä tarkastelulla kuin esim. Tietorakenteet-kurssilla. Tämä kurssi tuo varsin mukavaa vaihtelua ensimmäisen syksyn Java-annostukseen varsinkin, jos olet ohjelmoinut C:llä aikaisemmin.
</div>


=== Johdatus tekoälyyn (4 op) ===
===Programming for Performance (5 op)===
{{hatnote|Tunnetaan myös nimellä PFP}}


=== Rinnakkaisohjelmointi (4 op) ===
===Algoritmit ongelmanratkaisussa (10 op)===
{{hatnote|Tunnetaan myös nimellä Alon}}


=== Ohjelmistotuotanto (4 op) ===
Kurssi on valinnainen opintojakso ja toimii periaatteessa TiRa:n jatkokurssina (virallinen jatkokurssi TiRa:lle on DAA - Design & Analysis of Algorithms). Kurssi on tarkoituksella tosi haastava ja työläs. Kurssin pitäjä, Antti Laaksonen, on jopa väittänyt, että kurssi on kandivaiheen (koko Suomen?) vaikein kurssi.


=== Ohjelmistotuotantoprojekti (9 op) ===
Nimi paljastaa ehkä jo, että kurssilla käsitellään siis algoritmeja. Alon:ssa kerrotaan vähän TiRa asioita, mutta tällä kertaa C++ -kielellä, joka on kurssin ensisijainen ohjelmointikieli (tehtäviä voi myös ratkaista Haskell:lla tai Rust:lla). Lähtökohtaisesti oletetaan, että TiRa on tosi hyvin hallussa, sillä kurssilla käsitellään samoja tekniikoita kuten TiRa:ssa, esim. rekursio, verkko-algoritmeja ja tietorakenteita, mutta paljon pintatasoisemmin. Tarkoitus on enemmänkin, että opiskelija itse ymmärtää, miten erilaisia tekniikoita sovelletaan. Kurssin päätarkoitus on nimenomaan kehittää opiskelijan ongelmanratkaisukykyä. Kurssilla on 14 viikkoa, jokaisella viikolla 6 tehtävää. Kaikki tehtävät ovat lähtökohtaisesti vaikeita. Viikon ensimmäinen tehtävä saattaa olla helpompi kuin muut ja viimeinen tehtävä toimii vähän kuin "bonustehävänä", joka on, lähes aina, erittäin haastava.


=== Tieteellisen kirjoittamisen kurssi (x op) ===
===Computer Organization II (5 op)===


== Valinnaisia kursseja ==
===Full Stack -websovelluskehitys (3-7 op)===


=== C-Ohjelmointi (4 op) ===
===Full Stack -websovelluskehitys harjoitustyö (1-10 op)===
===Introduction to Game Programming (5 op)===
{{hatnote|Tunnetaan myös nimellä IGP}}


* Tunnetaan myös nimellä C
Kurssilla tutustutaan peliohjelmoinnin maailmaan. Kurssilla käsitellään peliohjelmointia teoreettisella tasolla, pelimoottoreiden alkeita ja erilaisia peliohjelmoinnin paradigmoja, C#-kielen ominaisuuksia ja Unity-pelimoottorin perusominaisuuksia. Kurssin nimi saattaa olla harhaanjohtava, sillä kurssilla ei ohjelmoida ollenkaan.
* 3. periodissa


C on aineopintojen valinnainen kurssi, joka on tarkoitettu ohjelmoinnin perusasiat
===Johdatus funktionaaliseen ohjelmointiin (5 op)===
osaaville ja perustietorakenteet tunteville. Ensin kannattaa siis suorittaa suosiolla
ensimmäisen vuoden ohjelmointikurssit harjoitustöineen sekä Tira. Java-kurssin
===Ohjelmointihaasteita I (1-3 op)===
käyneille kielen syntaksin omaksuminen on helppoa, mutta pelkän ulkoisen
samannäköisyyden ei kannata antaa pettää itseään. C on käsitemaa-ilmaltaan ja
===Web-palvelinohjelmointi Java (5 op)===
rakenteiltaan varsin erilainen kieli kuin Java ja sitä myös käytetään hieman erilaisiin
tarkoituksiin. C:llä tehdään mm. koneenläheisiä, suurta tehoa vaativia, usein
tekstipohjaisia työkaluohjelmia. Javalla taas on mukavampi rakennella sekä ohjelmoijan
että käyttäjän kannalta turvallisia sovelluksia, usein graafisia sellaisia - mikäli
nopeus ei ole kriittisin tekijä.


Muistiosoittimien ja muistinhallinnan kanssa pelaaminen, joka Javassa on automaattista,
== Muut pakolliset opinnot ==
voi osoittautua hankalaksi omaksua. Myöskään linkitettyjen listojen ohjelmointi, johon
perehdytään varsin tarkkaan, ei tule vastaan Ohjelmoinnin perusteissa. Kurssilla
opetetaan nykyään myös puiden ja verkkojen (siis tietorakenteita nämäkin) käsittelyä,
tosin hieman vähemmällä tarkastelulla kuin esim. Tietorakenteet-kurssilla. Tämä kurssi
tuo varsin mukavaa vaihtelua ensimmäisen syksyn Java-annostukseen varsinkin, jos olet
ohjelmoinut C:llä aikaisemmin.


Kurssiin kuuluu pakollinen harjoitustyö, jota ilman kurssia ei siis läpäise. Vaikka
=== Tietokone työvälineenä (1 op) ===
harjoitustyö ei vaikuta suurelta, se on yllättävän työläs ja on useimmiten syy kurssin
{{hatnote|Tunnetaan myös nimellä Lapiokurssi tai pelkkä Lapio}}
keskeyttämiselle. Sille kannattaa siis varata aikaa huomattavasti enemmän kuin se
"viimeinen yö ennen palautusta".


Kurssin taitoja voi hioa vielä pidemmälle kurssilla "Unix-sovellusohjelmointi".
Työvälinekurssi on peruskurssi, jolla opetellaan myöhemmillä kursseilla välttämättömiä käytännön taitoja. Kurssilla opetellaan käyttämään laitoksella käytössä olevia ohjelmistoja ja laitteistoja sekä valitsemaan tehtävään sopiva työkalu. Keskeisimmät Unix/Linux-komennot, HTML-perusteet, tekstieditorien ja tekstinkäsittelyohjelmien käyttö jne. kannattaa oppia, ettei sitten myöhemmin kulu pään raapimiseen enemmän aikaa kuin itse tekemiseen. Monelle kokeneellekin tietokoneenkäyttäjälle kurssilla todennäköisesti on uutta asiaa ainakin laitoksen järjestelmistä, joten kurssimateriaali ainakin kannattaa lukea läpi.


Anni Rytkönen <br />
===Akateemiset taidot (1-2 op)===
Niki Eskola
===Opiskelijan digitaidot: orientaatio (2 op)===

Nykyinen versio 12. syyskuuta 2024 kello 12.53

Perusopinnot

Perusopintoja on mahdollista suorittaa myös avoimessa yliopistossa.

Monet kurssien kuvauksista ovat edelleen vanhan opetussuunnitelman (2020-2023) mukaisia. Toisaalta monet kurssit ovat myös pysyneet hyvin samanlaisina, vaikka nimi olisikin muuttunut uudessa opetussuunnitelmassa (2023-2026).

Tietokone ja Internet (5 op)

Tunnetaan myös nimellä Tintti

Kurssi tiivistää aikaisemmat kurssit Tietokoneen Toiminta ja Tietoliikenteen Perusteet yhdeksi yhtenäiseksi kokonaisuudeksi. Tähän kuuluu mm.: Tietokoneen osien toiminta, sekä kommunikointi näiden osien välillä, Konekielen opettelua (Risc-V), Eri binääri muotojen tulkitsemista, Internet protokolla pinon toiminta, Internet tietoliikenteen toiminta sekä Virtuaaliympäristöjen perusteita. Kurssin koostuu pääasiassa näitä aiheita käsittelevistä pienryhmissä tehtävistä esseistä. Näiden lisäksi kurssilla myös moodlessa tehtäviä yksilötehtäviä. Tietokone ja internet kurssia suositellaan otettavaksi heti fuksisyksyyn. Kurssi kestää kaksi periodia, eli jouluun asti. Kurssi saattaa tuntua haastavalta heti opiskelujen alkuun, mutta pitkä pinna ja toimiva ryhmätyö on avain onneen.

Ohjelmoinnin perusteet (5 op)

Tunnetaan myös nimellä OhPe

Kurssilla opetetaan fukseille mitä ovat algoritmit, muuttujat, lauseet, lausekkeet, ohjausrakenteet ja erityisesti oliot. Heti alusta alkaen tehdään omia ohjelmia koneella. Kurssi on tarkoitettu ensisijaisesti niille, joilla ei ole olio-ohjelmointitaustaa, mutta osaavienkin ohjelmoijien on syytä vilkaista kurssimateriaaliin yhteisen kielen omaksumiseksi ja mennä sitten heti tenttiin. Toisinaan kun käy niinkin, että moni aiemmin ohjelmoinut luulee osaavansa, mutta saakin tentissä kuvannoillisesti lapiosta naamaan. Kurssi on hyvin työpainotteinen ja tehtävien tekeminen korreloi tilastollisestikin suoraan läpipääsyn kanssa. Opetuskielenä on Python.

Ohjelmoinnin jatkokurssi (5 op)

Tunnetaan myös nimellä OhJa

Nimensä mukaisesti kurssilla jatketaan siitä, mihin ohjelmoinnin perusteella jäätiin. Opetus järjestetään myös samaan tapaan. Perusasioiden ollessa hallussa, harjoitustehtävien ohjelmat laajenevat ja tulevat entistä mielenkiintoisemmiksi - ja haastavammiksi. Ohjelmoinnin jatkokurssin jälkeen opiskelija pystyy ohjelmoimaan itsenäisesti ja hyödyntämään internetiä ohjelmointitaitojensa kehittämisessä.

Tietokantojen perusteet (5 op)

Tunnetaan myös nimellä Tikape

Tämä kurssi on murrosvaiheessa, ja kuvauksemme saattaakin olla auttamatta vanhentunut tätä luettaessa. Mutta yritetään! Tietokantojen perusteisiin kuuluu tietokantojen suunnittelu ja lukuisten erilaisten kaavioiden piirrustelu, tietokannan käyttö Javalla, sekä SQL:n käyttö. Toteutukseen kuuluu viikottaisia yksin tai pajassa tehtäviä harjoituksia, sekä jokaviikkoinen ryhmätapaaminen. Lisäksi kurssin aikana tehdään ryhmätyönä tietokantaa hyödyntävä mallisovellus.

Tietorakenteet ja algoritmit I (5 op)

Tunnetaan myös nimellä TiRa I

Tietorakenteet ja algoritmit on mielenkiintoinen ja hyödyllinen kurssi sekä algoritmeista että ohjelmointitouhusta kiinnostuineille (yleensä nämä leirit omaavat hyvin poikkeavat mielipiteet perus- ja aineopintojen kursseista). Käytännön ohjelmointiprojekteissa tulee jatkuvasti vastaan tilanteita, joissa pitäisi käsitellä suuria tietomääriä: lisätä, poistaa, etsiä ja järjestellä tietoa. Tällä kurssilla opetetaan lukuisia toinen toistaan näppärämpiä keinoja hallita tietoalkiota. Oikeastaan vasta kurssin asiat hallittuaan voi sanoa oikeasti osaavansa koodata. Tietorakenteet ja algoritmit on myös ensimmäisiä peruskursseja, joilla kurkistetaan tietojenkäsittelyn teoreettisempaan puoleen (algoritmit ja niiden analysointi).

TiRa I käsittelee ensisijaisesti Tirakirjan luvut 1-7. Kuten kurssin nimestä voi aavistellakin, valtaosa opetuksesta keskittyy erilaisten tietorakenteiden käsittelyyn. Opiskelija voi olla varma, että kurssin suoritettuaan ainakin perustietorakenteet (taulukko, pino, lista) ovat syöpyneet lähtemättömästi tajuntaan. Hämäriä muistikuvia saattaa löytyä jopa hieman eksoottisemmistakin tietorakenteista kuten puista, hajautustauluista ja verkoista. Tietorakenteiden lisäksi kurssilla käydään läpi muutamia mielenkiintoisia haku- ja järjestysalgoritmeja ja tehdään algoritmien tehokkuusanalyysiä.

Kurssin esitietovaatimus on "Johdatus yliopistomatematiikkaan". Matemaattista esitietovaatimusta ei kuitenkaan ole syytä kavahtaa, sillä loppujen lopuksi itse käsiteltävät asiat ovat suhteellisen yksinkertaisia ja liittyvät oikeastaan vain tietorakenteiden formaaliin esittämiseen.

Kurssi on sinänsä erikoinen, sillä syksyn ja kevään toteutukset eroavat jonkin verran. Viime vuosina Antti Laaksonen on pitänyt kurssin syksyllä, jolloin ei ole ollut tenttiä. Jyrki Kivinen pitää kurssia keväisin, jolloin tenttiä on järjestetty.

Laskuharjoitusten tekeminen on tässä kurssissa en-si-si-jai-sen tärkeää! Suurin ongelma opiskelijoille on, että kelkasta putoaa hyvin helposti. Jos jokin asia menee yli ymmärryksen, kannattaa heti vaatia luennoijaa tai assaria vääntämään asia rautalangasta, ettei tajuntaan jää mustia aukkoja. Toisaalta laitokselta on vaikea löytää henkilöä, joka ei pitäisi kurssia ainakin jossain määrin ehdottoman hyödyllisenä. Syksyllä hyvin menestyneelle opiskelijallekin koe saattaa tulla järkytyksenä - ei sen takia, että se olisi vaikea, mutta kokeesta ei pääse läpi, jos ei osaa soveltaa. Tästä kertoo sekin, että kokeeseen saa ottaa A4-muistilapun mukaan. Perinteisesti läpipääsyprosentti on kuitenkin ollut vähintään syksyn ohjelmointikurssien tasoa. Kurssi tosin on monelle työläs. Laskuharjoitukset / Algoritmitehtävät saa ratkaista joko Pythonilla tai Javalla.

Tietorakenteet -kurssi on tietojenkäsittelytieteelle "sitä itseään" ja Helsingin yliopiston TKT-laitoksen erikoisuus ja ylpeys. Monien huippuyliopistojen (MIT) tietojenkäsittelytieteen opetukselle tyypillistä on, että tietorakenteita opetetaan kattavasti heti ensimmäisenä opiskeluvuonna. Muissa Suomen yliopistoissa käpistelijöiden ymmärrys tietorakenteista ja tehokkaista ratkaisuista on matalahkolla tasolla verrattuna laitoksen opiskelijaan. Kuulostaako hypettämiselta? Ota selvää ja varmistu.

Älä käy tiraa fuksisyksynä! Suorita ensin JYM. Katso myös Fuksisyksyn_mallilukujärjestys.

Vanha opetussuunitelma (2020-2023):

Johdatus tietojenkäsittelytieteeseen (5 op) ja Englanti (4 op)

Tunnetaan myös nimellä JTKT

Kurssin tarkoitus on johdatella uudet oppilaat (“fuksit”) tietojenkäsittelytieteen ihmeelliseen maailmaan. Kurssin toteutus elää vuosittain opiskelijapalautteen myötä, mutta suuri osa toteutuksesta tulee olemaan pienryhmässä kirjoitettuja, lyhyitä, viikottaisia esseitä TKT:hen liittyvistä aiheista. Lisäksi samoista aiheista pidetään pieniä esitelmiä, ja opponoidaan muiden vastaavia. Bonuksena kurssin fuksitoteutukseen on sisäänleivottu 4 op:ta (eli TKT kanditutkintoon vaadittavat) englannin opintoja, jotka ilmenevät muutaman englanninkielisenä esseenä ja esityksenä. Englannin opinnot suositellaan lämpimästi suoritettavaksi JTKT:n ohessa. HUOM! JTKT-toteutetaan useimmista muista kursseista poiketen kahdessa jaksossa!

Tietokoneen toiminta (5 op)

Tunnetaan myös nimellä TiTo

Tämä kurssi on perusopinnoista haastavin, mutta ei mitenkään mahdoton! Muihin perusopintoihin poiketen, kurssin luennot ovat tärkeä osa kurssia, joskaan eivät siltikään pakollisia. Olennaista on oppia nopeasti rytmiin, jossa jokin tietokoneen asiakokonaisuus käydään läpi luennolla, sitä opiskellaan viikkotehtäviä (‘laskareita’) tehdessä, ja lopulta kerrataan minikokeeseen. Kun luennolla heprealta kuulostava, vaikea asia on läpikäyty kolmeen kertaan, huomaat kokeeseen tullessasi yhtäkkiä ymmärtäväsi ja osaavasi käyttää konekieltä kuin luennoitsija itse!

Kurssilla opitaan perusteet siitä, mitä tietokoneen sisällä oikeasti tapahtuu, eli tutustutaan mm. prosessorin toimintoihin, yhden ohjelman suoritukseen koneessa ja opetellaan hiukan symbolista konekieltä. Tällä konekielellä tosin ei ole kovinkaan paljon tekemistä "oikeiden assemblerien" (Masm, Nasm, Fasm) kanssa vaan kurssilla käytetään laitoksen omaan opetuskäyttöön väsättyä TTK91-assemblyä ja Titokone-simulaattoria. Pääpaino on kuitenkin enemmän teorian ymmärtämisessä. Kurssin sisältö jakaa opiskelijoita ehkä selvimmin kahteen leiriin: niihin jotka hehkuttavat ja niihin jotka vihaavat yli kaiken.

Laskuharjoituksiin tulee varata kohtuullisesti aikaa, sillä vastaukset harvemmin löytyvät suoraan lähdekirjallisuudesta. Ne on itse löydettävä soveltamalla opittua asiaa. TTK91-symbolinen konekieli vaikuttanee hieman kankealta, mutta ajaa tehtävänsä. Moni on ihmetellyt, miksei opetuskielenä käytetä jotain oikeaa assemblyä. Vastaus on melko yksinkertainen: Kurssilla on tarkoitus oppia tietokoneen toimintaa eikä nykyisten assemblerien ominaisuuksia makroineen ja muine asioineen, joilla toimintaan liittyvät yksityiskohdat voisi sivuuttaa. Tietokoneen toimintaankin kurssi on loppujen lopuksi melko pintaraapaisu, josta voi jatkaa syventävään Tietokoneen Rakenne-kurssiin.

Kurssi on siitä erikoinen, että kurssin loppukokeen voi korvata neljällä kurssin aikana tehtävällä minikokeella.

P.S. Kurssista liikkuu jäärien keskuudessa paljon meemejä, mutta parasta on jättää ennakkohype väliin ja mennä kurssille avoimin mielin.

Pakolliset Aineopinnot

Tietorakenteet ja algoritmit II (5 op)

Tunnetaan myös nimellä TiRa II

TiRa II on TiRa I:n jatko-osa. Kurssi jatkaa siitä mihin TiRa I jäi. Kurssi käsittelee Tirakirjan luvut 8-14, joissa aiheina ovat rekursiiviset algoritmit (dynaaminen ohjelmointi, peruuttava haku yms.) ja verkko-algoritmit (Dijkstra, Bellmanin ja Fordin, Floyd Warshall, Ford Fulkerson yms).

Samoin kuin OhJa:ssa niin TiRa II harjoitustehtävät laajenevat ja tulevat entistä mielenkiintoisemmiksi - ja haastavammiksi. Älä sure, jos tehtävät tuntuvat liian vaikealta. Kurssin algoritmit ovat tosi haastavia monelle, etenkin rekursiiviset algoritmit tuntuvat olevan monelle tosi epäselviä ja vaikeasti ymmärrettävissä. Jos koet, että tehtävät ovat liian haastavia, kannattaa ehdottomasti käydä algoritmipajassa!

Kurssi kannattaa suorittaa heti TiRa I:n jälkeen, jolloin TiRa I:n asiat ovat vielä tuoreena muistissa. TiRa II:ssa oletetaan kaikki TiRa I:n asiat tutuksi.

Tietokannat ja web-ohjelmointi (5 op)

Kurssilla tehdään Pythonin Flaskillä vapaavalintainen web sovellus joka käytää pientä SQL-tietokantaa apuna. Projekti on melko itsenäinen ja periodin pituisen kurssin aikan on vain muutama välipalautus joissa palautusten kriteerit nousevat kurssin edetessä. Näin saadaan kurssin mittaan tasainen eteneminen. Kurssissa materiaali jossa opastetaan HTML ja SQL perusteet. Ennakkotietona tälle kurssille on hyvä olla kurssi 'Tietokantojen perusteet' käytynä.

Huom Voit myös ilmoittaa kurssin vetäjälle, että haluat tehdä kurssin omassa aikataulussasi. Tällöin palautat vain lopullisen sovelluksen kun se on valmis. Tässä toteutuksessa välipalautuksia ei pisteytetä ja arvosana tulee täysin lopullisen palautuksen perusteella.

Laskennan mallit (5 op)

Tunnetaan myös nimellä Lama

Laskennan mallit on teoreettinen kurssi, jolla opetellaan varsin käytännöllisiä työvälineitä. Kurssilla käsitellään mm. laskennallisia ongelmia, äärellisiä automaatteja, säännöllisiä lausekkeita, kontekstittomia kielioppeja ja Turingin koneita. Kurssi saattaa tuntua hankalalta alun pallo-nuoli-automaattipiirtelyiden jälkeen, mutta kun tottuu lukemaan täsmällistä formaalia esitystapaa, itse asia ei olekaan niin kovin kummallista. Loppujen lopuksi kysymys on vain menetelmistä, joilla voidaan jäsentää ja käsitellä erilaisia määrämuotoisia merkkijonoja, kuten aritmeettisia lausekkeita, päivämääriä ja muuta vastaavaa. Tutuiksi tulevat myös Turingin koneet, jotka ovat äärimmäisen kömpelö tietokoneen teoreettinen malli, mutta samalla myös yksinkertaisin mahdollinen mekaanisen laskentakoneen malli. Loppuhuipennuksena törmätään surullisenkuuluisaan pysähtymisongelmaan. Kun sen merkityksen onnistuu ymmärtämään, ymmärtää jo paljon siitä, mitä ohjelmallisesti on mahdollista tehdä.

Kurssin viikkotehtävissä ("laskareissa") harjoitellaan paljon todistamista, etenkin ristiriita todistamista. Todistaminen oletetaan tutuksi, joten sitä ei käydä läpi kurssin aikana. Todistaminen voi tuntua tosi hankalalta ja turhauttavalta, etenkin kun sitä on tosi hankalaa opettaa. Kurssikirjassa, Introduction to the Theory of Computation (Michael Sipser), käydään tunnetuimmat todistustekniikat läpi.

Älä turhaan masennu, jos pumppauslemma ja kumppanit menevät aluksi kertakaikkiaan yli hilseen, monella muulla on sama tilanne. Eräs vitsi laitoksella onkin, että laitokselta on vaikea löytää opiskelijaa, joka osaisi pumppauslemman selittää ("meni kokeessa oikein, en tiedä mitä tein"). Kurssia käydessä ei välttämättä ole minkäänlaista mielikuvaa, mihin kurssilla käsiteltäviä asioita voisi ikinä tarvita, mutta myöhemmin opinnoissa asioihin voi törmätä esim. Ohjelmointikielten kääntäjien tai rakenteisten dokumenttien käsittelyn yhteydessä, joista voitaneen mainita esimerkiksi XML-dokumenttien muuttaminen esimerkiksi HTML-esitysmuotoon. Kurssi kannattaa kuitenkin käydä läpi ajatuksen kanssa, koska mekaaninen ulkoapänttääminen ei juuri auta. Tietorakenteet -kurssin tapaan asiat pitää oikeasti tajuta, jotta kurssista suoriutuu.

Tira:ssa voi pärjätä aika hyvin ilman JYM:ä, mutta Lama:ssa ei. On ehdottomasti suositeltu, että olet käynyt vähintään JYM:n ennen Lamaa.

Tietojenkäsittely ja yhteiskunta (5 op)

Ohjelmistotuotanto (5 op)

Tunnetaan myös nimellä Ohtu

Kurssilla perehdytään ohjelmistotuotantoon, sen ongelmiin ja ketterään prosessimalliin. Ohjelmistotuotanto-kurssia voidaan pitää Ohjelmistotekniikka-kurssin jatkeena. Viikottaisten laskaritehtävien lisäksi toteutetaan neljä viikkoa kestävä miniprojekti ryhmätyönä. Projektin ideana on harjoitella ketterää ohjelmistokehitystä Ohjelmistotuotantoprojektia varten.

Kurssin hyväksytty suorittaminen on vaatimus Ohjelmistotuotantoprojekti-kurssille.

Kurssiin kuuluva miniprojekti on mahdollista hyväksilukea työkokemuksen perusteella. Kts Ohtun_ja_ohtuprojektin_hyväksilukeminen

Tietoturvan perusteet (5 op)

Tietoturvan perusteet pyörii tällä hetkellä vain englannin kielisenä itsenäisesti suoritettava MOOC kokonaisuutena. Kurssi koostuu käytännön koodaus tehtävistä sekä esseistä ja näiden vertaisarvioinneista. Esitietona tälle kurssille voi suositella "Tietokanta ja Web ohjelmointi"-kurssia, koska monet kurssin tehtävistä, mukaanlukien loppuprojekti, sisältävät tietokannan ja selaimen välistä kommunikaatiota ja näihin liittyviä haavoittuvuuksia.

Laskentaympäristöt (5 op)

Introduction to Artificial Intelligence (5 op)

Tunnettiin ennen myös nimellä johdatus tekoälyyn (JohTek)

Datatieteen maisteriopintojen ensimmäisiä kursseja. Voi suositella myös kandivaiheen opiskelijoille

Tämän kurssin tarkoituksena on johdattaa tekoälyn eri osa-alueisiin, tutkimusongelmiin ja alan kulmakiviin. Teemoina käsitellään niin koneoppimista, perinteistä logiikkaa kuin pelitekoälyjäkin. Kurssista pitäisi jäädä käteen jonkinlainen kuva alan valtavasta kirjosta. Kurssilla on käytännön ohjelmointitehtäviä ja teoreettisempi tentti.

Ohjelmistoprojekti (10 op)

Tunnetaan myös nimellä Ohtuprojekti

Kurssin esitietovaatimuksena on suoritettu Ohjelmistotuotanto-kurssi sekä yksi aineopintojen harjoitustyö (kts. alla).

Ohjelmistotuotantoprojektissa harjoitellaan projektin toteuttamista jotakuinkin reaalimaailmaa vastaavin menetelmin. Projekti toteutetaan 5-6 hengen ryhmässä. Projektilla on siis ihkaoikea asiakas (yleensä laitokselta, yliopistolta tai jostain yrityksestä), joka asettaa vaatimukset tuotteelle. Näihin vaatimuksiin ryhmän pitäisi sitten pystyä ohjelmistollaan vastaamaan mahdollisimman hyvin. Projektin aiheeseen ei voi vaikuttaa, mutta haluamastaan ryhmästä voi esittää toiveen. Aihe voi olla periaatteessa mikä tahansa. Ei ole ollenkaan tavatonta, että ensitöikseen joutuu opettelemaan uuden ohjelmointikielen.

Kurssin päätyttyä tuotteeseen ei sisälly ylläpitovastuuta. Useat projektit menevät keskeneräisenä tuleville osanottajille jatkokehitykseen, mutta osa on päätynyt oikeaan tuotantoonkin. Kurssin perimmäinen tarkoitus on kuitenkin harjoitella prosessia enemmän kuin itse projektin toteuttamista. Ei kannata liikaa stressata, että tuotteen tulisi olla valmis kurssin päättyessä. Ohjelmoimaankin pääsee varmasti tarpeeksi, ja ohessa mahdolliset uudet työkalutkin tulevat väkipakostakin tutuksi.

Projekti toteutetaan käyttäen laitoksen omaa ketterää ohjelmistokehitysmenetelmää (Scrum-variaatio). Varsinaista projektipäällikköä ei ryhmässä ole, ellei ryhmä sellaista keskuudestaan välttämättä halua valita. Kurssi on hyvin opettavainen ja ryhmä saa käytännössä lähes vapaat kädet itsensä toteuttamiseen. Ryhmätyön merkitys ja asiakkaan kanssa vaatimuksista vääntäminen ovat kurssin ydinkauraa. Ongelmilta (lue: haasteilta) ei voi projektin edetessä välttyä ja moiset kannattaa ottaa oppimiskokemuksena. Kurssin arvostelu perustuu pitkälti ryhmän vertaisarviointiin. Asiakkaan antamalla arvosanalla ei juuri merkitystä ole.

Kurssista saa eniten irti, jos sopii ryhmän kanssa erilaisten työtapojen ja menetelmien (esim. eri pituiset sprintit) kokeilemisesta, koska oikeilla työpaikoilla tällaisia kokeiluja harvemmin pääsee enää toteuttamaan. Kurssin tärkein opetus lienee, että asiakkaan kaikkiin vaatimuksiin ei missään nimessä ole pakko suostua, ja että tekniset hankaluudet pystytään todennäköisesti ohittamaan onnistuneilla neuvotteluilla.

Koko kurssi on mahdollista hyväksilukea työkokemuksen perusteella. Kts Ohtun_ja_ohtuprojektin_hyväksilukeminen

Kandidaatintutkielma (6 op) + Äidinkieli (3 op) + Tutkimustiedonhaku (1 op)

Tunnetaan nimellä kandi

Tämä kolmen kurssin kokonaisuus on käytännössä yksi iso suoritus. Kandidaatintutkielman kirjoittamisen ohessa opetellaan tieteellistä kirjoittamista, tutkimustiedonhakua sekä esiintymistä. Arvostelu koostuu seuraavista osasuorituksista: 2-4 sivun referaatti, 10 sivun aine, 1.5-2 sivun kypsyysnäyte, 15-20min esitelmä ja ~20 sivun tutkielma. Näistä viimeinen on se varsinainen "kandi", joka on samalla ainoa arvosanaan vaikuttava komponentti. Muut suoritukset on pakko tehdä, mutta ne arvostellaan binäärisesti "tehty/ei tehty".

Optimaalisessa tilanteessa opiskelija kirjoittaa kurssin aikana yhtä tekstiä, jonka eri vaiheet muodostavat tarvittavat kirjalliset komponentit. Monen tulee kuitenkin *pivotattua* jossain vaiheessa, jolloin siihen mennessä kirjoitetusta iso osa pitää heittää roskiin. Tämän välttää parhaiten ottamalla alun aiheenvalinnan tosissaan.

Käpistelijälle on tunnetusti tekstin tuottaminen ongelma, tieteellisestä kirjoittamisesta nyt puhumattakaan. Kurssissa ei välttämättä pärjää tosin hyväkään kirjoittaja, koska tieteellisten artikkelien kirjoittaminen ottaa hieman eri lähtökohdan kuin esseen, raporttien tai dokumentaation laatiminen. Hermot menevät takuuvarmasti jossain vaiheessa mitättömiltä tuntuvien pikkuasioiden viilaamiseen, joita ohjaaja jaksaa ja jaksaa kaivaa esiin joka kerralla.

Ryhmät jaetaan sen perusteella, minkä olet ilmoittautumisessa ilmaissut mahdolliseksi maisterilinjaksesi. Ryhmässä on 5-6 henkilöä, ohjaaja sekä valvoja. Valvojalla ei ole juuri muuta virkaa kuin varsinaisen tutkielman tarkastaminen. Ohjaajan kanssa sovitaan (yleensä) viikoittainen tapaamisaika. Ohjauksen laatu vaihtelee, eikä suoria neuvoja välttämättä saa ohjaajalta missään vaiheessa.

Esitelmä (15-20min) pidetään oman pienryhmän kesken omasta aiheesta, yleensä aineen pohjalta. Tätäkään ei kannata stressata liikaa, sillä "arvostelu" on ihan oikeastikin tasolla "suoritettu jos jotain mumisee ryhmän edessä".

Kurssi sisältää ohessa myös ns. kypsyysnäytteen, jossa pitää laatia parin sivun mittainen kielellisesti huoliteltu teksti jostain tutkielman aihepiiristä. Tämä vastaa teknisesti toisen kotimaisen kielen kurssia sikäli, että kypsyysnäyte on todistus siitä että opiskelija osaa oman äidinkielensä "virkamiestasolla".

Aiheenvalintakäytäntö vaihtelee ohjaajittain. Tutkielman aihepiirin aihe valitaan useimmiten valmiista listasta, mutta joissakin ryhmissä aihetta saa itsekin ehdottaa. Moni on ampunut itseään jalkaan ehdottamalla omaa aihepiiriä, ja on huomannutkin jälkeenpäin, että tutkimustietoa aihealueesta ei joko löydy ymmärrettävässä mudossa tai sitten löytyy aivan liikaa. Ennen oman aiheen ehdottamista kannattaa varmistaa, että aiheesta todellakin löytyy riittävästi "lukukelpoista" tutkimustietoa. Aihepiiri valitaan jo ensimmäisessä tapaamisessa.

Kurssiin sisältyy myös kymmenisen luentoa, joilla opetetaan tieteellisen kirjoittamisen tyyliä ja tiedonhaun perusteita. Näistä ainakin ensimmäisellä on pakollinen läsnäolo.

Kandin aikataulusta

Kanditutkielma kurssi kestää yhden lukukauden ja se on tarjolla sekä syksyisin, että keväisin. Usein kandin kirjoittaminen on opiskelijoille se mistä aletaan ensimmäisenä luistamaan, kun periodissa on liikaa tekemistä. Näin kandi jää kesken ja venyy tuskallisen pitkäksi projektiksi. Kesken jäävät kandit siirtyvät yleensä kurssin vastuuhenkilön ohjattaviksi. Tunnetaan myös tapauksia missä opiskelija anoo lisäaikaa, sama ohjaaja säilyy ja opiskelija kirjoittaa tutkielman esim joululomalla valmiiksi.

Osaston tarjotessa niukasti kesäopiskelumahdollisuuksia on kandin kirjoittaminen kesällä laiturin nokassa houkutteleva vaihtoehto. Virallisesti tätä mahdollisuutta ei ole tarjottu, mutta omatoiminen opiskelija voi kirjoittaa tutkielman kesällä ja tehdä esitelmän ym. pakolliset osat syksyn kurssilla. Kannattaa harkita jo kevään luennoilla käyntiä, jos tämä vaihtoehto kiinnostaa..

Vanha opetussuunitelma (2020-2023):

Tietoliikenteen perusteet (5 op)

Tunnetaan myös nimellä Tilpe

Kurssilla paneudutaan internetin peruskäsitteistöön ja -tekniikoihin. Kurssi etenee opettelemalla TCP/IP-pinoa taso tasolta. Tutuksi tulee siis pääpiirteittäin kaikki WWW-selaimen sielunelämästä aina verkkokortin bittitasolle asti. Kurssi antaa hyvät perustiedot tietoliikenteestä, jotka ovat tarpeen kaikkien eri linjojen opiskelijoille.

Kurssin sisältö on huomattavan laaja ja yksityiskohtainen opintopistemäärään nähden. Opiskelu perustuu paljolti TCP/IP-pinon kerrosten ja mekanismien toiminnan ulkoa opettelemiseen (esim. TCP-ruuhkanhallintamekanismit). Kokeessa ongelmaksi saattaa koitua hahmottaa, millä tasolla, ja kuinka yleinen vastaus kysymykseen halutaan (kokeessa saatetaan esimerkiksi kysyä, mitä tapahtuu kun opiskelija klikkaa linkkiä selaimellaan). Mikäli kurssilla vastaantuleva lyhenteiden ja käsitteistön määrä alkaa hirvittää, kurssilla käytettävä kurssikirja on mitä mainion apu pelonlievitykseen. Varoitettakoon, että asian ja detaljien suuresta määrästä johtuen kurssista on melko vaikea saada täyttä arvosanaa.

Käyttöjärjestelmät (5 op)

Tunnetaan myös nimellä Käjä

Kurssin voi käsittää siltana Tietokoneen toiminta -kurssin ja Ohjelmoinnin perusteet -kurssin välillä. Käsiteltävät asiat sisältävät käyttöjärjestelmien rakenteen ja toimintaperiaatteet, rinnakkaisuuden toteutuksia ja ongelmia, muistinhallintaa ja virtuaalimuistia, prosessorin vuoronantoa jne.

Samoin kuin TiTossa, Käjänkin tentin voi suorittaa neljällä minitentillä kurssin aikana.

Aineopintojen harjoitustöiden valintakori

Tästä korista tulee valita yksi suoritus. Sen pitää olla valmiina ennen Ohjelmistoprojektia (kts. yllä).

Ohjelmistotekniikka (4 op)

Tunnetaan myös niemellä Ohte

Kurssilla annetaan perustiedot ohjelmistojen mallintamisessa käytetyistä työkaluista. Kurssilla piirretään ja luetaan kaavioita jotka kuvaavat ohjelman korkean tason rakennetta. Lisäksi opetukseen sisältyy testausta ja versionhallintaa, jotka ovat tärkeitä ohjelmointityön apuvälineitä. Tällä kurssilla tehdään myös oma kokonainen ohjelmistoprojekti. Arvosana koostuu projektin loppuarvosanasta, projektin viikkodeadlinesta ja muutaman ensimmäisen viikon laskaritehtävistä.

Algoritmit ja tekoäly (4 op)

Tunnetaan myös nimellä Tiralabra

Tietorakenteiden harjoitustyö eli Tiralabra on käytännön jatkoa Tietorakenteet-kurssille. Kurssilla pääsee leikkimään tietorakenteilla ihan oikeasti, eli tekemään kokonaisen ohjelman, jossa hyödynnetään joitain tietorakenteita ja algoritmeja. Ohjelma tulee tietenkin myös testata ja dokumentoida, mutta dokumentointivaatimukset ovat minimaaliset aiempiin harjoitustöihin verrattuna. Sallitut ohjelmointikielet riippuvat pitkälti harjoitustyön ohjaajasta, mutta laitoksella opetettavat kielet ovat yleensä käytettävissä.

Harjoitustyö on vaativampi kuin Ohjelmoinnin harjoitustyö, joten kurssille ei kannata ilmoittautua, ellei ole varannut riittävästi aikaa työn tekemiseen. Keskimäärin työhön menee n. 80 työtuntia, mutta tehtävän aiheesta ja omista taidoista riippuen työtuntimäärä saattaa vaihdella huomattavastikin suuntaan tai toiseen. Jos työn aloittaa, sitä ei kannata lopettaa kesken, vaikka vähän vastustaisikin: Harjoitustyön keskeyttäneet ovat muita heikommassa asemassa, kun valitaan labraryhmään pääseviä.

Kurssilta kannattaa ottaa kaikki hyöty irti, koska seuraava paikka, jossa ohjelmointitaitoja koetellaan, on yleensä Ohjelmistotuotantoprojekti ja siellä ohjelmoinnin oletetaan jo sujuvan rutiinilla.

Tietoliikenne (4 op)

Tunnetaan myös nimellä Tilpelabra

Järjestetään toukokuun intensiivijaksolla, Tietoliikenne-kurssin jälkeen. Osallistuminen edellyttää vähintään arvosanaa 3 Tietoliikenteen perusteet -kurssilta. Huonommallakin arvosanalla saattaa päästä mukaan jos osaa selittää vakuuttavasti.

Harjoitustyössä ei lähtökohtaisesti ohjelmoida mitään, vaan enemminkin määritellään jokin tutkimusongelma johon etsitään itse vastaus. Perusratkaisu on analysoida jonkinlaista verkkoliikennettä. Muunkinlaisia projekteja on kuitenkin hyväksytty.

Vanha opetussuunitelma (2020-2023):

Tietokantasovellus (4 op)

Tunnetaan myös nimellä Tsoha tai Tsohalabra

Kurssi on käytännössä pienen SQL-relaatiotietokantaa käyttävän WWW-sovelluksen laatimista (esim. yksinkertainen verkkokauppa). Tämän harjoitustyön keskeinen teema on tietokantojen hallintaan liittyvät asiat sekä myös huolelliseen suunnitteluun keskittyminen. Kurssi on monen webbikoodariksi aikovan mielestä erittäin hyödyllinen ja palkitseva. Jos tunnistit itsesi, kannattaa varoa ettei innostu liikaa ja tee vahingossa muutaman tuhannen rivin harjoitustyötä.

Opiskelijasta voi kurssilla kirjoitettavan dokumentaation määrä turhauttavalta ja suuri houkutus onkin tehdä dokumentit vasta viimeisenä iltana. Dokumenttien tarkoitus on kuitenkin opastaa opiskelijaa oikeaan suuntaan suunnittelessaan omaa sovellustaan. Harjoitustyön ohjaajaa saa käyttää surutta apuna sekä ohjelmiston suunnittelun ongelmien että dokumenttien laatimisen kanssa.

Itse toteutuksen tekeminen onkin sitten vähemmän työlästä, jos suunnittelu on kunnolla tehty. WWW-sivustolle tulevan rakennelmansa saa toteuttaa varsin monella tavalla ja tietokannoissakin on valinnan varaa. Suurin osa tekee harjoitustyönsä joko PHP:llä, Javalla, tai Ruby on Railssillä, mutta jos intoa (tai aiempaa osaamista) löytyy jonkin eksoottisemman ympäristön käyttämiseen, niin sekin on usein kelvannut ohjaajalle.

Aineopintojen valinnaiset kurssit

Osaston kurssitarjonta muuttuu valinnaisten kurssien osalta jatkuvasti, tarkista ajantasainen kurssitarjonta esim. Weboodista tai https://studies.helsinki.fi/opintotarjonta .

Aineopintoihin tulee sisällyttää vähintään 5 op tietojenkäsittelytieteen valinnaisia aineopintoja tai tietojenkäsittelytieteen syventäviä opintoja eli maisterikursseja. Tutkintorakenteessa on listattu seuraavat esimerkit:

  • BSCS2011 Programming for Performance 5 op
  • CSM13401 Human Computer Interaction 5 op
  • TKT21003 Web-palvelinohjelmointi Ruby on Rails 5 op
  • TKT21004 Computer Architecture 5 op
  • TKT21012 Algoritmit ongelmanratkaisussa 10 op
  • TKT21018 Elements of AI: Tekoälyn perusteet 2 op
  • TKT21026 Network Programming 5 op
  • TKT21029 Functional Programming I 5 op
  • TKT21030 Functional Programming II 5 op
  • TKT21031 Tekoälyn etiikka: Johdanto 2 op
  • TKT21032 Kilpaohjelmoinnin harjoittelu 1 3 op
  • TKT21033 Kilpaohjelmoinnin harjoittelu 2 2 op
  • TKT21034 Kilpaohjelmoinnin harjoittelu 3 3 op
  • TKT21035 Kilpaohjelmoinnin harjoittelu 4 2 op
  • TKT21036 DevOps with Docker 1 op
  • TKT21037 DevOps with Docker: docker-compose 1 op
  • TKT21038 DevOps with Docker: security and optimization 1 op
  • TKT21039 Core 5G and Beyond 2 op
  • TKT21040 Test-Driven Development 4 op
  • TKT21041 Test-Driven Development: Full Stack 1 op
  • CSM141081 Full Stack -websovelluskehitys 5 op
  • DATA11001 Introduction to Data Science 5 op
  • DATA20041 AI in Society: Introduction 1.5 op
  • DATA20042 AI in Society: AI and Discrimination 0.5 op
  • DATA20049 AI in Society: AI, Justice and Security 0.5 op
  • DATA20050 AI in Society: AI and Democracy 0.5 op
  • TKT210241 Ohjelmointihaasteita 1 1 op
  • TKT210242 Ohjelmointihaasteita 2 1 op
  • TKT210243 Ohjelmointihaasteita 3 1 op
  • TKT210281 Elements of AI: Building AI - Intermediate 1 op
  • TKT210282 Elements of AI: Building AI - Advanced 1 op

Vanha opetussuunitelma (2020-2023):

Cyber security with F-Secure (5 op)

Tunnetaan myös nimellä Titu

Suoritetaan verkkokurssina, jolla käsitellään kyberturvallisuutta, operatiivista tietoturvaa, turvallisen web-ohjelmiston kehitystä, web-ohjelmistojen tyypillisiä haavoittuvuuksia ja niiden korjaamista sekä vastatoimia.

C-ohjelmointi (5 op) [Deprekoitu]

Tunnetaan myös nimellä C

C on aineopintojen valinnainen kurssi, joka on tarkoitettu ohjelmoinnin perusasiat osaaville ja perustietorakenteet tunteville. Ensin kannattaa siis suorittaa suosiolla ensimmäisen vuoden ohjelmointikurssit harjoitustöineen sekä Tietorakenteet. Javalla ohjelmoineille kielen syntaksin omaksuminen on helppoa, mutta pelkän ulkoisen samannäköisyyden ei kannata antaa pettää itseään. C on käsitemaailmaltaan ja rakenteiltaan varsin erilainen kieli kuin Java ja sitä myös käytetään hieman erilaisiin tarkoituksiin. C:llä tehdään mm. koneenläheisiä, suurta tehoa vaativia, usein tekstipohjaisia työkaluohjelmia. Javalla taas on mukavampi rakennella sekä ohjelmoijan että käyttäjän kannalta turvallisia sovelluksia, usein graafisia sellaisia - mikäli nopeus ei ole kriittisin tekijä.

Muistiosoittimien ja muistinhallinnan kanssa pelaaminen, joka Javassa on automaattista, voi osoittautua hankalaksi omaksua. Myöskään linkitettyjen listojen ohjelmointi, johon perehdytään varsin tarkkaan, ei tule vastaan ohjelmoinnin perus- ja jatkokurssilla. Kurssilla opetetaan nykyään myös puiden ja verkkojen (tietorakenteita nämäkin) käsittelyä, tosin vähemmällä tarkastelulla kuin esim. Tietorakenteet-kurssilla. Tämä kurssi tuo varsin mukavaa vaihtelua ensimmäisen syksyn Java-annostukseen varsinkin, jos olet ohjelmoinut C:llä aikaisemmin.

Programming for Performance (5 op)

Tunnetaan myös nimellä PFP

Algoritmit ongelmanratkaisussa (10 op)

Tunnetaan myös nimellä Alon

Kurssi on valinnainen opintojakso ja toimii periaatteessa TiRa:n jatkokurssina (virallinen jatkokurssi TiRa:lle on DAA - Design & Analysis of Algorithms). Kurssi on tarkoituksella tosi haastava ja työläs. Kurssin pitäjä, Antti Laaksonen, on jopa väittänyt, että kurssi on kandivaiheen (koko Suomen?) vaikein kurssi.

Nimi paljastaa ehkä jo, että kurssilla käsitellään siis algoritmeja. Alon:ssa kerrotaan vähän TiRa asioita, mutta tällä kertaa C++ -kielellä, joka on kurssin ensisijainen ohjelmointikieli (tehtäviä voi myös ratkaista Haskell:lla tai Rust:lla). Lähtökohtaisesti oletetaan, että TiRa on tosi hyvin hallussa, sillä kurssilla käsitellään samoja tekniikoita kuten TiRa:ssa, esim. rekursio, verkko-algoritmeja ja tietorakenteita, mutta paljon pintatasoisemmin. Tarkoitus on enemmänkin, että opiskelija itse ymmärtää, miten erilaisia tekniikoita sovelletaan. Kurssin päätarkoitus on nimenomaan kehittää opiskelijan ongelmanratkaisukykyä. Kurssilla on 14 viikkoa, jokaisella viikolla 6 tehtävää. Kaikki tehtävät ovat lähtökohtaisesti vaikeita. Viikon ensimmäinen tehtävä saattaa olla helpompi kuin muut ja viimeinen tehtävä toimii vähän kuin "bonustehävänä", joka on, lähes aina, erittäin haastava.

Computer Organization II (5 op)

Full Stack -websovelluskehitys (3-7 op)

Full Stack -websovelluskehitys harjoitustyö (1-10 op)

Introduction to Game Programming (5 op)

Tunnetaan myös nimellä IGP

Kurssilla tutustutaan peliohjelmoinnin maailmaan. Kurssilla käsitellään peliohjelmointia teoreettisella tasolla, pelimoottoreiden alkeita ja erilaisia peliohjelmoinnin paradigmoja, C#-kielen ominaisuuksia ja Unity-pelimoottorin perusominaisuuksia. Kurssin nimi saattaa olla harhaanjohtava, sillä kurssilla ei ohjelmoida ollenkaan.

Johdatus funktionaaliseen ohjelmointiin (5 op)

Ohjelmointihaasteita I (1-3 op)

Web-palvelinohjelmointi Java (5 op)

Muut pakolliset opinnot

Tietokone työvälineenä (1 op)

Tunnetaan myös nimellä Lapiokurssi tai pelkkä Lapio

Työvälinekurssi on peruskurssi, jolla opetellaan myöhemmillä kursseilla välttämättömiä käytännön taitoja. Kurssilla opetellaan käyttämään laitoksella käytössä olevia ohjelmistoja ja laitteistoja sekä valitsemaan tehtävään sopiva työkalu. Keskeisimmät Unix/Linux-komennot, HTML-perusteet, tekstieditorien ja tekstinkäsittelyohjelmien käyttö jne. kannattaa oppia, ettei sitten myöhemmin kulu pään raapimiseen enemmän aikaa kuin itse tekemiseen. Monelle kokeneellekin tietokoneenkäyttäjälle kurssilla todennäköisesti on uutta asiaa ainakin laitoksen järjestelmistä, joten kurssimateriaali ainakin kannattaa lukea läpi.

Akateemiset taidot (1-2 op)

Opiskelijan digitaidot: orientaatio (2 op)