Aivan viime päivinä on sähköpostiin tippunut varsinkin lokakuussa alkavan full-stack -koulutuksen tiimoilta muutamia kysymyksiä aiheesta "voisinko minä oppia ohjelmoimaan?". 

Se on vähän sama kuin kysyisi "voisinko minä oppia näyttelemään?" tai "voisinko minä oppia maalaamaan tauluja?".

Kysymykseen vastausta miettiessä tulee mieleen ainakin kaksi asiaa. Yhtäältä mietin, mitä ohjelmointi on ja toisaalta kuinka hyväksi ohjelmoijaksi joku haluaisi tulla ja miten tuo hyvyys mitataan. Mitä tarkoittaa se, että yksi näyttelijä on parempi kuin toinen näyttelijä ja miten tuo paremmuus mitataan? Mitä tarkoittaa se, että yksi ohjelmoija on parempi kuin toinen ohjelmoija ja miten hyväksi ohjelmoijaksi tullaan? 

Näyttelemiseen liittyy tietty tekniikka - näytteleminenkään ei ole sattumanvaraista toimintaa, vaikka joskus voi siltä näyttääkin. Sama pätee ohjelmointiin, tietyn ohjelmoinnin perustekniikan osaaminen on edellytys, jotta ohjelmoija voi olla pätevä ratkaisemaan yhä hankalampia ongelmia ohjelmoinnin keinoin.

Ohjelmointitekniikan kulmakiviä ovat ohjelmoinnin perusrakenteet ja taito jakaa ohjelma pienempiin osiin. Nämä taidot kehittyvät tekemällä, mutta niitä voi myös harjoitella, vaikkei ohjelmoisikaan töikseen. Nuo kulmakivet kulkevat ohjelmistosuunnittelijan mukana riippumatta ohjelmointikielestä tai ohjelmointiparadigmasta. Paradigmalla tarkoitetaan tässä jakoa funktionaalisiin ja imperatiivisiin ohjelmointikieliin ja kaikkiin ohjelmointikieliin näiden kahden ääripään välillä. 

Ohjelmointi kaikissa muodoissaan edellyttää abstraktia ajattelua, muttei läheskään siinä määrin kuin yleisesti kuvitellaan. Ohjelmoinnin peruskäsitteiden oivaltaminen on erinomaisen palkitsevaa, sillä se avaa tien abstraktimpien käsitteiden avautua. 

Ohjelmoinnin käsitteet kannattaa opetella tietyssä järjestyksessä ja rakentaa uutta aiemmin opittujen käsitteiden varaan. Käsitteiden opettelun skippaaminen kostautuu myöhemmin varmasti, joten tylsältäkin tuntuvat asiat kannattaa opetella hyvin. Ohjelmoinnin opiskeluun liittyy myös, varsinkin alkuvaiheessa, myös tietty määrä ulkoa opiskelua - tietyt asiat pitää vaan osata ulkoa - niin yksinkertaista se on.

Tietyt merkintätavat on opeteltava ulkoa, jotta tietty rutiini syntyisi. Jos rutiinia ei synny, ei synny uusia oivalluksiakaan, sillä jos rutiinia ei tule, ei tule koodiakaan ja oivalluksia syntyy vasta, kun koodia tulee lisää ja lisää. Nimittäin, kun koodia tulee aina enemmän ja enemmän, joudut miettimään, miten koodin järkevimmin järjestelisit mielekkääksi kokonaisuudeksi - lopulta jaat kokonaisuuden mielekkäiksi osiksi. Taito on nyt siinä, miten määrittelet, mitkä ovat nuo mielekkäät osat. Perusrakenteiden oppimisen jälkeen opit kokonaisuuden järjestelemistä osiin eli hienommin modulointia. 

Mitä nuo ohjelmoinnin perusrakenteet sitten ovat? Ne ovat ns. lausekielisessä ohjelmointikielessä erityisesti ehtolauseet, toistolauseet ja ihan vaan suoritettavat lauseet. Sitten vielä tulisi ymmärtää, mitä on tuo suorittaminen, mutta se tulee yleensä kaikilta ns. luonnostaan. Kun pystyt perusrakenteiden avulla ratkomaan pieniä harjoitustehtäviä voit periaatteessa ratkaista niin monimutkaisen ongelman, kuin vain tietokoneella ratkaista voi, vaikkapa jonkin tekoälyllä ratkaistavan vaikeaksi koetun ongelman. Kokonaisuuden voit sitten järjestää osiksi moduloimalla. Yleensä modulointiyksikköä vastaa ohjelmointikielessä käsite funktio, metodi tai funktioaliohjelma. Modulointiyksikköä tarkoittava sana juontuu yleensä kyseisestä ohjelmointikielestä - merkitys ohjelman laatimisen kannalta on kuitenkin sama ohjelmointikielestä riippumatta. 

Funktioiden ja aliohjelmien avulla ohjelmastasi tulee luettavaa ja sellaista, että voit ohjelmaasi seuraavana päivänä kirjoittaa lisää ohjelmakoodia ilman, että alati kasvava ohjelmakoodin määrä johtaa sellaiseen koodisekasotkuun, ettet enää pysy kärryillä, miten ohjelma kokonaisuudessaan toimii. Toisinaan moduulilla tarkoitetaan funktiokirjastoa, mutta sinun ei kannata vaivata päätäsi sillä, että kaksi asiaa voi eri asiayhteyksissä tarkoittaa eri asiaa - tietotekniikan käsitteistö on lähtökohtaisesti sellaista, että asiayhteys ratkaisee merkityksen. 

Vastaus kysymykseen "voisinko minä oppia ohjelmoimaan" on, että jos edellinen tuntuu sellaiselta, että voisit edellä mainittuja taitoja oppia, niin voit aivan hyvin oppia ohjelmoimaan. Jotkuthan ohjelmoivat ihan harrastuksekseenkin, kuten Selma ja Pate.


Selma-koira pohtii ohjelmointiongelmaa ja kaluaa keppiä samaan aikaan. Samanaikaisuus
ei ole ongelma, sillä Selma tykkää tehdä asioita funktionaalisella ohjelmointikielellä.  

0
0
0
s2sdefault
powered by social2s

Lisää kommentti


Turvakoodi
Päivitä