Ohjelmointi 1/ Kysymyksiä ja vastauksia

Huom!

Alla on aiempien vuosien kysymyksiä ja vastauksia. Lisää uudet kysymykset kurssin keskustelu-sivulle. Eli uudet kysymykset sinne sopivaan kohtaan.

Kysymykset ovat alun perin kotoisin demotehtävästä, missä sai esittää luennoitsijalle yhden kysymyksen. Vastaan näihin "henkilökohtaisiin" sitä mukaa kuin ehdin, mutta yleisempiin saa toki muutkin vastata.

Kysymisohjeet: Etsi huolella kategoria mihin kysymyksesi kuuluu. Paina sen jälkeen Lisää kysymys-painiketta.

Käy välillä katsomassa on kysymykseesi vastattu ja mikäli on, kommentoi viereen (klikkaa lohko ja käytä kynän kuvaa) että saitko haluamasi vastauksen. Jos et saanut, niin esitä jatkokysymys.

Vastaajat

  • VL: Vesa Lappalainen
  • AJL: Antti-Jussi Lakanen (Ohj1-kurssin luennoija keväisin)
  • MR: Mikko Röyskö, entinen tuntiopettaja ja Jypelin sekä ComTestin ylläpitäjä
  • ji: Jonne Itkonen, tausta-apu ohjelmointikursseilla
  • AV: Antti Valmari, professori tietojenkäsittelytiede

Vastausohjeet: Siirry himpun kysymyksen Q-kirjaimen vasemmalle puolella ja klikkaa syttyvässä sinivihreässä alueessa hiiren nappia ja valitse Edit. Kirjoita vastauksesi A: -kirjaimen perään ja laita vastauksen loppuun nimikirjaimesi. Jos sitä ei ole ylläolevassa listassa, niin lisää se sinne. Editorin saat tallennettua myös Ctrl-S. Jos editoit paljon, voit siinä vasemman reunan menussa pistää pallukan Editin kohdalle, jolloin editori aukeaa tuplaklikkauksella. Jos haluat täydentää jotakin vastausta, niin tee siihen uusi A: uudelle riville ja lopeta edellinen \-merkkiin. Muista laittaa vastauksen loppuun viiva (-) ja omat nimikirjaimesi. Voit myös tarvittaessa siirtää kysymyksen toiseen kategoriaan, ks. ohjeita

1. Kurssin suorittaminen

Q: Kuinka raskas tämä kurssi tulee olemaan henkilölle, jolla ei ole ohjelmointi taustaa?

A: "Raskaus" on laskettu juuri sellaiselle. Kurssilla ei edellytetä taustaa. Joskus siitä on jopa haittaa. - VL

Q: Mikä on yleisesti ollut haasteellisin asia oppia henkilöille jotka aloittavat vasta ohjelmoinnin? Ja onko vinkkejä sen asian oppimiseen?

A: Tajuta että voi oppia vain tekemällä ja se vie aikaa. Myös se, että kynän ja paperin esiinkaivaminen voi nopeuttaa ajattelua. - VL

Q: Voiko opettajiin olla yhteydessä matalalla kynnyksellä, jos jokin askarruttaa liittyen koodaamiseen tai kurssiin?

A: Voi olla. Mutta jos joku askarruttaa, niin suosittelen kysymään kurssin keskustelupalstalla, koska erittäin todennäköisesti sama asia askarruttaa montaa muutakin, mutta eivät uskalla kysyä. Pääteohjauksissa voi keskustella henkilökohtaisesti ohjaajien kanssa ja etäpääteohjauksissa jopa niin, että muut eivät kuule :-) Toki Vesaa voi aina lähestyä suoraan sähköpostillakin tai nykäistä hihasta ennen tai jälkeen luennon tai milloin muuten sattuu näkemään. Kuten ohjaajiakin. Sikisihän olemme töissä :-) - VL

Q: Riittääkö kurssin hyvään arvosanaan pelkästään kurssilla tehdyt tehtävät vai pitääkö siihen laittaa paljon lisätyötä?

A: Toki riittää, olisihan se epäreilua vaatia vielä kurssin ulkopuolista osaamista. Siksi tällä kurssilla 5/5 tarkoittaa hieman eri kuin joillakin kursseilla, jossa vaatimuksissa on vielä kurssin ulkopuolistakin selvittämistä. - VL

Q: Tätä oli sivuten joku muukin kysynyt, mutta onko kurssista esimerkiksi 5/5 arvostelu mahdollista saada pelkästään tekemällä tehtäviä?

A: Ei ole. Vain 1/5 on mahdollista ilman tenttiä. - VL

Q: Tuleeko kurssin aikana hyvä ymmärrys ja pohja kaikkia ohjelmointikieliä miettien?

A: Ei varmasti kaikkia :-) Esim funktionaalisilla kielillä on hyvin erilainen ajattelutapa ja joidenkin mielestä olisi jopa parempi ettei olisi mitään pohjia ennen niiden käyttöä. Mutta tällä hetkellä käytössä olevien yleisten kielien välillä on mahdollista liikkua kurssin jälkeen. Seuraava kurssin (Ohj1) on Javalla, eli siinä jo heti katsotaan miten siirrytään toiseen hyvin lähellä olevana kieleen. Ohj2:n perään on pikakurssia C/C++ kielistä (lähinnä jotta ymmärtää miksi niistä kannattaa pysyä erossa :-) Lahtosen Tommin kursseilla tulee Pythonia ja JavaCsriptiä. Pythonia tulee myös tekoälykursseilla. Ja kieli ei todellakaan ole se suurin hankaluus noilla kursseilla. - VL

