Mitä konepellin alta löytyy?
Meitä on monenlaisia oppijoita, mutta itse kuulun selkeästi osastoon, joka haluaa tietää mitä ”konepellin alta” löytyy. Jos oikein paneudun johonkin mielenkiintoiseen asiaan, haluan aina tietää pintaa syvemmältä, miten homma alemmalla tasolla toimii. Ehkä se on se pienen insinöörin syy, joka asuu sisälläni.
Luonnollisesti, kun aloitin ammatikseni ohjelmoimaan, halusin tietää miten tietokoneet ihan oikeasti toimivat. Tiesin jo entuudestaan, että loppujen lopuksi prosessori käsittelee vain binääridataa eli ykkösiä ja nollia, kuten asiaa yleensä havainnollistetaan. Lisäksi olin joskus kuullut loogisista porteista, mutta en tiennyt mitä ne ovat tai miten ne toimivat. Tietokoneen toiminta tuntui lähes taikuudelta, sillä miten pelkistä ykkösistä ja nollista voi muodostua niinkin monimutkainen tuotos kuin moderni tietokonepeli? Tätä en voinut käsittää, joten oli aika ottaa asiasta selvää.
Tykkään kovasti kirjojen lukemisesta ja tämä aihe tuntui sopivan hyvin opiskeltavaksi kirjan muodossa. Videotutoriaaleissa käydään yleensä aiheita turhan pintapuolisesti ja kirjan kanssa saa edetä omaan tahtiin sekä pohdiskella asioita rauhassa. Charles Petzoldin alunperin vuonna 1999 kirjoittamasta kirjasta Code: The Hidden Language of Computer Hardware and Software oli tullut sopivasti toinen painos tänä vuonna. Tämän kirjan lukemisen jälkeen minulla ei ole enää lainkaan epäselvää miten tietokoneet toimivat, itse asiassa tämän kirjan avulla osaisin halutessani rakentaa oman 8-bittisen mikroprosessorin. En kuitenkaan havittele uraa raudan suunnittelun parissa, joten jätän prosessorien rakentelun muille.
Jos kirja keskittyi rautaan, niin mitä hyötyä ohjelmoijan on lukea sitä? Validi kysymys, joka ei ihme kyllä käynyt päässäni kertaakaan kirjan lukemisen aikana, koska siinä oli niin paljon mielenkiintoista tietoa. Niin moni asia tietokoneen rautatasolla selittää oudoksi kokemiani asioita ohjelmoinnissa. Useampaan kertaan huikkasin innokkaana ääneen, että ”Ai tämän takia tuota asiaa kutsutaan tuolla nimellä” tai ”No tämä selittääkin miksi asia X tehdään tietyllä tavalla ohjelmoinnissa”. Erityisesti pidin siitä miten kirja lähti liikkeelle aikojen alusta ja selitti konsepti kerrallaan miten moderni tietokone vaihe vaiheelta syntyi. Aiemmin kummastuttaneet asiat alkoivat vähitellen tuntua loogisilta ja palaset loksahtivat paikoilleen.
Seuraavan kerran kun luon koodiin uuden muuttujan, tiedän mitä eri välivaiheita prosessori tekee kun se lataa kyseisen muuttujan välimuistiin. Niinkin simppeliltä tuntuva asia vaatii aika monta prosessorin sykliä, mutta onneksi nykyiset prosessorit kykenevät useisiin miljardeihin sykleihin sekunnissa. Kirja käy lopussa pintapuolisesti läpi miten rauta yhdistyy käyttöjärjestelmään ja sitä kautta softaan. Matka tuntui ikävästi loppuvan kesken, joten seuraavaksi ajattelin jatkaa opiskelua siitä mihin tämä kirja loppui, käyttöjärjestelmistä. Fokus siis seuraavaksi Linuxin kerneliin ja siihen miten se ladataan muistiin prosessorin käsiteltäväksi. Tuntuu muutenkin, että alan olemaan siinä vaiheessa elämää, että on aika rakentaa oma Linux alusta asti.