Kysymyksiä ja vastauksia

Tähän on koottu useimmin esitettyjä opiskelijoiden kysymyksiä koskien Ohjelmointi 1 -kurssia ja ohjelmointia myös yleisemmin.

Vastaajien joukossa on paitsi kurssin luennoijia myös muuta tietotekniikan laitoksen henkilökuntaa.

Vastaajien nimikirjaimet

Vastaajina ovat yleensä kurssin vastuuopettajat ja tuntiopettajat, vaikka toisinaan vastaamassa voi olla myös muuta henkilökuntaa. Alla on listattu vastaajien nimikirjaimet:

  • DZ: Denis Zhidkikh (Ohj1 vastuuopettaja)
  • SS: Sami Sarsa (Ohj1 vastuuopettaja)
  • AJL: Antti-Jussi Lakanen (Ohj1 vastuuopettaja)
  • RR: Rauli Ruokokoski (Ohj1 tuntiopettaja, syksy 2025)
  • KL: Konsta Lahtinen (Ohj1 tuntiopettaja, syksy 2025)
  • KP: Karel Parkkola (Ohj1 tuntiopettaja, syksy 2025)

Kysymykset

(Lisää uusi kysymys sivun lopussa painamalla Lisää kysymys -painiketta.)

Kurssin suorittamisesta

Q: Mistä löytää kurssin luentojen tallenteet?

Q: Onko kurssilla läsnäoloon minkälainen käytäntö? Mitä pitää ottaa huomioon, jos katsoo luennon jälkeen tallenteen luennolle osallistumisen sijaan?

A: Käytännössä kurssi voi suorittaa etänä. Luentoja voi katsoa livenä, samoin palautustilaisuudet (ks. luennot-sivu). Suosittelemme tulemaan paikan päälle luennoille parista syystä: (1) paikan päällä on helppoa kysyä kysymyksiä ja (2) luennoitsijalle on kivempi, että ei tarvi puhua vain itselle ☺️. Mutta ei nyt ristiinnaulita, että katsoo tallenteet. Luentojen ja palautustilaisuuksien tallenteet julkaistaan luennot-sivulla. -DZ

Q: Voiko seuraavien viikkojen tehtäviä jo tehdä jos tämän viikon tuntuivat liian helpoilta?

A: Voi tietenkin tehdä, mutta kannattaa ottaa huomioon, että harjoitustehtävät voivat vielä muuttua jolloin joudut mahdollisesti tekemään tehtäviä uudestaan, varsinkin jos teet tehtäviä monta viikkoa pidemmälle. -KL

Q: käydäänkö tehtäviä yhdessä koulussa läpi

A: Joka maanantai on 2 kpl harjoitustehtävien palautustilaisuutta (klo 14-16 ja klo 16-18), jossa katsotaan mallivastaukset läpi. Tilaisuus nauhoitetaan; tutkinto-opiskelijoille ja lukiolaisille julkaistaan koko nauhoite. Palautustilaisuuden pätkiä lisätään myös suoraan mallivastauksiin TIMiin.

Q: Syvennytäänkö missään materiaalissa syvemmin Taunoon, jos sen ideasta ei saanut kiinni?

A: Katso ensisijaisesti taunon johdatus täältä:

https://tim.jyu.fi/view/kurssit/tie/itkp102/ohjeet/tauno

Taunoa tutkitaan tarkemmin aina harjoitustehtävien palautustilaisuuksissa. Katsotaan samalla sen viikon Taunotehtävää tarkemmin myös tiistain luennoilla.

Q: Miten harjoitustyö arvioidaan ja miten se vaikuttaa kurssiarvosanaan?

A: Harjoitustyö käytännössä arvioidaan tasolla hyväksytty/hylätty. Hyväksytty suoritus täyttää kaikki tarkastettavat osa-alueet. Arviointi tehdään varsinaisesti viimeisen palautuksen (ns. HT3-vaihe) yhteydessä. Hylätty työ voi täydentää kunnes se on hyväksytty. Arvosanaan harjoitustyöllä ei ole vaikutusta. -DZ

Q: Tuleeko ohjaajilta saadut vinkit huomioida koodin dokumentoinnissa? Sorry, tein kysymyksen epähuomiossa lisäten sen "Add paragraph" -kohtaan.

A: Riippuu varmaan kontekstista. Jos ohjaaja neuvoo jotakin harjoitustehtävissä, niin voihan hänen huomionsa laittaa itselleen talteen muistoksi koodiin kirjoittamalla siitä kommentti. Mutta arvioinnin kannalta ei rokoteta pisteitä eikä katsota vilpiksi, jos tekee kuten ohjaaja ehdottaa mutta ei kirjoita sitä ylös dokumentaatioon tai kommentteihin. -DZ

Q: Tarviiko tehdä kaikki ville-tehtäviä?

A: Kaikki pakollisten tehtävien (eli *-merkittyjen tehtävien) jälkeiset tehtävät ovat vapaaehtoisia ja kerryttävät bonuspisteitä tenttiin. Saa siis tehdä juuri niitä tehtäviä joista hyötyy itse eniten ja/tai tuntuvat itselle mukavimmilta -RR

Ohjelmoinnin opiskelusta

Q: Kuinka vahva pohja koodaamiseen tulee Ohjelmointi 1 kurssilta?

A: Ohjelmointi 1 kurssilta saa todella hyvän pohjan ainakin omasta mielestäni. Peruskäsitteet ja rakenteet, kuten tietotyypit, muuttujat, silmukat, taulukot ja aliohjelmat oppii läpikohtaisesti. Itse pystyin Ohj1-kurssin jälkeen kirjoittelemaan jo monenlaisia eri ohjelmia itsekseni. Ohj2-kurssilla ruvetaan sitten käymään vähän syvemmin läpi olio-ohjelmointia sekä ns "aidon ohjelman" tuottamista. -KL

Q: Kannattaako kirjoittaa itselleen erikseen ohjelmointisanastoa helpottamaan itse käytännön työtä?

A: Kyllä kannattaa. Samaan yhteyteen on hyvä kirjoittaa myös lyhyesti, että mitä sana tarkoittaa. Sanaston ymmärtäminen auttaa esimerkiksi tehtävien hahmottamisessa ja kun kommunikoit tekemisisistäsi muille. -RR

Kannatan. Tällä kurssilla on paljon sanastoa, ja on hyvä pitää itselleen kirjaa niiden merkityksestä kurssin edetessä. Luentomonisteessa on liite erilaisista kurssilla vastaan tulevista sanoista: Liite: Sanasto. Näitä kaikki pyritään kurssin edetessä selittää jatkuvasti -DZ

Q: Mitkä ovat hyödyllisimpiä pikakomentoja tällä kurssilla?

A: Jos kysymys on Riderista, niin kannattaa katsoa listan kaikista näppäinkomennoista. Kyseinen lista olettaa, että sinulla on käytössä Visual Studio tai IntelliJ IDEA -näppäinasettelu (näppäinasettelun saa vaihdettua Riderin asetuksista).

Siitä listasta IMO hyödyllisempiä ominaisuuksia ovat:

  • Search everywhere: avaa hakuboksin, jonka avulla voi hakea mikä tahansa Rider-toiminto, hypätä mihin tahansa aliohjelmaan tai luokkaan sen nimellä. Nimensä mukaisesti "hakee" kaikki mahdolliset asiat. Esim jos ei muista, millä komennolla formatoi tekstiä, voi painaa Shift + Shift ja kirjoittaa "Reformat", jolloin se löytää "Reformat code" -toiminnon ja näyttää sen pikanäppäimen.
  • Reformat code: yhdenmukaistaa koodin sisennykset C#-koodauskäytänteiden mukaisesti
  • Run with/without building sekä Debug with/without building: Automaattisesti kääntää ja ajaa ohjelman
  • Comment with line comment sekä Comment with block comment: Muuttaa maalatun tekstin kommentiksi tai takaisin => helpottaa usean rivin kommentointia pois väliaikaisesti

Sitten tässä on sellaisia "yleisiä" komentoja, jotka toimivat yleensä kaikissa tekstieditoreissa:

Toiminto Windows / Linux macOS
Siirry sana kerrallaan Ctrl + nuoli Option + nuoli
Valitse sana kerrallaan Ctrl + Shift + nuoli Option + Shift + nuoli
Siirry rivin alkuun/loppuun Home / End Cmd + nuoli
Valitse rivin alkuun/loppuun Shift + Home / End Cmd + Shift + nuoli
Siirry dokumentin alkuun/loppuun Ctrl + Home / End Cmd + nuoli ylös/alas
Valitse koko dokumentti Ctrl + A Cmd + A

Jossain editorissa on myös "monirivinen kursori", sen pikanäppäin vähän vaihtelee editorista toiseen. Oikean komennon yleensä löytää sanalla "multiline cursor". VSCodelle katso pikaopas.

-DZ

Q: Olisiko mahdollista tietää apukeinoja/sivustoja mistä löytyisi esim. koodin kirjoittamisessa auttavia/nopeuttavia komentoja listattuna? Macilla esim. komentokentän rivin vaihtoon ei netistä nopealla haulla apua löytynyt.

A: Listasin jotain komentoja ylemmällä taulukossa. Visual Studio Codelle on olemassa virallinen cheatsheet-pikaopas.

Q: Onko jotain nettisivua miltä olisi hyvä lähteä etsimään ratkaisua? Esim W3schools.

A: W3Schools on ihan hyvä valinta, itse suosittelen todella paljon Microsoftin omaa C# dokumentaatiota kurssimonisteen lisäksi. Stackoverflow on myös ihan ok vaihtoehto, mutta sieltä tulee todella useasti vastaan ns "vaikeita" ratkaisuja, jossa käytetään asioita joita tässä vaiheessa ei ehkä vielä ymmärrä.-KL

Q: Mitä kursseja olisi hyvä ottaa tämän kurssin jatkoksi?

A: Ohjelmointi 2 on melkein suoraan jatko tälle kurssille ja täten erittäin suositeltava käydä heti tämän kurssin jälkeen. -KL

Q: Onko ohjelmointi 1-kurssi edellytyksenä muilla tietotekniikan kursseilla pärjäämiselle?

A: Riippuu kursseista, esimerkiksi Ohjelmointi 2 tai Python tieteelliseen laskentaan mainitsevat tämän kurssin olevan edellytyksenä. Kuitenki monilla peruskursseila (esim. Web-julkaisu, tekoälyn alkeet, tms) pärjää hyvin, vaikka niitä tekee samaan aikaan kuin ohjelmointi 1-kurssia. -KL