Q: Onko kurssi huomattavan hankala oppia, jos ei ole käynyt pitkää matematiikkaa lukiossa?

A: Kyllähän pitkä matikka kehittää ajattelua, mutta itse pitkää matikkaa ei kurssilla tarvita. Kunhan lopettaa sen ajattelun että "en minä kun nuo muut ovat X" - VL

Q: Onko ohjelmointi 2 kurssi aivan mahdoton, jos tästä kurssista ei saa esimerkiksi kakkosta parempaa?

A: Aika harva joka tekee demot tosissaan itse (eikä esim tekoälyn avulla) saa tästä kurssita 2 tai huonomman. Eli ei kannata lähteä tavoittelemaan kuuta kuin viittä taivaalta. - VL

Q: Mitä kurssia etänä suorittavan kannattaisi huomioida, verrattuna lähiopetukseen osallistuvaan?

A: Eipä tuossa nykyisin ole hirveää eroa kun voi pääteohjauksiinkin osallistua etänä. - VL

Q: Ovatko demojen palautuksissa käydyt opiskelijoiden vastaukset anonyymejä?

A: Joo, mutta jos ohjelmassa on oma nimi kommenteissa (kuten pitäisi), niin se näkyy. Eli jos ei halua, niin sitten pitää laitta ajoku Aku Ankka. - VL

Q: Saavathan kaikki osallistua luennoille paikan päällä auditorioissa? Siis myös avoimen yliopiston opiskelijat

A: Kyllä, sitä ei voi kieltää :-) Yliopiston luennot on määritelty avoimiksi tilaisuuksiksi. - VL

Q: Kuinka paljon ohjelmointi kursseilla tullaan tarvitsemaan matematiikkaa?

A: Minimissään ei paljoakaan mitä oikeasti matematiikaksi voi nimittää. Keskiarvon laskemista sanoisin vielä laskennoksi. Monisteen voi silmäillä läpi ja katsoa onko siinä mielestään paljon. Muutamia tuollaisten koordinaattien laskemista kuten lumiukon silmien paikat yms. tarvitaan, mutta noista selviää kyllä yläkoulun pohjilla. - VL

Q: Is it possible to be flexible about certain dates and deadlines, such as those related to the HT? Or to extend the length of the course onto the next term?

A: By doing Open University Course there is not so many dealines. In our normal course we must use deadlines to get people ready before December. - VL

Q: Onko mahdollista päivittää koko TIM helppolukuisemmaksi? Tuntuu, että vuosien varrella on vaan lisätty asioita ja lopputulos on kovin sekava.

A: Varmaan on mahdollista, mutta siinä tarvittaisiin ulkopuolista apua, koska me emme osaa. Jos osaisimme, päivittäisimme ilman muuta -VL

Q: Koneeni suoritusteho on niin olematon, että se hyytyy melko pienestäkin kuormasta. Onko kurssin projektit niin raskaita, että kurssia ei edes kannata lähteä suorittamaan tällä koneella ja käyttää sen sijaan suosiolla koulun koneita?

A: Kannattaa kokeille ehkä myös olisiko VSCode yhtään parempi kuin Rider jos tehot ovat pienet. - VL

Q: Pärjääkö ohj2 kurssilla pelkästään ohj1 taustalla vai vaatiiko se muuta aijempaa osaamista?

A: Niinhän se on suunniteltu että osaaminen kasvaa Ohj1-kurssin aikana riittävästi :-) Kunhan tekee hommia. - VL

Q: Onko siis niin, että avoimen yliopiston kautta suorittavilla ei ole ennalta määriteltyjä deadlineja?

A: Ei muuta kuin että vuoden päästä pitää olla valmis. Eli kyllä siinä itselleen pitää deadlinejä laittaa jotta se tulee tehtyä. Todellisuus on että ne jotka tekevät ilman deadlinejä, eivät tahdo saada kurssia läpi. Osa avoimen tekijöistä onkin siksi siirtynyt tutkareiden kanssa samoihin aikatauluihin. - VL

Q: Mitä jos tulee kurssia muutaman viikon ajan edettyä (esim. demo 5) todenneeksi, että ei nyt töiden ja muun elämän ohella ehdikään suorittaa koko kurssia aikataulussa. Voiko kesken kurssin siirtyä suorittamaan avoimen aikataulussa ja antaa avoimen kautta itselleen hieman lisäaikaa, jotta ehtii käydä kaikki luentomateriaalit ja demot ajatuksella läpi. Miten se käytännössä tapahtuisi? Eli siis siirtyminen avoimen kurssille.

A: Ota sähköpostilla yhteyttä. - VL

Q: Miten tämä ihan ensimmäisen esidemotehtävän ruksiminen oikein suoritetaan? Linkki ei varsinaisesti tarjoa ruksimismahdollisuuksia? Ruksi aluksi kurssin kotisivulle mitä materiaalia haluat paperiversiona:

A: -

Lisää kysymys

**Q:** ⁞

**A:** -

2. Työkaluista

Q: Toimiiko kaikki vaadittavat ohjelmat imaceilla?

A: Siinä mielessä jopa paremmin että prossut ovat tehokkaampia. - VL

Q: Kuinka tarpeellista on asentaa Hexa-editori ja säännöllisten lausekkeiden harjoitteluun käytettävä työkalu?

