Miksi koodaus on niin vaikeaa? | Osa 1

Tämä viesti käsittelee teknistä aihetta: koodausta. Mutta ollakseni selvä, minulla ei ole teknistä taustaa.

Olen ylpeä taiteilijan poika, joka opetti minut käyttämään tunteitani ohjaavana kompassina elämässä navigoinnissa logiikan sijaan. Savi, grafiitti, muste, maali, kangas, paperi ja liima kulkevat suonissani.

Olen kamppaillut koulussa monista syistä – niiden joukossa oli kaksi oppimisvaikeutta: syntymäkomplikaatioista johtuva aivohermovaurio ja lukihäiriö, ja se jäi diagnosoimatta parikymppiseksi asti. Parhaat koetulokseni olivat niin huonot, etten melkein päässyt yliopistoon.

Opiskelin koulussa valtio-oppia ja ensimmäiset epäonnistuneet urayritykseni olivat elokuva- ja graafisen suunnittelun alalla.

Opetin itseni koodaamaan – se on yksi vaikeimmista asioista, joita olen koskaan tehnyt. Olen myös opettanut koodausta bootcampissa täällä D.C:ssä noin viiden vuoden ajan ja mentoroinut ystäviä silloin tällöin.

Vaikka se on vaikeaa, se ei ole mahdotonta. Kun olet itseoppinut, opit pätkittäin. Joskus jossain on järkeä heti, kun taas toisissa napsahtaa vasta vuosien päästä. Selittämisen polku on hyvin kuljettu, mutta olen huomannut, että elämänkokemuksesi, taipumuksesi ja koulutuksesi merkitsevät sitä, että puolet taistelustasi on oikeiden oppimisresurssien löytäminen.

Kaksi asiaa ennen kuin aloitamme:

  1. Jos minä pystyn siihen, niin pystyt sinäkin.
  2. Et ole yksin.

Uutta sanastoa, uusia käsitteitä, uutta… kaikkea

Yksi hankalista esteistä koodaamisen oppimisessa on se, että termit, joita käytetään kuvaamaan jotakin asiaa ”koodipuheessa”, voivat usein tarkoittaa tavallisessa englanninkielessä jotain aivan muuta. Oma esimerkkini on sana ”luokka”.

Toisin kuin akateemiset tai sosiologiset konnotaatiot, joihin olemme tottuneet, luokka on ohjelmointikielessä erilainen riippuen siitä, mitä ohjelmointikieltä käytät. Vielä hämmentävämpää näissä eri ohjelmointikielissä on se, että luokka on sekä käsitteellisesti tarpeeksi sukua, jotta voidaan vetää yhtäläisyyksiä siitä, miksi sen alkuperäiset kirjoittajat päättivät kutsua sitä luokaksi, mutta varsinainen käyttö on tarpeeksi erilaista, jotta se todella olisi jotain aivan muuta. (Erityisesti CSS-luokat vs. Oliopohjaiset luokat)

Koodin puhuminen muistuttaa melkein slangia, mikä on turhauttavaa, kuten kaikki vanhemmat tietävät. Aluksi voi olla vaikea merkitä, mikä on normaali englanninkielinen sana ja mikä ”koodi”-termi.

Myös niitä kuulee usein nopeassa tahdissa peräkkäin, joten täysi code-speak-lause on kieliopillisesti oikea ja tunnet jokaisen sanan erikseen, mutta et näin järjestettynä.

”Kun olin tyhjentänyt sekä selaimen välimuistin paikallisesti että pyytänyt Johnia tyhjentämään palvelimen välimuistit stagingissä, koska ajattelin, että kyseessä oli jonkinlainen pysyvän muistin tai tilan ongelma, osoittautui, että kyseessä oli nimeämiskolari, joka ylikirjoitti aiemmin juuressa määritellyt kutsut. Teen tiketin lähdekarttojen lisäämiseksi, jotta voimme jäljittää instansseja helpommin repon greppaamisen sijaan.” -Todellinen lause, jonka sanoin pomolleni, joka nyökkäsi hyväksyvästi.

Ei vain aloiteta tyhjästä, vaan määritellään, mitä tyhjästä on

Sen lisäksi on käsitteitä, joita ei ole koskaan ennen tarvinnut kohdata, saati taistella niiden kanssa.

Esimerkki, jota käytän mielelläni opiskelijoideni kanssa, on:
Esitettäkö, että haluatte ohjelmoida tietokoneen keittämään teille kupin kahvia. Yksinkertaista, eikö?

Sinä: Hei Tietokone: tee minulle kuppi kahvia.

Tietokone: BEEP BOOP: TOKI PAT. MITÄ ON KAHVI JA MITÄ ON VALMISTETTU?