Q: Mistä löytäisi vastaavia koodamisen harjoittelutehtäviä, jos haluaisi harjoitella lisää erilaisia yksinkertaisia aloittelijoille sopivia koodeja?

A: Oma suositukseni on se, että muuntelet jo olemassa olevia tehtäviä jollain tapaa. Voisiko tehtävästä tehdä haastavamman lisäämällä siihen vaatimuksia tai poistamalla niitä? Voisiko vastausta yleistää jollain tapaa esimerkiksi siten, että käyttäisi mahdollisimman vähän kovakoodattuja lukuja? Voisinko itse keksiä jonkin vastaavantyyppisen tehtävän kuin mihin olen törmännyt ja vastaan sitten siihen? Voi myös lukea monistetta eteenpäin ja tehdä siellä olevia tehtäviä. En ainakan itse tiedä aloittelijalle sopivia tehtäviä, joissa pärjää ilman tietoa silmukoista, muuttujista, taulukoista tai vaikkapa funktioista. -RR

Q: Miten dokumentaatiosivuja, kuten Jypeliä luetaan tehokkaasti? Koen että dokumentaatiosivuilta on haastavaa löytää tarvitsemiani Metodeja ja funktioita.

A: Koska dokumentaatiot ovat keskenään erilaisia ja poikkeavat jokseenkin muista tekstilajeista, tämä taito kehittyy pikkuhiljaa ajan kanssa lukemalla erilaisia dokumentaatioita. Jos kuitenkin jo tiedät mitä olet etsimässä, niin erilaisia hakutoimintoja kannattaa toki käyttää hyväksi. -RR

Tekoälystä

Q: Kannattaako tekoälyä aina käyttää apuna jos ei älyä tehtävää, vai kannttaako välillä etsiä esimerkiksi internetistä tai Youtubesta?

A: Omassa koodaustyössäni käytän aika aktiivisesti internetiä ja sitten tekoälyä jos kysymys on erittäin spesifi. YouTubea käytän itse aika harvon, mutta se on nyt makukysymys (IMO YouTubessa tiedot vanhenee nopeasti). Tällä kurssilla sanoisin, että ensisijaisesti käyttää kurssimonistetta, koska se sisältää paljon kurssin aiheeseen liittyvää tietoa. Netistä hakemista voi harjoitella, mutta pitää varautua, että löydetty selitys on liian "monimutkainen" tälle kurssille; toisaalta netistä löytää erilaisia selityksiä. Tekoälyä ainakin voi aina pyytää selittämään asian yksinkertaisesti, mutta vaarana on, että se voi hallusinoida jotain, mikä ei pidä paikkaansa. -DZ

A: Suosittelen lämpimästi kysymään myös kurssin ohjaajilta apua tällaisissa tapauksissa. Kompaten Denisiä, oppimisen osalta on hyvä muistaa, että kielimallipohjaiset tekoälymallit voivat vastata hyvin moniin kysymyksiin, mutta ovat myös luontonsa vuoksi kehnoja arvioimaan milloin ne generoivat tekstiä, joka ei vastaa todellisuutta. Mitä harvinaisempi ja monimutkaisempi aihe, sitä suurempi riski, että tuotos on itsevarman kuuloista puppua. Tekoälytyökaluissa, etenkin sellaisissa joita ei ole räätälöity tietyn kurssin tai aiheen opetukseen, on myös vaarana, että ne vastaavat turhan monimutkaisesti. Vastaavasti netistä löytää runsaasti erinomaista sisältöä, mutta sielläkään kaikki oppimateriaali ei ole aina hyvin kuratoitua ja tänä päivänä pahimmillaan huolettomasti tekoälyllä generoitua. -SS

A: Jos jää jumiin tehtävässä (ns. pattitilanne), niin en ole ihan varma mitä hyötyä internetistä tai YouTubesta on siinä vaiheessa. Turvallisinta on kysäistä ohjaajalta (Teams, sähköposti) että mistähän voisi lähteä asiaa purkamaan. Tekoälyä voi pyytää muotoilemaan tehtävän toisella tavalla, mutta valitettavasti se saattaa tehdä siinä vakavia virheitä. Juuri äsken tuota kokeilin ja tulokset eivät olleet kovin hyviä. -AJL

Q: Onko tekoälystä enemmän haittaa vai hyötyä koodaamisessa ylipäätään?

A: Tämä riippuu hyvin vahvasti siitä, miten tekoälyä käyttää. Yleisesti sanoisin, että kun tekoälytyökaluja käytetään nopeuttamaan ohjelmoijan ajatusten saamista ohjelmakoodiksi ja automatisoimaan rutiininomaisia hommia valvotusti, tekoälystä on enemmän hyötyä kuin haittaa. Tämä toimii ainakin itselläni, vaikka välillä silti tulee vastaan tilanteita, joissa olisi saanut jonkin osan ohjelmasta valmiiksi nopeammin tekemällä alusta itse. Jos aletaan tuottamaan suuria määriä koodia automaattisesti ilman riittävää ihmisen valvontaa ja korjausliikkeitä, tarina voi olla toinen. -SS

A: Teko-/tukiälyavusteinen ohjelmointi on kyllä ihan arkipäivää firmoissa jo nyt (tästä keskustelimme noin vuosi sitten yritysedustajien kanssa). 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: voiko tekoälyä käyttää opettamaan asioita, kuten luoda oppimateriaalista kysymyksiä tai muita harjoituksia?

A: Voi, tekoälyä voi käyttää opiskelukaverina. Sillä saa ihan kivasti lisäharjoituksia generoitua. Tärkeintä on, että on malttia olla kysymättä suoraan ratkaisuja :)

Kuten aiemmin on mainittu, pitää olla varovainen tekoälyn kanssa, sillä se voi joskus hallusinoida ihan väärää tietoa. -DZ

Q: Jos ei millään keksi mikä koodissa on vikana, onko ok kysyä AI:lta apua?

A: On OK. Katso myös ylempänä olevia huomioita tekoälystä. Kysyä apua saa, mutta varo, ettei oma ajattelu ulkoistu täysin tekoälylle. -DZ

Q: Mitä tekoäly koneita kannattaa käyttää ja mitä ei?

A: Google Geminissä ja ChatGPT:ssä on olemassa nykyään "opiskelutila" (ChatGPT:ssä Study Mode ja Geminissä Guided Learning). Niiden avulla tekoäly välttää suoraan vastausten antamista tehtäviin, vaan auttaa selittämään asioita ja ehdottamaan, miten kannattaa edetä. Se vähän auttaa välttämään oman oppimisen ulkoistamista täysin, mutta silloinkin pitää olla aika varovainen. Joka tapauksessa opiskelumielessä suosisin itse niitä. Tutkinto-opiskelijat pääsevät käyttämään Geminia, kunhan OMA-palvelusta kytkee "Google Apps -sovellukset" -palvelun päälle. -DZ

Tentti

Q: Kuinka suuri osuus tentillä arvosanaan?

A: Tavassa 1 tentti määrää koko arvosanan. Harjoitustehtäviä tekemällä voi saada bonuspisteitä tenttiin. -DZ

Q: Mikä on tentin läpipääsyraja? Jos saa kaikki 6 hyvityspistettä harjoitustehtävistä, niin mitä se tarkoittaa käytännössä?
Q: Mitkä kurssin arvosanarjat ovat?

A: Tyypillisesti tentin läpipääsyraja on luokkaa 40-50% maksimipistemäärästä. Arvosanarajoista riippuen (nämä ovat tenttikohtaisia) maksimihyvityksellä voi olla noin 2 pykälän korottava vaikutus arvosanaan verrattuna siihen, että tekisit minimimäärän demoja. -AJL

Q: Minkälainen kurssilla suoritettava tentti on?

A: Tietokoneella suoritettava sähköinen tentti, joka kattaa luennoilla ja harjoitustehtävissä käytyjä asioita. Tehtävätyyppeinä voi olla monivalintoja, ohjelmointitehtäviä tai muita selitystehtäviä. Katso vanhoja kevään tenttejä, esim. http://users.jyu.fi/~anlakane/ohjelmointi1/tentit/ -DZ

Q: Miten tenttiin kannattaa valmistautua?

A: Tärkeintä tenttiin valmistautumisessa on se, että teet suurimman osan työstä hyvissä ajoin. Kirjoittelen opiskelemisesta ja tenttiin valmistautumisesta piakkoin enemmänkin. -RR

Q: Onko jossain näkyvillä vanhoja ohjelmointi 1 kurssin tenttejä? (tai olisiko niitä mahdollisuus saada näkyville, sillä olisi kivä nähdä millaisia tehtäviä voi tulla vastaan)

A: Ainakin kevään tentit ovat julkisia: http://users.jyu.fi/~anlakane/ohjelmointi1/tentit/ -DZ

Luokittelemattomat kysymykset

Q: Ajattelin Lumiukkotehtävässä tehdä Hymyilevän suun lumiukolle. käytin aikaa etsimiseen kurssimateriaaleista ja verkosta, mutta jouduin lopulta tyytymään usean pienen ympyrän käyttämistä suuna. Onko jotain suhteellisen helppoa tapaa tehdä puoliympyrä tai viiva, jota voisi käyttää jatkossa hymynaamana. Yt: Mikael Virtanen

A: Suosittelen ajattelemaan ns "laatikon ulkopuolelta" jos et voi suoraan tehdä esim puoliympyrää, niin mieti voisitko tehdä sen tarjolla olevien muotojen avulla, esim käyttäen kahta ympyrää. -KL

Vinkki (käyttäen kaksi Shape.Circle-muotoista oliota; väritä ne oikein): -DZ

Q: Mitä ovat tyypillisimmät virheet, joita esiintyy tehtävien ratkaisuissa?

A: Tämä on hyvin paljon tehtäväkohtaista. Vuosia sitten tutkimme erästä "Rainfall"-nimistä tehtävää, jota muutkin ovat paljon tutkineet. Siinä tyypillisin virhe oli, että opiskelija unohti tarkistaa, onko jakolaskun nimittäjässä nolla, ja ne jotka muistivatkin sen, usein toteuttivat tarkistuksen väärin. -AJL

Q: ViLLE tehtävässä ViLLE-ohjeet sivulla annettu linkki on kevään Ohjelmointi kurssille. Onko tällä väliä?

A: Ei ole, mutta typo se on joka tapauksessa... Korjattu, kiitos. Ilmoitelkaa, jos on muita tällaisia historiallisia jäännöksiä ().