A: Tuo riippuu ihan ammattilaisuuden asteesta mille haluaa tähdätä. Tosi koodarin on pakko ymmärtää miten data tallennetaan ja silloin on fiksua aina välillä katsella miltä se näyttää binäärisenä (heksa on binäärin ihmisluettavampi versio). Itse olen monta tilannetta pelastanut sillä kun osaa katsoa datan sisäistä muotoa. Mutta jos Ohj1 on alan ainoa kurssia ja tarkoitus on saada vain pintaraapaisu, niin ilmankin pärjää. Tuon RegExp Coachin tilalla nykyisin on tosi hyvä webbi-sivu https://regex101.com/ joka hoitelee joitakin asioita paremminkin (ei ihan kaikkia). Eli ilman noita asennettavia pärjää kyllä. - VL

A: Käyttöjärjestelmien kurssilla päästään myös hieman käyttämään heksaeditoria, mutta toki kannattaa tarkistaa, että se, ja jokin säännöllisten lausekkeiden kanssa avustava työkalu löytyy suosikkieditoristasi. Ohjelmointikielet ovat myös ottaneet itseään niskasta kiinni ja lisänneet helppokäyttöisempiä ominaisuuksia, ainakin aloittelijoille, säännöllisten lausekkeiden käyttön. -ji

Q: Miksi JetBrains Rider on vahvasti suositeltu tälle kurssille ja miten se eroaa Visual Studiosta ja Visual Studio Codesta?

A: Rider on likempänä VisualStudiota kuin VSCodea. Itse VS on kyllä hyvä, mutta toimii vain Windows ja silloin meillä pitää olla eri ohjeet ja ohjelmat jokaiselle käyttikselle (noin oli aikaisemmin ja se on kaikille työlästä). VSCode toimii kyllä kaikissa järjestelmissä, mutta ei ole yhtä hyvä C#-koodaukseen kun siihen erikseen tehty Rider. Toki silläkin pärjää, mutta on se melkoinen palapeli. - VL

Q: Aallon Ohj1 kurssin (Scala) käyneenä on kiva huomata, että täällä lähdetään mm. komentorivin perusteista ja käytöstä liikkeelle. Kyseisellä kurssilla ei puhuttu mitään kääntämisestä, eikä komentoriviä mainittu kertaakaan. Mitä etuja koet komentorivin harjoittelulla olevan?

A: Komentorivi on oltava työkalupakissa alusta asti, koska "oikeat" työ tehdään sieltä. Ja komentorivin komentoja voidaan helposti kirjoittaa skripteiksi ja toteuttaa kurssin päätavoitetta, eli ATK. Graafisissa käyttöliittymissä automatisointiin on huonoja ja surkeita työkaluja ja sitten työt menevät pelkäksi klikkailuksi, jotka konekin voisi hoitaa. GUI (Graphical User Interface) on ok tehtävissä, mitä tekee harvoin, koska sen kautta ehkä voi löytää sen miten tehdään. Mutta kun jotakin ruvetaan tekemään oikeasti usein ja jatkuvasti, on hommia syytä automatisoida. Valitettavasti suurin osa käyttäjistä jämähtää sitten sille GUI tasolle eikä halua oppia tekemään hommia tehokkaasti :-( Demo 1:n palautustilaisuudessa tulee esimerkkejä, kuten muutenkin tipoittain koko kurssin ajan :-). Ajattele esim nytkin "opitusta", että miten editori aukeaa oikeaan paikkaan kun sinnne on ensin cd:llä menty ja sitten annetaan komento code Lumiukko.cs. GUIn kautta tehtynä tuossa saa klikkailla paljon ja olla tarkkana. - VL

Q: Jos ei ole aiempaa ohjelmointikokemusta, onko Macilla vaikeampaa suorittaa kurssi vs. Windows-kone? Varsinkin, jos on käyttänyt Macia lähinnä viihdekäyttöön.

A: Ei koneella ole mitään väliä. Kunhan opettelee käyttämään sitä. - VL

Q: En pysty aktivoimaan jetbrains opiskelijan lisenssiä, kun ei tule sähköpostiin mitään. Olen ottanut minun edelleen lähetyksenkin pois, mutta ei siltikään tule mihinkään sähköpostiosoitteeseen viestiä jetbrainssilta. Mitäköhän voisin vielä yrittää?

A: Kokeilitko ohjeen mukaisesti lähettää ulkopuolisesta osoitteesta (esim. gmail, yahoo, ...) omaan opiskelijasähköpostiisi testiviestin? Jos tämä viesti ei tule perille, ei myöskään JetBrainsin viesti/lisenssiposti tule perille. Eikä JetBrainsin tilauslomakkeen täyttäminen useita kertoja auta asiaa, vaan päin vastoin laittaa osoitteesi mustalle listalle, jonka poistoa pitää pyytää JetBrainsin tuesta. -AJL

Q: Hei, tehtävässä B on linkki Alice asentamiseen, mutta se ei toimi. Kun yritän avata sen, siellä lukee "Tätä sivua ei ole olemassa". En myöskään löytänyt Alice työkaluista. Voisitko auttaa minua ja kertoa, miten Alice asennetaan?

A: Antaa tuon Alicen olla tältä kurssilla ja tyydytään vaan katsomaan sitä siltä videolta mikä oli Demo 1:ssä. Siellä oli kyllä myös linkki asennusohjeisiin. - VL

Q: Linuxilla kun puskee jotain harkkatyön repoon niin se kysyy joka kerta käyttäjätunnusta ja salasanaa, voiko tämä salasanan ja käyttäjän laittamisen automatisoida? Alkaa hieman tympimään kun pitää joka kerta kirjoittaa se sama merkkihirviö mikä minun salasanani on ja silloin varsinkin kun tekee paljon committeja. Windowsilla ei ole samaa ongelmaa.