Kuvittele kaikki tavat, joilla voisit valmistaa kahvia… sitten kuvittele prosessi, jossa kahvipapu saadaan puusta, jossa se kasvoi, sellaiseen muotoon, jota voit käyttää tässä prosessissa… hyi hitsi.

Aloitamme usein tyhjästä, ja pienetkin, meille yksinkertaiset asiat ovat itse asiassa usein hämmästyttävän monimutkaisia toteuttaa koodilla.

Ei tarvitse vain ohjelmoida asioita, vaan on määriteltävä, mitä ne ylipäätään ovat. Sitten sinun on vahvistettava koodisi käsittelemään kaikkia mahdollisia tapoja, joilla se voi mennä pieleen. Yksinkertaisista tehtävistä tulee huikeita katedraaleja, jotka kunnioittavat eksplisiittisiä jumalia.

”Googleta se vain”

Ehkä neuvo, joka raivostuttaa minua eniten kollegoiltani uusille kehittäjille, on ”Googleta se”.

Kuka tahansa, joka on ollut rinta rottingilla mudassa, tietää, miten hyödytöntä tämä on.

A. Et osaa diagnosoida mikä on vialla, joten et tiedä mistä edes aloittaa. (Jos tietäisit, et kysyisi).
B. Vaikka tietäisitkin, et tiedä, mitä termejä ongelmaan liittyy.
C. Ja vaikka tietäisitkin, tulokset ovat usein niin hämmentäviä, ettet tunnistaisi sitä, vaikka se tuijottaisi sinua suoraan silmiin. (Tai kuten isoisäni sanoi, et osaisi kaataa vettä saappaasta, jos sen pohjassa olisi ohjeet.)

Koodaaminen on kuin vieras kieli

Koodaamisen oppimisessa ja vieraan kielen oppimisessa on silmiinpistäviä yhtäläisyyksiä. Olen huomannut, että kielten opiskelijat, niin englannin kuin muidenkin kielten, oppivat yleensä nopeammin syntaksit.

Kyllä, systeemeissä on kaavoja ja logiikkaa.

Kyllä, jotkin asiat ovat omalaatuisia eikä niitä voi välittää ytimekkäästi englanninkielisellä vastineella.

Kyllä, edellä oleviin kahteen kohtaan on poikkeuksia, jotka ovat ristiriidassa tai joissa ei ole järkeä, mutta näin se on, joten se on opittava ulkoa.

Puoliksi pastori / puoliksi tiedemies

Hulluin ristiriita, joka ohjelmoijan on täytettävä, on ehkä se, että sinun tehtävänäsi on sekä tietää, miten kaikki toimii, että liittää terve enemmistö uskoon.

Ohjelmoidossa sinun on käytettävä logiikkaa, järkeä ja päättelyä. Virheenkorjaus on deduktiivinen prosessi. Hyvä koodi on hyvin jäsenneltyä, tarkoituksellisen loogista ja hyvin organisoitua.

Toisaalta käytämme kiviä, jotka olemme huijanneet ajattelemaan (tietokoneita). Luotamme kehyksiin, kirjastoihin ja muiden ihmisten kirjoittamiin pätkiin, joita emme joko ymmärrä ajan vuoksi tai otamme puhtaasti uskon varassa. Jokaisella koodirivillä tapahtuu niin paljon, ettemme koskaan saisi funktiota valmiiksi, jos meidän pitäisi pysähtyä miettimään, mitä kaikkea se tekee.

Ollaksesi ohjelmoija, sinun on oltava sekä osittain uskoon perustuva pappi/papparainen että kivikova Spock-logisti.

Kuva Paramount Picturesin kautta.

Johtopäätös

Kuten huomaatte, meillä on siis töitä edessämme. Mutta aivan kuten emme tulleet tähän maailmaan tietäen, miten puhua tai kirjoittaa tai suoriutua mistään tehtävistä, joita pidämme nyt rutiininomaisina, mutta joiden kanssa aikoinaan kamppailimme: me pystymme siihen.

Koodauksen syvä totuus on se, että se on joidenkin erittäin älykkäiden ihmisten tuote, tasoltaan parhaiden ponnistelujen – hyvien aikomusten – vilpitön lahja tehdä elämästä helpompaa. Joku fiksu ihminen jossain sanoi: ”Tämä on perseestä. Täytyy olla parempi tapa kuin tämä.”

Ja koodi otti ensimmäisen henkäyksensä.

Seuraavassa osiossa annan sinulle joitain strategioita, joiden avulla voit sujuvoittaa tätä prosessia ja päästä eteenpäin kohti tavoitteitasi. Koodi on täällä jäädäkseen, se on täällä auttaakseen, ja jos ei muuta, sinulla saattaa olla hieman hauskaa.

Leave a Reply

Vastaa

Sähköpostiosoitettasi ei julkaista.