Q: Kun käyttää PhysicsObject:ia, onko niin, että muotoja ei voi laittaa lomittain, vai onko minulla jotain oudosti? Jos esim. luento 2 lumiukkotehtävässä (JetBrains Raider) Y akselilla sijainti oli määritelty niin, että muodot tulisivat lomittain, toinen muoto hyppäsi automaattisesti ensimmäisen päälle. Asettelun heitoissa näemmä on hieman eroja myös muodon suhteen.

A: Jypelissä fysiikkaobjektit "pyrkivät" olemaan olematta toistensa päällä. Lumiukon tapauksessa kannattaa siis käyttää GameObjecteja. -RR

Q: Mitä tarkoitetaan B5 tehtävässä numeron siirtämisellä?

A: Jonkun numeron siirtäminen paikasta toiseen. Esimerkiksi 62 - 63 = 1 -> 6 - 263 = 1 on numeron siirtäminen (numeron 2 paikkaa siirrettiin), samoin 62 - 6 = 13 on numeron siirtäminen. Kannattaa kirjoittaa yhtälö paperilla ja katsoa, mihin kaikkialle numeroita pystyy siirtämään paperilla. Tietokoneella tehtävä on sikäli "hankalaa", että numeroita voi siirtää vain joko oikealle tai vasemmalle...

Ehkä tehtävän tarkoitus on osoittaa, että Ohjelmointi 1 -kurssilla tarvitaan kynä ja paperi :) -DZ

Q: Voiko jostain nähdä. mitkä kaikki sanat ovat käyttökelpoisia koodiin. Esim. millä sanoilla TIMissä voi vaikuttaa kappaleiden kokoon, kun niitä yrittää sitoa yhteen tehtävän 4 lisätehtävässä?

A: Koska kyseessä on Jypeli, niin varmaan tästä voi olla hyötyä:

https://tim.jyu.fi/view/kurssit/jypeli/oliot/ulkonako

C#-kielessä yleensä kaikkialla, johon voi laittaa lukuja, voi lattaa myös laskutoimituksia. Laskutoimituksissa saa olla myös olioiden ominaisuuksia. Esimerkiksi

PhysicsObject pallo1 = new PhysicsObject(2 * 10, 2 * 10, Shape.Circle);
PhysicsObject pallo2 = new PhysicsObject(pallo1.Width * 2, pallo1.Height * 2, Shape.Circle);
Add(pallo1);
Add(pallo2);

Tässä:

  • pallon 1 leveys ja korkeus on 2 * 10 eli 20
  • pallon 2 leveys ja korkeus on kaksi kertaa pallon 1 leveydestä korkeudesta, eli 2 * pallo1.Width = 2 * 20 = 40

Myös Rider (tai oikeastaan mikä tahansa IDE) osaa näitä listata kaikki olion ominaisuudet, kun kirjoittaa esim. pallo1..

-DZ

Q: Miten aktivoin Jetbrains Educational Pack:in käyttööni tällä kurssilla?

A: Toimi JetBrains-sivulla olevien ohjeiden mukaisesti: https://www.jetbrains.com/academy/student-pack/

Tällä opintojaksolla pärjää hyvin myös Non-commercial license -lisenssillä, jonka aktivointiohjeet löytyvät Työkalut-sivulla Rider-asennusohjeiden kohdalla. -DZ

Q: T4*. Muotoja Lisätehtävän oikeaoppinen suoritus:

Toteutin kyseisen tehtävän lisätehtävä osion seuraavasti (alla), mutta vaikka tämä toteutus tuottikin saman lopputuloksen kuin mitä kysymyksessä haettiin, niin ajattelin kysyä, että onko tehtävään jokin oikeaoppinen tapa suorittaa se?

    Vastaus poistettu. 
    Lukijat: kokeilkaa ensin pähkäillä ja kokea oivaltamisen iloa itse :) -DZ

A: Ihan oikeahan tuo on, vaikka on vähän "keulittu" jo ensi viikon asioihin 😁. Mutta asiaan liittyvä vinkki: Muuttujia ei vielä tarvitse tehdä, vaan Jypelissä olioilla on olemassa leveys- ja korkeusominaisuudet (olio.Width ja olio.Height), joita voi käyttää (ks. Jypeli-wiki).

Eräs ratkaisu ilman muuttujia voisi olla se, että yhdelle muodolle antaa leveyden ja korkeuden numerona, ja muille muodoille käyttäen ensimmäisen muodon Width ja Height-ominaisuutta.

Mutta ei ole väärää, että käyttää muuttujia. Katsotaan luennolla 3 muuttujia tarkemmin.

Jos sinulla on kysyttäviä tehtävistä tai kaipaa palautetta, pääteohjauksissa ohjaajat ilomielin kommentoivat koodia ja antavat lisää vinkkejä. Opettajia tavoittaa myös osoitteesta tai Teamsin välityksellä. -DZ

Q: Miten kysymyksen lukijalla menee :D

A: -

Q: Millä todennäköisyydellä kurssilla oppii sen verran, että nollasta lähtevänä sen pääsee läpi vähintään kolmosen arvosanalla?

A: Se minkä arvosanan kurssista saa, on onneksi täysin riippuvaista siitä, että minkä verran tekee töitä kurssin asioiden eteen. Jos asiat osaa riittävän hyvin, tuurilla ei ole arvosanan kanssa juuri mitään tekemistä. -RR

Vuosina 2016-2022 keskimäärin noin 70 % opiskelijoista suoritti kurssin loppuun (luku napattu meidän tutkimuksesta). Luku oli laskettu vain syksyn toteutukista, joten se ei vastaa täysin todellisuutta. En ole vielä laskenut arvosanajakaumia kaikille vuosille, joten todennäköisyyksistä en osaa sanoa vielä. Sen verran muistan, että ainakin viimeisen 5 vuooden ajalla arvosanajakauma on ollut aina vahvasti vinouttunut arovasoihin 5 ja 4 -- eli on yleisempää saada kurssista arvosanaksi yli 3 kuin alle. Raulin huomio on arvokas tässä: tekemällä aktiivisesti työtä pääsee pitkälle. Harjoitustehtävien tekoaktiivisuus on ollut hyvä indikaattori läpipääsylle ainakin tutkimuksessa. -DZ

Q: Kuinka tärkeää on monisteiden opiskelu kun tekee harjoitustehtäviä, ovatko ne hyviä työvälineitä esimerkiksi loppukokeeseen opiskellessa?

A: Kurssimoniste ja luennot ovat pääasialliset tietolähteet, joiden pohjalta harjoitustehtäviä lähdetään tekemään, eli ovat tärkeitä harjoitustehtävien kannalta. Ne toimivat myös hyvinä lähteinä loppukokeeseen opiskellessa. -RR

Q: Onko C# yleispätevin ohjelmointikieli?

A: Yleisesti eri ohjelmointikielet ovat parhaita jossain tietyssä käyttötapauksessa ja C#:in parhaat käyttökohteet ovat Windows-käyttöjärjestelmälle tehdyt ohjelmat ja esimerkiksi Unity pelimoottori. C# ei ole kenties yleispätevin ohjelmointikieli, mutta on silti yksi yleispätevimmistä. -RR

Lisään vielä, että "yleispätevyys" on vähän laaja termi. Esimerkiksi:

  • Laskentatieteen näkökulmasta C# on ns. Turing-täydellinen, eli (erittäin yksinkertaitestusti) sillä voi tehdä kaikkea laskentaa, mihin tietokone pystyy. Käytännössä kaikki ohjelmointikielet ovat Turing-täydellisiä -- tai en heti keksi laajassa käytössä olevaa ohjelmointikieltä, joka ei olisi Turing-täydellinen. Oikeastaan asia menee usein toisinpäin, eli joku muuhuin kuin ohjelmointiin tarkoitettu kieli saattaakin olla Turing-täydellinen. Esimerkiksi HTML, joka on verkkosivujen rakentamiseen tarkoitettu merkintäkieli, ja CSS, joka on tarkoitettu verkkosivun ulkoasun määrittelyyn, ovat yhtä aikaa käytettynä Turing-täydellisiä vaikka niitä ei ole alun perin tarkoitettu laskentaan.

  • Käyttökohteen näkökulmasta voi yleisesti todeta, että omasta kokemuksesta ratkaiseva tekijä on yleensä tuen ja kirjastojen määrä eikä niinkään kieli itsessään. Vielä 15 vuotta sitten C# oli pääosin vain Windowsin ympärille keskitetty kieli, mutta nykyään se toimii hyvin kaikissa käyttöjärjestelmissä, ja muiden tekemien kirjastojen myötä C#:lla on mahdollista tehdä komentorivisovelluksia, graafisia sovelluksia, pelejä, verkkosivuja, web-palvelimia, tieteellistä laskentaa, yms. Samat asiat saa tehtyä vaikkapa Pythonilla, Julialla, Rustilla, Go:lla, Javalla, jne. Siinä mielessä sanoisin, että C# on yhtä pätevä kuin edellä mainitut. Sitten on eri asia, tykkääkö kielen syntaksista tai ei :)

  • Suosion kannalta C# aika ylhäällä. Esimerkiksi TIOBE indeksin mukaan C# on (tämän kommentin kirjoitushetkellä) 5. suosituin ohjelmointikieli. Java on hieman ylempänä, Python on ykkösenä. Eli C# on aika hyvässä käytössä. Toki näitä vastaavia indekseja on muitakin, ja C# voi sijoittua eri tavalla.

Kaikkiaan sanoisin, että C# riittää pitkälle jos se on ainoa ohjelmointikieli, jonka opiskelee kurssina. Muistutan, että Ohjelmointi 1 on ohjelmointikurssi eikä C#-kurssi. Tavoite on, että kurssin jälkeen uuden ohjelmointikielen ottaminen haltuun onnistuu kohtuullisen pienellä työllä. -DZ

Q: Pärjääkö Macbookilla Ohjelmointi 1 kurssilla vai onko esim Windowsia käyttävä kone parempi / helpompi käyttää ohjelmoinnissa?

A: Ohjelmointi 1 -kurssi on rakennettu ja työkalut valittu niin, että kaiken saa tehtyä millä tahansa käyttiksellä. -DZ

A: Ohjelmoinnin kannalta ei ole merkitystä sillä, että mikä käyttöjärjestelmä koneessa sattuu olemaan. Käytännössä ero tulee lähinnä siinä, että mitä eri ohjelmia on tarjolla ohjelmointia varten kyseisessä käyttöjärjestelmässä. Eli Macbook on oikein hyvä, mutta niin on Windows- tai Linux-pohjainenkin. -RR

A: Tarkentaisin ylempiä vastauksia niin, että suht tuoreet versiot Windowsista, Linuxista ja macOS:sta käyvät. Tosi vanhoilla versioilla voi tulla ongelmia, esim. macOS:sta pitää olla vähintään versio 12. Chrome OS ei käy. -AJL

