Ein algengasta spurning sem upp kemur þegar kemur að því að læra forritun, er annars vegar hvaða forritunarmál á ég að byrja á að læra og hins vegar hvar á ég að læra forritun. Við báðum þessum spurningum er ekki til rétt svar en álíka margar útgáfur á svörum eins og forritarar eru margir.
Fyrsta forritunarmálið sem ég lærði var Pascal, annað málið var Java og eftir það missti ég töluna. Sem dæmi um hvað ég á við er að árin sem ég kenndi á Flash notaði ég oft ActionScript og oft þegar ég hef unnið með Microsoft Office hef ég þurft að nota VBA og iðulega þurft að nota JavaScript við vefsíðugerð en ekkert þessara þriggja mála hef ég lært.
Megnið af þeim árum sem ég fékk vann fyrir mér við forritun notaði ég PHP en man ekki eftir því að ég hafi nokkru sinni þurft að læra það mál. Þegar þú hefur lært tvö eða þrjú forritunarmál og skilur forritunarhugsun og kannt að lesa forritunar kóta, þá notarðu það tól sem hentar verkefninu eða er notað á þínum vinnustað, eða þér líkar best.
Það er mjög algengt að fólki líkar best þau forritunarmál sem það lærði fyrst og mælir þá gjarnan með þeim en það er þó ekki algilt. Síðar tekur fólk þó stundum ástfóstri við eitthvað annað mál og má t.d. nefna að Python hefur verið eitt af vinsælli forritunarmálum uppúr 2005, sem er ekki endilega vegna þess að sé betra en önnur heldur vegna huglægs smekks margra forritara. Þetta mál er þó mjög sjaldan notað til að kenna byrjendum, hver sem ástæðan er.
Eitt af því sem oft gleymist þegar þessi spurning er rædd, er að spyrja hvers vegna hún er spurð. Er verið að spyrja t.d. hvaða mál sé auðveldast að læra sem byrjandi? Er verið að spyrja hvaða mál gagnist nemandanum best þegar kemur að því að sækja um störf, þ.e. sé nógu útbreitt? Er verið að spyrja hvaða mál veiti besta undirstöðu til að byggja á þegar lengra sækir?
Er verið að spyrja hvað kenni nemandanum vönduðustu hugarvinnuna þegar kemur að lausn vandamála?
Síðasta spurningin sem hér er nefnd er laumuspurning en nemandinn veit ekki áður en hann byrjar forritunarnám – en honum verður kennt það af hæfum kennara – er að hvert einasta tölvuforrit sem hefur verið sett saman eða smíðað, er lausn við vandamáli.
Orðið hugarvinna – en einnig hefði mátt nota hugtakið „öguð högunarvinna“ – er einnig laumuorð því fáum nemendum er sagt að þeir þurfi að læra að hugsa upp á nýtt þegar kemur að vel hagaðri forritun (sem lausn á vandamálum) og að kunna góða högun til að skilgreina a) vandamálið, b) mismunandi hugsanlegar úrlausnir, c) gera ráð fyrir síðari tíma þróun, og d) velja forritunarmál og verkvang, síðast en ekki síst, e) að skrásetja.
Hugarvinna myndi vera Mindprocess á ensku en högun er fínt orð fyrir ferilinn sem liggur að baki Architecture og/eða Design – fyrir þá sem eru vanari ensku.
Vissulega er öllum nemendum kennt að vinna skref a, b og d og yfirleitt bent á c og e. Hér er aftur treyst á að athugull lesandi greini á milli hugtakanna Kennt og Bent og hversu mikið vægi sá mismunur hefur, sérstaklega þegar kemur að því að lesa sig eftir stíg vandaðra vinnubragða og agaðrar hugsunar.
Eitt atriði byrjar hér að gægjast fram en það er atriði sem mjög sjaldan er rætt þegar forritun er annars vegar og það er heimspekin sem lögð er til grundvallar, enda er heimspeki hvorki töm fólki né hefur nútímafólk fengið þjálfun í grunnskóla eða á fyrstu árum framhaldsskóla að temja sér heimspekilega hugsun:
Fólk vill læra hvernig á að gera hlutina s.s. tvö til fjögur forritunarmál og síðan fá tækifæri til að afla sér tekna við fagið. Af nógu er að taka varðandi bloggfærslur, greinaskrif, bækur og námskúrsa í einkaskólum og framhaldsskólum til að fá viðhlýtandi svör við þessu og síðan vinna sem fagmaður, oft árum saman, án þess að nokkru sinni þurfa að svara hinum heimspekilega þætti.
Til að átta sig betur væri e.t.v. betra að spyrja hvernig er best að læra á bíl? Allir vita svarið við því, þú finnur þér ökukennara eða ökuskóla sem hefur opinbera viðurkenningu, ferð eftir því sem hann kennir þér, tekur svo viðeigandi ökupróf til að fá ökuréttindi?
Níu tíundu þeirra sem spyrja hvernig eða hvar er best að læra forritun, og ef ég ætla að læra sjálfur á hvaða forritunarmáli á ég þá að byrja eru yfirleitt að spyrja að þessu; Hvað ökukennari eða ökuskóli er bestur, miðað við það verð sem ég vil borga.
En hvað ef það er ekki besta leiðin til að læra á bifreið?
Ég hóf að keyra dráttarvél frá því ég var tólf ára gamall. Þegar ég tók ökuprófið þurfti ég aðeins tíma til málamynda hjá ökukennara, ég kunni á öll stjórntæki, hafði tilfinningu fyrir farartækinu, kunni umferðarreglurnar en hafði ekki æfingu á hraðamuninum á milli bifreiðar og dráttarvélar eða sjálfsöryggið að fara af túninu og troðningunum heima yfir á sýsluvegina og götur í borg og bæ. Þetta síðastnefnda lærði ég á fjórum tímum hjá ökukennara.
Á þessum árum var ekkert mál að aka stórri fjórhjóladrifinni dráttarvél með sex tonna skítadreifara eða enn stærri heyvagn, að smokra þessum stóru ferlíkum á milli húsa, bakka þeim eftir hliðarspeglum eða meðhöndla við erfiðar aðstæður eftir árstíðum.
Ég hef ekki ennþá getað skilið hvers vegna ríkið krefst fimm til sex mismunandi ökuleyfa fyrir misstór ökutæki (auk tengivagna) þegar eitt ökuleyfi og eitt öflugt grunnnámskeið ætti að duga. En sá grunnur í högun sem ég fékk í sveitinni hjá ömmu er allt annar en sá sem ungmenni fá í dag. Það regluverk sem þingmenn og embættismenn fylgja er oft (og yfirleitt) lagt eftir huglægri (Subjective) högunarhugsun en ekki hlutlægri (Objective) eða vandlega ígrundaðri.
Flest þetta fólk hefur aldrei farið út fyrir borgarmörkin, aldrei þurft að míga í saltan sjó eða grafa sig niður á frosna vatnsleiðslu á jóladag til að geta brynnt fénu. Ennfremur er mjög sjaldgæft að þetta fólk þurfi að bera ábyrgð á gerðum sínum heldur býr við að allir geta réttlætt sjálfa sig og enginn má særa tilfinningar annarra.
Nú sér lesandinn hvað mér gengur til. Það er til urmull af greinum úti um allan heim sem segja þér hvar best sé að taka sex mismunandi ökupróf eða hvaða forritunarmál sé best að taka samkvæmt huglægu mati. Fáir svara spurningunni hvað er vönduð hugarvinna eða högunarhugsun þegar kemur að lausn vandamála sem lýsa sér í góðum forritum.
Árið 2004 hefði ég hiklaust mælt með því að læra Java sem fyrsta forritunarmál en í dag set ég það í þriðja sæti. Árið 2002 hefði ég sett Pascal í fyrsta sæti en árið 2005 var ég búinn að taka það af listanum, í dag árið 2020 set ég C og Pascal saman í fyrsta sætið og veit að ég mun aldrei færa þau þaðan. Dálítið stór fullyrðing.
Þetta er svipað því þegar Linus Torvalds – sem oft er kenndur við Linux – staðhæfði að XML lýsimálið (ekki forritunarmál) væri algjört drasl og ætti helst hvergi að sjást. Ég hef hvergi rekist á rökstuðning hans fyrir yfirlýsingunni en hef séð fjölda samræðuþráða á Netinu þar sem fólk skiptist á skoðunum um þetta.
Ég er sammála honum en með fyrirvara – það er hins vegar utan sviðs hér og nú.
Forritunarmálin C og Pascal komu fram á sama tíma – árin 1969 til 1970. Hið fyrrnefnda var hannað til að leysa ákveðið vandamál sem var viðvarandi í forritun þess tíma en hið síðarnefnda var hannað til þess eingöngu að kenna vandaða hugarvinnu við högun forritunar. Bæði málin voru hönnuð af mönnum sem höfðu tamið sér árum saman vönduð hugarvinnubrögð og komist að sambærilegum niðurstöðum en með ólíkri nálgun á hvernig málskipun (Syntax) ætti að vera uppsett.
Mörg mál eru með C málskipan og er listinn langur, þekktust eru líklega eftirfarandi: Java, PHP, C++,C#, JavaScript og ActionScript. Einnig eru til mál sem líkjast Pascal og er ADA þeirra þekktast.
Þess má geta að ADA er eitt virtasta forritunarmál sem hannað hefur verið þó það sé ekki útbreitt og virki frekar fráhrindandi þegar menn byrja að kynna sér það en það mál var einmitt hannað frá grunni af stórum hópi fólks með það í huga að það myndi stuðla að vandaðri högunarhugsun og öguðum vinnubrögðum og ætti það mál fyllilega erindi í fyrstu tvö sætin á listanum yfir hvaða mál maður ætti að læra snemma.
Augljóst hlýtur að vera að markmið þessarar greinar er ekki að svara spurningunni heldur að vekja aðra spurningu.
Hvaða forritunarmál veitir hugsun minni þá umgjörð sem auðveldar mér að temja mér þannig vinnubrögð og hugsunarferla að þau forrit sem ég smíða verði vandaðri, þurfi minna viðhald, þegar þau þurfa viðbætur að það sé aðgengilegt, að aðrir forritarar eigi auðvelt með að skilja högun þeirra og bæði laga og bæta við, og umfram allt standist tímans tönn.
Það er auðvelt að svara þessu, það er að smíða rétta spurningu; Hvaða forrit hafa verið smíðuð, þannig að þau svari því fyrir hönd þeirra tóla (eða forritunarmála) sem þau eru smíðuð með, að augljóst sé hvaða forritunarmál sé best að læra (hvort sem þau eru í fyrsta sæti eða ekki).
Umfram allt, spurningin sem er nær aldrei spurð neins staðar: Hvaða heimspekilega viðhorf þarf ég að temja mér til forritunar til að starf mitt sem forritari svari þessu sjálfkrafa? Ég fullyrði að síðan 2005 hef ég hvergi séð nein vinnubrögð sem svara þessu en stöku greinar (frá reyndum forriturum, erlendum) sem reyna að svara þessu.