Ha azt gondoltad, hogy a programozás csak a kockáknak való, akik algoritmusokkal kelnek és fekszenek, meg fogsz lepődni, milyen eredményre jutott egy friss kutatás, melyben programozók agyát szkennelték. Ami arra is rávilágíthat, miért van annyi bug (hiba) a programokban.
A hollywoodi filmeknek és sorozatoknak köszönhetően, a programozásról a legtöbbünknek az jut eszébe, hogy egy zseni ül a számítógép előtt, végeláthatatlan számsorok és hieroglifáknak látszó kódok futkorásznak előtte, miközben lázasan veri a klaviatúrát. A programozót pedig olyasvalakinek képzeljük, aki világ életében kiváló volt matematikából, és a legbonyolultabb problémát is képes algoritmusok nyelvére fordítani.
De vajon mi játszódik le a programozó agyában, amikor egy programozási feladatot kell megoldania? Erre kereste a választ Janet Siegmund a Chemnitzi Műszaki Egyetem professzora, neurológusokkal közösen.
Hogyan lehet mérni, mi játszódik le az agyban programozás közben?
Az agykutatásban előszeretettel használt MRI vizsgálatok segítségével feltérképezhető, hogy különböző feladatok megoldása közben mely agyterületek aktívak és melyek nem. Agyunk különböző területei eltérő feladatokban működnek közre, nagyon leegyszerűsítve, van amelyik a beszédért, van amelyik a számolásért felel. Ha egy feladat megoldása közben a tesztalany épp egy MRI-ben fekszik, a "szkennelés" eredményeképpen kiderül, melyik agyterületét használta közben, és melyeket nem, melyből rengeteg hasznos következtetést lehet levonni a jövőre nézve.
A dolog onnantól válik nehezebbé, hogy az MRI vizsgálatok rendkívül drágák, ráadásul egy huzamban csak nagyon rövid idő, legfeljebb néhány perc áll rendelkezésre ahhoz, hogy az agyműködést vizsgálják. Ez azt is jelenti, hogy nem lehet például olyan komplex programozási folyamatot vizsgálni, mint mondjuk egy mobil applikáció fejlesztése.
A kutatók ezért a következőt találták ki. 17 programozónak két programozói feladatot adtak. Első feladatként a tesztalanyok rövid programkódot láttak, amiről ki kellett találniuk, milyen feladatot hajt végre. Kis szünet után egy másik programot kaptak, amiben szintaktikai hibákat (programnyelvben ez olyan, mint a helyesírási hiba – a szerk.) kellett keresniük. Az MRI mindkét feladat során rögzítette, hogy a programozónak mely agyterületei voltak aktívak. Mivel az ilyen kutatások esetén fontos annak megállapítása, hogy az eredmények mennyire véletlenszerűek, vagy mennyire mutatják ugyanazokat a mintázatokat (konzisztencia), a feladatot különböző kódsorokkal többször megismételték.
Logika és matematika helyett beszéd- és olvasásközpont?
Gondolkodás szempontjából az első feladat a program megértését igényelte, azaz az agynak nem volt elég felismernie, rá kellett jönnie, hogy a programsorok milyen feladatot hajtanak végre. A második feladat ehhez képest sokkal kisebb kihívást jelentett, a szintaktikai hibák keresése nem igényel megértést, csak egyszerű észrevételt (önkéntes nyelvi lektorok figyelem:) - a szerk.). A más vizsgálatoknál is alkalmazott ún. kivonásos módszer segítségével a kutatóknak azt kellett megnézniük, mely területek maradnak aktívak, ha az összetett gondolkodást igénylő feladatnál aktív területekből kivonják azokat, amik a szintaktikai hibák keresésénél is izzottak. És itt jött a megdöbbentő felfedezés.
Miközben a kutatók azt várták, hogy a programkód megértéséhez az agy matematikai, logikus gondolkodásért felelős agyterületei lesznek aktívak, a tesztalanyok a feladat végrehajtása közben szinte egyáltalán nem vagy alig használták agyuk ezen területét, annál inkább a munkamemóriáért, a megosztott figyelemért, illetve a beszélt és olvasott szöveg megértéséért felelős agyterületeket. Mindez arra engedte következtetni a kutatókat, hogy a program megértésekor (és feltételezhetően a program írásakor is) az agy sokkal inkább támaszkodik a nyelvhasználatra, mint a logikai-matematikai gondolkodásra. Azaz a programírás sokkal inkább hasonlít egy idegen nyelv megtanulásához és elsajátításához, mint egy matematikai probléma megoldásához. (a teljes kutatásról készült összefoglaló itt olvasható >>>)
Azért még sem árt gondolkodni, mielőtt nekiesünk a programírásnak?
Arra persze a kutatók és más korábbi kutatások is rávilágítanak, hogy a programírás merőben más folyamat, mint magának a programnak a kitalálása, megtervezése, amihez már szükségesek, vagy legalábbis nem ártanának a logikai-matematikai készségek, illetve az algoritmus alkotás képessége.
Dr. Leslie Lamport számítógép tudós, aki 2013-ban Turing díjat kapott (adott évben a számítástechnika tudományának fejlődéséhez leginkább hozzájáruló személy kapja meg), éppen arra hívta fel a figyelmet az idei év elején, hogy a legtöbb programozó manapság úgy esik neki a programkód megírásnak, mint török gyerek a kenyeresszakajtónak. A már ismert rutinok alapján megírják a részfeladatok kódjait, ahelyett, hogy a teljes problémához vezető leghatékonyabb algoritmust találnák ki és csak azután látnának hozzá a programkód megírásához. Mintha a villanyszerelők tervrajz nélkül, rutinszerűen húznák be a kábeleket az újonnan épülő lakásokba, anélkül, hogy figyelembe vennék hol vannak az elosztók, hova kellene tenni a konnektorokat stb. Éppen ezért az így megírt programok sokkal több hibával működnek, itt-ott összeakadnak, nagyobb erőforrást igényelnek és sokkal kevésbé hatékonyan oldják meg a feladatokat, mint lehetne.
Neked mi a véleményed?
Ha tetszett és szeretnél még hasonló érdekességekről olvasni, lájkold és oszd meg ismerőseiddel!