Q: Jos suurempi kiinnostus tämän kurssin aikana syttyy ohjelmoimmista varten ja miettii ohjelmointi 2 kurssin suoritusta onko siitä kuinka mahdollista suoriutua hyvin, tämän kurssin pohja tiedoilla?

A: Jos opettelet Ohjelmointi 1 kurssin asiat erinomaisella tasolla, osaat jo jonkin verran Ohjelmointi 2 kurssin asioita. Ohjelmointi 1 kurssi tarjoaa siten erittäin hyvän pohjan pärjätä kurssilla Ohjelmointi 2. -RR

Q: Kurssimonisteen lisäksi voisin käyttää apuna kirjallisuutta, olisiko suosituksia?

A: Rob Milesin C# Yellow Book on ihan hyvä ja hauskasti kirjoitettu. -AJL

Q: Kuinka monta eri ohjelmointi kieltä olisi hyvä osata työmarkkinoilla?

A: Tämä riippuu paljon siitä, mitä haluaa työkseen tehdä. Hyvä lähtökohta on pitää mielessä, että ohjelmointikieli on työkalu ja eri tehtäviin käytetään eri työkalua. Monesti keskitytään yhteen kieleen ja opitaan sen salat, mutta esimerkiksi omalla kohdallani on ollut hyödyllistä osata useampaa kieltä ei niin hyvin, kuin yhtä todella hyvin. Lopulta ohjelmointi on samanlaista kielellä kuin kielellä ja kun periaatteet on kunnossa, oppii uuden kielen yllättävän nopeasti. -KP

Q: Yleisesti ajateltuna miten opintomenestystä seurataan valmistumisen jälkeen työmarkkinoilla opettajien kokemuksen mukaisesti? Kysyn, koska pohdin valintaani suoritustavan 1 ja 2 välillä. Kurssin läpäiseminen arvosanalla 1 suoritustavalla 2 on varma. Toki se suoritustapa vaatii tehtäviin syventymistä, jolloin tentissäkin pärjää todennäköisesti paremmin.

A: Omalla kohdallani ei arvosanoja ole katsottu kuin näihin tuntiopettajan tehtäviin hakiessa. Yrityspuolella ei yhdessäkään haastattelussa ole puhuttu koulumenestyksestä, vaan haastattelu on pyörinyt omien projektien parissa. Jos ohjelmointiura kiinnostaa, niin oman osaamisen/kiinnostuksen näyttäminen harrastusprojekteilla on merkittävämmässä roolissa useimpien työnantajien vinkkelistä. Kuten sanoitkin niin, kun harjoitustehtäviä tekee paljon ja syventyy aiheeseen, niin tenttikin menee varmasti hyvin! - KP

A: Ainakin Jyväskylässä jotkin softafirmat ovat meille kertoneet viime vuonna, että jos opiskelijalla on Ohj1 ja Ohj2 arvossana 5, niin ottavat varmasti haastatteluun. Me koitamme tässä vähän kartoittaa tilannetta Jyväskylässä, mutta näin yleisesti yrityksissä voidaan katsoa ohjelmointikurssien arvosanoja, mutta eri firmat antavat niille eri painoarvoja. Toki se ei ole nyt ehdoton vaatimus; itse aikoinaan pääsin haastatteluun ihan vaan laittamalla hakemukseen mukaan linkkejä minun koodausprojekteihin. Toisaalta jotta osaa koodata, niinpitää opiskella ja harjoitella, eli palataan siihen, että Ohj1een ja Ohj2een kannattaa panostaa :) -DZ

Q: Voiko vanhempia harjoitustehtäviä tehdä enää palautustilaisuuksien jälkeen?

A: Tehtäviä on mahdollista tehdä palautustilaisuuksien jälkeen. Tehtävän palauttaminen harjoitustehtäväkerran takarajan jälkeen ei kuitenkaan enää tuota tenttiin hyväksiluettavia pisteitä. -DZ

Q: Kuinka tekstieditoriin tehdyt tehtävät voi liittää TIMiin?

A: Tällä hetkellä siten, että maalaat haluamasi osa-alueen teksti-editorissa ja painat CTRL+C (windows koneissa) ja CTRL+V TIM:issä haluttuun ikkunaan. Toki tässä pitää ottaa huomioon se, että mitä TIM:in ikkunassa on jo valmiiksi, jotta syntaksi pysyy edelleen oikein. -RR

Q: Resursseja C++ itsenäisesti opettelemiseen?

A: Yleisesti suositeltu kirja on Bjarne Stroustrupin kirja "Programming: Principles and Practice Using C++" (3rd edition) -RR

Q: Onko hyödyllistä oppia muitakin koodaamiskieliä alussa vai kannattaako keskittyä vain yhteen?

A: Aluksi olisi hyvä keskittyä vain yhteen kieleen, kunnes osaa vähintään perusasiat ja rakenteet. Tämän jälkeen muiden kielten oppiminen on huomattavasti helpompaa, kun voi ammentaa aiempaa osaamista. -KL

Q: Onko työmarkkinoilla yleisesti etu käyttää MacBookia vai Windows-käyttöjärjestelmää ohjelmointi- ja kehitystyössä?

A: En ole ainakaan itse ikinä törmännyt tilanteeseen, jossa olisi ollut varsinaista etua Windowsista tai Macista. Aika usein työmarkkinoilla saa itse päättää mitä käyttöjärjestelmää haluaa käyttää, sillä usein samat ohjelmointi/kehitystyökalut ovat saatavilla molemille (pois lukien iOS:ta käyttäville laitteille suunniteltu kehitys, jossa MacOS ympäristö on erittäin suosittu ja melkein pakollinen). Sivuhuomiona: Linux tarjoaa eniten työkaluja sekä ihan Linux ympäristön osaaminen katsotaan plussana, joten itse suosittelen sen opettelemista edes jollain tavalla. -KL

Q: Tein thetävän G1-2 JetBrainssissä onnistuneesti, mutta tim:n kopioituna koodi ei enää toimi. Eikö samojen ohjelmien pitäisi pyöriä molemmissa?

A: Näkemättä itse vastausta olethan tarkistanut, että olet antanut vastauksen oikeaan paikkaan koodia?

public class Neliojuuret
{
    public static void Main()
    {
        // Kirjoita koodisi tähän
    }
}

-RR

Q: Mikä sai teidät kiinnostumaan koodauksesta?

A: Luennolla jo vähän mainitsin, mutta... Kiinnostuin aikoinaan Minecraftista ja sen modaamisesta. Sen kautta sitten opiskelin Javaa kirjastosta lainatulla kirjalla. Taisin minä jotain saada aikaankin, mutten ikinä julkaissut mitään. Sitten siihen samaan aikaan katselin Notchin striimeja, jossa hän koodasi pelejä Ludum Dare-pelijamiin, ja opin sen kautta tekemään pelejä Javalla. Sitten aika pitkään modailin Unity-pelejä ja sen kautta opin aika paljon debuggaamisesta ja yleisesti takaisinmallintamisesta. Osallistuin myös Nuorten peliohjelmointikurssille, mikä sekin nosti kiinnostusta. Taisin sitten jopa osallistua kahdesti. -DZ

A: Itselläni mielenkiinto ohjelmointia kohtaan nousi täällä yliopistossa Ohjelmointi 1 kurssilla eriyisesti pelillisyyden kautta. Tein useita pieniä skenaaroita huvin vuoksi, joissa testasin jotain Jypelin ominaisuutta ja joita myöhemmin hyödynsin harjoitustyössä. Koodauksen ja matematiikan kautta oppii yksiselitteisyyttä, jota olen myöhemmin hyödyntänyt yleisemminkin elämässä. Myöhemmin kiinnostuin myös automatisoinnista esimerkiksi skriptien muodossa ja miten luodaan järjestelmiä tai vaikkapa sivustoja siten, että vältetään mahdollisimman paljon toistoa. Eli sama asia kirjoitettaisiin vain kerran. -RR

Q: Onko yliopistolla muita Rust kursseja kuin TEKA3002 Muistiturvallinen ohjelmointi Rustilla

A: Jyväskylän yliopistossa ei tietääkseni ole muita kursseja tällä hetkellä, jossa käytettäisiin Rustia. -RR

Q: Teen kurssia etänä. Riittääkö tehtävien palautukseen siis se, että ne tekee TIM:ssä vai pitääkö olla mukana demoissa fyysisesti läsnä? Mitä muita vinkkejä kurssia etänä suorittaville?

A: Riittää, että palauttaa tehtävät TIM:iin ja tarkistat, että sinulla on oikea määrä pisteitä. Demoissa ei tarvitse olla fyysisesti läsnä. Hyvä tavoite on esimerkiksi sellainen, että viimeistään kurssin lopulla osaat ulkomuistista kirjoittaa demotehtäviä vastaavia ohjelmia ja kykenisit selittämään jokaisen siellä esiintyvän sanan jollekulle tarvittaessa. Tässä auttaa esimerkiksi ns. kumiankka-metodi. -RR

Q: En ymmärrä Jypelin dokumentaatio sivustoa kovin hyvin. Kävin myös katsomassa Microsoftin dotnettiä ja sekin oli hämmentävä. Näitä ei varmaan luennoilla käydä läpi, niin onko jossain jotain aloittelijan opasta näille dokumentaatiosivuille, vaikka ne ovatkin hyvin erilaisia keskenään, vai pitääkö vaan räpiköidä kunnes "oppii uimaan"?

A: Dokumentaation ymmärtäminen alkuun on hidasta ja vaatii sitä, että niitä käy vilkuilemassa useampaan otteeseen. Suosittelen sitäkin, että käyt välillä lukemassa dokumentaatiota ja pyrit ymmärtämään sitä ilman, että sinulla on lukemiselle muuta tavoitetta. Tällöin kun sieltä etsit tietoa johonkin haasteeseen, sinulla on jo jokin intuitio siitä, mistä vastaus voisi löytyä. Suosittelen myös hyödyntämään meitä ohjaajia ongelmien ratkaisemisessa myös dokumentaation suhteen. -RR

# dokumentaatio