A: Olen lisännyt julkisen SSH-avaimeni JYU:n Gitlabiin, profiilikuva → Preferences → SSH Keys, eikä tuon jälkeen ole salasanaa kaivannut. Toiset käyttävät SSH:n avainagenttia (ssh-agent), jolloin n. kerran päivässä, kun työt aloittaa, kirjoittaa salasanan ja sen jälkeen agentti hoitaa tämän puolestasi. Tuo ssh-agent on tarpeen, jos avaimen on suojannut salalauseella, mutta aika moni jättää avaimen salalauseen, ehkä vähän huonoja ohjeita seuraten, tyhjäksi. Salaus on tyhjälläkin salalauseella yhä turvallista, mutta avaimista pitää pitää parempi huoli, vrt. jos annat kämppäsi avaimet jollekin, hän pääsee sinne sisään. -ji

Q: Onko jotain vähimmäisvaatimuksia tietokoneen suhteen (esim.suorituskyky), jotta kurssin pystyy suorittamaan omalla koneella?

A: - Tuolla on vanha sivu siitä mitä koneelta tarvitsee. Mutta varmaan edelleen pätee. - VL

Lisää kysymys

**Q:** ⁞

**A:** -

3. Eri kielistä

Q: Voiko seuraavat yliopiston kurssit tehdä muilla kielillä (esim. c++), vai ovatko kaikki C-sharpilla.

A: Ohjelmointi 2 on Javalla (tai jos haluaa, niin harkan voi tehdä Kotlin tai Rust). Sen jälkeen on 1 op lisäkurssi, joka on C/C++ ja sitten jatkossa eri kursseilla on eri kieliä, tekoälykurssilla Python, oliokurssilla Smalltalk, funktio-ohjelmoinnin kurssilla Racket jne. - VL

Q: Mitkä ovat yleisimpiä käytettyjä ohjelmointikieliä, eli toisin sanoen kieliä, mitkä kannattaa osata? Ja mihin käyttötarkoituksiin näitä eri kieliä käytetään?

A: ks: https://www.tiobe.com/tiobe-index/. Esim Python on suosiossa siksi, että sille on viimeaikoina tullut valtavasti kirjastoja esim datan käsittelyyn ja tekoälyyn liittyen. Mutta muuten kärkiviisikolla (Python, C++, C, Java ja C#) tehdään aika pitkälle samoja asioita. C mielletään laiteläheiseksi kieleksi, mutta esim Rust on pitkälle sitä korvaamassa (Jopa Linus Torvalds hyväksyy Linux-koodiin Rustia C:n sijaan, mutta ei hyväksy C++ -koodia) C:ssä ei ole olioita kuten ei Rustissakaan. Sitten JavaScript ja sen sukulaiset (mm. TypeScript) ovat pitkälle kieliä jolla toteutetaan Web-pohjaisten ohjelmien (kuten esim TIM. Google Maps jne) käyttöliittymäkoodia (sanotaan selainkoodia, front end), mutta niillä voidaan tehdä samoja asioita kuin kärkiviisikollakin. Sitten on esim funktionaalisia kieliä, joissa asioita ajatellaan eri tavalla kuin kärkiviisikossa. Tosin niihinkin on tullut vastaavia ominaisuuksia. Meillä kyllä kurssien aikana nuo ja monet muutkin kielet tulevat esille. - VL

A: Kannattaa myös miettiä, miksi opetella erilaisia ohjelmointikieliä. Nuo Vesan mainitsemat kielet ovat pitkään olleet kärkikahinoissa. TIOBEn historiaa katsomalla huomaat, että kieliä tulee ja menee muodista nopeastikin. Esim. onko Python miten pitkään tuolla, jos Mojo onnistuu tavoitteissaan, on yksi jännä seurattava asia. Tosin Python on jo yllättävän vanha kieli. Toisaalta taas esim. COBOL on hävinnyt uusista tuotoksista, mutta sillä on tehty sen verran tärkeitä järjestelmiä, että välillä etsitään kissojen ja koirien kanssa COBOL-ohjelmoijia töihin.

Jos taas haluaa opiskella erilaisia kieliä ymmärtääkseen ohjelmoinnin monimuotoisuutta paremmin, kannattaa sukeltaa noiden TIOBEn ”The Next 50 Programming Languages” -listan kielten pariin, löytyyhän sieltä myös takavuosien supersuosikki Elm, sekä Groovy, josta uumoiltiin Javan korvaajaa aikoinaan, mielenkiintoinen tarina tuokin.

Kannattaa opetella erilaisia kieliä, myös vähän oudompia, sillä trendikieletkin häviää ja tärkeämpi on ymmärtää ohjelmoinnin monimuotoisuus. Mutta ensin tämä kurssi plakkariin ja sitten myöhemmin on aikaa ja kurssejakin opetella muita kieliä. -ji

Q: Mitä eroja on kielten välillä?

A: Joskus puhutaan paradigmoista (jotkut vihaavat ko sanaa). Paradigmoiksi voidaan sanoa esim: olio-ohjelmointi, funktionaalinen ohjelmointi, proseduraalinen ohjelmointi jne. Eri kielet mahdollistavat yhtä tai useampaa paradigmaa ja koodarista riippuen sama ongelma voidaan samallakin kielellä ratkaista monella eri tavalla. Yleensä kieliin hirttäytyminen aiheuttaa vaan turhia kielisotia. Periaatteessa kaikilla kielillä voi tehdä kaikki asiat. Jotkin helpommin ja jotkin vaikeammin. - VL

