Tervetuloa kurssille!
Ohjelmistokehittäjän työ on suurimmaksi osaksi muuta kuin jonkin tietyn ohjelmointikielen syntaksin suvereenia hallintaa. Tämän kurssin tavoitteena on esitellä ohjelmistokehittäjälle tärkeitä taitoja, työkaluja ja tekniikoita, joita ei suoraan ole tullut esille ohjelmoinnin peruskursseilla tai projektityökursseissa. Kurssi toimii samalla myös tukikurssina ohjelmistoprojekti 2 -kurssille, jossa tämän kurssin aiheita päästään soveltamaan osana isompaa projektia.
Opettajina kurssilla toimivat Teemu Havulinna ja Juhani Välimäki ([email protected]). Kurssin sisältö perustuu suuresti myös kurssin aikaisemman opettajan, Ohto Rainion, työhön.
Kurssin alkupuoliskolla käsitellään lukukausittain vaihtelevia aiheita ja opiskelijat tekevät niihin liittyviä harjoitustehtäviä. Jokaisesta esiteltävästä aiheesta on myös mahdollista tehdä laajempi seminaaritehtävä kurssin jälkimmäisellä puoliskolla.
Seminaarivaiheessa, kurssin jälkimmäisellä puoliskolla, jokainen opiskelija valitsee kurssin aiheista itseään eniten kiinnostavan ja tekee siihen liittyvän seminaaritehtävän. Seminaaritehtävän voi valita joko opettajien ehdotuksista tai seminaaritehtävän aihetta voi ehdottaa myös itse. Seminaaritehtävä voi liittyvä läheisesti opiskelijan ohjelmistoprojekti 2 -kurssin projektiin.
Saman seminaariaiheen valinneet opiskelijat osallistuvat yhteiseen seminaariin, jossa analysoidaan ja kommentoidaan myös muiden opiskelijoiden seminaaritöitä.
⚠ Kurssin osallistumisen vahvistaminen edellyttää ensimmäisen ja toisen viikon viikkotehtävien hyväksyttyä suoritusta niiden määräaikaan mennessä. Tehtäviin on saatavissa vinkkejä ja tukea kurssin Teams-kanavalla sekä oppitunneilla.
Ensimmäisten tehtävien ei ole tarkoitus karsia ketään pois kurssilta, vaan varmistaa, että työskentely kurssin työkaluilla ja ohjelmointikielillä lähtee kaikilla käyntiin. Tarvitset riittävät esitiedot näistä aiheista kurssin seuraavia viikkoja varten.
Kurssin keskeyttäminen ei ole Haaga-Helian linjauksia noudattaen mahdollista enää osallistumisen vahvistamisen jälkeen:
"Opettaja poistaa opetuksen alussa toteutukselta opiskelijat, jotka eivät osallistu ensimmäiseen opetuskertaan tai ilmoita poissaolostaan. Opiskelijoita ei enää myöhemmin poisteta toteutukselta, vaan kaikille annetaan arvosana hylätty-kiitettävä."
https://mynet.haaga-helia.fi/group/pakki/toteutukselle-ilmoittautuminen
Huom! Tämä sivu päivittyy kurssin edetessä ja sekä aikataulu että sisältö tarkentuvat.
Oppitunnit pidetään pääsääntöisesti torstaisin klo 14-16.45. Jos muuta ei ilmoiteta erikseen, kurssin Teams-kanavan viesteissä ja lukujärjestyksessä meillä on viikottainen hybriditapaaminen luokassa ja Teamsissa.
Toivomme että tutustutte mahdollisuuksien mukaan etukäteen kunkin aiheen videoihin ja materiaaleihin, jotta voimme tapaamisissa käyttää aikaa myös mm. tehtävien parissa.
To 18.1. Kurssin johdanto, ympäristöt ja Linux/Unix-komentorivi
Videot:
- 📼 Linuxin peruskäyttö
- 📼 GitHub classroom -tehtävien ohjeistus
- 📼 Kurssin koodausympäristöt (wsl2, Docker, Development containers, Codespace)
Tehtävät (DL ke 24.1. klo 22:00):
- 📥 Kurssin kehitysympäristön asennus
- 📥 Linux-komentorivi (Teams ja GitHub classroom)
To 25.1. DevOps: Johdatus konttiteknologiaan, containers, images
Käytämme Eficoden ja Helsingin yliopiston yhteistyönä syntynyttä DevOps with Docker -kurssia. Ainakin sen alkua.
Keskustellaan yhdessä termien ja kuvien avulla käsitteistä, jotta itse docker-opiskelun suorittaminen sujuu jouhevammin: Tiimin DevOpsin tavoitetila periaatekuvana ja Dockerin keskeisiä käsitteitä sanoiksi puettuina ja kuvina.
Suositellut videot: Never install locally (Coderized) ja Virtual Machine (VM) vs Docker (IBM Technology)
Docker cheatsheettejä: CLI cheat sheet pdf, toinen, mm docker concepts, kolmas cheatsheet poikineen.
Dockerin laaja ohjeisto docs.docker.com
Tuetun työskentelyn vaiheet 1:
- Asenna Docker ja Introduction to Part 1
- Definitions and basic concepts, Tehtävät 1.1-1.2
- Running and stopping containers, Tehtävät 1.3-1.4
- In-depth dive to images, Tehtävät 1.5-1.8
Tehtävä DevOps with Docker part 1a löytyy Teamsista ja GitHub classroomista. DL ke 31.1. klo 22:00.
To 1.2. DevOps: Docker "volumet" ja portit
Tuetun työskentelyn vaiheet 2:
- Defining start conditions for the container
- Interacting with the container via volumes and ports, Tehtävät 1.9-1.10
- Utilizing tools from the Registry, Tehtävät 1.11-1.14
- Summary
Tehtävä DevOps with Docker part 1b löytyy Teamsista ja GitHub classroomista. DL ke 7.1. klo 22:00.
To 8.2. DevOps: Yhteydet kontteihin ja levykuvien julkaisu, Johdatus Docker Compose:n käyttöön, Continuous integration ja continuous delivery
Tuetun työskentelyn vaiheet 3: Part 2
- Migrating to Docker Compose, Tehtävät 2.1-2.3
- Docker networking, Tehtävät 2.4-2.5
- Volumes in action, Tehtävät 2.6-2.10
- No more?
Ohjelmistoarkkitehtuureista
Näistä molemmista aukeaa monivalintatehtävä/quiz torstaina. Sillä voi korvata viikon Docker-tehtävän
To 15.2. Full-stack sovelluksen kontitus / tai vastaava tieto teoriassa
Viimeinen Docker-osuus. Ei uutta opiskeltavaa asiaa, mutta joko...
a. Full-stack -sovelluksen dockerointi/kontitus Täältä sovelluksen lähtötiedot ja kaikkia komentoja, joita tarvittiin manuaalisessa asentamisessa
TAI
b. Monivalintatehtäviä dockerista (tasolle docker-composen pelkät perusteet ja esim. docker network:in pelkät perusteet). Muutamia materiaalilinkkejä ja videolinkkejä annetaan ja sitten testi osaamsesta. Ihan perusymmärrystä haetaan. Sellaista että olette työhaastattelussa tai ekassa työpaikassa kärryillä siitä mitä dockerilla voi saada aikaan. Materiaalilinkit ilmestyvät ensin, ja monivalinta viimeistään perjantaina. Koko kurssin viikkotyömäärä on 8-9h, joten valmistaudu huolella ensin se max 7-8h.
Monivalintatehtävät perustuvat siis näissä tai alussa linkattujen materiaalien keskeisiin asioihin. Sellaisiin, joiden ymmärtäminen / osaaminen on auttanut kontituksessa. Joku yksityiskohtakin voidaan kysyä sieltä täältä. Mutta täyteen 5p ei vaadita täysiä monivalintapisteitä.
Docker-monivalintatehtävien materiaalit
To 22.2. intensiiviviikko
To 29.2. TypeScript-kielen perusteet ja työkalut
Lisämateriaalina suosittelemme perehtymään lukuun "TypeScriptin perusteet" typescript-ohjelmointi.github.io-sivustolla.
Tehtävä GitHub classroomissa, DL ke 6.3. klo 22.
To 7.3. JS/TS edistyneet ominaisuudet
JavaScripti/ECMAScriptin ominaisuuksista (käytetään TypeScriptissä)
Tehtävä GitHub classroomissa, DL ke 13.3. klo 22.
To 14.3. JS/TS-koodin yksikkötestaus
Tehtävä GitHub classroomissa, DL ke 27.3. klo 22.
To 21.3. intensiiviviikko
To 28.3. Node.js backend -arkkitehtuuri
Tehtävä Teamsissä, DL su 14.4. klo 22.To 11.4. , 18.4., 25.4., 2.5. Seminaarityön tekemistä
Yksilöllistä ohjausta Teamsissa tai sopimuksen mukaan kampuksella. Kurssin seminaarivaiheessa ei järjestetä yhteisiä tapaamisia, vaan tarjoamme yksilöllistä ohjausta etukäteen sovittavina ajankohtina.
Seminaariraportin palautus su 12.5. klo 22 mennessä.
To 9.5. Helatorstai
To 16.5. Seminaariesitykset
Tällä kurssilla hyödynnetään MS Teams -palvelua. Teams tarjoaa luontevan kanavan kysyä ja keskustella myös oppituntien ulkopuolella. Jos jäät jumiin tehtävän kanssa tai et ymmärrä materiaaleja tai tehtävänantoja, kysy rohkeasti vinkkejä Teamsissa. Todennäköisesti samaa ongelmaa pohtii kanssasi myös moni muu, joten lähetäthän sisältöä ja tehtävänantoja koskevat kysymykset yhteiselle kanavalle eikä yksityisviestinä.
Kurssilla suositellaan käytettävän Teamsin työpöytäsovellusta. Kirjautuminen Teamsiin tapahtuu Haaga-Helian opiskelijatunnuksella.
Liittymisohje kurssin Teams-ryhmään löytyy sähköpostitse lähetetystä tiedotteesta sekä Moodlesta.
Kurssilla käytetään lukuisia eri teknologioita ja työkaluja, joten joudut mahdollisesti tekemään tietokoneellesi lukuisia erilaisia asennuksia.
Ohjelmistojen asentaminen ja käyttäminen eri käyttöjärjestelmillä poikkeaa toisistaan merkittävästi, minkä lisäksi saman ohjelmiston eri versiot toimivat joskus hyvin eri tavoilla. Asennus- ja yhteensopivuusongelmien minimoimiseksi kurssilla suositellaan vahvasti oman erillisen Linux-virtuaalikoneen, WSL2-ympäristön, Docker-konttien tai GitHub codespacen käyttöä kurssin tehtäviä tehdessäsi.
Virtualisoituun ympäristöön tekemäsi asennukset eivät vaikuta tietokoneesi normaaliin käyttöön. Käyttämällä kurssin suositusten mukaisia ympäristöjä saat myös todennäköisemmin vertaistukea muilta opiskelijoilta ja opettajilta.
Mikäli sinulla on valmiiksi käytössäsi Linux tai muu Unix-pohjainen käyttöjärjestelmä, kuten macOS, voit käyttää sitä kurssilla. Myös etäyhteydellä käytettävät Linux-ympäristöt, kuten DigitalOcean, AWS tai Azure voivat sopia kurssin tarkoituksiin, mutta niihin pystymme tarjoamaan vain vähäistä käyttötukea.
Lisää ohjeita löydät kurssin ensimmäisen viikon materiaalista.
⚠ Linux voidaan asentaa myös tietokoneen pääkäyttöjärjestelmäksi tai "dual boot"-vaihtoehdolla nykyisen käyttöjärjestelmän rinnalle, mutta näitä vaihtoehtoja ei kurssin puolesta suositella.
⚠ Kurssin aikana teemme asennuksia mm. Ubuntun apt
-työkalulla, Noden npm
-työkalulla, Dockerilla ja VS Codella. Kaikki nämä työkalut lisäävät tietokoneellesi suoritettavaa ohjelmakoodia, jonka yhteydessä tulee aina huomioida myös tietoturva. Asennusten tekeminen erillisessä virtuaalisessa ympäristössä on oiva lisä oman tietokoneesi suojaamiseksi, vaikka olemmekin pyrkineet valitsemaan vain erittäin tunnettuja ja hyvämaineisia ohjelmistoja tälle kurssille.
Kurssilla tehdään viikoittaisia tehtäviä, joiden arvioinnissa hyödynnetään mm. GitHub classroom -palvelua sekä MS Teamsia. Sekä kurssin Classroom-tehtäväpalautukset että MS Teams -ryhmä poistetaan vaaditun säilytysajan päätyttyä. Jos haluat säilyttää kurssilla työstämäsi tehtävien ratkaisut pidempään, teethän repositorioistasi kopiot omalle käyttäjätunnuksellesi GitHubissa. Vaihtoehtoisesti voit säilyttää tehtäviesi ratkaisut paikallisesti omilla laitteillasi.
Kurssi arvioidaan asteikolla 0-5. Kurssin arviointi perustuu viikkoaiheiden yhteydessä suoritettuihin tehtäviin (60 % arvosanasta) sekä kurssin toisella puoliskolla tehtävään seminaarityöhön (40 %).
Kunkin tehtävän tai tehtäväkokonaisuuden painoarvo loppuarvioinnissa määräytyy sen laajuuden mukaan suhteessa muihin tehtäviin ja tehtäväkokonaisuuksiin. Pisteet skaalataan yhteneviksi vasta loppuarvosanaa varten.
Yksittäinen palauttamatta jäänyt tai arvosanalla 0 arvioitu osasuoritus ei estä seuraavien suoritusten tekemistä, kunhan kokonaisuutena kurssista muodostuu hyväksytty arvosana. Tämä koskee myös seminaarityötä. Poikkeuksena tähän on kahden ensimmäisen viikon tehtävät, jotka toimivat kurssille osallistumisen vahvistamisessa.
Kurssin keskeyttäminen ei ole Haaga-Helian linjauksia noudattaen mahdollista enää kahden ensimmäisen viikon jälkeen:
"Opettaja poistaa opetuksen alussa toteutukselta opiskelijat, jotka eivät osallistu ensimmäiseen opetuskertaan tai ilmoita poissaolostaan. Opiskelijoita ei enää myöhemmin poisteta toteutukselta, vaan kaikille annetaan arvosana hylätty-kiitettävä."
https://mynet.haaga-helia.fi/group/pakki/toteutukselle-ilmoittautuminen
Tämän kurssin materiaali perustuu suurelta osin valmiisiin netistä löytyviin dokumentaatioihin ja tutoriaaleihein. Tällä sivulla eri aihealueiden yhteydessä tarjotaan linkkejä aihetta koskeviin materiaaleihin, mutta joudut sen lisäksi merkittävissä määrin etsimään itse tietoa aiheista.
Ohjelmointiongelmiin löytyy usein valmiita tai osittaisia ratkaisuja ympäri Internetiä niin keskustelupalstoilta kuin tutoriaaleista. Nettilähteiden hyödyntäminen ja niistä mallin ottaminen on sallittua ja kannustettavaa, mutta et saa vain kopioida ratkaisuja, vaan sinun tulee kirjoittaa koodisi itse ja myös ymmärtää, miten se toimii. Koska kyseessä on korkeakoulun opintojakso, sinun tulee merkitä lähteet lainatessasi esimerkiksi StackOverflow:sta löytämääsi koodia. Lähdeviitteeksi riittää esimerkiksi verkkosivun osoite kommenttina lainatun koodin yhteydessä, tai käyttämäsi lähteen käyttöehtojen mukainen muu lähdeviite.
Tehtävien vastausten generointi tekoälyn avulla on kiellettyä. Et saa siis käyttää esim. ChatGPT:tä tai GitHub Copilot:ia ratkaistaksesi annetun tehtävän sellaisenaan. Saat kuitenkin hyödyntää näitä palveluita yksittäisten ongelmien ratkaisemiseksi.
Yhteistyö on kurssilla kannustettavaa, mutta yksilötehtävissä kaikkien tulee silti tuottaa omat ratkaisut. Voitte koodata yhdessä ja tehdä toiminnallisesti samanlaisia ratkaisuja, mutta suora kopiointi ei ole sallittua. Merkitkää kaikkiin yhteistyössä tehtyihin tehtäviin niitä työstäneiden opiskelijoiden nimet esimerkiksi lähdekoodin kommentteina.