A: Hei, lupasin laittaa tästä lyhyen ohjevideon, mutta valitettavasti flunssaisena ja yskäisenä tämä ei vielä kannata. Tässä nyt alustava vastaus, ja koitan tehdä videon myöhemmin:

  • Dokumentaatioita on yleensä olemassa kahdenlaisia
    • "Käyttöohje", joka selittää luokan tai aliohjelman toimintaa sanallisesti, tarjoaa esimerkkejä ja nostaa esille tärkeitä huomioita.
    • "Rajapintadokumentaatio", joka yksinkertaisesti listaa kaikki rakenteet (nimiavaruudet, luokat, aliohjelmat), niiden tyypit sekä niihen liitetty dokumentaatio.
  • Eri kirjastoilla ja työkaluilla voi olla näistä dokumentaatioista jompikumpi, kummatkin erillisenä ja kummatkin yhdistettynä. Esimerkiksi:
  • Miten siis yllä olevia käytetään? Minun omakohtaiset vinkit:
    • Käyttöohje on ensisijainen paikka, kun et tiedä, mitä olet hakemassa. Esimerkiksi jos haluaisin tietää, voiko Jypelisä luoda monikulmioita, menisin ensin Jypelin wikiin ja katsoisin sivua Millaisia olioiden muotoja on olemassa?. Käyttöohjeissa on myös yleensä jokin hakukone, jolla ohjeet voi löytää nopeasti.
    • Rajapintadokumentaatio on hyvä paikka, kun tiedät suunnilleen, mitä olet hakemassa. Esimerkiksi jos teidän, että haluan tehdä jotain komentorivillä, katsoisin ekaksi System.Console-luokan dokumentaatiota ja tutkisin, mitä eri aliohjelmia sillä on olemassa. Tällaisessa käyttötarkoituksessa sivun hakutoimintoa on erittäin suotavaa käyttää, koska monesti luokat ja aliohjelmat pyritään nimeämään sen mukaan, mitä ne tekee. Esimerkiksi, jos haluaisin selvittää, miten merkkijonossa kirjainten kokoa voisi vaihtaa, olettaisin, että aliohjelman pitäisi olla String-luokassa ja että siellä voisi olla joku asia, jonka nimessä on sana "uppercase", jolloin hakisin sitä sanaa sisältäviä asioita.
    • Rajapintadokumentaatio on kiva paikka tutkia, mitä eri asioita kirjastolla voi tehdä. Esimerkiksi jos tutkii Jypelin PhysicsObject-luokkaa, huomaa, että fysiikkaoliolita voi työntää, heittää, jne. Tämä tapa on kuitenkin aika työläs ja vaatii paljon itsenäistä kokeilua. Aika harvoin löytää oikean ratkaisun heti.

Dokumentaation lisäksi on syytä hyödyntää ulkopuolista apua, tällä kurssilla siis ohjaajia. On ihan normaalia, että kysytään joltain kirjastoa tuntevalta, miten jotain asiaa tehdään. Monesti se on nopeampaa ja jopa opettavaisempaa.

Päivittelen tätä jos tulee jotain muuta mieleen ja teen sitten vielä videon, kuten on luvattu -DZ

Q: Onko mallikuvat absoluuttiset ja on tehtävä tismalleen yksi yhteen, vai onko enemmän suuntaa antavia (esim. muodot, värit)?

A: Pääosin suuntaa antavia, mutta muotojen olisi hyvä olla sama (eihän lumiukkoa voi kolmioilla tehdä :-). Värin, koon tai sijainnin ei tarvitse olla pikselilleen sama kuin mallikuvassa, kunhan suunnilleen on samanlainen.-KL

Q: Onko yleistä, että JetBrains Rider on hidas tai ohjelman ajaminen vie aikaa? Asensin ohjelman vanhalle kotikoneelle ja tuntui olevan melko hidas.

A: Kuulostaa siltä, että joko (1) tietokone on liian vanha tai (2) jokin ohjelmisto haittaa Riderin ja .NETin toimintaa. Ensimmäisen kannalta omasta kokemuksesta 5-8 vuoden vanhalla koneella pärjää ihan hyvin. Vaihtoehdon (2) tarkistaisin ihan alkuun, haittaako haittaohjelmien torjuntaohjelma Riderin toimintaa. Lisäsin aiheesta luvun 5.4 Työkalut-ohjeeseen.

Q: Millaisia mahdollisuuksia työmarkkinoilla voisi olla sellaiselle tyypille, joka on kiinnostunut ohjelmoinnista ja opiskellut sitä pari kurssia, mutta ei halua lähteä kuitenkaan täysipäiväiseksi koodariksi?

A: Tietääkseni tällä hetkellä aika heikot, vaikkakin aina silloin tällöin kuulen siitä, että joku kevyehköä hommaa tekee, jossa tehdään jonkin verran ohjemointiakin. Toistuva teema on ollut, että se iso osa työstä on jotain muuta kuin ohjelmointia ja siitä tekijällä oli aiempaa osaamista. Useimmiten nämä hommat on saatu suhteilla tai muulla työkokemuksella kuin ohjelmointiosaamisella. Jonkin verran on niitäkin, jotka tekevät osa-aikaisena ohjelmointia, mutta lähes aina heillä on opintoja vuoden tai pari alla ja/tai kenties aiempaa ohjelmointikokemusta ennen yliopistoa. Suosittelen panostamaan opintoihin, omiin projekteihin, verkostoitumiseen, pitämään silmät auki mahdollisuuksille ja olemaan aloitteellinen asiassa esimerkiksi ottamalla selvää eri firmoista ja heidän tarpeistaan. On siis sinun itsesi vastuulla, että olet firman kannalta potentiaalinen työntekijä ja hommaat opinnoista kiinnostavaa osaamista. -RR

Q: Mitä suosittelisitte yleisellä tasolla harjoitustyön aiheeksi mikäli on jo vahvaa taustaa ohjelmonnista ja koodin tuottaminen on suhteellisen nopeaa? Asia on varmaan käydään vielä läpi yksilöllisetikin(?), mutta kysyn jo tässä kohtaa. Huomioiden että harjoitustyöhön oli tarkoitus käyttää huomattavasti aikaa, niin ideaalitilanteesa haluaisin ratkaista jonkun ns. real-world ongelman.

A: Tosielämän ongelman ratkaiseminen on hyvä tavoite. Parempi käydä suunnitelma läpi ohjaajan kanssa. On hyvä muistaa, että harkkatyö pitää tehdä kuitenkin tämän opintojakson työkaluilla. Toki harkka voi olla konsolisovellus -- pakko ei ole Jypeli-peliä tehdä. -AJL

Q: Haittaako, jos lumiukkotehtävässä nenä ei ole aivan porkkanan muotoinen, vaikka kolmio onkin? Entäs T4, jos neliön väri on tummemman vihreä, kuin esimerkkikuvassa?

A: Saat antaa itsellesi pisteitä vaikka väri ei ole ihan 100%. Samoin lumiukon tapauksessa -- omaa artistista näkemystä saa käyttää ja pisteitä saa itselleen antaa. -DZ

A: Pitää muistaa sekin, että on mahdollista, että opiskelijalla on jokin värisokeus, eli ei voi välttämättä olettaa, että väri täsmäisi täydellisesti. Toki tällöinkin voi käyttää selaimeen saatavaa työkalua, jolla voi katsoa kunkin näkyvän pikselin työkalulla "eyedropper" ja tällöin väri voidaan sovittaa täsmälleen. -RR

Q: Miten kokeneet ohjelmoijat lähestyvät ongelmia, jos verrataan henkilöihin jotka eivät ole tämän tyylistä ongelmanratkaisemista harjoittanut?

A: Se, miten ongelmaa lähestytään riippuu ongelmasta. Yleisellä tasolla isoin ero kokeneen ja vähemmän kokeneen välillä on nopeus ja onnistumisprosentti. Lisäksi kokenut ymmärtää kysyä tarkentavia kysymyksiä ja hän hahmottaa nopeammin, miten ongelma saadaan tietokoneohjelman muotoon. Tämä tieto tai useasti intuitio, muodostuu ajan kanssa tekemällä tarkoituksellista harjoittelua (engl. deliberate practice) riittävän tiheällä aikasyklillä. Eli esimerkiksi harjoittelemalla 1-2h päivässä usean vuoden ajan putkeen. Prosessia voi nopeuttaa säännöllisellä kertaamisella ja pitämällä vaikeustason jatkuvasti sopivan haastavana. Tässä vielä yleinen protokolla, jolla lähestyä ongelmia:

  1. Määrittele ongelma mahdollisimman tarkasti
  2. Voisiko ongelmaa hahmottaa paremmin piirtämällä kuvan? -> Piirrä.
  3. Voinko ratkaista yksinkertaisemman version ongelmasta? Mikä olisi yksinkertaisin versio ongelmasta?
  4. Jaa ongelma osiin
  5. Nimeä osiot järkevällä tavalla
  6. Millä osa-ongelmat ratkaistaan?
  7. Nimeä muuttujat järkevällä tavalla
  8. Ratkaise osa-ongelmat
  9. Voisiko ongelman ratkaista paremmin?

Erityisesti toista vaihetta, eli piirtämistä suosittelen tekemään aina, kun ongelma ei heti hahmotu ja sitä ei pysty heti kirjoittamaan ohjelmaksi. Pidän lisäksi erityisen tärkeänä reflektointia, eli että voisiko ongelman ratkaista paremmin? Paremmuudella useimmiten ohjelmoinnissa tarkoitetaan, että käytetään vähemmän laskentaa, vähemmän muistia ja/tai ratkaisu on helpompi ymmärtää. -RR

Q: Vaikuttaako harjoitustyössä koodin selkeys ja kommentointi sen arviointiin vai onko koodin toimivuus tärkeintä?

Q: Kurssimoniste näytti laajalta ja aloitettuani tekemään tehtäviä en joka asiaa (myöskään ehdi) lukea monisteesta. Onko kurssimonisteesta tarkoitus osata kaikki? Vai toimiiko se enemmän apuvälineenä : )

A: Vastaus kysymykseen riippuu hyvin pitkälle siitä, mitä aiot tehdä kurssin jälkeen. Jos tämä jää ainoaksi ohjelmointikurssiksi, tee sen verran kuin hyvältä tuntuu. Jos teet sivuainetta tai opiskelet IT-tiedekunnassa, niin koska kyseessä on ohjelmoinnin peruskurssi,jonka pohjatietoja tarvitaan lähes kaikilla muilla ainakin tietotekniikan oppiaineen kursseilla, kurssimoniste olisi hyvä osata hyvin lähelle 100% kurssin loppupuolella. -RR

Q: Mikä ohjelmisto on paras aloittelijalle, linux, mac vai windows

