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 v. 2025)
- SS: Sami Sarsa (Ohj1 vastuuopettaja v. 2025)
- AJL: Antti-Jussi Lakanen (Ohj1 vastuuopettaja)
- RR: Rauli Ruokokoski (Ohj1 tuntiopettaja, syksy 2026)
- KL: Konsta Lahtinen (Ohj1 tuntiopettaja, syksy 2025)
- KP: Karel Parkkola (Ohj1 tuntiopettaja, syksy 2026)
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 + Shiftja 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ä (ohj1-opet@jyu.onmicrosoft.com).
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 * 10eli20 - 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 ohj1-opet@jyu.onmicrosoft.com tai Teamsin välityksellä. -DZ
Q: Miten kysymyksen lukijalla menee :D
A: Kiitos kysymästä, ihan hyvin menee. -AJL
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?
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
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:
- Jypelin wiki on sen käyttöohje ja Jypelin dokumentaatio sen rajapintadokumentaatio
- Microsoft Learn on sekä käyttöohje että rajapintadokumentaatio. Esimerkiksi jos katsoo System.Console.WriteLine-aliohjelman dokumentaatiota, aivan alussa on tekninen määritelmä (mitä eri ylikuormituksia on olemassa, mitä parametreja se voi ottaa) ja sitten aivan sivun lopussa on esimerkkejä ja huomioita.
- 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:
- Määrittele ongelma mahdollisimman tarkasti
- Voisiko ongelmaa hahmottaa paremmin piirtämällä kuvan? -> Piirrä.
- Voinko ratkaista yksinkertaisemman version ongelmasta? Mikä olisi yksinkertaisin versio ongelmasta?
- Jaa ongelma osiin
- Nimeä osiot järkevällä tavalla
- Millä osa-ongelmat ratkaistaan?
- Nimeä muuttujat järkevällä tavalla
- Ratkaise osa-ongelmat
- 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ä?
A: Tähän löytää vastauksen täältä https://tim.jyu.fi/view/kurssit/tie/itkp102/ohjeet/harjoitustyo#tarkastettavat-osa-alueet) -RR
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: Suomenkielistä ja ajantasaista C#-kirjallisuutta ei valitettavasti juuri ole -- suomeksi ohjelmointikirjoja julkaistaan vähän, ja ne vanhenevat nopeasti. Kurssimoniste on käytännössä laajin suomenkielinen lähde, jonka tiedän.
Jos englanti taittuu, Rob Milesin C# Yellow Book on ihan hyvä ja hauskasti kirjoitettu. -AJL
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?
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 (ohj1-opet@jyu.onmicrosoft.com) 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: ohj1-opet@jyu.onmicrosoft.com 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
Q: Onko missään suuntaa antavia määritelmiä mitä esimerkiksi 3 tai jonkun muun arvosanaan saamiseen ohjelmointi 1 kurssilta vaaditaan?
A: Arvosanan sijaan suosittelen keskittymään ymmärtämiseen ja erityisesti kykyyn tuottaa hyvälaatuista ohjelmakoodia vähintään tentin suorittamisen asettamissa aikarajoissa. Voit esimerkiksi ottaa tavoitteen, että kykenet tekemään ohjelmointi 1 -kurssin loppupään perustasoisia tehtäviä noin yhden tunnissa. Suosittelen tekemään myös tekemättömiä bonus/gurutehtäviä kurssin loppupuolella, joita ei tullut alunperin tehtyä. Tekoälyltä voi kysyä lisää tehtäviä tai hakukoneen avulla. Esimerkiksi leetcoden helpomman pään tehtävät ovat oikein hyvää harjoitusta. -RR
Q: Onko Tauno-tehtävissä ajatuksena saada Taunolla luotua koko koodi, joka toimii myös testattaessa/ajettaessa, vai vain aihio, jota pitää itse osata muokata?
A: Ajatuksena on luoda Taunolla koko koodi, mutta tarkoitus on myös opetella muokkaamaan Taunon tuottamaa koodia ja tuottamaan sitä myös itse ilman Taunoa. Myöhemmin kurssilla opetellaan luomaan silmukoita, jotka ovat Taunon tuottaman koodin yleistyksiä. -RR
Q: Onko jossain luetteloa C# komennoista?
A: Kurssin monisteessa kerrotaan pääasiassa kaikki tällä kurssilla tarvittavat funktiot ja metodit. Jos tarvitset tai haluat pidemmän listauksen niin Microsoftin oma C# dokumentaatio (https://learn.microsoft.com/en-us/dotnet/csharp/tour-of-csharp/) tarjoaa tämän. -KL
Q: Voiko kurssilla tehtävää peliä tehdä ryhmässä, jotta pelistä saisi monimutkaisemman tai pidemmän?
A: Jos ohjelmoistotuotannolliset asiat ja versionhallintatyökalut eivät ole jo entuudestaan tuttuja, suosittelen tekemään pelin yksin tai korkeintaan parityönä. Lukaiskaa täältä tarkempia ohjeita kohdasta "Paritöistä". Ohjelmointi 1 -kurssin taidoilla on aika vaikeaa tehdä vielä kovin monimutkaista tai pitkää peliä, joten sekin kannattaa ottaa huomioon. -RR
Q: Jos teen harjoitustehtäviä enemmän kuin tähtitehtävät ja 5pistettä, hyödynkö myös niistä tentissä hyvityksinä
A: Lue täältä kohta "Hyvitykset tenttiin (suoritustapa 1)". -RR
Q: Voiko Ville-tehtäviä tehdä vapaasti harjoittelumielessä, vai kannattaako odottaa että niitä tulee harjoitustehtävissä?
A: Voi tehdä kummin vain. -RR
Q: Onko muita kursseja Ohjelmointi1:n ja 2:n lisäksi, joilla voisi jatkaa ohjelmoinnin opiskelua?
A: - Melkein kaikilla aine- ja syventävien opintojen kursseilla ohjelmoidaan jossakin kontekstissa, esim jos haluat opetella Web-käyttöliittymien ohjelmointia niin TIEA2120 on hyvä vaihtoehto siihen tai jos haluat tutustua funktionaaliseen ohjelmointiin niin suosittelen TIEA341-kurssia. -KL
Q: Tuleeko Taunoon mahdollisuus opetella käyttämään loopeja?
A: Taunon avulla itseasiassa tuotetaan koodia, joka voidaan yleistää silmukaksi, että sinänsä ne sisältävät jo mahdollisuuden opetella kirjoittamaan algoritmeja, jotka voidaan toteuttaa silmukoiden avulla. -RR
Q: Missä tilanteessa esim. fyysikot voisi työelämässä törmätä ohjelmointiin?
A: Nykyään fyysikot harvemmin tekevät enää juuri mitään "kynäpaperi" -tyyliin ainakaan kokonaan. Käytännössä huolimatta työnimikkeestä tulet tarvitsemaan ohjelmointitaitoja lähes kaikissa fysiikkaan liittyvissä työtehtävissä. -RR
Q: Voisiko Taunon ohjeistusta päivitää selkeämmäksi? Itse en ymmärtänyt kovin helposti sitä miten sen kuuluisi toimia.
A: Toivottavasti pääset näillä ohjeilla eteenpäin. Jos nuo eivät auta, niin voit tulla kysymään asiasta ohjauksissa. -RR
Q: Mitä materiaaleja tentissä saa käyttää?
A: Tentissä sallitut materiaalit löytyvät täältä. -RR
Q: Onko C# kieli hyvä opetella täydellisesti ensin vai suoitteletko muidenkin kielin opettelua työelämää ajatellen.
A: "Täydellisyyden" sijaan suosittelen keskittymään ohjelmoinnin konsepteihin ja kykyyn toteuttaa niitä käytännössä, sekä palkitsemaan itseänsä kehittymisestä. Opintojen aikana tulee käytettyä noin 10 eri ohjelmointikieltä, joten tärkeämpää on opetella sitä, miten tietoa löytää ja yleisiä ohjelmoinnin periaatteita, joihin ohjelmointi-kursseillakin keskitytään. Työelämän kannalta tärkeää on juurikin kyky omaksua nopeasti uusia konsepteja. -RR
Q: Onko Taunon käytön opettelu oleellista kurssin kannalta?
A: Taunon avulla on tarkoitus opetella oleellisia ohjelmointikonsepteja, kuten taulukoita, sijoittamista, muuttujia ja silmukoita. Samoja asioita voi opetella kyllä muullakin tavalla, jos Taunon käyttäminen ei tunnu itselle mieluisalta. Tauno voi toisaalta toimia harjoituksena sille, että opettelee käyttämään aluksi itselle epäintuitiiviselta vaikuttavaa ohjelmaa. Tähän kannattaa tottua. -RR
Q: Kuinka hyvin tästä kurssista tulisi suoriutua, jotta kannattaisi hakea ohjelmointi 2 kurssille?
A: Tämä riippuu siitä, mitä haluat tehdä jatkossa. Opettaako ohjelmoinnin opettelu sinulle taitoja, jotka koet mielekkääksi ja hyödyllisiksi jatkossa? Itse olen kokenut, että ohjelmointi opettaa ajattelua, joka on hyödyllistä myös monessa muussa yhteydessä. Näitä taitoja ovat mm. ongelman jakaminen pienempiin osiin ja konseptin esittäminen siten, että se olisi mahdollisimman yksiselitteinen myös sellaisille, jotka eivät ole asiaan perehtyneet. Jos teet vähintään 2h töitä joka päivä ohjelmointi 1-kurssin eteen, sinulla on todennäköisesti hyvät edellytykset jatkaa kurssille ohjelmointi 2. Jos keskityt järjestelmällisesti kehittämään ohjelmointiosaamistasi, jossain vaiheessa ylität molempien kurssien taitovaatimukset. -RR
Q: Täytyykö tentissä osata kirjoittaa using system; public class ... yms.?
A: Täytyy. Näihin saat kyllä runsaasti harjoitusta kurssin aikana, joten ne pitäisi jäädä helposti muistiin, kunhan teet riittävästi duunia joka viikko kurssin eteen. -RR
Q: Onko ohjelmointia varten olemassa pikakomentojen lisäksi erityisen hyödyllisiä näppäimistömakroja joita kannattaisi hyödyntää
A: On olemassa, mutta näihin on kullakin omat mieltymykset, joten näihin ei oteta kurssilla kantaa. Jää siis itseopiskelun varaan. -RR
Q: Kurssilla keskitytään harjoitustyönä pelin tekemiseen. Voisi aloittelijana kuvitella että pelkkä valmistettu peli ei ole vielä tarvittava näyttö ohjelmoinnin osaamisesta niin millä lailla se heijastuu osaamiseen vai konkretisoituuko se kurssin edetessä?
A: Riippuu täysin siitä millaisen pelin tekee. Jos pelissä käytetään laajasti erilaisia tietorakenteita ja algoritmeja, se on osoitus ainakin pelissä käytetystä ohjelmointiosaamisesta. Kurssilla on lisäksi tentti ja harjoitustehtäviä ja näiden yhdistelmästä se ohjelmoinnin osaamisen näyttö koostuu. -RR
Q: Näkekää Ville:ssä mistään, että miksi kysymys meni väärin tai saako siihen mitään selitystä mistään?
A: Taitaa olla niin, että Ville-tehtävissä annetaan lähinnä lyhyt selitys tai ei selitystä lainkaan. Näihin emme ole valitettavasti ehtineet lisäämään selitystekstejä; tehtävät ja selitykset ovat pitkälti Turun kollegoiden laatimia. -AJL
Q: Miten ohjelmointi hyödyttää työelämässä?
Q: Kuinka paljon ohjelmoinnin perusosaaminen hyödyttäisi työmarkkinoilla?
Q: Millaisissa tilanteissa tai tehtävissä kurssilla opitut taidot tulevat käyttöön työelämässä?
A: IT-alan työtehtävissä se on yleensä välttämättömyys. Muilla aloilla riippuu ihan hirveästi tehtävästä. Jos osaa ohjelmoida, siitä on yleensä vähintäänkin itselle huomattava työtä tehostava vaikutus. -AJL
Q: Miten Ohjelmointi 1 puitteissa kannattaisi kehittää omaa työprosessia ja sen dokumentointia? Esimerkiksi millaisia työskentely- ja kommentointitapoja olisi hyvä opetella jo heti kurssin alkuvaiheessa, jotta oma työprosessi kehittyy vähitellen selkämmäksi ja systemaattisemmaksi?
A: Koodin kirjoittaminen selkeästi (ks. tyyliopas) on kaiken lähtökohta. Hyvät dokumentaatiokommentit helpottavat työskentelyä vaikka ne voivat tuntuakin alussa taakalta. Versionhallinta Gitillä kannattaa opetella myös heti kun se tulee harkkatyön myötä tutuksi. -AJL
Q: Miten kurssin projekteja ja tiedostoja olisi paras organisoida? Kannattaako esimerkiksi jokaiselle harjoitusviikolle luoda oma solution ja sen sisälle tehtävät omina projekteinaan, vai olisiko parempi käyttää koko kurssin harjoituksille yhtä solutionia, jonka sisällä on useita proejkteja eri tehtäville?
A: Jokaiselle harjoitusviikolle kannattaa tehdä oma solution, jonka sisälle sitten projekteja. Varmaankin teoriassa toimii myös noin, että tekee koko kurssin tehtävät yhteen solutioniin, mutta siinä alkaa levy-IO:ta tulla niin paljon, että kone saattaa hyytyä. Jos on tosi nopea kone, tätä voi toki riskillä kokeilla. -AJL
Q: Onko kurssia mahdollista suorittaa kesällä?
A: Mahdollisesti kyllä. Tämä selviää keväällä, kun tiedekunnassa päätetään kesäopetuksesta. Seuraa Sisua. -AJL
Q: Näkyykö tehtävistä kertyneiden pisteiden määrä missään?
A: Ks. Eteneminen-sivu. -AJL
Q: Onko Tentin tehtävät samantyylisiä ohjelmointi tehtäviä kuin Harjoitteissa, vai enemmän teoriaa (esim selitä mitä tarkoittaa syntaksi)?
A: Molemman tyyppisiä kysymyksiä on tyypillisesti ollut tentissä. Eräitä vanhoja tenttejä näet täältä. -AJL
Q: Kurssin ensimmäisellä luennolla mainittiin, että ohjelmointi voi olla tärkeää data-analyysin alalla. Luennolla mainittiin myös, että ohjelmointikieliä on paljon, mutta onko C kieli yleisin tällä data-analyysin alalla Suomessa?
A: Oma näppituntumani on, että data-analyysissa yleisin kielivalinta on Python, koska sille on olemassa laaja paletti monenlaisia kirjastoja, joihin on valmiiksi tehty läjä sitä matematiikkaa, jota data-analyysissa tarvitaan, esim Numpy, SciPy ja Pandas. Suoranaisesti kysymys ei siis ole siitä, että Python olisi parempi kieli datan analysoinnissa, koska samat systeemit voisi ihan hyvin tehdä myös C#:lla. Enemmän kysymys on siitä, että yhteisö on (ehkä osittain sattumalta) laajasti kehittänyt hyviä työkaluja ko. kielelle. -AJL
Q: Mitä asioita/kokonaisuuksia ohjelmoinnista voisi olla tärkeää ymmärtää, jos haluaisi työurallaan toimia varsinaisten ohjelmoijien ja asiakkaiden "välikätenä"? Eli siis eräänlaisena yhteyshenkilönä, joka pystyisi viestimään näiden kahden osapuolen kanssa tehokkaasti.
A: Tämä riippuu hyvin pitkälle siitä, että millaisen teknologian kanssa olet tekemisissä ja millaisen asiakkaan kanssa. Sanoisin, että tärkeintä on ymmärtää, mikä on mahdollista toteuttaa ohjelmakoodina ja millä hinnalla. Tekoäly tulee muuttamaan tätäkin kenttää paljonkin, joten tärkeää on myös pysyä mukana siinä, että mikä käytännössä muuttuu, eli mikä on todella mahdollista toteuttaa tekoälyllä nopeammin (halvemmin) ja mikä toisaalta ei. -RR
Q: Jos olen valinnut suoritustavaksi tentin ja harjoitustehtävät, mutta saan tentistä hylätyn, voinko läpäistä kurssin pelkillä tehtävillä vai vaatiiko tuo suoritustapa aina hyväksytyn tentin?
A: Jos suoritustavan 2 vaatimukset täyttyvät, niin kyllä voit läpäistä. -AJL
Q: Miksi kurssilla on kaksi suoritustapaa, mihin se perustuu? Miltä tilastot näyttävät suoristustapavalintojen suhteen?
A: Suoritustapojen kuvaukset perustuvat voimassa olevaan opetussuunnitelmaan. En ole pitänyt tarkkoja tilastoja suoritustavoista, mutta oletan, että Suoritustapa 1 on suositumpi. -AJL
Q: Mikä olisi paras tapa ylläpitää tällä kurssilla opittuja tietoja ja taitoja?
A: Jatkuva ohjelmointi ja omien projektien tekeminen on hyvä tapa ylläpitää taitoja. Projektien ei tietenkään tarvitse olla mitään maailmaa mullistavia, vaan ne voivat ihan hyvin olla esim. pieniä konsoli sovelluksia, jotka auttavat juuri sinua (automatisoi jotain mitä et itse jaksa aina tehdä) tai ovat sinua itseäsi kiinnostavia. -KL
Q: Mitkä ovat yleisimpiä virheitä, joita aloittelijat tekevät aloittaessaan ohjelmoinnin?
A: 1) Suurin virhe on se, että ei käytä riittävästi aikaa ohjelmoinnin opiskeluun. Itse suosittelen 2 tuntia per päivä. 2) Toinen on kenties se, että ei selvitä itselleen epäselviä asioita riittävän ajoissa. Suosittelen kirjoittamaan ylös itselle epäselviä asioita heti, kun niihin törmää ja etsimään niihin vastaukset sen viikon aikana, jotta ensi viikolla epäselvien kysymysten lista on tyhjä uusien luentojen alkaessa. 3) Kolmas tekijä on se, että ei opettele kurssin työkaluja riittävän ajoissa. Jos opettelee vaikkapa 1-2 itselleen uutta asiaa per päivä kurssin työkaluista, sillä pääsee jo pitkälle. -RR
Q: Voiko kurssin suoritustavan vaihtaa kurssin aikana?
A: Kyllä. -RR
Q: Kuinka suuri ero suoritustavoilla on tulevaisuuden ja työllistymisen kannalta?
A: Tästä ei taida olla dataa kerättynä, mutta suoritustapa 1 on erittäin suositeltavaa jos aikoo työllistyä alalle. -RR
Q: Mitkä ohjelmointikielet on tärkeintä osata?
A: Tämä riippuu hyvin pitkälle siitä, missä halua työskennellä. Opintojen aikana tulet tutustumaan yleisesti käytetyimpiin kieliin ja niiden päälle on helppoa opetella tietyssä työtehtävässä käytettyjä kieliä. Noin yleensä sanoisin silti, että C-pohjainen syntaksi yleensä (johon C# ja Javakin perustuu) on hyvä tuntea ja Python, koska sitä käytetään niin monessa yhteydessä. -RR
Q: Mikä on helpoin ohjelmointikieli oppia?
A: Ohjelmointikieliä on yhteensä yli 9000, joten objektiivista vastausta on hyvin vaikeaa antaa. Yksi tunnetusti helpompia on kuitenkin Scratch. -RR
Q: Onko Ohjelmointi 1 -kurssilla käytettävien työkalujen (esim. .NET, VS Code, komentorivi) osalta macOS:ssä jotain tunnettuja eroja tai rajoituksia verrattuna Windowsiin tai Linuxiin, jotka opiskelijan olisi hyvä ottaa huomioon kurssin aikana?
A: .NET:in komennot ovat pääasiassa samat kaikilla käyttöjärjestelmillä, VS Coden sisäisissä komennoissa voi olla eroja Windows/Linuxin ja MacOS:sän kanssa (jos oikein muistan niin Windows/Linuxissa komennot ovat usein control + näppäin ja Macissä command + näppäin), komentorivillä itseasiassa Linux ja MacOS tarjoavat samat komennot ja Windowsille pitää opetella omat (ps. GitBash, jossa on tuotu Unix-tyyliset komennot Windowsille). -KL
Q: Mistä tiedän, mitä muotoja C# tukee? Esim. jos haluan muuttaa pallon (Shape.Circle) neliöksi, niin Shape.Square ei toimi. Miten nämä voi tietää? Löytyykö jostakin joku lista tms.?
A: Listaus kaikista Jypelin tukemista muodoista löytyy ainakin täältä. Rider osaa myös aika hyvin ehdottaa mitä kenttiä oliolla on, esim jos sinulla on PhysicsObject olio, niin jos kirjoitat "olio.", niin Rider antaa listauksen kaikista metodeista ja kentistä mitä oliolla on. -KL
Q: MacOs herjaa liian vanhasta versiosta - onko käyttiksen päivitys ainoa keino saada kurssityökalut toimimaan?
A: .NET taitaa vaatia macOS 14.0, joten jos järjestelmäsi on tuota vanhempi, et voi käyttää opintojakson työkaluja. -AJL
Q: Miten hyvän pohjan koodaamiseen saa, jos käy kaikki kurssit mitä on saatavilla?
A: Jos opettelet aina enemmän kuin mitä kurssilla vaaditaan, osaamisellesi on luultavasti kysyntää. Jos sinulla on tietty työtehtävä ja/tai firma mielessäsi, voit kehittää osaamistasi lisäksi erilaisilla projektikursseilla, joissa keskityt työtehtävässä vaadittavan osaamisen kehittämiseen. Asiat kuitenkin näyttävät muuttuvan nopeasti, joten suosittelen asennoitumaan siten, että joudut tekemään itsenäisesti tietyn osaamisen eteen 1-2 vuotta järjestelmällisesti työtä yliopiston kursseilla hankityn osaamisen lisäksi, joista kaikkea et välttämättä saa opintopisteytettyä, jotta saat itsellesi mieluisaa IT-alan työtä. -RR
Q: Löytyykö kurssimateriaalista jostakin listaa, jossa on komentoja
A: C#:ssa ei oikeastaan ole "komentoja" siinä mielessä kuin vaikka komentorivillä, vaan kielen avainsanoja sekä kirjastojen luokkia ja metodeja. Niitä on käytännössä rajattomasti, koska kuka tahansa voi kirjoittaa lisää.
Kurssilla tarvittavat asiat käydään läpi monisteessa, ja sen lopussa on Liite: Sanasto. Kielen oma dokumentaatio on täällä: https://learn.microsoft.com/en-us/dotnet/csharp/ -AJL
Q: Kannattaako ohjelmoinnin ohessa perehtyä myös muihin ohjelmointikieliin?
A: Kyllä kannattaa! Ohjelmointikielet ovat työkaluja, joista kaikki ovat hyviä jossain asiassa ja ehkä vähän huonompia toisissa, joten tilanteeseen kannattaisi valita aina sopiva kieli eikä jäädä jumiin vain yhteen. -KL
Q: Onko Ohjelmointi 2 kurssi huomattavasti haastavampi verrattuna Ohjemointi 1 kurssiin?
A: Asioiden haastavuus on aina riippuvainen tekijän aiemmasta osaamisesta. Jos teet vähän töitä ohj1 -kurssin eteen ja pääset ohj1 -kurssista juuri ja juuri läpi, voi ohj2 tuntua huomattavasti haastavammalta kuin ohj1. Jos taas esimerkiksi teet paljon töitä ohj1 kurssin eteen ja ennen ohj2 kurssia opiskelet itsenäisesti ohjelmointia siten, että jatkuvasti opettelet itsellesi uusia asioita, voi ohj2 tuntua ohj1 kurssia helpommalta. -RR
Q: Jos Tehtävä aiheuttaa päänhakkaamista sienään, mistä nopeiten apua?
A: Kurssimateriaali on ensimmäinen paikka mistä lähtisin hakemaan apua harjoitustehtäviin, mutta suosittelen myös kovasti tulemaan käymään ohjauksissa paikan päällä tai etänä mikäli kohtaat ongelmia, me ohjaajat autetaan mielellään :-). -KL
Q: Onko kurssista mahdollista saada 5, vaikka ei aina tekisi kaikkia lisätehtäviä?
A: On toki! Jos tavoitteena on arvosana 5, suosittelen tekemään aina kaikki perustehtävät ja valikoidusti lisätehtäviä siten, että opettelet lisätehtävissä jotain itselle uutta. Lisätehtäviä on välillä aika paljonkin ja osa voi olla aika haastavia, joten kaikkia ei välttämättä kerkeä tekemään joka viikko. -RR
Q: Kuuluuko kurssiin yksi koe? Sisussa näkyy useampi..
A: Yhdestä tentistä pitää saada hyväksytty arvosana. Voit yrittää useamman kerran. -AJL
Q: Onko ohjelmoinnissa tärkeämpää se, miten kooodi on rakennettu vai lopputulos?
A: Jos ohjelma antaa väärän lopputuloksen, huolimatta siitä, miten se on rakennettu, kyseessä ei ole kovin hyvä ohjelma. Toisaalta jos ohjelma antaa oikean lopputuloksen, mutta ohjelman ajamiseen menee todella pitkään ja ohjelmasta voisi tehdä version, joka on nopea ajaa, kenties rakenteella olisi enemmän merkistystä. Riippuu siis hyvin pitkälle siitä, että mitä ollaan tekemässä ja miksi, että kummalla on enemmän merkitystä. -RR
Q: Jos teen suoritustavan 2, eli ilman tenttiä ja siihen vaadittavat tehtävät, voin kuitenkin koittaa korottaa tentillä, jos fiilis vaihtuu ja voin saada paremman arvosanan kuin 1?
A: Kyllä. -AJL
Q: Mikä on harjoitustehtävien maksimipistemäärä?
A: Jokaiselta viikolta voi saada 8 harjoistustehtäväpistettä, jotka lasketaan tentin hyvityspisteitä varten, joten 8 * 11 = 88. Kuitenkin hyvityspisteitä saa tenttiin 60 harjoituspisteeseen asti. Pitää lisäksi muistaa, että tentissä painotetaan kurssin loppupään asioita, joten kannattaa viimeisillä viikoillakin tehdä ainakin 5-6 tehtäväpistettä per viikko, vaikka maksimihyvityspisteet olisikin jo saavutettu. -RR
Q: Muoto tehtävässä, kuinka tarkkaa on tehdä tismalleen samanlainen kuva, esimerkiksi mittasuhteiden osalta?
A: Tässä riittää, että nopeasti silmämääräisesti katsottuna näyttää samalta. -RR
Q: Miten tämä Q&A-palsta pitäisi löytää TIMistä? Useista yrityksistä huolimatta olen löytänyt tämän palstan vain "Harjoitustehtävät 1" kautta. Mutta varmaan tähän on olemassa jokin käytännöllisempikin reitti?
A: Hyvä kysymys... Alkuperäinen idea oli tosiaan että näitä kirjoitettaisiin ja luettaisiin Harjoitustehtävän 1 aikana, mutta ehkä voisi olla hyvä idea, että tänne pääsisi muualtakin. Tätä täytyy pohtia. -AJL
Q: Tein harjoitustehtävä 3 kerralta pakolliset tähtitehtävät ja sain niistä 90 % tehtyä, koska tehtävästä 3 klikkasin kaksi kohtaa väärin eikä vastauksia saanut muuttaa. Vaikuttaako tämä kurssin suoritukseen?
A: Ei vaikuta. -AJL
Q: Pystyykö etäluennoilla esittämään kysymyksiä millään muulla tavalla kuin tekemällä Youtube-tilin (jotta voi kommentoida)?
A: Jos haluat, että luennoija näkee kysymyksesi luennon aikana, niin ei. -AJL
Q: Voiko siis omassa harjoitustyössä käyttää tasohyppelypeli-pohjaa? Ja vain muokata siinä valmiina olevaa koodia?
A: Kyllä. -AJL
Q: Kuinka suuri osuus tenttiä yrittävistä pääsee läpi.
A: En osaa sanoa mikä on keskiarvo, mutta vanhoista arvosteluraporteista voi tuota osuutta tarkastella tenttikohtaisesti. -AJL
Q: onko jypelillä tehty pelejä, jotka päässyt kuappaan?
A: Minulla ei ole tästä tietoa. Joskus muinaisuudessa Windows Phonelle noita julkaistiin onnistuneesti jonkun verran. -AJL
Q: Voiko tentin jälkeen tehdä tehtäviä jälkikäteen ja vaihtaa suoritustapa kakkoseen jos sai esimerkiksi hylätyn tentistä?
A: Tämä ei valitettavasti ole mahdollista. -AJL
Q: Minulla on aikaisempaa ohjelmointitaustaa, ja kurssi vaikuttaa helpolta. Kuinka haastava ohj2 on sellaiselle joka ei ole ennen työskennellyt oliopainotteisilla kielillä, vaikka luokka-ohjelmointi onkin tuttua?
A: Jos pystyt tekemään OHJ1 kurssin viimeisten neljän viikon tehtäviä 0-15 minuutissa riippuen tehtävän laajuudesta, niin silloin kurssi on helppo. OHJ2 kurssin haastavuus riippuu siitä, että kuinka syvällisesti, laajasti ja tiheästi pitkän ajan sisällä olet ohjelmoinut kielillä, joissa käytetään luokkia. Jos olet esimerkiksi tehnyt päivätyöksesi (tai esimerkiksi avoimen lähdekoodin projekteihin) vaativaa ohjelmointia parisen vuotta, OHJ2 on luultavasti todella helppo. -RR
Q: Millaista suoritus-/opiskelutahtia suosittelisitte kesällä opiskelevalle? Voinko tehdä tentin myöhemmin syksyllä, mikäli palautan kaikki tehtävät aikataulussa (4.8.2026)?
A: Riippuu omista tavoitteista, mutta suosittelen lähtemään liikkeelle siitä, että jakaa käytettävissä olevat tunnit käytettävissä oleville viikoille. Eli esimerkiksi 6*27.5/8 ~ 20 tuntia per viikko, missä 6 on opintopistemäärä, 27,5 on paljonko työtä oletettavasti yhteen opintopisteeseen menee ja 8 on käytettävissä olevien viikkojen lukumäärä. Tentin voi tehdä myös syksyllä -RR
Q: Miksi tämän kurssin dokumentissa ei ole samanlaista edistymisen seurantaa kuin muualla TIM:issä? Vai saako sen itse laitettua päälle jostakin?
A: Pistetilanteen näkee Eteneminen-sivulta. -AJL
Q: Miksi tämä tuntuu niin vaikealle?
A: Vaikeus voi johtua siitä, että ohjelmaa ajatessa ei arvailla mitään, vaan ohjelma tekee tasan sen mitä siihen on kirjoitettukin. Lisäksi toimintalogiikka on fyysisesti toteutettu tietyllä tavalla ja joudumme elämään näistä valinnoista johtuvista seurauksista. Toki tällä kurssilla käytetty C# on huomattavasti abstraktimpi kuin eri Assemblerit, jotka ovat hyvin lähellä rautatoteutusta. Ohjelmointiin pitää vain jokseenkin tottua. Toki aina kannattaa tulla kysymään mieltä askarruttavista kysymyksistä ohjauksiin, ettei jää liian pitkään asian kanssa jumiin. -RR
Q: Onko tenttiä mahdollista korottaa tai jos ei pääse lävitse vaihtaa sen jälkeen vielä suoritustapaan 2?
A: Molemmat ovat mahdollisia! -RR
Q: En tiedä vielä kaikkien ohjelmointi kurssien sisltäjä, mutta tuleeko jossain kohtaan esille koodin benchmarkkaaminen ja itse koodin optimointi?
A: Tällä hetkellä ei taida olla opetusohjelmassa kursseja, jotka erityisesti keskittyisivät ohjelmakoodin optimointiin. Asiaa kyllä sivutaan esimerkiksi algoritmit kursseilla. -RR
Q: Minulla ei ole aikaisempaa kokemusta ohjelmoinnista ja tehtävien suorittaminen tuntuu vaikealta. Käydäänkö tunneilla jatkossa TIM tehtävistä esimerkkejä?
A: Käydään. Joka maanantai on harjoitustehtävien palautustilaisuus, joissa mallivastaukset käydään läpi. Tilaisuudet nauhoitetaan, joten ne voi katsoa myös jälkikäteen.
Jos jokin tehtävä ei aukea, älä jää sen kanssa yksin: pääteohjauksissa ohjaajat katsovat koodia kanssasi. Se on tehokas tapa päästä eteenpäin, jos jumi iskee. -AJL
Q: Minkälaisia aiemmat ei peli- harjoitustyöt ovat olleet?
A: Valtaosa töistä on Jypeli-pelejä, joten ei-pelitöitä on vuosittain vain kourallinen. Ne ovat käytännössä aina olleet konsolisovelluksia: erilaisia rekistereitä ja kirjanpitoja, pieniä laskureita, tekstipohjaisia seikkailuja.
Jos sinulla on aihe mielessä, ota se puheeksi ohjaajan kanssa ajoissa, joka arvioi, onko työ laajuudeltaan sopiva. -AJL
Q: Riittäkö läppärini tehot tulevaisuuden kursseja ajatellen ? HP 240 G8, Intel Core i3-1005G1 ja 8GB ram.
A: Tehot ovat hiukan heikot kaikkien IT-kurssien opiskeluun, joten voi tehdä tiukkaa, jos käyttöjärjestelmänä on jokin iOS tai Windows. Arch pohjaisella linuxilla on mahdollista rakentaa kevyt käyttöjärjestelmä, jolloin nuokin riittävät mainiosti ainakin kaikkeen missä ei erityisesti tarvita näytönohjainta. Tämä toki vaatii jo jonkin verran aiheeseen tutustumista ns. "harrastepohjalta". Apua saa esimerkiksi Hacklabilta, jos tämä kuulostaa mielenkiintoiselta. Muutoin toivottavasti löydät jonkin alle 5v vanhan läppärin, jossa i7 tai vastaava prosessorina, 16gb ramia ja jonkin tasoinen näytönohjain. -RR
Q: Miksi kurssilla ei ole helppokäyttöistä dokumentaatiota, kaikista ominaisuuksista mitä tarvitsee? Tuntuu, että koko kurssia ei ole optimoitu yhtään ja jypeli wiki on huonosti tehty ja vaikeasti navigoitavissa. Osa lataus ohjeista on vanhentuneet (lisenssi). Taunon tekemä koodi antaa syntaxia. Ville:n ja Tauno:n opetusvideot näyttävät todella vanhoilta. Miksi on käytössä niin monta eri työkalua samaan asiaan (Scratch, Ville, Tauno)? Menee liikaa energiaa ja aikaa jokaisen opetteluun.
A: Jos tarkoitat kieleen liittyvää dokumentaatiota, niin sitä ei ole tarkoituksella, koska C# kieli päivittyy jatkuvasti ja täten ei olisi järkevää tehdä siitä omaa versiota.
Jypelin wiki on tehty aikoinaan hyvin pienillä resursseilla ja sitä voi lähteä todennäköisesti kehittämään opintopisteitä vastaan ainakin, jos innostusta löytyy. Mielestänikin se on hiukan sekava.
Jos lisenssillä tarkoitat rideriä, niin sitä pystyy kyllä käyttämään ilmaiseksikin.
Tauno ja Ville ovat vanhoja systeemeitä, joita ei tietääkseni enää kehitetä.
Tarkoituksena on varmaankin ollut, että samaa asiaa voitaisiin lähestyä eri tavoilla, jotta kullekin löytyisi se kenties helpoin tapa syventyä asiaan. Ei ole tarkoituskaan, että opettelisit kaikkia niitä käyttämään. -RR
Q: Onko jostain mahdollista saada tukiopetusta jos sellainen tarve tulee?
A: Tukea saa ohjauksista. Tervetuloa! -RR
Q: Tuleeko tentti koostumaan käytännön tehtävistä, teoriakysymyksistä vai molemmista?
A: Molemmista. -RR
Q: Kuka on kehittänyt JyPelin?
A: Jypeliä ovat aikojen saatossa kehittäneet monet henkilöt. Tarkempi historia löytyy suoraan githubista: https://github.com/Jypeli-JYU/Jypeli -RR
Q: Jos tekee kurssin etänä, mutta on tutkinto-opisklija, voiko harjoitustehtävien deadlinesta poiketa?
A: Etäopiskelu ei vaikuta deadlineihin. -RR
Q: Onko kurssin alussa pakko tehdä päätös siitä, että osallistuuko tenttiin vai ei?
A: Jos tekee vähintään riittävän määrän demoja joka viikko, niin asian voi päättää myös myöhemminkin -RR
Q: Millainen läpipääsyprosentti tällä kurssilla yleisesti on ollut? Kaverin puolesta kyselen :D
A: Vuosina 2016-2022 keskimäärin noin 70 % suoritti kurssin loppuun (lähde). Luku on laskettu vain syksyn toteutuksista, joten se on suuntaa antava. -AJL
Q: windows vai macOS vai Linux
A: Riippuu mitä koneella haluaa tehdä. Kernel tason anticheatilla varustettuja pelejä voi pelata aika heikosti muilla käyttöjärjestelmillä kuin Windowsilla. Musiikkia on kenties helpointa tehdä macOS:llä ja taas toisaalta jos haluaa kustomoida oman käyttiksensä, voi lähteä liikkeelle vaikkapa Archista tai sen johdannaisista. -RR
Q: Toimiiko kaikki käytetyt ohjelmat ARM-pohjaisella Windowsilla?
A: Pitäisi toimia. -RR
Q: Mitä koodi: public override void Begin () käytännössä tarkoittaa?
A: public = julkisuusmääre. Eli myös muut luokat voivat käyttää kyseistä metodia.
override = ylikirjoitetaan peritty vastaava metodi.
void = tämä metodi ei palauta mitään.
Begin = kyseisen metodin nimi.
() = parametrit, joita tarvittaisiin metodin käyttämiseen. Tässä niitä ei tarvita ja siksi sulut ovat tyhjät.
Begin taas liittyy käytettyyn jypeli kirjastoon, joka sanoo, että ajetaan tämän koodilohkon sisällä olevat asiat.
Ei haittaa, jos et vielä ymmärrä mitä kukin näistä tarkoittaa. Asiat selviävät kyllä kurssin edetessä. -RR
Q: Onko harjoitustehtävien yritysten määrällä merkitystä pisteytykseen:D
A: Ei, ellei erikseen näin sanota. -RR
Q: Täytyykö olla huolissaan, jos tehtävät tuntuvat hankalilta?
A: Ei. Käytännössä yliopistossa kuljet aina tietämyksesi rajoilla ja on tyypillistä, että vietät 99.9% ajastasi hämmennyksen vallassa. Suosittelen käyttämään tämän kurssin opiskeluun vähintään 15h per viikko keskittynyttä aikaa jaoteltuna tasaisesti viikolle ja varsinkin, jos aiot lukea ohjelmointia/IT-opintoja pidemmälle. -RR
Q: Jos tentin suorittaa etävalvonnassa (avoimen väylän opiskelija) niin selviääkö teamsin web versiolla vai suositellaanko siinä vaiheessa viimeistään windowsia :D t. Debian 13
A: https://ohjelmointi1.it.jyu.fi/tenttiohjeet.html#ohj1-tenttiohjeet katso tuolta tarkemmat ohjeet ja kokeile kuinka hyvin koneellasi pyörii kaikki vaadittavat asiat tentin ajan. -RR
Q: Onko tähdellä merkityt tehtävät ainoat ns pakolliset?
A: Kyllä, *-merkityt ovat ne tehtävät, jotka pitää tehdä.
Kannattaa silti huomata, että kaikki harjoitustehtävät kerryttävät hyvityspisteitä tenttiin, ei vain tähtitehtävät. Jokaisesta tehtäväkerrasta hyväksiluetaan enintään 8 pistettä. Tarkemmat säännöt: https://ohjelmointi1.it.jyu.fi/suorittaminen.html#harjoitusteht%C3%A4v%C3%A4t -AJL
Q: Vaikeutuvatko tehtävät huomattavasti kurssin aikana?
A: Kyllä, mutta tämä on kiinni siitä, että kuinka paljon teet töitä joka viikko kurssin asioiden eteen. Asiat rakentuvat jokseenkin edellisten asioiden päälle, joten jos käytät alussa liian vähän aikaa viikon asioiden opiskeluun, voi olla hyvin vaikeaa enää jossain vaiheessa ottaa asioita kiinni. Mutta tämäkin on riippuvaista siitä, mikä on oma taustasi asioiden suhteen. -RR
Q: Miten olla helpoiten sekoittamatta omassa päässään jo opittuja ohjelmointikieliä nyt opittavaan kieleen?
A: Tältä ei mielestäni voi täysin välttyä. Itselleni on ollut helpointa se, että pitäydyn tietyn kurssin aikana vain sillä kurssilla käytety(i)ssä kielessä. -RR
Q: Miten paljon tekoäly tulee vaikuttamaan ohjelmointiin tulevaisuudessa. Muuttuuko ohjelmointi esim pääosin siihen, että ai:n virheitä korjataan sen sijasta, että itse varsinaisesti kirjoitettaisiin koodia
A: Tulevaisuutta on vaikeaa ennustaa, mutta riippunee siitä, että millaisessa firmassa olet, mitä työtehtäviä teet ja mikä roolisi on. Keskimäärin kuitenkin todennäköisesti koodia tuotetaan aiempaa vähemmän käsin ja isohko osa ohjelmointia on tekoälyn tuotosten katselmointia. Pitää kuitenkin huomata, että käytännössä parhaiten tekoälyä pystyvät hyödyntämään ne, ketkä ennen tekoälyjä olivat muutenkin todella hyviä ohjelmoimaan. -RR
Q: Onko kurssilla osallistumispakkoa vai voiko sen suorittaa täysin etänä?
A: Voi suorittaa täysin etänä. -RR
Q: Paljonko pisteitä pitää olla, jotta saa lisäpisteitä tenttiin?
A: https://ohjelmointi1.it.jyu.fi/suorittaminen.html tuolta löytynee aina ajantasaisin tieto. -RR
Q: ville palveluun sisäänkirjautuminen ei onnistu ja sivusto näyttää shibsp::ConfigurationException. Onko mitään korvaavaa tehtävää, että saisi silti pisteet tehtävästä.
A: Jos et saa toimimaan, voit tehdä myös muita tehtäviä. Tehtäviä on tarkoituksella paljon, että voi valita niistä ne, jotka ovat itselle mieluismpia ja kehittävimpiä. -RR
Q: Onko demot katsottavissa jälkikäteen
A: Ovat. Linkki tallenteisiin löytyy kurssin etusivulta. -AJL
Q: Saako tentissä käyttää minkäänlaisia omia muistiinpanoja vai onko oletus, että kaiken osaa koodata tarvittaessa ulkomuistista?
A: https://ohjelmointi1.it.jyu.fi/tenttiohjeet.html#ohj1-tenttiohjeet löytyy ajantasaisin tieto. -RR
Q: Kuinka ohjelmointi asioita kannattaisi opetella kurssin ulkopuolella? Tekemällä omia projekteja tms? (+ manki vai pv)
A: Riippuu lähtötasosta, mutta lähtökohtaisesti suosittelisin opettelemaan ensin kaikki kurssin asiat ja edistämään harjoitustyötä samalla. -RR
Q: Miten pitää mielenkiinto ohjelmoinnissa (Honda vai Suzuki)
A: Mielestäni ohjelmoinnin paras puoli on se, että voi tehdä itselleen hyödyllisiä/mielenkiintoisia ohjelmia. -RR
Q: Onko jotain hyviä "pelillistäviä" paikkoja opetella C# ohjelmointia?
A: Jypeli on mielestäni yllättävän hyvä ohjelmoinnin opettelun kannalta, mutta yksinkertaisimpien asioiden näkyminen ruudulla ei kuitenkaan vaadi kovin paljoa. Voit esimerkiksi huvin vuoksi etsiä vaikkapa youtubesta videon, jossa näytetään mitä vaatii saada kolmio näkymään näytöllä, jos ei ole käytössä minkäänlaista graafista kirjastoa. -RR
Q: Top 5 parasta rider pluginia
A: En itse juurikaan käytä noita plugineja, joten top 5 -listaa en pysty antamaan. Tällä kurssilla suosittelen pitämään asennukset minimissä: jokainen lisäosa lisää aina yhden mahdollisen vikalähteen, ja ohjaajien on hankalampi auttaa jos ympäristö poikkeaa paljon perusasennuksesta. -AJL
Q: Minkälainen taustaympäristö on toivottu, mikäli tentin suorittaa etänä?
A: Ajantasaisin tieto löytyy täältä: https://ohjelmointi1.it.jyu.fi/tenttiohjeet.html#ohj1-tenttiohjeet -RR
Q: Voiko harjoitustyön tehdä yhdessä jonkun kurssilaisen kanssa (niin kuin luennon videosta näky että aiemmin oli ehkä tehty) vai tuleeko se tehdä yksin?
A: Voi tehdä parin kanssa. Teidän tulee kuitenkin varmistaa ohjaajalta, että työnne on riittävän haastava, jotta molemmille riittää mielekästä tekemistä. -RR
Q: Onko jossain jokin lista esimerkiksi Jypelin sisältämistä valmiista muodoista esimerkiksi Circle? Jos siis tehtävän toteuttaa selaimella.
A: Täältä löytyy ehkäpä parhaiten: https://tim.jyu.fi/view/kurssit/jypeli/wiki -RR
Q: Kuinka paljon aikaa harjoitustehtäviin per viikko on normaalia käyttää? Tuntuu että olen käyttänyt todella paljon aikaa.
A: Riippuu siitä, että teetkö kaikki tehtävät vai vain osan ja omasta lähtötasosta. Mutta voi helposti mennä yli 20h per viikko, jos pyrit tekemään kaikki itseäsi kiinnostavat tehtävät ja opettelemaan enemmän kuin mitä vähintäänkin vaaditaan. -RR
Q: Saako etätentissä käyttää muistiinpanosovellusta, esim. Obsidian?
A: Ajantasaisin tieto löytyy täältä: https://ohjelmointi1.it.jyu.fi/tenttiohjeet.html#ohj1-tenttiohjeet
Q: Mikä on nopein tapa oppia oikeasti hyväksi koodariksi?
A: Ohjelmoit joka päivä vähintään 1-2 tuntia päivässä siten, että jatkuvasti haastat itseäsi ja opettelet uutta. Suosittelen myös kyselemään paljon muilta ja etsimään kollegoita, joilla on sama asenne. Hacklab JKL ja ainejärjestöt ovat hyviä paikkoja löytää samalla tavalla asennoituneita henkilöitä. -RR
Q: Kaikki on vielä uutta ja tuntuu tosi hankalalta. Miten kannattaa lähestyä aihetta, jos ei edes ymmärrä, että mitä ei ymmärrä?
A: Tähän auttaa se, että lähdet yksitellen kirjoittamaan ylös itseäsi askarruttavia asioita ja lähdet selvittämään niitä joko itsenäisesti tai tulet esimerkiksi kysymysjoukon kanssa ohjauksiin. -RR
Q: Mikä on parasta ohjelmoinnissa?
A: Itsellä tässä on hiukan kausittaista vaihtelua. Joskus se on abstraktin konseptin saamista ohjelmalliseen muotoon. Joskus se on sitä, että saa omasta mielestään elegantin ratkaisun johonkin ongelmaan, jonka ratkaisuja on jollain tavalla rajoitettu (kielen tai vaikkapa paradigman suhteen). Itselle se tärkein ominaisuus on kuitenkin se, että kykenee luomaan asioita, jotka tekevät itselle hyödyllisiä asioita! -RR
Q: Mihin kaikkeen itse käytätte koodaamista arjessanne?
A: Yllättävän moneen pieneen. Työssä eniten kurssidatan käsittelyä: pisteiden koonteja, arvosteluraporttien ajoja ja tutkimusaineiston siivousta. Ne ovat useimmiten lyhyitä skriptejä, joita ei ole tarkoitettu kenenkään muun luettavaksi.
Kotona lähinnä sellaisten ärsyttävien toistuvien hommien automatisointia, joita ei jaksaisi tehdä käsin: tiedostojen uudelleennimeämistä, kuvien muunnoksia, varmuuskopioita.
Tämä on itse asiassa se ohjelmoinnin puoli, joka jää aloittelijalta helposti näkemättä: valtaosa hyödystä tulee pienistä ohjelmista, ei isoista. -AJL
Q: Katsotaanko alusta asti kuinka C# ohjelmia tehdään ja mitä kaikkea on pakollista sen toimimiseen, kun ei ole olleenkaan aikaisempaa kokemusta koodamisessa?
A: Katsotaan. Kurssi on suunniteltu sille oletukselle, ettei aiempaa kokemusta ole, ja ohjelman perusrakenne käydään läpi luennoilla ja monisteessa.
Kaikkea ei kuitenkaan selitetä heti ensimmäisellä viikolla. Osa riveistä on alussa vain "näin tämä kirjoitetaan", ja niiden merkitys avataan vasta myöhemmin. Se on tarkoituksellista, koska muuten ensimmäisellä luennolla pitäisi selittää puolet kielestä kerralla. -AJL
Q: Mikä on paras koodaamanne projekti?
A: Ei ehkä teknisesti hienoin, mutta merkittävin on ollut työ Ohjelmointi 1:n ympärillä: kurssin työkalut ja materiaalit, joita tuhannet opiskelijat ovat käyttäneet. Sellaista käyttäjämäärää harva harrasteprojekti saa. -AJL
Q: Osaatteko sanoa onko DAW:ien pitkäaikaisesta käytöstä mitään hyötyä ohjelmointia ajatellen?
A: Jonkin verran. Hyötyä on lähinnä työskentelytavoista: DAW:ssa on totuttu rakentamaan asioita ketjuista ja lohkoista, säätämään parametreja ja etsimään vikaa systemaattisesti (esim. miksi tästä kanavasta ei kuulu mitään). Se on aika lähellä debuggausta. Myös pitkien projektien järjestyksessä pitäminen on tuttua.
Syntaksi, tyypit tai algoritmit eivät kuitenkaan liity DAWiin oikein mitenkään. Jos aihe kiinnostaa, äänen ohjelmointi on kyllä oma hauska maailmansa. Esimerkiksi Sonic Pi tai SuperCollider ovat matalan kynnyksen aloituspaikkoja. -AJL
Q: Jos ei yleisesti ole kovin hyvä kielien opiskelussa niin nähdääkö se haasteena opetella myös koodauskieliä. Eli onko näillä yleisesti mitään korrelaatiota.
A: "Ohjelmointikieli" on tässä vähän harhaanjohtava sana. Kyse ei ole vieraan kielen opiskelusta: sanastoa on murto-osa ja kielioppi täysin säännönmukainen. Lähempänä ollaan loogista ajattelua ja ehkä jossain määrin matemaattista rakennetta. Huonot muistot kielten opiskelusta eivät siis ennusta tässä mitään. -AJL
Q: Onko sellainen toimiva koodi, joka ei ole optimoiduin mahdollinen (esim. lyhyin tai helposti muokattava), hyväksytty ratkaisu tehtävään, vaikka se tuottaa halutun lopputuloksen? Onko edes mahdollista saavuttaa tällainen tilanne?
A: Alussa kyllä. Ensimmäisillä viikoilla riittää hyvin, että ratkaisu toimii oikein -- ei ole tarpeen jäädä hiomaan sitä liikaa.
Myöhemmin tyylillä alkaa olla väliä. Harjoitustyössä on omat tyylivaatimuksensa, ja ne ovat osa tarkastettavia osa-alueita. Kurssin tyyliopas kannattaa siis ottaa haltuun hyvissä ajoin.
Toiseen kysymykseesi: sellaista tilaa, jossa koodi olisi "optimoiduin mahdollinen", ei käytännössä ole olemassa. Lyhyin, nopein ja helpoiten muokattava ovat eri asioita ja usein keskenään ristiriidassa. Selkeys kannattaa yleensä asettaa optimoinnin edelle: selkeää koodia on helppo nopeuttaa myöhemmin, ylinokkelaa koodia on vaikea ymmärtää edes itse kahden viikon päästä. -AJL
Q: Miten omaa ajattelua ja ongelmanratkaisukykyä voi kehittää niin, että osaisi ratkaista ohjelmoinnin ongelmia paremmin?
A: Kolme asiaa, jotka mielestäni toimivat:
- Kynä ja paperi ensin. Jos et osaa kertoa suomeksi vaihe vaiheelta mitä ohjelman pitää tehdä, sitä ei kannata vielä alkaa koodata. Yllättävän suuri osa ongelmista on oikeasti sitä, että ongelmaa ei ole vielä ymmärretty.
- Selitä ratkaisusi ääneen jollekulle -- tai vaikka kumiankalle. Virhe löytyy usein kesken selityksen.
- Ratko sellaisia ongelmia, jotka ovat itsellesi sopivalla vaikeustasolla. Liian helppo ei opeta mitään, liian vaikea lannistaa. Tällä kurssilla Bonus- ja Guru-tehtävät ovat juuri tästä syystä nimetty noin. Niiden onkin tarkoitus olla vähän haastavampia kuin perustehtävien.
Ja neljäntenä: kysy ohjaajilta tai selitä ongelma vaikka kaverillesi. Jumissa istuminen tuntitolkulla ei yleensä ole sinnikkyyttä vaan hukattua aikaa. -AJL
Q: Karkeasti arvioiden, miten suuria yksittäisiä koodipätkiä kurssilla tehdään arvioitavaksi? Jos miettii vaikka koodirivien määrissä?
A: Karkeasti: harjoitustehtävät ovat alussa 1-20 riviä ja kurssin loppupuolella ehkä hieman pidempiä. Harjoitustyö on eri kokoluokkaa, suuruusluokkaa 300 riviä.
Rivimäärä on kuitenkin huono mittari. Sama asia voidaan kirjoittaa kymmeneen tai kolmeenkymmeneen riviin, eikä pidempi versio ole automaattisesti huonompi -- eikä lyhyempi parempi. Aikaa vie ajattelu, ei kirjoittaminen. -AJL
Q: Auttavatko ohjelmointi pelit kuten esimerkiksi While True() ohjelmointi 1 kurssissa?
A: En ole tuota peliä pelannut, mutta joitain muita koodauspelejä kyllä. Monissa niistä harjoitellaan algoritmisen ajattelun periaatteita, eli vaikkapa toistoja ja ehtoja -- ihan samoja periaatteita, joita tälläkin kurssilla harjoitellaan.
C#:n kirjoittamista käsin ne eivät kuitenkaan korvaa, ja sitä tällä kurssilla tarvitaan. Pidä niitä siis mukavana lisänä tehtävien rinnalla. -AJL
Q: Teen parhaillaan G1-2. Tehtävää ja tuntuu että siinä tulee paljon konsepteja mitkä ovat uusia. Tiedän että haluan tehdä ohjelman joka laskee tasoa: if sqrt(x) = >1000 and = int, then print x mutta en osaa kirjoittaa sitä selkeään muotoon. Mistä tämmöisiä löytyy?
A: Gurutehtävät ovat niille, joilla on jo hieman kokemusta, tai jotka haluavat tutkia materiaalia ennakkoon ja tehdä hieman extraa. Eli jos G1-2 tuntuu siltä, että konsepteja tulee kerralla paljon, se on aivan odotettua -- eikä sitä ole pakko tehdä tässä vaiheessa.
Tuohon kyseiseen tehtävään tarvitsee silmukoita, jotka esitellään monisteessa.
Ja jos haluat silti painia sen kanssa, tule ihmeessä pääteohjaukseen -- katsotaan yhdessä läpi. -AJL
Q: Onko esimerkiksi Tauno ohjelman osaaminen oikeasti tärkeää?
A: Tauno itsessään ei ole tavoite. Se on väline, jolla harjoitellaan taulukoita, sijoituksia ja silmukoita konkreettisesti. Ne asiat ovat tärkeitä, Taunon käyttötaito ei. -AJL
Q: Menettääkö koodaamisen taito merkityksensä, kun tekoälyllä voidaan tehostaa ja tehdä myös nykyään paljon?
A: Ei mielestäni. Tekoälyn tuotos pitää osata lukea, arvioida ja korjata -- ja siihen tarvitaan juuri sitä osaamista, jota tällä kurssilla rakennetaan. Ne, jotka hyötyvät tekoälystä eniten, ovat käytännössä niitä, jotka osasivat ohjelmoida jo ennestään. Vibekoodaus on toki kiva juttu niille, jotka tarvitsevat koodia, jonka laadulla, turvallisuudella tai käytettävyydellä ei ole absoluuttista merkitystä. -AJL
Q: Miten saa JetBrains Rideriin potensseja ja miten ylipäätän toimii matemaattiset operaatiot, esim tarvitseeko jotain tiettyjä kometoja, että ne ylipäätään toimii vai?
A: Peruslaskutoimitukset toimivat C#:ssa sellaisenaan: + - * / ja jakojäännös %. Mitään erillistä ei tarvitse ottaa käyttöön.
Potenssiin ei ole omaa operaattoria (^ tarkoittaa C#:ssa aivan muuta), vaan käytetään Math-luokkaa:
Muut matemaattiset aliohjelmat löytyvät samasta luokasta: https://learn.microsoft.com/en-us/dotnet/api/system.math -AJL
Q: Onko Tauno tärkeä myöhemmin kurssilla?
A: Taunotehtäviä on lähinnä kurssin alkupuolella. Loppua kohden ne jäävät pois, kun samat asiat kirjoitetaan suoraan C#:lla. -AJL
Q: Kuinka tärkeä on matemaattisten taitojen ja ohjelmoinnin suhde? Selviääkö esim. kurssista perustaidoilla vai tarvitaanko jotakin muuta viereen?
A: Tällä kurssilla peruslaskutaito riittää hyvin. Yhteen-, vähennys-, kerto- ja jakolasku sekä koordinaatiston hahmottaminen ovat käytännössä se, mitä tarvitaan. Lukion pitkää matematiikkaa ei tarvita. -AJL
Q: Mihin asti kurssin suoritustapaa on mahdollista vaihtaa? Jos on valinnut suoritustavaksi tentin sisältävän vaihtoehdon, mutta ei pääse tentistä läpi tuleeko silloin kurssin arvosanaksi 1 olettaen, että kaikki muut vaaditut tehtävät on tehty vai joutuuko kurssin uusimaan?
A: Suoritustavan voi vaihtaa kurssin aikana, kunhan olet tehnyt riittävän määrän tehtäviä joka viikko -- päätöstä ei tarvitse lyödä lukkoon kurssin alussa.
Jos tentti menee hylsyksi mutta suoritustavan 2 vaatimukset täyttyvät, kurssin voi läpäistä niillä. -AJL
Q: Otetaanko harjoitustyön ääniefektit ja musiikit valmiina netistä, vai voiko nauhoittaa omia?
A: Kummin vain. Omia saa nauhoittaa, ja valmiitakin saa käyttää -- kunhan tarkistat, että lisenssi sallii käytön, ja merkitset lähteen dokumentaatioon. -AJL
Q: Onko kannattavaa proaktiivisesti tutkia koodikieli dokumentaatiota internetistä vai onko esim. dokumentaation tarkoitus auttaa, kun etsii spesifi ratkaisuja ongelmiin.
A: Molempia kannattaa tehdä, mutta käytännössä proaktiivinen selailu on se kohta, joka useimmilta jää tekemättä.
Täsmähaku ratkaisee yksittäisen ongelman, mutta ei kartuta kokonaiskuvaa. Selailu ilman tavoitetta rakentaa intuitiota siitä, mitä kirjastolla ylipäätään voi tehdä -- ja ilman sitä ei tiedä edes mitä hakea.
Käytännön vinkki: kun olet ratkaissut tehtävän, käy vielä vilkaisemassa sen luokan dokumentaatiosivu, jota käytit. Katso mitä muuta siellä on. Se vie muutaman minuutin ja siitä on hyötyä myöhemmin. -AJL
Q: Mitkä olisivat kolme kirjaa, jotka kannattaisi lukea kurssin aiheeseen liittyen?
A: Yksi riittää tässä vaiheessa: Rob Milesin C# Yellow Book on ihan hyvä, hauskasti kirjoitettu ja ilmainen.
En lähtisi rakentamaan kolmen kirjan lukulistaa nyt. Ohjelmointia ei opi pelkästään lukemalla kirjoja, ja aloittelijalle kirjojen neuvot jäävät helposti abstrakteiksi. Kun perusteet ovat hallussa, klassikot kuten The Pragmatic Programmer ja Clean Code alkavat oikeasti puhutella -- sitä ennen ne ovat lähinnä hyvää tarkoittavia lauseita. -AJL
Q: Onko VILLE tärkeä myöhemmin?
A: ViLLE on tällä kurssilla yksi tehtävätyyppi muiden joukossa. Myöhemmillä kursseilla sitä ei tietääkseni käytetä. -AJL
Q: Jos käy kurssin avoimen yliopiston kautta onko mahdollista saada Rideriin Non-commercial lisenssi ilman opiskelija sähköpostia?
A: Kyllä on. Non-commercial-lisenssi ei edellytä opiskelijastatusta eikä oppilaitoksen sähköpostia. Aktivointiohjeet löytyvät Työkalut-sivulta Rider-asennusohjeiden kohdalta. -AJL
Q: Löytyykö mistään esim. C# "sanakirjaa" mistä näkisin koodauksessa käytettäviä termejä ja sen mitä ne oikein tekevät?
A: Tuo lista on käytännössä kielen spesifikaatio, mutta sitä ei ole oikein mielekästä lukea tässä vaiheessa. Jos haluat, voit googlettaa sen. Termejä selitetään kurssin aikana pikku hiljaa sitä mukaa kun niitä tarvitaan. -AJL
Q: Jo ensimmäisen viikon aikana on todella paljon sisäistettävää ja materiaalia tuntuu tulevan joka klikkauksella vaan lisää vastaan. Miten kaiken pystyy sisäistämään ja kuinka kaikki tehtävät ennättää tekemään, kun nyt jo yli 15 h käyttäneenä ei vaan mitenkään mene kaikki jakeluun, saatika että ennättäisi kaikkia tehtävieä tekemään ja sisäistämään.
A: Ensinnäkin: kaikkia tehtäviä ei tarvitse tehdä. Pakollisia ovat *-merkityt. Tehtäviä on tarkoituksella paljon, jotta jokainen voi valita niistä itselleen sopivat.
Asiat toistuvat kurssin mittaan useaan kertaan, ja moni asia kirkastuu vasta myöhemmin.
Jos 15 tuntia meni eivätkä tähtitehtävät vielä valmistuneet, se on merkki siitä, että kannattaa tulla pääteohjaukseen. -AJL
Q: Voiko edellisten viikkojen tehtäviä palata tekemään vielä myöhemmin, jos nyt ei aika ja ymmärrys riittänyt kaikkiin?
A: Tehtäviä voi tehdä myöhemminkin, mutta takarajan jälkeen palautetut eivät enää kerrytä tenttiin hyväksiluettavia pisteitä. Oppimisen kannalta ne kannattaa silti tehdä. -AJL
Q: Mikä on realistisesti nopein aikataulu, jossa kurssin voi suorittaa?
A: En ole varma ymmärsinkö kysymyksen oikein, mutta tehtäviä voi tehdä etukäteen, vaikka kaikki kerralla. Sitten jää enää harjoitustyö, debuggausnäyte ja tentti. -AJL
Q: Kuinka monta hyvityspistettä voi aina harjoituksista saada maksimissaan?
A: Jokaisesta tehtäväkerrasta hyväksiluetaan enintään 8 pistettä, ja hyvityspisteitä kertyy 60 harjoituspisteeseen asti. Ajantasainen taulukko löytyy täältä: https://ohjelmointi1.it.jyu.fi/suorittaminen.html -AJL
Q: Miksi "näytä Tauno" ei tuo esiin mitään? Valkoinen laatikko vain suurenee, mutta pysyy tyhjänä.
A: Yleisimmät syyt: selaimen lisäosa (mainosten- tai seurannanesto) estää Taunon lataamisen, tai sivu on ollut auki niin kauan että istunto on vanhentunut. Kokeile ensin sivun uudelleenlatausta (Ctrl / Cmd + F5), sitten toista selainta tai yksityistä ikkunaa.
Jos ei auta, laita viestiä osoitteeseen ohj1-opet@jyu.onmicrosoft.com ja kerro mitä selainta ja käyttöjärjestelmää käytät. -AJL
Q: Kurssin alku tuntui kun olisi tiputettu jääkylmään veteen kuumasta viidakosta. Ohjelmointi tuntuu todella mielenkiintoiselta, mutta välillä tuntuu ettei ymmärrys meinaa riittää. Selviänkö kurssista?
A: Hyvä vertauskuva. Kyllä, mitä luultavimmin selviät. Se tunne, että ymmärrys ei meinaa riittää, ei ole tällä alalla väliaikainen vaihe vaan aika pysyvä olotila, valitettavasti. Myös kokeneet ohjelmoijat viettävät suuren osan ajastaan asioiden parissa, joita eivät vielä ymmärrä. Ero on siinä, että he ovat tottuneet siihen eivätkä tulkitse sitä merkiksi omasta kyvyttömyydestään.
Käytännössä ratkaisee säännöllinen tehtävien tekeminen ja se, ettet jää yksin jumiin. Tule ohjauksiin -- se on nopein tapa päästä eteenpäin. -AJL
Q: Miksi harjoitustehtävien järjestysnumerointi on sekava?
A: Ihan aiheellinen huomio. Pääperiaate on, että kirjain kertoo tehtävän tyypin ja numero sen järjestyksen tehtäväkerran sisällä; tähti * merkitsee pakollista.
Jos osaat nimetä kohdat, joissa numerointi menee oikeasti solmuun, laita viestiä (ohj1-opet@jyu.onmicrosoft.com). Näitä korjataan sitten palautteen perusteella. -AJL
Q: Mitä tarkoitetaan kun puhutaan, että esim. jonkun ohjelmiston koodi on "vanhaa", minkä takia ohjelmistoon on hankalaa tehdä muutoksia?
A: Kyse ei oikeastaan ole koodin iästä vaan siitä, ettei sen rakenne tue enää haluttuja muutoksia. Ohjelma on aikoinaan suunniteltu tiettyjen oletusten varaan, ja kun oletukset eivät enää päde, jokainen muutos vaatii koskemaan moneen paikkaan kerralla.
Kuvitteellinen esimerkki: järjestelmä on tehty oletuksella, että asiakkaalla on tasan yksi osoite. Kun asiakkaille pitäisikin sallia monta osoitetta, muutos ei koske yhtä kohtaa vaan kaikkia niitä satoja paikkoja, joissa osoitetta käsitellään.
Tästä käytetään usein nimitystä tekninen velka. Sitä kertyy jokaiseen ohjelmistoon, ja sen hoitaminen on osa normaalia työtä. -AJL
Q: Kuinka tärkeää on hyvä kommentointi harjoitustyössä? Arvioidaanko sitä erikseen?
A: Tärkeää, ja kyllä -- dokumentointi ja koodin selkeys ovat omia tarkastettavia osa-alueitaan.
Syy ei ole muodollisuus. Harjoitustyö on ensimmäinen ohjelma, jota kirjoitat useiden viikkojen ajan, ja huomaat kyllä itse, että kolmen viikon takainen oma koodi on yllättävän sekavaa luettavaa ilman kommentteja ja dokumentaatiota. Dokumentointi on ensisijaisesti palvelus itselle, vasta toissijaisesti tarkastajalle. -AJL
Q: Mitä ohjelmointiaiheisia lehtiä, podcasteja tai muuta vastaavaa olisi hyvä seurata opintojen aikana?
A: Pakko myöntää, etten itse seuraa seuraa lehtiä tai podcasteja. Seuraan lähinnä kielten ja työkalujen kehittäjien omia blogeja, dokumentaatioita ja vastaavia. Toki silloin tällöin tulee katsottua YouTubesta erilaisia kehittäjien konferenssiesityksiä.
Tähän saa muutkin kommentoida, jos on löytänyt jonkun hyvän. -AJL
Tämä riippuu siitä, että mihin IT-alan osa-alueeseen haluaa erikoistua. Erikoistuminen on siis käytännöss pakollista josssain vaiheeessa ja mieluiten joku ajatus tästä kannattaa muodostaa jo ennen kandin loppua. Suosittelen itse etsimään asiasta tietoa itsenäisesti, mutta alkuun pääsee vaikkapa seurailemalla TIVI:ä ja esimerkiksi youtubesta voi katsella vaikkapa Computerphile -nimistä kanavaa. Laajoja kielimalleja kannattaa hyödyntää myöskin löytämään itselle mielenkiintoisia lehtiä, blogeja podcasteja jne. Nykyään esimerkiksi podcasteja löytyy hyvin erikoistuneilta IT-alan osa-alueilta, joten niiden kaikkien nimeäminen tässä ei olisi edes järkevää. Jyväskylän kirjastojen kautta voi päästä myöskin käsiksi moneen maksulliseen mediaan käsiksi. -RR
Q: Missä yhteyksissä C# kieltä käytetään eniten?
A: Eniten kolmessa paikassa: yritysten taustajärjestelmissä ja web-palvelimissa (ASP.NET), peleissä Unity-moottorin kautta, sekä Windows-työpöytäsovelluksissa. Lisäksi mobiilisovelluksia tehdään MAUI:lla ja pilvipalveluita Azuren kanssa. -AJL
Q: Miksi Ville on niin vanhanaikainen?
A: Kyllä Villeä edelleen kehitetään, joten ehkä tämä on mielipidekysymys. Tehtävätyyppinä se toimii silti: nopeaa toistoa peruskonsepteista ja automaattinen tarkastus. -AJL
Q: Miksi tehtävänanto joissakin tapauksissa on todella hankalasti selitetty, vaikka itse tehtävä ei ole esimerkiksi kovin vaikea?
A: Ihan aiheellinen palaute. Jos osaat nimetä tehtävät, joissa muotoilu meni pieleen, laita viestiä (ohj1-opet@jyu.onmicrosoft.com). Näitä korjataan palautteen perusteella. Tarkoitus ei ole se, että tehtävä johtaa tarkoituksella harhaan, tai että monimutkaisuus on itsetarkoitus. -AJL
Q: Voiko Tauno tehtäviä tehdä puhtaasti C#:lla koodaten vai tulisiko Taunot pitää Taunoina?
A: Taunon pointti on visualisoida koodia. Jos et tarvitse visualisointeja, tai osaat jo asian, voit kirjoittaa tehtävät ihan C#:lla. -AJL
Q: Kuinka paljon ohjelmointia pitäisi harjoitella viikossa, jotta kurssilla pysyy hyvin mukana?
A: Kurssi on 6 op eli noin 160 tuntia, mikä tarkoittaa keskimäärin 14-15 tuntia viikossa ilman aiempaa ohjelmointitaustaa. Alkuviikot ovat tyypillisesti raskaimpia, koska silloin opetellaan myös työkalut.
Tärkeämpää kuin tuntimäärä on kuitenkin jaksotus. Kaksi tuntia viitenä päivänä tuottaa selvästi paremman tuloksen kuin kymmenen tuntia sunnuntaina. Ohjelmointi on taito, ja taidot kehittyvät toistolla ja väliin jäävällä ajalla. -AJL
Q: Miten C#-kielessä voidaan ohjelmoida/ratkaista matematiikkaa
A: Riippuu vähän siitä, mitä kysyjä hakee.
Jos kyse on tavallisista laskutoimituksista, ne kirjoitetaan suoraan: + - * / ja jakojäännös %. Muut löytyvät Math-luokasta:
Jos taas kysymys koskee vaativampaa matematiikkaa -- matriiseja, yhtälöryhmiä, tilastollisia menetelmiä -- niihin käytetään valmiita kirjastoja, esimerkiksi Math.NET Numerics. Tällä kurssilla niitä ei kuitenkaan tarvita.
Koko Math-listaus: https://learn.microsoft.com/en-us/dotnet/api/system.math -AJL
Q: Jos on sitä ikäluokkaa, että on tehnyt kaikki kokeet tähän mennessä kynällä ja paperilla, niin olisiko vinkkejä, miten valmistautua tenttimään ekaa kertaa koneen kanssa jos tämän kurssin tentti on ekana vastassa?
A: Tentti tehdään TIMissä, joten kurssin mittaan sen käyttö tulee kyllä tutuksi -- harjoitustehtäviä tehdään samassa ympäristössä koko syksyn ajan. Kynää ja paperia saa myös olla tentissä mukana. Kannattaa varmistaa että netti toimii ja että akku riittää (tarvittaessa sähköjohto mukaan).-AJL
Q: Striimeissä kuva muuttuu mustaksi aina kun tekee jotain muutoksia tai poistuu rideristä ja esimerkiksi kun tulee livekuva luokasta näkyviin ääni katoaa striimistä. Jotain fixiä niihin
A: Huomasin tämän, ja korjaan ne myöhempiin striimeihin. Olen pitänyt viimeiset 5 vuotta luentoja vain etänä, joten saliluennointi vaatii taas pikkusen harjoittelua. -AJL
Q: Miksi alustalla lukee, etten ole saanut yhtään tenttiin hyvitettävää pistettä, vaikka olen saanut 8 pistettä harjoitustehtävistä?
A: Nyt pisteet pitäisi näkyä. Laita sähköpostia (ohj1-opet@jyu.onmicrosoft.com) jos ei näy. -AJL
Q: Onko C# kieli tulevaisuudessakin hyödyllinen?
A: Ehdottomasti. Sekä siitä näkökulmasta, että törmäät todennäköisesti C#:iin jatkossakin, mutta myös siitä, että perusasiat toimivat varsin samantapaisilla ideoilla muissakin ohjelmointikielissä. -AJL
C# käytetään esimerkiksi Microsoft Azuressa, .NET:issä ja esimerkiksi Unityssä. Mikään mainituista eivät ole tällä hetkellä menettämässä erityisesti suosiotaan. -RR
Q: Milloin C# kieli keksittiin?
A: C# 1.0 julkaistiin vuonna 2002. Kieli on noista päivistä kuitenkin muuttunut todella paljon. Tällä kurssilla käytetään pääosin C# 6.0:n ideoita (v. 2015), ja paikoitellen joitain uudempiakin ominaisuuksia. -AJL
Q: onko tämä vaikeaa
A: -
Q: Opetetaanko kurssilla esoteerisia ohjelmointikieliä?
A: -
Q: Kuinka paljon pitsan syömisestä voi olla hyötyä ohjelmoinnissa? Kummasta on enemmän hyötyä pitsan syömisestä vai 19h yöunista?
A: -
Q: Pystyttekö näkemään mitä teemme tehtävissä?
A: -
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.