Q: Minkä takia tällä kurssilla käytetään nimenomaan C#:a?

A: Jypeli on tehty sillä ja C# on tietyssä mielessä paras kieli siihen että siitä on helpompi liikkua "helppoihin" kieliin (eism Python) ja pääsee myös "vaikeisiin" (C). Ja Javaan siirtyminen menee sormia napsauttamalla. - VL

Q: Mitkä ohjelmointikielet ovat nykyään oleellisimmat nykyajan työelämän kannalta?

A: Tuo riippuu ihan työpaikasta. Kieli ei ole tärkein, vaan että ymmärtää ohjelmointia ja kykenee siirtymään kieleen ja työkaluihin joita ko firmassa tarvitaan. Itse asiassa kielet ovat aika pieni osa verrattuna erilaisiin kirjastoihin. Tärkeintä on oppia oppimaan. - VL

Q: Unohdan usein kirjoittaa ";" merkin koodin loppuun C#-kielessä. Mikä on kyseisen merkin funktio tai tarkoitus? Onko se vain merkki siitä, että komento päättyy tähän, kuten meillä . lauseen lopussa? Kuvittelen usein, että rivinvaihto riittää mutta sehän on vain sovittu tyyli, joka ei vaikuta itse koodiin.

A: Koska oko ohjelman saisi kirjoittaa samalle riville, niin joko merkki on pitänyt sopia lauseen lopettamiseen. Pascal-kielessä ohjelma loppui end., eli voi olla että piste on mennyt tuossa tai joku muu syy miksi se ei voisi olla piste. Muta kuitenkin kuten arvelit se on lauseen lopetusmerkki. Pascalissa se oli lauseiden välinen erotin, eli periaatteessa viimeisen lauseen perään ei olisi saanut kirjoittaa puolipistettä. Rivisidonnaisissa kielissä kuten Python, ei erotinmerkkiä tarvita. JavaScriptissä taas lauseen lopetus ; pitäisi kirjoittaa lauseiden perään, mutta jos lauseet ovat eri rivillä, saattaa ohjelma silti toimia vaikka puolipiste puuttuisikin. Tästä välillä voi seurata ongelmia jos lausetta jakaa useammalle riville. Sitten on olemassa koottu lause, joka tehdään aaltosuluilla {} ja silloin puolipistettä ei tarvita, koska lopettava aaltosulku päättää kootun lauseen. - VL

Lisää kysymys

**Q:** ⁞

**A:** -

4. Kurssin sisällöstä

Q: Ei nyt varsinaisesti liity juuri tämän kurssin sisältöön, mutta mennäänkö jollain myöhemmistä kursseista memory pointereihin ja muistin suoraan manipulointiin.

A: Tervetuloa Käyttöjärjestelmien kurssille (ITKA203), siellä noita pääsee hieman käsittelemään assemblyllä :) -ji

A: Noita tulee jonkin verran myös Ohj2 jälkeisellä C/C++ lisäkurssilla. Varoitan kuitenkin että kun tuolla juku kysyi tietoturvasta, niin aloittelijan käsissä osoittimet ovat lähes 100% varma tietoturva-aukko. - VL

Q: Alkuohjeessa oli "Tee esitehtävistä ainakin alkukysely ja robottitehtäviä" - jos jäi jumiin robottitehtävissä kahteen viimeiseen (9 ja 10), saako jotain kautta niihin apua jo nyt vai kannattaako niihin palata vasta myöhemmin kurssin edetessä?

A: Nuo tulevat vielä uudestaan demotehtävinä, eli antaisin asia hautua ja miettiä lisää :-) - VL

Lisää kysymys

**Q:** ⁞

**A:** -

5. Jypeli

Q: Minkälaisia pelejä on mahdollista oppia ohjelmoimaan tällä kurssilla?

A: Oikeastaan on kyse ohjelmoinnin perusteista, joten itse pelien logiikka pitää tulla ihan omasta päästä. Kurssin kotisivuilla on esimerkkejä siitä mitä on tehty. - VL

Q: Millaisia ei-pelejä kurssilla on tehty?

A: Yleensä jonkinlaisia datajoukkoja analysoivia. Data tulee joko tiedostosta tai netistä. Siellä on ne pari esimerkkiä pohjaideaksi. - VL

Q: Kuinka jypelissä voi muokata kuvan kokoa? esine.Image = LoadImage("esine");

A: -

Lisää kysymys

**Q:** ⁞

**A:** -

6. Yleistä ohjelmoinnista

Q: Miten ylläpitää ja kehittää ohjelmointitaitoa tehokkaasti henkilönä, joka ei tee sitä työkseen?

A: Itse tiedän vain yhden tavan: Koodaamalla! - VL

Q: Onko ohjelmointi ja sen parissa työskentely muuttunut isossa kuvassa merkittävästi viimeisen 5 vuoden aikana?