A: Tähän kysymykseen löytyy varmaan tuhansia eri vastauksia, mutta itse olen sitä mieltä, että Windows on helpoin aloittelijalle. Mac ja Linux vaativat tosi nopeasti komentorivin ja paketti managerin käyttöön, kun ruvetaan lataamaan/käyttämään ohjelmointi työkaluja. Windowsille löytyy melkein aina graafinen vaihtoehto, mitä on alussa helpompi käyttää, eikä siihen komentoriviin tarvitse aluksi koskea ollenkaan ellei halua. Toisaalta koska jokaisen koodarin tulisi osata komentoriviä käyttää niin ihan hyvä, että Mac ja Linux siihen nopeasti pakottavat. Jos olet valmis haasteeseen, niin opit luultavasti nopeammin Macilla ja Linuxilla komentorivin salat. -KL

Q: Mitä muita ohjelmointikieliä suosittelette aloittelijoille?

A: Riippuu hieman kiinnostuksen kohteista. Jos tämä C#-tyylinen oliomainen ohjelmointi kiinnostaa, niin Java on iso suositus (Java on kyllä siinä ja siinä, että lasketaanko aloittelija ystävälliseksi, mutta se on todella lähellä C#, joten suht helppo siirtyä). Python on todella hyvä ja helposti opittava skripti kieli, jolla voi jopa aloittelijan taidoilla tehdä monimutkaisempia ohjelmia kiitos hyvän ja laajan kirjasto tarjonnan. Jos Web-kehitys kiinnostaa niin JavaScript on suhteellisen helppo ja hyvä kieli siihen. -KL

Q: Mitä ohjelmointikieltä suosittelette löysäkätiselle yhteiskuntatieteilijälle? Data-analytiikkaan tai semmoiseen...

A: Python erittäin vahva suositus. Data-analytiikkaa varten löytyy monia hyviä kirjastoja, kuten SKLearn, Pandas ja Numpy. Python on itsessään myös erittäin anteeksiantava kieli, jonka syntaksi on helppo oppia. -KL

Q: Onko suositeltavaa tehdä kaikki viikottaiset tehtävät vai voiko hyvän arvosanan saada jo sillä, että tekee vähän extraa?

A: Vastaan sillä oletuksella, että kysymyksen tekijällä ei ole juuri ohjelmointikokemusta. Voi tehdä kaikki tehtävät tai ison osan, jos aikaa ja intoa riittää. Tilastollisessa mielessä niillä on yhteys parempaan arvosanaan, mutta eivät selitä kaikkea. Hyvän arvosanan voi saada sillä, että tekee jonkin verran extraa, mutta ei takaa sitä. Yleisesti suosittelen siihen, että pyrkii ymmärtämään sen, mitä opiskelee, jolloin tehtävät osaa tehdä ymmärryksen seurauksena. Ymmärtämisessä auttaa esimerkiksi se, että pyrit opettelemaan asiat siten, kuin aikoisit opettaa ne jollekulle toiselle. -RR

Q: Missä tapauksissa koodien järjestyksellä on väliä kirjoittaessa aliohjelmaan? Huomasin, että esim. GameObject piti olla luotuna ylemmällä rivillä ennen kuin siihen voi viitata komentoa varten. Muuten järjestelmä huusi: "Cannot use local variable '#' before it is declared.

A: Kaikki aikoinaan :) Luennolla 3 käydään läpi, mitä muuttujat on ja mitä mainitsemasi virhe tarkoittaa. Näin vähän suoristaen, pallon ominaisuuksia ei ole järkevää muuttaa jos tietokoneelle ei kerro, mitä pallo on. C#-kielen komentoja suoritetaan yksi kerrallaan ylhäältä alas (yleensä), joten vastaavasti GameObjectin ominaisuuksia voi vaihtaa vasta sen jälkeen, kun pallo on luotu. -DZ

Q: Vaikka osa tehtävistä pisteytetään itse niin käykö silti joku tarkistamassa tehtävät tarkemmin? ja jos käy niin voiko sen jälkeen pistemäärä muuttua?

A: Ei missään tapauksessa tarkisteta kaikkien kaikkia tehtäviä ihmistyöllä. Se olisi liian iso työ. Lähtökohtaisesti pisteet eivät voi laskea jälkikäteen. Jos ohjaaja huomaa pistotarkastuksessa jotain outoa (esim. vilppiepäily), niin se on sitten eri asia. -AJL

Q: kertyykö tenttiin pisteitä pelkästään tehdyistä lisätehtävistä vai myös pakollisista tehtävistä?

A: Kaikki harjoitustehtävät-sivulla olevat tehtävät kerryttävät hyvityspisteitä tenttiin. Ainoa rajoite on että jokaisesta tehtäväkerrasta hyväksiluetaan max. 8 pistettä/viikko tenttiin. - DZ

Q: Mikä on sinun lempi ohjelmointikieli?

A: Itse en kielestä erityisemmin välitä, enemmän siitä, millä saa työtä tehtyä. Nopeisiin ohjelmiin valikoituu usein Python, koska jokaiselle asialle löytyy joku pakkaus. Datatieteeseen Python tai (nykyään) Julia. Jos pitää tehdä jotain vakavampaa, niin Go, Rust, C# tai Kotlin ovat omassa käytössäni olleet kaikki mielekkäitä. Kaikki kielet on jollain tavalla kivoja ja kaikilla on myös (minua) ärsyttäviä puolia. Omassa työssä priorisoin enemmän sitä, kuinka kehittäjäystävällistä kieltä on käyttää (eli mikä on IDE-tuki, onko kirjastoja). Joskus haluaisin tehdä jotain Elixirilla tai Gleamilla, koska olen kuullut kummastakin hyviä palautteita. -DZ

Q: Mitä jos osaa jo ohjelmoida aika korkealla tasolla eikä perusteista opi paljoakaan?

A: Riippuu varmaankin siitä, että mikä taso todella on. Suosittelen ottamaan yhteyttä kurssin vastuuopettajiin. -RR

Q: Voiko harjoistustyötä aloitella halutessaan jo nyt? Mistä löydän / onko saatavilla riittävästi infoa (tavoite, vaatimukset, palautustavat yms.) sen tekemiseen?

A: Jos tuntuu, että olet tehtävien tasalla, niin miksei. Tarkemmat ohjeet löytyvät täältä: https://tim.jyu.fi/view/kurssit/tie/itkp102/ohjeet/harjoitustyo -RR

Q: Voisitteko kertoa lisää Taunon käytöstä ensimmäisellä palautuksella? En ihan ymmärtänyt sen käyttöä, vaikka ohjeet luin läpi ja joudun katsomaan maanantain palautusdemon jälkikäteen.

A: Juu, katsotaan Tauno läpi :) -DZ

Q: Tämä riippuu varmasti ihan yksilöstäkin, mutta kuinka paljon enemmän noin suurin piirtein tarvitsee tällä Ohjelmointi 1-kurssilla harjoittelua sellainen opiskelija, jolla on hyvin vähän tai ei lainkaan ohjelmointikokemusta verrattuna sellaiseen opiskelijaan, jolla sitä on jo mukavasti?

A: Haastattelimme jokunen vuosi sitten Ohj1-opiskelijoita (Isomöttönen & Zhidkikh), ja sen mukaan tarvittavan effortin määrä on hyvin yksilöllistä, niin kuin sanotkin. Jollain asiat vaan "klikkaa" yhteen, toiset taas joutuvat paneutumaan aiheeseen tarkemmin. Tähän voi vaikuttaa oma tausta (kiinnostus, ystävät, työpaikka), joka taas vaikuttaa kiinnostukseen ja omiin opiskelutapoihin. Kurssi on mitoitettu niin, että ilman mitään aiempaa kokemusta omaava oppii ohjelmoinnin peruspilareita keskimäärin 14,5 h/vko työpanoksella. Olennainen tekijä on sitoutuminen aktiiviseen tekemiseen -- ja kurssilla tarjottujen tukiresurssien (ohjaajat) aktiivinen käyttö. -DZ

Q: Kuinka Ville-sivulle oli tarkoitus päästä

A: https://tim.jyu.fi/view/kurssit/tie/itkp102/ohjeet/ville Sama linkki löytyy aina ViLLE-tehtävän yhteydessä. -DZ

Q: Voiko ohjelmoinnin parissa kohdata syrjintää naisten ja miesten välillä esimerkiksi työmaailmassa?

A: Vaikea sanoa tarkasti, mutta tuskin ala on täysin syrjinnästä vapaata. Ohjelmistokehityksessä on globaalisti pitkään ollut nimen omaan valkoisten miesten enemmistö. Tasa-arvoa ja oikeudenmukaisuutta kuitenkin tutkitaan paljon, ja esimerkiksi tietojenkäsittelyn opetukseen keskittyvä arvostettu TOCE-lehti korostaa tämän alueen tutkimuksen tärkeyttä. -AJL

Q: Olisiko teillä suositella mitään suomenkielistä C#-kirjallisuutta kurssimateriaalin lisäksi?

A: -

Q: Kuinka hyvin Ohjelmointi 1 -kurssissa tulisi pärjätä, jotta voi käydä Ohjelmointi 2?

A: Tässä ei ehkä kannata tuijottaa liikaa tilastoja. Pyri parhaaseen mahdolliseen, se on hyvä lähtökohta. -AJL

Q: Miten kattavasti virheilmoitusten tulkintaa käydään Ohjelmointi 1 -kurssilla?

A: Kurssilla opetetaan olennaiset termit suomeksi ja englanniksi. Myös katsotaan, millaisia ovat yleisiä virheitä C#-kielessä. Parhaiten asian oppii tekemällä harjoitustehtäviä ja käymällä ohjauksissa, jossa ohjaajat osaavat auttaa ongelmien tulkkaamisessa. -DZ

Q: Mikäli kurssin aikana innostuu koodaamisesta ja haluaa mahdollisesti tehdä sitä työkseen, onko hyviä vinkkejä ensimmäisten töiden saamiseen itse koodaamisen harjoittelun lisäksi?

A: Kannattaa rakentaa digitaalinen portfolio GitHubiin tai muuhun vastaavaan palveluun. Kannattaa myös dokumentoida koodi ja projektit hyvin. -AJL

Q: Kuinka lukkoon lyötyjä kurssin deadlinet (esim. harjoitustyön) ovat, jos samalla on esim. muiden kurssien projekteja?

A: Deadline on deadline. Kurssin sivuilla on mainittu, että ole yhteydessä hyvissä ajoin opettajiin, jos et perustellusta syystä pysty tekemään kurssin jotain osaa sen asettaman takarajan sisällä. -DZ

Q: Onko mahdollista opiskella tämän lisäksi muita ohjelmointikieliä?

A: On -DZ

A: Tarkoittiko kysyjä Ohjelmointi 1:ä? Jos kyllä, niin tämän kurssin tehtävät ja harkkatyö tulee kuitenkin tehdä määrätyillä työkaluilla. -AJL

