Kysymyksiä ja vastauksia
Tähän on koottu useimmin esitettyjä opiskelijoiden kysymyksiä koskien Ohjelmointi 1 -kurssia ja ohjelmointia myös yleisemmin.
Vastaajien joukossa on paitsi kurssin luennoijia myös muuta tietotekniikan laitoksen henkilökuntaa.
Vastaajien nimikirjaimet
Vastaajina ovat yleensä kurssin vastuuopettajat ja tuntiopettajat, vaikka toisinaan vastaamassa voi olla myös muuta henkilökuntaa. Alla on listattu vastaajien nimikirjaimet:
- DZ: Denis Zhidkikh (Ohj1 vastuuopettaja)
- SS: Sami Sarsa (Ohj1 vastuuopettaja)
- AJL: Antti-Jussi Lakanen (Ohj1 vastuuopettaja)
- RR: Rauli Ruokokoski (Ohj1 tuntiopettaja, syksy 2025)
- KL: Konsta Lahtinen (Ohj1 tuntiopettaja, syksy 2025)
- KP: Karel Parkkola (Ohj1 tuntiopettaja, syksy 2025)
Kysymykset
(Lisää uusi kysymys sivun lopussa painamalla Lisää kysymys -painiketta.)
Kurssin suorittamisesta
Q: Mistä löytää kurssin luentojen tallenteet?
Q: Onko kurssilla läsnäoloon minkälainen käytäntö? Mitä pitää ottaa huomioon, jos katsoo luennon jälkeen tallenteen luennolle osallistumisen sijaan?
A: Käytännössä kurssi voi suorittaa etänä. Luentoja voi katsoa livenä, samoin palautustilaisuudet (ks. luennot-sivu). Suosittelemme tulemaan paikan päälle luennoille parista syystä: (1) paikan päällä on helppoa kysyä kysymyksiä ja (2) luennoitsijalle on kivempi, että ei tarvi puhua vain itselle ☺️. Mutta ei nyt ristiinnaulita, että katsoo tallenteet. Luentojen ja palautustilaisuuksien tallenteet julkaistaan luennot-sivulla. -DZ
Q: Voiko seuraavien viikkojen tehtäviä jo tehdä jos tämän viikon tuntuivat liian helpoilta?
A: Voi tietenkin tehdä, mutta kannattaa ottaa huomioon, että harjoitustehtävät voivat vielä muuttua jolloin joudut mahdollisesti tekemään tehtäviä uudestaan, varsinkin jos teet tehtäviä monta viikkoa pidemmälle. -KL
Q: käydäänkö tehtäviä yhdessä koulussa läpi
A: Joka maanantai on 2 kpl harjoitustehtävien palautustilaisuutta (klo 14-16 ja klo 16-18), jossa katsotaan mallivastaukset läpi. Tilaisuus nauhoitetaan; tutkinto-opiskelijoille ja lukiolaisille julkaistaan koko nauhoite. Palautustilaisuuden pätkiä lisätään myös suoraan mallivastauksiin TIMiin.
Q: Syvennytäänkö missään materiaalissa syvemmin Taunoon, jos sen ideasta ei saanut kiinni?
A: Katso ensisijaisesti taunon johdatus täältä:
https://tim.jyu.fi/view/kurssit/tie/itkp102/ohjeet/tauno
Taunoa tutkitaan tarkemmin aina harjoitustehtävien palautustilaisuuksissa. Katsotaan samalla sen viikon Taunotehtävää tarkemmin myös tiistain luennoilla.
Q: Miten harjoitustyö arvioidaan ja miten se vaikuttaa kurssiarvosanaan?
A: Harjoitustyö käytännössä arvioidaan tasolla hyväksytty/hylätty. Hyväksytty suoritus täyttää kaikki tarkastettavat osa-alueet. Arviointi tehdään varsinaisesti viimeisen palautuksen (ns. HT3-vaihe) yhteydessä. Hylätty työ voi täydentää kunnes se on hyväksytty. Arvosanaan harjoitustyöllä ei ole vaikutusta. -DZ
Q: Tuleeko ohjaajilta saadut vinkit huomioida koodin dokumentoinnissa? Sorry, tein kysymyksen epähuomiossa lisäten sen "Add paragraph" -kohtaan.
A: Riippuu varmaan kontekstista. Jos ohjaaja neuvoo jotakin harjoitustehtävissä, niin voihan hänen huomionsa laittaa itselleen talteen muistoksi koodiin kirjoittamalla siitä kommentti. Mutta arvioinnin kannalta ei rokoteta pisteitä eikä katsota vilpiksi, jos tekee kuten ohjaaja ehdottaa mutta ei kirjoita sitä ylös dokumentaatioon tai kommentteihin. -DZ
Q: Tarviiko tehdä kaikki ville-tehtäviä?
A: Kaikki pakollisten tehtävien (eli *-merkittyjen tehtävien) jälkeiset tehtävät ovat vapaaehtoisia ja kerryttävät bonuspisteitä tenttiin. Saa siis tehdä juuri niitä tehtäviä joista hyötyy itse eniten ja/tai tuntuvat itselle mukavimmilta -RR
Ohjelmoinnin opiskelusta
Q: Kuinka vahva pohja koodaamiseen tulee Ohjelmointi 1 kurssilta?
A: Ohjelmointi 1 kurssilta saa todella hyvän pohjan ainakin omasta mielestäni. Peruskäsitteet ja rakenteet, kuten tietotyypit, muuttujat, silmukat, taulukot ja aliohjelmat oppii läpikohtaisesti. Itse pystyin Ohj1-kurssin jälkeen kirjoittelemaan jo monenlaisia eri ohjelmia itsekseni. Ohj2-kurssilla ruvetaan sitten käymään vähän syvemmin läpi olio-ohjelmointia sekä ns "aidon ohjelman" tuottamista. -KL
Q: Kannattaako kirjoittaa itselleen erikseen ohjelmointisanastoa helpottamaan itse käytännön työtä?
A: Kyllä kannattaa. Samaan yhteyteen on hyvä kirjoittaa myös lyhyesti, että mitä sana tarkoittaa. Sanaston ymmärtäminen auttaa esimerkiksi tehtävien hahmottamisessa ja kun kommunikoit tekemisisistäsi muille. -RR
Kannatan. Tällä kurssilla on paljon sanastoa, ja on hyvä pitää itselleen kirjaa niiden merkityksestä kurssin edetessä. Luentomonisteessa on liite erilaisista kurssilla vastaan tulevista sanoista: Liite: Sanasto. Näitä kaikki pyritään kurssin edetessä selittää jatkuvasti -DZ
Q: Mitkä ovat hyödyllisimpiä pikakomentoja tällä kurssilla?
A: Jos kysymys on Riderista, niin kannattaa katsoa listan kaikista näppäinkomennoista. Kyseinen lista olettaa, että sinulla on käytössä Visual Studio tai IntelliJ IDEA -näppäinasettelu (näppäinasettelun saa vaihdettua Riderin asetuksista).
Siitä listasta IMO hyödyllisempiä ominaisuuksia ovat:
- Search everywhere: avaa hakuboksin, jonka avulla voi hakea mikä tahansa Rider-toiminto, hypätä mihin tahansa aliohjelmaan tai luokkaan sen nimellä. Nimensä mukaisesti "hakee" kaikki mahdolliset asiat. Esim jos ei muista, millä komennolla formatoi tekstiä, voi painaa
Shift + 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: -
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: -
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: -
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: -
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.