Tommi Saksa
Mikä on paras ohjelmointikieli ensimmäiseksi ohjelmointikieleksi? Tämä on tunteita herättävä ikuisuuskysymys etenkin ohjelmoijien, opettajien ja ohjelmointia opiskelevien keskuudessa. Asiaa voidaan tarkastella hyvin monelta kantilta, kuten mikä on ohjelmoinnin opiskelun tavoite, kielen syntaksin eli kirjoitusasun helppous, oppijan ikä tai ohjelmointikielen yleisyys työelämässä. Tässä artikkelissa esitän oman vastaukseni perusteluineen, pohjautuen muun muassa kokemukseeni sivutoimisena ohjelmoijana, tietojenkäsittelyn koulutuksen ohjelmoinnin opettajana ja ala- ja yläkoulujen ohjelmointiopettajien kouluttajana.
Kaikissa ohjelmointikielissä toistuvat samat rakenteet, kuten peräkkäis-, ehto- ja toistorakenne. Samoin ohjelmoinnille tyypilliset käsitteet, kuten muuttujat ja funktiot, toimivat hyvin samalla tapaa kaikissa ohjelmointikielissä. Lisäksi ohjelmoinnillinen ajattelu, joka on yksi keskeisimmistä syistä, miksi ohjelmointi tuli osaksi ala- ja yläkoulujen opetussuunnitelmia vuonna 2016, kehittyy riippumatta, millä ohjelmointikielellä opiskelee. Edellä mainituista syistä voisikin sanoa, että on jokseenkin sama, millä ohjelmointikielellä opiskelun aloittaa.
Perusrakenteiden lisäksi oma alueensa on olio-ohjelmointi, joka on yleisin ohjelmointiparadigma (Kodichath, 2019). Olio-ohjelmointia pidetään vaikeasti opittavana asiana (Biju, 2013). Vaikeutta lisää se, että vaikka olio-ohjelmoinnin käsitteet ovat pääosin samat ohjelmointikielestä riippumatta, syntaksitasolla erot voivat olla suuriakin eri ohjelmointikielien välillä. Jos tavoite on vain oppia ohjelmoinnin perusrakenteet ja ohjelmoinnillista ajattelua, ei olio-ohjelmoinnin opiskelu ole välttämätöntä. Tällöin usein ohjelmoidaan proseduraalista ohjelmointiparadigmaa käyttäen, joka on lähes yhtä yleinen kuin olio-ohjelmointi.
Alakouluissa visuaalinen ohjelmointi Scratchiä käyttäen
Scratch on ilmainen ja laajasti käytetty selainpohjainen ohjelmointiympäristö, jossa ohjelmointi tapahtuu kirjoittamisen sijaan käyttämällä visuaalisia toimintolohkoja. Tämä visualisoi ohjelman rakenteen ja samalla vältytään kirjoitusvirheiltä (kuva 1). Oppilaitoskäytössä Scratch on erinomainen valinta myös siksi, että se tallentaa tehdyn projektin käyttäjän tilille pilveen, mahdollistaa projektien helpon jakamisen ja ohjelmointiympäristö on käännetty useille eri kielille. Scratchillä voidaan tehdä yksinkertaisia animaatioita ja pelejä.
Alakouluissa käytetään paljon Scratchiä mutta myös Code.org -sivuston tarjoamia ohjelmointilogiikkaa harjaannuttavia pelimäisiä ohjelmointitehtäviä. Mielestäni Scratch mahdollistaa paremmin syvällisen oppimisen, koska sillä ohjelmoinnin harjoittelu vaatii enemmän luovuutta ja tiedon soveltamista. Näin myös ohjelmoinnin opiskelu on varmasti motivoivampaa.
Yläkouluissa ja lukioissa Python – haastajana Corona SDK
Python on tällä hetkellä yksi käytetyimmistä ohjelmointikielistä niin opiskelussa kuin työelämässä (TIOBE Software BV, 2020). Sillä on etenkin vahva jalansija ohjelmistoautomatiikassa, datatieteissä ja koneoppimisessa (Paul, 2018). Pythonia pidetään yleisesti helposti opittavana ohjelmointikielenä sen yksinkertaisen syntaksin vuoksi. Tosin, jos on aikaisemmin opiskellut muita yleisiä ohjelmointikieliä kuten Javaa, C#:ia tai PHP:tä, Pythonin syntaksi voikin tuntua vaikeasti hahmotettavalta. Tämä johtuu siitä, että edellä listattujen kielien syntaksi on hyvin samankaltaista (kuva 2). Täten, jos osaa C#:ia, siirtyminen vaikka PHP-kieleen on helpompaa. Pythonista muihin yleisiin kieliin siirtyminen ei ole niin helppoa.
Pythonin opiskelu sujuu helposti ilman ohjelmistoasennuksia erilaisia palveluita käyttäen (esimerkiksi repl.it). Näissä ohjelmakoodin kirjoitus ja ohjelman testaus tehdään internetselaimella. Opiskelijan ohjelmakoodit tallentuvat kätevästi pilveen. Opetuksessa suositun ohjelmakoodia visualisoivan Turtlen käyttö onnistuu myös.
Corona SDK on oikea mobiilipelikehitysympäristö. Sen kielenä toimii Lua, joka on syntaksiltaan ja rakenteeltaan hiukan kuin Javan ja Pythonin yhdistelmä. Lua-ohjelmointikieltä käytetään hyvinkin laajasti erilaisissa ympyröissä, mutta se ei ole kielenä niin yleisesti käytetty (TIOBE Software BV, 2020). Pelikehityksen lisäksi esimerkiksi Adobe Lightroom -ohjelman lisäosia ohjelmoidaan Lualla (Adobe, 2019). Corona SDK pitää asentaa Windows- tai Mac-koneelle, mikä saattaa olla ongelma joissain oppilaitoksissa.
Coronan SDK:lla on helppo luoda esimerkiksi grafiikkaa, vuorovaikutteisia toimintoja ja animaatiota. Corona SDK:n valttikortti on ympäristön motivoivuus. Sillä on helppo harjoitella ohjelmoinnin perusteita tehden yksinkertaisia visuaalisia ohjelmia samalla tiedostaen, että Corona SDK:lla voi toteuttaa oikean mobiilipelinkin (kuva 3). Ohjelmakoodi kirjoitetaan normaalilla tekstieditorilla ja ohjelman voi heti testata aidon tuntuisesti vaikkapa iPhone 11:a muistuttavalla simulaattorilla. Corona SDK on tällä hetkellä kaupallinen tuote, mutta se tulee muuttumaan avoimen lähdekoodin projektiksi vuonna 2020 (Miracle, 2020). Tämä muutos saattaa vaikuttaa siihen, kuinka kauan Corona SDK tuotteena ja palveluna on ylipäätään käytettävissä.
Esi-, ala- ja yläkouluissa käytetyt ohjelmointikielet
Halusin kartoittaa, mitä ohjelmointikieliä käytännössä esi-, ala- ja yläkouluissa käytetään ohjelmoinnin opetuksessa. Perusopetuksen opetussuunnitelma ei ota tiukasti kantaa käytettäviin ohjelmointikieliin (Opetushallitus, 2014). Täten voidaan olettaa, että ohjelmointikielen valinta perustunee opettajan tai koulun mieltymyksiin.
Kysely toteutettiin pyytämällä Facebookin ”Tieto- ja viestintätekniikka opetuksessa” -ryhmän jäseniä vastaamaan verkkokyselyyn helmikuussa 2020. Ryhmässä jäseniä on lähes 20 000. Vastauksia saatiin yhteensä 65. Tuloksia voidaan pitää suuntaa-antavina toteutustavasta johtuen, koska esimerkiksi nyt samasta oppilaitoksesta saattoi tulla useampia päällekkäisiä vastauksia.
Alla on eritelty vastaukset ala- ja yläkouluittain, koska muista kouluista saatiin vain muutamia yksittäisiä vastauksia. Alakouluissa Scratch on selkeästi käytetyin ympäristö ohjelmoinnin opiskeluun (kuvio 1). Erilaisia ohjelmoitavia robotteja käytetään myös paljon.
Yläkouluissa kielien määrä on laajempi. Käytetyin kieli oli kuitenkin selvästi Python (kuvio 2). Kyselyn tulokset ovat pitkälti samansuuntaiset kuin esittämäni hyvät vaihtoehdot.
Oppilaitokset, joissa ohjelmointi on keskeinen oppimissisältö
Esimerkiksi toisen asteen datanomikoulutuksissa, ammattikorkeakoulujen tietojenkäsittelyn koulutuksissa ja alan yliopisto-opinnoissa tilanne on toinen. Näkisin, että ensimmäinen ohjelmointikielivalinta riippuu siitä, mikä on opintojen tavoitteiden ja sisältöjen kannalta tärkeää. Käytännössä hyviä vaihtoehtoja ovat esimerkiksi C#, Java tai Python.
Tätä tukee myös kuviossa 3 esitetty tulos, jossa on listattu ohjelmointikieli, jota ammattikorkeakoulujen tietojenkäsittelyn koulutuksissa käytetään ohjelmoinnin opiskelussa ensimmäisenä kielenä. Kysely toteutettiin helmikuussa 2020. Vastauksia saatiin yhtä lukuun ottamatta kaikista ammattikorkeakouluista, jotka tarjoavat tietojenkäsittelyn koulutusta. JavaScriptin yleisyys oli hiukan yllättävä. Tämä mahdollisesti selittyy sillä, jos opintojen alussa tehdään www-sivuja ja JavaScriptin avulla luodaan niihin dynaamisia toimintoja.
Hämeen ammattikorkeakoulun tietojenkäsittelyn koulutuksessa olemme käyttäneet ensimmäisenä ohjelmointikielenä C#:ia. Tämä siksi, että C#:sta on helppo siirtyä muihin yleisiin kieliin, kuten PHP:hen, JavaScriptiin ja Javaan. Olemme kuitenkin vaihtamassa ensimmäiseksi ohjelmointikieleksi Javan. Muutos ei ole iso, sillä nämä kaksi kieltä ovat etenkin ohjelmoinnin perusteiden näkökulmasta kuin kaksosia. Syy vaihtoon on se, että Javalle on tarjolla enemmän ohjelmointiharjoitteiden automaattisen tarkistuksen mahdollistavia palveluita.
Itsenäisille opiskelijoille
Lapsille varmasti Scratch Jr ja Scratch ovat hyvät vaihtoehdot. Niillä opiskelu onnistuu kotonakin pienen opastuksen jälkeen. Etenkin tableteilla käytettävä Scratch Jr on hyvinkin helppokäyttöinen, koska sen toiminnallisuuksia on hiukan karsittu varsinaiseen Scratchiin verrattuna.
Nuorille ja aikuisille valinta riippuu pitkälti siitä, mitä tavoittelee. Jos tavoitteena on vain tutustua ohjelmointiin, Python on hyvä vaihtoehto helposti omaksuttavan syntaksin vuoksi. Python on hyvä vaihtoehto myös, jos haluaa oppia ohjelmointikieltä, joka tämänhetkisen tiedon mukaan on työelämässä laajalti käytetty ja vaadittu kieli. On hyvä kuitenkin tiedostaa, että Python ei sovellu niinkään peliohjelmointiin, koska Python-ohjelmat ovat toiminnaltaan hitaita (Shaw, 2018).
Jos haluaa oppia peliohjelmointia, C# on hyvä vaihtoehto. Unity-pelimoottorin, joka on yksi parhaista ja käytetymmistä pelimoottoreista, logiikka luodaan C#:lla. Unityä käyttäessä olio-ohjelmointi, joka etenkin ohjelmointitaipaleen alussa on hyvinkin vaikeasti hahmotettava aihealue, konkretisoituu usein aloittelevalle ohjelmoijalle. C# on myös yleiskieli, jota käytetään peliohjelmoinnin lisäksi myös monenlaisissa muissa ohjelmointiprojekteissa ja -ympäristöissä.
Yhteenveto
Mitä siis on paras ensimmäinen ohjelmointikieli? Kysymykseen ei ole yhtä oikeaa vastausta. Pitkälti se riippuu tavoitteista, kuten siitä, onko tarkoitus tutustua ohjelmointiin vai opiskella ohjelmoijaksi. Toinen valintaan vaikuttava tekijä on opiskelijan ikä. Kolmas kriteeri on pitkän tähtäimen tavoitteet, eli haluaako oppia web-kehitystä, peliohjelmointia vai ohjelmistorobotiikkaa.
Tulevaisuutta on vaikea ennustaa. Viiden vuoden päästä käytetyin ohjelmointikieli voi hyvinkin olla jokin täysin uusi ohjelmointikieli. Vai yleistyykö low-code -sovelluskehitys, jossa ohjelman logiikka rakennetaan pääosin visuaalista ohjelmointia ja vuokaaviotekniikkaa muistuttavin keinoin? Todennäköistä onkin, että ensimmäinen ohjelmointikieli ei jää viimeiseksi. Yhtenä hyvän ohjelmoijan tunnuspiirteenä voidaan pitää sitä, että hän hallitsee useampia ohjelmointikieliä.
Vaikka tavoite on tietenkin ohjelmallisen ajattelun kehittyminen ja jonkin ohjelmointikielen oppiminen ja ohjelmoinnin perusrakenteiden ymmärtäminen, vähintään yhtä merkittävä tavoite on saada ohjelmointi tuntumaan kivalta ja innostavalta. Tärkeintä on siis, että aloittaa ohjelmoinnin. Vaikka opiskelijasta ei tulisikaan ohjelmoijaa, hän suurella todennäköisyydellä tulee toimimaan tiimeissä, joissa hän on vuorovaikutuksessa ohjelmoijien kanssa. Lisäksi tulevaisuuden työtehtävien ongelmanratkaisussa on varmasti hyötyä ohjelmallisesta ajattelusta – riippumatta siitä, mitä ohjelmointikieltä on opiskellut.
Esitellyt ohjelmointikielet ja -ympäristöt
- C# https://docs.microsoft.com/en-us/dotnet/csharp
- Corona SDK https://coronalabs.com
- Java https://www.java.com
- Python https://www.python.org
- Scratch https://scratch.mit.edu
- Scratch Jr, ladattavissa AppStore- ja Google Play -kaupoista
- Unity https://unity.com
Abstract in English
What is the best programming language to learn first? It is a question that is often asked and disagreed upon. There is no right answer. It depends on for example what the objectives are or how old the student is.
The main concepts like control structures, variables and functions work pretty much in the same way in every programming language. Syntax and for what the programming language is suitable for may vary to some extent. Computational thinking will improve regardless of what the first programming language is.
For children and schools, visual programming with Scratch is a good option. Afterwards, Python, Java and C# are all good alternatives. The syntax of Python is quite original and because of that, it is not so easy to move to other popular programming languages, such as Java, JavaScript, C# or PHP.
Kirjoittaja
Tommi Saksa on tietojenkäsittelyn lehtori, joka opettaa vuosittain ohjelmoinnin perusteet noin 130 uudelle ohjelmoijalle. Freelance-ohjelmoijana hän on kehittänyt mobiilisovelluksia, pelejä ja web-palveluita. Ensimmäinen ohjelmointikieli oli Spectravideo-kotimikron tarjoama Basic.
Lähteet
Adobe. (2019). Built for speed, easy to share. Haettu 9.2.2020 osoitteesta https://www.adobe.io/apis/creativecloud/lightroomclassic.html
Biju, S. (2013). Difficulties in understanding object oriented programming concepts. University of Wollongong in Dubai – Papers. Haettu 16.2.2019 osoitteesta https://ro.uow.edu.au/cgi/viewcontent.cgi?article=1440&context=dubaipapers
Kodichath, S. (2019). A List of Popular Programming Paradigms. Haettu 16.2.2020 osoitteesta https://devtechnica.com/software-development/a-list-of-popular-programming-paradigms
Miracle, R. (2020, 12.2.). Corona Labs annual update [Blogikirjoitus]. Haettu 15.2.2020 osoitteesta https://coronalabs.com/blog/2020/02/12/corona-labs-annual-update
Opetushallitus. (2014). Perusopetuksen opetussuunnitelman perusteet 2014. Haettu 8.2.2020 osoitteesta https://www.oph.fi/sites/default/files/documents/perusopetuksen_opetussuunnitelman_perusteet_2014.pdf
Paul, J. (2018). 10 Reasons to Learn Python in 2018. Hackernoon. Haettu 5.2.2020 osoitteesta https://hackernoon.com/10-reasons-to-learn-python-in-2018-f473dc35e2ee
Shaw, A. (2018). Why is Python so slow? Hackernoon. Haettu 16.2.2020 osoitteesta https://hackernoon.com/why-is-python-so-slow-e5074b6fe55b
TIOBE Software BV. (2020). TIOBE Index for February 2020. Haettu 6.2.2020 osoitteesta https://www.tiobe.com/tiobe-index