Q: C#:n oppimisen jälkeen kuinka helppo on omaksua C ja/tai C++?

A: Kummallakin on aika sama syntaksi, eli sen kannalta ei ole erityisen vaikeaa. Olennaisin uusi asia on, että muistia pitää hallinnoida käsin (=muistin varaaminen datalle, muistin vapauttaminen). C#:ssa on taas ns. roskienkerääjä, joka automaattisesti huolehtii, että käyttämätöntä muistia vapautetaan muiden ohjelmien käyttöön. -DZ

Q: Onko millaisia vinkkejä, miten pitää kooltaan suuria koodeja siisteinä ja helppolukuisina? Tuleeko koodaamisessa yleensä ongelmia vaikealukuisuuteen liittyen ja ongelmien/syntaksivirheiden havaitsemiseen?

A: Suuria koodipohjia pidetään siisteinä ja helppolukuisina pitämällä kiinni kyseisen kielen ja kirjaston koodauskäytänteistä, sekä periaatteista, kuten DRY ja SOLID. Pidempi-ikäiset ohjelmistot voivat kaatua siihen, että siltä haluttaisiin jokin ominaisuus, jota ei tajuttu ottaa huomioon alkuperäistä arkkitehtuuria suunnitellessa, mutta ominaisuuden implementointi olisi hyvin aikaa vievää tai jopa mahdotonta nykyiselle arkkitehtuurille. Nykyisillä työkaluilla syntaksivirheet eivät pitäisi koskaan olla ongelma. Vaikealukuisuus on yleensä pienempi ongelma kuin semanttinen ongelma, jonka kaiketi voidaan ajatella olevan ongelman havaitsemista. Toisaalta nykyään vibe koodaamalla voidaan tehdä koodia joka on vaikealukuista ja semanttisesti ongelmallista. LinkedIn:stä voikin löytää nykyään kenties humoristisesti ihmisiä, joilla on titteli "vibe coding cleanup specialist", jolla viitataan siihen, että he korjaavat vibe koodaamalla rikki saatuja ohjelman tekeleitä. -RR

Q: Mitä ilmaisia resursseja kannattaisi hyödyntää, jos haluaa opsikella muita koodauskieliä?

A: Kirjastoista voi lainata kirjoja, netistä voi löytyä ilmaisia kursseja, kielien dokumentaatiot ja yliopistoissa voi olla tietyn kielen kursseja avoimesti tarjolla -RR

Q: Millä koodikielellä chatgpt on koodattu

A: Itse malli koulutetaan pythonilla ja sen kirjastoilla. Webistä saatavan palvelun ohjelmointiin on käytetty fronttipuolella JavaScript/TypeScriptiä ja bäkkärin puolella Go/Rust. Nämä tiedot ovat kuitenkin vuodelta 2023, joten nykytilanne voi olla erilainen. -RR

Q: Kannattaako päivittää Windows 10 windows 11 versioon? Onko kurssin ohjelmien/työkalujen välillä eroa eri versioissa?

A: Kurssin kannalta työkaluja on testattu sekä Windows 10 että Windows 11 -versioilla. Mikäli kohtaat ongelmia, ole yhteydessä opettajiin.

Q: Onko vinkkejä, miten Jypeli-kirjastoa voisi hyödyntää tehokkaasti löytääkseen haluamansa tiedon? Hakutoimintoa tuli käytettyä harkoissa, mutta hakua hidastaa se, että kirjaston sisällä oikealle sivulle navigointi voi olla työläämpää siksi, että kirjasto on itselle vielä melko tuntematon. Mitä vinkkejä siis antaisitte siihen, miten kirjastoa olisi selkeämpää lähteä lukemaan ja tulkitsemaan?

A: Navigoinnissa auttaa se, että tutustut dokumentaatioon ihan vain omasta mielenkiinnosta. Käyt katsomassa mitä sieltä löytyy, kokeilet käytännössä Riderin puolella, vaikket etsisikään vastausta vielä mihinkään tiettyyn kysymykseen. -RR

Q: Onko mahdollista saada valmista virtuaalikone-siirtotiedostoa (imagea) millä voisi toimivaksi testattua kehitysympäristöä saada ajettua ilman, että nykyisten työkalujen rinnalle tarvitsee asentaa ohjelmistoja?

A: Jos jokin kohta asennuksessa tökkäsi, niin mielellämme kuulemme palautetta jotta voimme kehittää prosessia. En kuitenkaan lähtisi omatoimisesti jakelemaan sellaista levykuvaa, joka sisältää kaupallisia tuotteita. Olkoonkin, että ainakaan JetBrainsin käyttäjäsopimus ei yksiselitteisesti tätä kiellä. Joka tapauksessa tuollaisen levykuvan ylläpitäminen olisi hyvin työlästä, kun versiot päivittyvät niin usein. -AJL

Q: Onko Ohjelmointi 1 -kurssi muuttunut mitenkään merkittävästi, jos vertaa esim. viime vuoteen?

A: Tavoitteiden osalta ei isoja muutoksia ole. Yksi opiskelijoille näkyvä muutos on kuitenkin se, että eri toteutukset (syksy, kevät, avoin, jne.) tehdään nyt yhdessä paikassa, eikä toteutuskohtaisia sivustoja enää ole. -AJL

Q: jäi mietityttämään miten olisi lumiukon piirto tehtävässä saanut puolikaan pallon jota käyttää suuna.päädyin tekemään suun 5 pienestä pallosta jotka imitoivat kiviä. tein tehtävässä myös lumiukolle napit kun oli tylsää.

A: Yksi ratkaisu on se, että teet ensin pallon haluamaasi kohtaan suuksi, joka on väriltään esimerkiksi musta. Sen jälkeen teet valkoisen suorakaiteen, jonka asetat sopivasti mustan pallon päälle, jolloin saat suunnilleen D kirjaimen muotoisen suun. Vaihtoehtoisesti voit tehdä valkoisen ympyrän, jonka asettelet sopivasti ja tällöin saat haluamasi sirpin muotoisen suun. Nenän taas voi laittaa valkoisen pallon päälle, jolloin kaikki näkyy hienosti. -RR

Q: Mihin kaikkeen Ohjelmointi kieleen tämä kurssi voi auttaa ja mihin tulevaisuuden mahdollisuuteen voi auttaa?

A: Syntaksin ja muidenkin ominaisuuksien kannalta C# auttaa hahmottamaan paremmin C-perheen ohjelmointikieliä. Niitä on aika paljon: https://en.wikipedia.org/wiki/List_of_C-family_programming_languages Tulevaisuuden mahdollisuuksia se avaa ainakin IT-tiedekunnan opintojen suhteen, koska enemmän tai vähemmän niissä kaikissa oletetaan ohjelmointi 1 kurssin tietotaitoja. Ajattelu, joka kehittyy ohjelmointia opetellessa voi taas auttaa matematiikan puolella tai ylipäätään loogisessa ajattelussa myös muilla aloilla. -RR

Q: Miten C# kielessä saa monikulmion jossa on 5 tai enemmän kulmia?

A: GDI+:lla tai jollakin muullakin grafiikkakirjastolla se on mahdollista, mutta tällä kurssilla käytetään piirtämiseen Jypeli-kirjastoa, jossa saa kyllä tehtyä haluamasi muodon. Tässä vielä linkki ohjeisiin: https://tim.jyu.fi/view/kurssit/jypeli/oliot/muodot#monikulmiot -RR

Q: Pystyykö lumiukkotehtävään tekemään kolmion, joka olisi ylösalaisin?

A: Jypeli wikistä: Oliota voi pyörittää asettamalla olion Angle ominaisuuteen jokin kulma:

olio.Angle = Angle.FromDegrees(kulma);

missä kulma tilalla on muuttuja tai luku, joka kuvaa montako astetta oliota käännetään. Oletuksena olion kulma on nolla astetta.

Käytä tuota lumiukkotehtävässä luomaasi kolmioon niin saat sen ylösalaisin :) (ps. joudut mahdollisesti myös säätämään kolmion koordinaatteja).

-KL

Q: Mistä löytää ohjeita erillaisiin komentoihin, jos esim jypeli wikistä ei löydä etsimäänsä komentoa?

A: Esimerkiksi ohjaajilta voi kysyä vinkkejä. Jypelin wikissä on jo aika paljon perusasioita selitetty. Jos sieltä ei jotain löydy, se on ehkä sen verran spesifi kysymys, että ohjaaja tai opettaja osaa avustaa paremmin eteenpäin. -DZ

Q: Miten lumiukkotehtävän lisätehtävän olisi voinut tehdä?

A: Ainakaan Harjoitustehtävä 1:ssä tai Harjoitustehtävä 2:ssa ei ole lisätehtävää lumiukolle. Harjoitustehtävissä 1 tehtävässä T4 (Muotoja) oli lisätehtävä; tehtävän ja lisätehtävän mallivastaus löytyy menemällä tehtävän palautuslaatikon kohdalle ja painamalla "Näytä mallivastaus" -painiketta. -DZ

Q: onko jetbrainissä kun kirjoittaa koodia ja se ehdottaa valmiiksi mitä siihen voisi laittaa esim. väriä tai "add object" tekoäly ja saako sitä käyttää

A: Kyseessä ei ole tekoäly, joten sitä saa käyttää ja itseasiassa ainakin itse suosittelen opettelemaan IDE:n ominaisuuksia, jotka auttavat ohjelmakoodin kirjoittamisessa. Mainitsemasi ominaisuus tunnetaan englanniksi esimerkiksi nimillä "autocomplete", "content assist" tai "code completion" joka on siis IDE:jen (IDE = Integrated Development Environment) ominaisuus, joka helpottaa koodin kirjoittamista, kun esimerkiksi kaikkia kirjastojen funktioita ei tarvitse muistaa ulkoa tai katsoa dokumentaatiosta. Laajan kielimallin (eräs tekoälyn muoto (engl. Large Language model(LLM))) käytön tunnistaa siitä, että sitä käytetään luonnollisella kielellä, kuten vaikkapa: "kirjoita minulle snake peli käyttäen kirjastoa x". -RR

Q: Mitä tarkoittaa object oriented programming?

A: Se tarkoittaa oliopohjaista (tai olioperustaista) ohjelmointia, joka on yksi maailman käytetyimmistä tavoista rakennella isoja ohjelmia. Olioperustaisessa ohjelmoinnissa ohjelma rakentuu olioista, jotka mallintavat todellisen tai kuvitteellisen maailman asioita. Olioihin sisältyy sekä tietoa (tila) että toimintoja (metodit), ja ohjelman toiminta syntyy näiden olioiden välisestä vuorovaikutuksesta. Kurssin puolen välin korvilla annetaan pieni maistiainen mitä se käytännössä tarkoittaa koodin tasolla. -AJL

