Ohjelmoinnissa ei ole kyse näppäimistön mättämisestä ja mahdollisimman nopeasta kirjoittamisesta. Kyse ei ole siitä, että opetellaan uskonnollisesti ulkoa näppäimistön pikanäppäimiä ja lopulta tehdään hiiri tarpeettomaksi. Kyse ei ole jokaisen ohjelmointikielen oppimisesta, jos se ylipäätään on mahdollista. Hyvää ohjelmoijaa ei määrittele tietokoneen merkki, hinta, suorituskyky ja käyttöjärjestelmä eikä se, mitä koodieditori- ja IDE-ohjelmointityökaluja (VS Code, Atom, IntelliJ IDEA, Vim, Notepad++ tai jokin muu) hän suosii. Päinvastoin kuin monien Hollywood-elokuvien ansiosta yleisesti uskotaan, ohjelmointi ei todellakaan vastaa hakkerointia.
Lisäksi se on muutakin kuin ohjelmointikielen syntaksin ja sisäänrakennettujen toiminnallisuuksien ulkoa opettelua. Logiikka, ehdot, if
lausekkeet ja algoritmit – erityisesti lajittelu – eivät anna täydellistä kuvaa siitä, mitä ohjelmointi todella on. Matematiikka, rekursio, tietojenkäsittelytiede ja suunnittelumallit eivät myöskään tee sille oikeutta. Vaikka ne ovat valtava osa sitä, mitä ohjelmointi on, ne ovat vain yksi osa palapeliä.
Suunnittelu ja suunnittelu
Ennen kuin kirjoitetaan yhtään riviä koodia, projektin suunnittelu ja arkkitehtuuri suunnitellaan perusteellisesti, jotta varmistetaan tai ainakin lisätään todennäköisyyttä sujuvalle kehityssyklille. Tässä vaiheessa ohjelmistosuunnittelu astuu kuvaan. Työkaluketjut, putkilinjat, julkisten ja sisäisten API:iden abstraktiokerrokset, modulaarisuus, objektisuhteet ja tietokantojen jäsentely suunnitellaan kaikki tässä kehitysvaiheessa.
Olemme eläviä, hengittäviä virheenkorjaajia
Ohjelmoinnin taito edellyttää, että ajattelemme laatikon ulkopuolelta ja ratkaisemme ongelmat käytännöllisimmillä, tehokkaimmin toimivilla ja toteuttamiskelpoisilla ratkaisuilla. Tämän vuoksi olemme luultavasti todennäköisimmin kotitalouden ”tietotekniikkamies” tai ”asiakastuki”. Meidän tehtävämme on käytännössä korjata se, mikä on rikki. Aivan kuin ”ohjelmointi” olisi glorifioitu tapa sanoa ”ongelmanratkaisu”.
Toisin sanoen olemme eläviä, hengittäviä virheenkorjaajia tietokoneissamme ja niiden ulkopuolella, ja tämän vuoksi on tärkeää, että osaamme lukea ja kirjoittaa dokumentaatiota. Kunnollinen dokumentaatio – joka tulee varsinaisten yksityiskohtaisten dokumentointisivujen muodossa tai niinkin yksinkertaisena kuin arvokkaiden kommenttien ripotteluna koodipohjaan – on yksi ohjelmoijan tärkeimmistä elinehdoista. Ilman sitä olemme eksyksissä pimeässä, emmekä pysty täyttämään velvollisuuksiamme virheenkorjaajina. Edistystä ei tapahdu juuri lainkaan, koska suurin osa ajastamme kuluu kokeilemiseen ja sen tutkimiseen, miten kehys tai vanha koodipohja toimii. Kaiken kaikkiaan tuloksena olisi hirvittävän kauhea kehittäjäkokemus.
Harkitse kaikkia mahdollisia skenaarioita
Debuggaaminen on jo muutenkin tarpeeksi vaikeaa. Kaiken kukkuraksi koodin suoritus ei yleensä ole lineaarinen. Suurissa projekteissa on useita ”haaroja” mahdollisia suorituspolkuja, jotka johtuvat ohjelmalogiikasta, jossa on if
lauseke. Meidän on otettava huomioon kaikki mahdolliset skenaariot ja virheet, varsinkin jos niihin liittyy käyttäjän syöttö. Kognitiivinen kuormitus, jota jokaisen mahdollisen suorituspolun seuraaminen vaatii, tekee ohjelmoinnista entistäkin vaikeampaa.
Käyttäjäkokemus
Kehitysmaailman ulkopuolelle astuessamme astumme keskivertokäyttäjän asemaan. Sen lisäksi, että tarjoamme toiminnallisuutta, lisäämme uusia ominaisuuksia, korjaamme virheitä ja dokumentoimme koodipohjaamme, keskitymme myös siihen, miten keskivertokäyttäjä on vuorovaikutuksessa sovelluksemme tai ohjelmistomme kanssa. Otamme huomioon useita tekijöitä, jotka johtavat loistavaan käyttäjäkokemukseen, kuten (muun muassa) saavutettavuus, käytettävyys, käyttäjäystävällisyys ja -havaittavuus, käyttöliittymäsuunnittelu, väriteemat, toiminnalliset animaatiot ja suorituskyky.
Suorituskyky ja optimointi
Suorituskyvystä puheen ollen, suorituskyky on ohjelmoinnin valtava osa-alue itsessään. Me, erityisesti ne, joilla on tietotekniikan tausta, pyrimme käyttämään ja kirjoittamaan mahdollisimman aika- ja tilatehokkaita algoritmeja. Meillä on pakkomielle mikrosekuntien käsittämättömästä aikaskaalasta, jotta saisimme parhaan mahdollisen hyödyn irti käytettävissä olevasta muistista, suorittimista ja grafiikkasuorittimista.
Web-kehityksen yhteydessä verkko-optimointi on tärkeä käsite ymmärtää. Hyppäämme renkaiden läpi minifioidaksemme ja pakataksemme HTML:n, CSS:n ja JavaScriptin vain minimoidaksemme palvelimelta tulevan vastauksen hyötykuorman. Myös kuvia ja muita resursseja pakataan ja ladataan laiskasti, jotta käyttäjän on mahdollisimman vähän ladattava dataa, ennen kuin sivusta tulee mielekäs ja käyttökelpoinen.
On kuitenkin tilanteita, joissa suorituskyvystä tulee liian pakkomielle. Ennenaikaisesta optimoinnista tulee ongelma, kun keskitymme tarpeettomasti koodikannan tiettyjen osien optimointiin sen sijaan, että keskittyisimme siihen, mitä on tehtävä todellisen edistyksen ja tuottavuuden kannalta. Tällöin meillä on oltava viisautta arvioida, mitkä koodipohjan osat todella tarvitsevat optimointia.
Turvallisuus
Ohjelmistomme käyttöliittymän ja logiikan lisäksi olemme ohjelmoijina vastuussa käyttäjien turvallisuudesta. Nykypäivänä, jolloin tiedot ovat erittäin haluttuja ja niitä hyödynnetään voimakkaasti, on tärkeämpää kuin koskaan varmistaa, että käyttäjiemme henkilötiedot ovat turvassa. Ryhdymme lisätoimiin yksityisten tietojen suojaamiseksi, koska käyttäjämme luottavat ohjelmistoihimme. Jos emme kanna tätä vastuuta, emme todellakaan ole oikeita ohjelmoijia, emmekä edes lähellekään.
Me emme voi koskaan olla liian varmoja, kun lähestymme tietoturvaa. Yleisenä nyrkkisääntönä on, ettemme ”koskaan luota käyttäjän syötteisiin”. Voidaan jopa pitää ”parhaana käytäntönä” tehdä paljon työtä tietojen ja käyttäjän syötteiden puhdistamiseksi. Sen lisäksi, että asetamme ohjelmistomme ja infrastruktuurimme suureen vaaraan, jos emme ole varovaisia niiden kanssa, vaarannamme myös arkaluonteiset käyttäjätiedot – juuri ne tiedot, joita lupaamme ohjelmoijina suojella.
Turvallisuus ei kuitenkaan koske pelkästään käyttäjätietoja ja syötteitä. Virukset, madot, troijalaiset hevoset, mainosohjelmat, näppäinlokkerit, lunnasohjelmat ja muut tietokoneiden haittaohjelmat leviävät edelleen ja vaivaavat miljoonia ja taas miljoonia tietokoneita ja laitteita ympäri maailmaa. Vaikka laitteistoihin ja ohjelmistoihin on tehty vuosikymmeniä teknisiä parannuksia, haavoittumattomia järjestelmiä ei ole olemassakaan. Tietoturva on yksinkertaisesti käsityö, jota hiotaan jatkuvasti, mutta jota ei koskaan saada täydelliseksi, sillä aina tulee olemaan muutamia uteliaita, jotka tutkivat ja etsivät kaikkia mahdollisia tapoja ”murtautua” järjestelmään.
Tästä syystä suunnittelemme ohjelmistomme käyttötapauksesta ja käyttäjäkunnasta riippumatta siten, että tietoturva on yksi tärkeimmistä prioriteeteista, ellei jopa tärkein prioriteetti. Teemme näin suojellaksemme käyttäjiämme edellä mainituilta uhkilta, jotka voivat aiheuttaa haittoja, kuten tietojen menettämistä, tiedostojen korruptoitumista ja järjestelmän kaatumista, vain muutamia mainitakseni.
Tiimityö saa unelman toimimaan
Vaikka se ei välttämättä liitykään ohjelmointiin, tiimityöllä on erittäin olennainen rooli ohjelmistokehityksessä. Kun otetaan huomioon minkä tahansa suuren projektin monimutkaisuus ja liikkuvat osat, on mahdotonta, että vain yksi henkilö kehittäisi laadukasta ohjelmistoa säännöllisen iteroinnin reippaalla tahdilla tai asiakkaan tai minkä tahansa valvovan tahon asettamien tiukkojen määräaikojen ja aikarajoitusten puitteissa.
Tämän vuoksi meillä on erilaisia tiimejä, joissa on ihmisiä, jotka ovat erikoistuneet johonkin ohjelmoinnin monista osa-alueista. Yhdellä henkilöllä ei koskaan ole kaikkia taitoja ja tietoja, joita tarvitaan kaikkien osa-alueiden tehokkaaseen ja yhtenäiseen yhteenliimaamiseen. Yksi tiimi voi olla vastuussa käyttöliittymäsuunnittelusta ja saavutettavuudesta, kun taas toinen voi työskennellä itse ohjelmiston toiminnallisuuden parissa. Jos eri erikoistuneiden tiimien kaikki osaamiset yhdistetään, lopputuloksena syntyvässä ohjelmistossa on paras mahdollinen toiminnallisuus, käyttäjäkokemus, suorituskyky ja tietoturva taloudellisten ja käytännöllisten rajoitusten puitteissa.
Ajanhallinnan ja aikataulujen noudattamisen kannalta työnkulkujen organisointi ja automatisointi ovat äärimmäisen tärkeitä. Käytämme aikaa rakentamistyökalujemme ja putkistojemme asianmukaiseen konfigurointiin, koska se säästää paljon aikaa tulevaisuudessa. Yleisesti ottaen sijoitetun pääoman tuotto kasvaa ajan myötä.
Työskentelemme hyvin muiden kanssa
Kehitelläkseni ajatusta tiimityöstä ja yhteistyöstä luomme terveet suhteet kollegoihimme, koska viime kädessä projektin menestys riippuu suuresti sen takana olevan tiimin menestyksestä. Pyrimme edistämään kannustavaa työympäristöä, jossa kokeneet seniorit opastavat uusia tulokkaita huomaavaisesti.
Koska kehitämme ohjelmistoja tiiminä, meidän on otettava huomioon, että muut lukevat koodiamme. Jotta kehityssykli pysyisi kestävänä pitkällä aikavälillä, luettavuutta ja ylläpidettävyyttä pidetään yhtä tärkeinä kuin projektin logiikkaa ja toiminnallisuutta. Kirjoitamme johdonmukaisesti hyvää, helppolukuista koodia ja tarjoamme samalla informatiivisia commit-viestejä ja dokumentaatiota, koska ne varmasti auttavat meitä ja muita ymmärtämään koodiamme paremmin.
Koodikatselmus on loistava tilaisuus oppia lisää ohjelmoinnin parhaista käytännöistä, kun puhutaan siitä, että muut lukevat koodiamme. Se on myös toinen tapa tutustua koodipohjaan ja sen taustalla olevaan suunnitteluun ja arkkitehtuuriin. Vaikka rakentava kritiikki on epämiellyttävää ja vaikeasti käsiteltävää vastaanottavassa päässä, on tärkeää ottaa se hyvänä neuvona, jotta voimme kehittyä ohjelmoijina.
Ohjelmointi on vaikeaa
Ohjelmointi käsittää monia muita näkökohtia kuin toiminnallisuuden, kuten käyttäjäkokemuksen, suorituskyvyn, turvallisuuden ja tiimityön. Ei riitä, että keskitytään tiukasti vain yhteen näkökulmaan ja jätetään muut pois. Huomattavan kokoisissa ja merkittävissä projekteissa se ei ole niin yksinkertaista kuin muutaman koodirivin kirjoittaminen. Onnistuakseen se vaatii paljon huolellista suunnittelua, muotoilua, harkintaa ja tiimityötä. Itse asiassa ohjelmoinnissa käytetään enemmän aikaa ajatteluun kuin kirjoittamiseen, erityisesti pitkien virheenkorjaussessioiden aikana.
Loppujen lopuksi ohjelmoinnissa on oikeastaan kyse jatkuvasta, taukoamattomasta oppimisesta. Sopeutumiskyky ja jatkuva oppiminen ovat avaimia tällä alalla selviytymiseen. Emme voi odottaa pysyvämme merkityksellisinä, jos emme tee omaa osuuttamme jatkuvaan oppimiseen. Näin epävakaalla alalla, jolla teknologia kehittyy eksponentiaalisesti, meidän on pysyttävä sen nopeassa tahdissa mukana, ettemme joudu pölyttymään.
Tahdon päättää tämän artikkelin antamalla tunnustusta kaikkien kehittäjien kovasta työstä ympäri maailmaa. Tätä artikkelia kirjoittaessani minun oli pohdittava kehittäjätiimin päivittäistä työnkulkua. Minun oli tarkasteltava ohjelmoinnin ja ohjelmistokehityksen monia näkökohtia, jotka jäävät yleensä huomaamatta. Sittemmin olen oppinut arvostamaan enemmän kaikkia tietokoneeseeni asennettuja ohjelmistoja. Tämän vuoksi kehotan kaikkia kiittämään ohjelmoijaa tänään, kokemuksesta riippumatta. Missä olisimmekaan ilman heitä?
Älkää koskaan pitäkö heidän kovaa työtään itsestäänselvyytenä.