A: Jos ei katso puita vaan metsää, niin sanoisin että aika vähän edes 40 v aikana. Toki on tullut olio-ohjelmointia, mutta tavallaan vastaavaa tehtiin ennen olioitakin. Testaus on noussut huomattavan suureen asemaan, mutta hyvät koodarit tekivät tätäkin oa kymmeniä vuosia sitten. Sanoisin kuitenkin että työkalujen, järjestelmien ja valtavien kirjastojen takia hommasta on tullut hankalammin ylläpidettävää :-( - VL

Q: Mitkä ovat merkittävimmät erot Reactin ja Vuen välillä?

A: -

Q: Miten paljon tietojenkäsittelytieteen teoria tulee esille ohjelmointitöissä, minkälaisissa ohjelmointitöissä teoria on erityisen hyödyllistä?

A: Are theoretical concepts really that important in computer science? - AV

Q: Onko mielestänne jotakin sellaista yleisteosta (kirja) ohjelmoinnista, jonka lukemista tai peräti hankkimista itselle kannattaisi harkita?

A: Klassikoita suosittelisin, eli How to Design Programs, tuttavallisemmin HTDP, tai sen edeltäjä Structure and Interpretation of Computere Programs, joka on hieman matemaattisempi, mutta tarjolla nykyään 😱 JavaScript-versionakin 😱! Molemmat löytyvät HTML:nä ainakin, ehkä PDF:näkin noiden linkkien takaa, joten kirjaan ei ole pakko rahaa sijoittaa. Sitten jos vielä vahvempaa tieteellistä tekstiä haluaa lukea, on Knuthin Art of Computer Programming sellainen Ohjelmoijan Ensyklopedia.

Kirjasuosituksia on paljon muitakin, mutta nuo ovat hyvä perusta. -ji

PS Jos esoteerisemmälle alueelle, mutta silti ajatustyöllisesti relevantille haluat sukeltaa, niin parivaljakko Starting Forth ja Thinking Forth on kovin paljon ajatuksia herättävä, vähän vähemmän tunnettu ja mainittu kirjasarja, joka haastaa ajattelemaan ohjelmointia ihan toiselta kantilta. Forth-toteutus löytyy esim. Gforth-projektilta. -ji

Q: Mitä eroa on backendillä ja frontendillä?

A: Backend on se osaa koodi joka toimii sovelluksen palvelimessa ja sen yleiset kielet ovat Python, Java, C# ja PHP. Se muodostaa sen tekstin mitä selaimelle näytetään, mutta se voi tuottaa myös Java/TypeScriptiä jota selain sitten tulkitsee. FrontEnd on se koodi, mikä tulee selaimen suoritettavaksi ja vaikuttaa sovelluksen ulkoasuun. Se on yleensä JavaScriptiä tai TypeScrptiä. Monessa paikassa eri ihminen/ryhmä hoitelee toista koodia ja eri ihminen/ryhmä toista. Itse pitäisin järkevinäpä että sama henkilö/ryhmä tekisi molempia jolloin ei tule niin paljon viiveitä ja ongelmat on nopeampi korjata kun tunnetaan sovellus kokonaan. - VL

Q: Miksi olio-ohjelmointi keksittiin?

A: TL;DR; Simulointiin ja graafisilla käyttöliittymillä varustettujen henkilökohtaisten tietokoneiden ohjelmointiin.

Olio-ohjelmointi kehitettiin 1960-luvun lopussa Norjassa auttamaan simulointiohjelmien kirjoittamisessa. Varsinaisesti ei siis keksitty olioita, vaan jokin tapa simuloida asiota, ja samalla tuli tavallaan keksittyä oliot.

Tuon jälkeen USA:ssa Xeroxilla lähdettiin kehittämään tietokonetta, jollainen kaikilla olisi käytössää vuoden 1995 tienoilla. Tuon tietokoneen ohjelmointitavaksi kehitettiin oliosuuntautunut ohjelmointitapa, ja kun sekä Microsoft, että Apple, kävivät Xeroxilla vierailemassa, tuo ennustus onnistui paremmin kuin hyvin.

Jos tarkemmin asiasta haluaa lukea, niin kannattaa lukea The Early History Of Smalltalk. -ji

Q: Vaikka kurssilla ei käsitellä tietoturvaa ohjelmoinnissa, mutta mitä asioita haluat korostaa tästä aiheesta?

A: Enpä tuohon lyhyesti osaa muuta sanoa kuin että "Epäile kaikkea!". Lumiukoissa ei ole hirveästi vaaraa, mutta kun mukaan otetaan käyttäjiä, verkkoa ja rajapintoja, niin ongelmia rupeaa tulemaan :-( Usein ongelmien takana on merkkijonot. - VL

Q: Vaikka AI:ta paljon sekä hehkutetaan etta haukutaan, on fakta, että tulevaisuudessa paljon ohjelmointia tullaan tekemään ns. Prompt Engineeringillä eli tärkeämpää on ymmärtää mitä haluat saada aikaan, kuin että osaat tehdä sen itse. Miten paljon busineksen ymmärtäminen tulevaisuudessa tulee tärkeämmäksi kuin itse ohjelmointikyvykkyys (ihmisen tekemänä)? Ps. Ja joo, kyllä aina tarvitaan hevosille heinänviljelijä joka kylään, vaikka autot kulkee sähköllä.

A: Asian osaaminen on aina ollut ja on tulevaisuudessakin se tärkein. Tekoäly voi nopeuttaa ajatuksen muuttamista ohjelmointikieleksi. Mutta jos ei ymmärrä mitä tekoäly tuottaa, voi käydä kalliiksi. - VL

A: Aiheesta on juurikin tehty tutkimus rapakon toisella puolella, jonka tulokset olivat samanlaiset, mitä Vesa yllä sanoo. Tutkimuksesta voi lukea lisää osoitteesta https://cacm.acm.org/news/the-impact-of-ai-on-computer-science-education/. Lyhyesti, ne jotka teki LLM/tekoälyavusteisesti pelkästään, eivät oppineet asiaa, eli osanneet toistaa ratkaisua jälkeenpäin. Ne, jotka tekivät ilman LLM/tekoälyn avustusta osasivat toistaa ratkaisun jälkeenpäin. Yllättäen kahden eri LLM:n välillä oli eroja, eli kenties joskus saadaan aikaiseksi opettavainen LLM tai tekoäly. (Muistutuksena, että tekoäly on paaaaljon laajempi käsite kuin LLM, mistä turhan usein puhutaan tekoälynä.) -ji

A: Teko-/tukiälyavusteinen ohjelmointi on kyllä ihan arkipäivää firmoissa jo nyt (tästä keskustelimme muutama viikko sitten yritysedustajien kanssa). Ei ole kysymys siitä, etteikö tätä yliopisto-opetuksessa tiedostettaisi. Opetuksellisesti ongelma on siinä, että opiskelijalla, joka aloittelee ohjelmointia, ei ole välttämättä kykyä käyttää näitä ammattilaisille tarkoitettuja työkaluja, kuten Copilot tai ChatGPT. Pahimmassa tapauksessa opiskelijalle muodostuu varsin haitallinen kompetenssi-illuusio (ks. Prather et al. 2024). Tekoälyn käyttämisestä ohjelmoinnin opetuksessa tehdään tällä hetkellä todella paljon tutkimusta, jonka seurauksena toivottavasti aloittelijaystävällisiä työkalujakin alkaa syntyä pikku hiljaa. On äärimmäisen tärkeää, että näiden uusien systeemien pedagogiset perusteet pohditaan huolellisesti. Opetuksessa pitää keskittyä olennaiseen, ja tavoitteena pitää edelleen olla, että opiskelija todella oppii ohjelmointia pelkän promptausharjoittelun sijaan. -AJL

Q: Miten tulisi suunnitella ohjelmia jotta vältyttäisiin haitalliselta koodin uudelleenkirjoittamiselta, muun muassa silloin kun asiat olisi voinut tehdä paremmin tai uusia ominaisuuksia on hyvin haastava lisätä?

A: Ohjelmointi 1 ja 2 kursseilta saat jo hyvän alun tähän suuntaan, mutta asiaa käsitellään laajemmin ainakin oliosuuntautuneen ja funktionaalisen ohjelmoinnin kursseilla, sekä myöhemmin ohjelmistoarkkitehtuurien kurssilla, vain joitakin mainitakseni. Mutta jos heti haluat rynnätä asian pariin, How To Design Programs tai vaikka Big Ball of Mud voisivat auttaa. -ji

A: Tämä on miljoonan (tai ehkä biljoonan) dollarin kysymys :-). Jos tähän olisi helppo vastaus, niin varmaan kaikki kehittäjät toimisivat niin. Itse arvelen, ettei kukaan ohjelmoija ajattele, että (a) "nyt teen järjestelmän, joka on niin surkea, että se on pakko uudelleenkirjoittaa", mutta ei myöskään (b) "nyt teen järjestelmän, joka on niin modulaarinen ja muokattava, että sitä voi laajentaa mihin tahansa suuntaan ihan niin paljon kuin haluaa". Ensimmäinen on aika vastuutonta, kun taas toinen on kallista ja voi tehdä koodista itse asiassa hankalasti luettavaa. Teollisuudessa softa tehdään tarkoitusta varten, ja silloin se tehdään juuri niin muokattavaksi että se täyttää tarpeensa ja asiakas on siitä valmis maksamaan. Mutta kyllä ohjelmistosuunnittelussa on silti periaatteita, joiden avulla (ehkä) tätä ongelmaa pyritään jossain määrin taklaamaan (TDD, Solid-periaatteet, riippuvuuksien minimointi, itsenäiset moduulit, ...). -AJL

A: En pitäisi edes pahana alkuvaiheessa että kirjoittaa "tyhmästi". Ensimmäinen askel viisauteen on että huomaa tämän ja epäilee. Toinen askel on että käyttää aikaa ja korjaa sitten koodia, jonka huomaa "tyhmäksi". Ja kolmas on että rupeaa sitten harjoittelun myötä huomaamaan etukäteen että on ajatellut kirjoittaa tyhmästi ja kirjoittaa fiksummin suoraan. Neljäs on että osaa jo etukäteen ajatella fiksusti. Mutta sitten pitää muistaa, että täydellistä ei ole olemassa ja ajat muuttuvat ja se mikä oli eilen hyvää, ei ehkä olekkaan sitä huomenna. Testit on hyvä tapa pitää koodia ehjänä. Ja jos jossakin ei ole testejä, niin ennen refaktorointia kirjoittaa testit ja sitten refaktoroinnin jälkeen validoi että toimii edelleen samalla tavalla. - VL

Lisää kysymys

**Q:** ⁞

**A:** -

7. Henkilökohtaista opettajalle

Q: Kuuluko ananas pitsan?

A: Jos Quatron tilasit, niin ei - VL

Q: Mikä on mielestäsi kätevin ohjelmointikieli?

A: Se millä juuri meneillään olevaa projektia tekee. Jos pitää olla Windows GUI, niin valkkaisin Delphin ja C# välillä riippuen hommasta kumpaanko mulla on enemmän palikoita valmiina. Pikkuisissa skriptauksen kaltaisissa Python tai Shellin kieli. - VL

Q: Mikä sai sinut kiinnostumaan ohjelmoinnista?

A: Se että sillä voi automatisoida itselleen tylsiä toistettavia asioita. - VL

Q: Mikä on pisin tekemäsi ohjelma ja kuinka pitkä se oli?

A: Empä ole rivejä laskenut, koska se ei ole kiinnostavaa. Kehittämisessä meni kuitenkin vuosia. Sulautettuja järjestelmiä 1990-luvulla ja 2000 alussa. Toki aika paljon koodia aikanaan Korppiin (n. puoli miljoonaa riviä josta toki vain murto-osa mun koodia) ja jonkin verran TIMiin. TIMin koodimääriä voi katsoa esim kehittäjien sivulta ja itse koodia GitHubista. Nyt leikin harrastuksena kotiautomaatiolla, mutta se on aika alussa, joten koodirivejäkään ei ole valtavasti (eikä ole tarkoituskaan tulla). - VL

A: Nyt laskin että esim tuo 90-luvun lopun teollisuusautomaatio oli vajaa 300 000 riviä. - VL

Q: Käytätkö mielummin tumma vai vaalea teema tekstieditorissa?

A: Ihan miten sattuu, ei ole suosikkia. TIM on yleensä vaalealla pohjalla kun mustalla on vielä pieniä puutteita (opiskelijaprojekti) - VL

Q: Miksi aloittaminen on niin vaikeaa? Ihan yleisesti.

A: Jos tätä kurssia tarkoitat, niin kyllä homma selkenee kun pääteohjauksissa saa itse tehdä ja rupeaa paremmin ymmärtämään mitä tehtiin. Uuden kanssa pitää vaan käydä kimppuun kun sika limppuun eikä pienestä epävarmuudesta saa masentua. - VL

Q: Mikä on ollut mielenkiintoisin ohjelmointiprojektisi?

A: Onhan TIMissä yhdistynyt aika paljon vuosikymmenten haaveita. - VL

Q: Mikä on paras/hauskin sanonta tai "tokaisu", jonka olet kuullut jonkun sanovan ohjelmointiin liittyen?

A: -

Q: Onko jotain asioita mitä jälkiviisaana tekisit toisin ohjelmoinnin harjoittelun alkuvaiheessa?

A: Kysymyksessä on epäselvää että kenen harjoittelun? Itse koodasin aika paljon, joten en siinä hirveästi osaisi enää parantaa. Ehkä Lispiä yms. olisi voinut tehdä enemmän. - VL

Q: Kuinka paljon kommentoit omaa koodiasi?

A: Ihan liian vähän :-( Monesti jälkeenpäin ihmettelee että mitähän tuossakin oli tarkoitus. Nykyisin yritän edes tehdä funktioita, jotka kommentoin rajapinnaltaan ja jos joku ei ymmärrä toteutusta, niin voi "määritelmän" perusteella tehdä uuden. Ja jos suonkin on testit, niin niillä tarkistaa että tekee vielä saman asian. - VL

Lisää kysymys

**Q:** ⁞

**A:** -

8. Lajittelemattomat

Q: Kuka on kuuluisin henkilö, joka on käynyt Ohjelmointi 1 -kurssin?

A: Jonkin verran on urheilijoita, Kirittäriä, jääkiekon pelaajia, yleisurheilijoita, jalkapalloilijoita. Yhtään päivänpolitikkoa en tunnista. Firmoissa isossa asemissa olevia kyllä. - VL

Q: Onko kukaan yrittänyt tehdä vielä 3D peliä HT:nä?

A: Jypelin pohjalla oleva kirjasta on 3D kirjasto, mutta Jypelistä pudotettiin se yksi dimensio pois, koska 3D hommassa menee työlääksi se 3D mallintaminen ja ei ole kurssin tarkoitus että aika menisi sellaiseen. Lisäksi fysiikan laskeminen 3D:lle on merkittävästi kalliimpaa kuin 2D. Eli jättäisin suosiolla 3D haaveen Varsaluoman Jukan pitämille peliohjelmointikursseilla. Niillä yleensä käytetään Unityä jolla 3D on luonnollista (vaatii silti mallintamista). - VL

Q: Minkälaisia kurssin lopputöitä löytyy jotka ei ole pelejä?

A: Vastasin tuolla toisaalla että erilaista datan käsittelyä. Ja huom! Se ei ole lopputyö, vaan työ jota pitää tehdä tasaiseen tahtiin kurssin aikana :-) - VL

Q: Millainen jakauma eri tiedekuntien opiskelijoilla on kurssin suorittajien keskuudessa?

A: Mitähän jakaumaa tarkoitat. Viime vuoden tuloksien jakauma on nähtävissä - VL

Lisää kysymys

**Q:** ⁞

**A:** -

9. Vastauksia joihin ei ole kysymystä

Älä tähän lisää jos sinulla oikeasti ei ole vastausta!

Lisää vastaus

**Q:** ⁞

**A:** -

10. Ohjeita

Jos haluat siirtää kysymyksen toiseen kategoriaan:

  1. Mene kysymyksen kohdalle jonka haluat siirtää.
  2. Aukaise edit-menu (kynä tai kpl vasemmalla puolella klikkaa sinivihreää aluetta)
  3. Paina alhaalla olevaa kynän kuvaa.
  4. Valitse Cut paragraph.
  5. Mene kohtaa johon haluat siirtää kysymyksen.
  6. Ota taas edit menu ja sieltä Paste (jos se ei näy, paina taas kynän kuvaa)
  7. Avaa edit menu ja ota edit ja vastaile kysymykseen.

These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.