Q: Voiko tehtävien mallikoodista poiketa vähän (eri muuttujanimet / värit), jos lopputulos on sama?

A: Voi poiketa muuttujannimien/värien suhteen, kunhan noudattaa kurssin nimeämis/koodauskäytänteitä ja jos tehtävässä ei erikseen pyydetä jotain tiettyä nimitystä/väriä. -RR

Q: Olen tehnyt tehtäviä hieman eri koodi tyypeillä ja saanut saman lopputuloksen. Onko tämä ok?

A: Jos tarkoitat muuttujien tyyppiä (double, int, string jne.), niin lähtökohtaisesti ei ole ok. Jos esimerkiksi mallivastauksessa on käytetty inttiä ja olet käyttänyt doublea, tämä on ainakin pieni virhe, koska hyvin todennäköisesti muuttujantyyppi on mallivastaukseen valittu hyvällä perusteella. -RR

Q: Mikä olisi paras tapa kehittää ohjelmointi taitoa kurssin ulkopuolella?

A: Paras tapa oppia ohjelmointia, on kirjoittaa ohjelmakoodia. Tuntematta taustaasi, harjoitustyön edistäminen ja siinä itsellesi uusien konseptien harjoittelu on hyvin todennäköisesti hyödyllisimpiä tapoja edistää ohjelmointitaitojesi kehittämistä. -RR

Q: Milloin C#:ssa käytetään vs. while -ominaisuutta? Mitkä ovat kunkin silmukkatyypin hyvät ja huonot puolet?

A: Seuraavassa listassa esittelen suositeltuja käyttötapauksia C#:ssa tarjolla oleville silmukoille:

  • While: Käytä, kun et etukäteen tiedä kuinka monta kierrosta tulet tarvitsemaan. Kierroksia 0 - ∞.
    • Huono puoli: helppo kirjoittaa ikuinen silmukka.
  • Do ... While: Sama kuin ylempänä, mutta haluat että asia suoritetaan ainakin kerran. Kierroksia 1 - ∞.
    • Huono puoli: Sama kuin while silmukassa.
  • For: Käytä, kun tiedät kuinka monta kierroksia on. Kierroksia 0-n.
    • Huono puoli: Ei välttämättä yhtä taipuisa kuin while.
  • Foreach: Käytä, kun jokin operaatio suoritetaan jokaiselle alkiolle esimerkiksi taulukossa. Kierroksia tasan n.
    • Huono puoli: Selvästi rajoittueempi käyttötapauksiltaan kuin for ja while.

Nuo suositukset kuitenkin pätevät enemmän tai vähemmän kaikissa ohjelmointikielissä. - RR

Q: Riderissa kun rakennan ohjelmaa, joka kysyy ensin: "Anna nimesi" ja tämän jälkeen consoleen tulee syöte johon nimi tulisi täydentää, hyppää kursori täytettäessä yhden pykälän ylöspäin eikä teksti tule siihen oikeaan kohtaan. Voiko tätä korjata jotenkin?

# rider-2025-bug

A: Tällä hetkellä Riderissa (versio 2025.2.1) on valitetavasti bugi, joka aihettaa tuon. Ottaen huomioon, että vika on hyvinkin ärsyttävä, olettaisin, että se korjataan piakkoin.

Toistaiseksi korjauksena on käyttää ulkopuolista konsolia seuraavasti:

Toistaiseksi joudutaan siis odottamaan korjausta.

Väliaikaisena korjauksena vaikuttaa olevan se, että vaihtaa käyttämään ulkoista konsolia. Tämä onnistuu klikkaamalla ajopainikkeen vierestä projektivalitsinta ja valitsemalla Edit configurations...

Avautuneesta ikkunasta valitse projekti, jossa käytät ReadLinea ja laita sitten ruksi kohtaan "Use external console":

Sen jälkeen paina OK ja yritä ajaa koodi taas.

PS: Ainakin omassa testissä ulkoinen komentorivi menee heti kiinni ohjelman lopuksi eikä jää ns "odottamaan", jolloin ohjelman tulostetta voi katsoa. Siihen auttaa se, että Mainissa aivan viimeiseksi komennoksi laittaa Console.ReadLine(); , jolloin komentorivi jää auki odottamaan Enter-painikkeen painaisua ennen kuin ohjelma menee kiinni

Lisäys 22.9: Jos perusajon sijaan käyttää debuggausta (eli "play"-painikkeen sijaan "ötökkä"-painiketta), niin debuggauskonsolissa ReadLine näyttää toimivan. Kun ohjelma on debuggaustilassa, konsolin saa valittua debuggausikkunan välilehdestä:

-DZ

Q: miksi C#?

A: Tähän vastattiin ensimmäisellä luennolla, mutta lyhyesti: C# on ihan hyvä ja suosittu "yleiskieli", ts. soveltuu pidemmälläkin tähtäimellä kaikenlaisten ihan oikeiden sovellusten tekemiseen. Jos opit C#:ia, on siirtyminen moniin muihin kieliin loppujen lopuksi melko suoraviivaista. Elämä ei mene niin että opettelet yhden kielen ja pärjäät sillä loppuiän. Lisäksi Jypeli on koodattu C#:lle. -AJL

Q: miksi kurssilla on niin monta opettajaa?

A: Kurssilla on 3 vastuuopettajaa ja vaihteleva määrä tuntiopettajia. Tuntiopettajien määrä perustuu viime vuosien arvioon ohjaustarpeesta. Vastuuopettajien määrä perustuu siihen, että se mahdollistaa opetusvastuun kiertoa ja hallinnollisen työn tasapainottamista. -DZ

Q: Onko muilla tehtävillä mahdollista kompensoida pisteitä siinä tapauksessa, että pakollisista tehtävistä ei tullut maksimia, mutta haluisi silti maksimaalisen määrän pisteitä kyseiseltä viikolta?

A: Ole yhteydessä kurssin opettajiin () niin katsotaan asia tarkemmin juuri sinun tapauksessa :) -DZ

Q: moi. olen lukio opiskelia eli katson kaikki luennot tallenteelta ja olen alkanut miettimään etttä kun luennot ovat aika pitkiä ja se miten osa tehtävistä tehdään kerrotaan jo alkuluennosta niin kannataako tehdä niin että katsoo ensin kaikki seuraavien tehtävien luennot ensin vai katsoa mitä seuraavassa tehtävässä pitää tehdä ja odottaa kunnes se nauvvotaan luennolla katsoa miten se tehdään ja pysäyttää video ja tehdä tehtävä?

A: Opiskelutyyli on aika henkilökohtainen asia. Luentonauhoitteiden lisäksi tarjolla on luentojen kalvot sekä luennoilla koodatut esimerkit, joiden kautta voi päästä nopeammin käsiksi asiaan. Luennot pohjautuvat kurssimonisteeseen, josta löydät aivan kaikki kurssiin liittyvät asiat (ja paljon lisätietoja).

Luennot ovat aika pitkiä, joo. Jotkut opiskelijat katsovat ne 1,5x tai 2x nopeudella :)

Oman pienehkön tutkimuksen perusteella (Zhidkikh et al.) jotkut opiskelijat ensin katsovat tietyn osan kummatkin luennot, lukevat monistetta ja vasta sitten tekevät harjoitustehtäviä. Toiset opiskelijat taas lähtevät heti harjoitustehtävistä ja katsovat kurssimonisteesta tai luennoista olennaiset kohdat tarpeen mukaan. Kummallakin tyylillä pääsee pitkälle. Kuten luennolla 1 on vähän näytetty tutkimustietoa, harjoitustehtävien tekeminen on oikeastaan se paikka, jossa oppiminen tapahtuu.

Kannatan kokeilemaan ja löytämään sinulle sopivan tyylin. Harjoitustehtävien yhteydessä yleensä löytyy teksti mallia "Lue ensin monisteesta", jolla viitataan, mitä asiaa harjoitustehtävä koskee. -DZ

Q: Onko mahdollista myös jakaa mahdollisimman paljon youtube videoita, jotka takuu varmasti auttaisivat observoimaan vielä tehokkaammin luennolla käytyjä asioita? Lisäksi onko mahdollista keskustella puhelimitse tarvittaessa luennon vetäjien kanssa?

A: YouTube on täynnä ohjelmointiin liittyviä videoita, lyhyitä ja pitkiä. Haulla pääsee pitkälle. Henkilökohtaisesti suosittelen Ohjelmointi 1 -kurssin yhteenvetovideota, jossa käydään läpi kaikki kurssin asiat tiiviissä paketissa.

Kurssia vetävät vastuuopettajat ja tuntiopettajat. Tuntiopettajien kanssa pääsee juttelemaan pääteohjauksissa, ajat löytyvät kurssin etusivulla. Vastuuopettajiin voi olla yhteydessä sähköpostitse: Sen kautta voi tarvittaessa sopia joku soittokin. -DZ

Q: Mitkä ovat tämän kurssin keskeisimmät asiat (ns. tärkeimmät ja kriittisimmät)?

A: Koska tämä on ensimmäinen ohjelmointikurssi ja enemmän tai vähemmän kaikki IT-tiedekunnan kurssit pohjautuvat ainakin jossain määrin tämän kurssin tietoihin, ei ole varsinaisesti "turhaa asiaa" eikä täten tärkeintä tai kriittisintäkään. Se kun riippuu siitä, mitä aiot tehdä kurssin jälkeen. Tärkeintä yleisesti on se, että kykenet suunnittelemaan ja luomaan ohjelmia ja ymmärrät kaiken mitä niissä tapahtuu ainakin sillä tasolla, että kykenisit selittämään ne myös muille. -RR

Q: Kuinka paljon pitää kerätä harjoitustehtävistä pisteitä hyvityspisteitä varten?

Q: Onko tärkeämpää ymmärtää periaatteet vai osata kirjoittaa koodia ulkomuistista?

A: Periaatteiden ymmärtäminen on moninkertaisesti tärkeämpää ja hyödyllisempää. Ne ymmärtämällä pystyy muun muassa ratkaisemaan kokonaan uudenlaisia ongelmia ja välttämään sudenkuoppia isompien ohjelmien kehittämisessä. Verraten, ulkomuistista kirjoittaminen on taito, joka lähinnä nopeuttaa ohjelmointia ja mahdollistaa kehittämisen ilman verkkoapuja, lunttilappua tai kirjaa vieressä. -SS

Lisää kysymys

**Q:** ⁞

#- {.answ}
**A:** -

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