Gondolatok a pincében

Gondolatok a pincében

"A programozáshoz nem kell gondolkodni"

2015. február 08. - sebi77

Lehet hogy nem jól emlékszem Fóthi Ákos professzor (az ELTE informatikai karának nyugalmazott főideológusának) szavaira, talán az első mondatot máskor egy másik tanártól hallottam, de a lényegen nem változtat:

"A programozáshoz nem kell gondolkodni. Egy programozónak nem az a dolga, hogy problémákat oldjon meg és közben jól szórakozzon."

Ez a gondolat így szó szerint véve erősen provokatív, sokkal inkább hamis mint igaz, de mégis, az az igazság amit sugall, rendkívül mély és bölcs. Az alábbiakban ezt a gondolatot próbálom meg értelmezni, és a programozás hétköznapjaiból vett példákkal illusztrálni.

1. Vár a mókuskerék!

A legtöbb programozó akit ismerek (jobban meggondolva, az összes) hobbiprogramozóként kezdte pályafutását. Vagyis tizenévesen kezdett programozni, autodidakta módon az otthoni számítógépen, szórakozásból. Nem az eredmény, vagy a program gyors elkészülése volt a cél, hanem hogy maga a programozás érdekes, élvezetes, és minél tanulságosabb legyen. Kivételesen hatékony módja ez a tanulásnak, pár évnyi hobbiprogramozás után szinte kész szakemberré válhat az ember, akár tizenévesen, külső segítség nélkül.

Gondot jelent viszont, hogy sokan később, profi programozóként sem képesek levetkőzni (vagy legalább időszakosan felfüggeszteni) ezt a játékos mentalitást. Ha egy szoftvercégnél egy programozó kap egy feladatot, annak már nem az a célja, hogy amaz érdekesnek találja, élvezze a munkavégzést, és tanuljon belőle. Hanem, hogy a feladatot minél rövidebb idő alatt, minél jobb minőségben elvégezze. Ezt figyelmen kívül hagyva az ember könnyen elkanyarodhat a kitűzött céltól, fölöslegesen bonyolult, önkényes, csak a programozó számára érdekes utakra tévedhet, miközben nem képes tartani a határidőt. Akármilyen unalmasan és felnőttesen hangzik is, de ez végeredményében azt jelenti, hogy az illető nem jó programozó (még akkor sem, ha képességei szerint az lenne).

2. Alkotás helyett utánozz!

Alkotni, új dolgokat létrehozni sokkal izgalmasabb, mint tanulni, mások leírásait megérteni, és kódjait újrafelhasználni. Ezért a világ tele van önjelölt felfedezőkkel, önámítókkal, akik a felfedezés lángjában égnek, Nobel-díjról álmodoznak a vécédeszkán, csak azért, mert lusták voltak megismerni mások eredményeit, és idejében rájönni, hogy már rég lekéstek az elsőségről.

Ahányszor életem során úgy éreztem hogy valami nagyszerű és új dolgot találtam ki, mindig beigazolódott, hogy mások már gondoltak rá, sőt, azóta eltelt 300 év, és több könyvtárat is teleírtak a témával. Vagy legalábbis már 20 éve fejlesztés alatt van egy programkönyvtár ami pontosan azt csinálja, amit én az utóbbi fél évben éppen implementálok, csak amaz sokkal kiforrottabb, tucatnyi ember több éves munkájának és tapasztalatának köszönhetően. Ha időben vettem volna a fáratságot utána nézni, sok energiát (és adott esetben pénzt) megspóroltam volna magamnak.

3. Légy szolgalelkű!

Többször előfordult már velem, hogy valamilyen új eszköz (pl. programkönyvtár) bekonfigurálásakor nem követtem elég pontosan a hozzá tartozó útmutatót. Órákig, napokig kínlódtam a leírás pontjai között ugrálva, apró módosításokkal életet lehelni a programba. Míg végül kiderült, hogy a legelső lépést rontottam el, mondjuk egy betű elírásával.

Az egyszerű figyelmetlenségen kívül ennek leggyakoribb oka az, hogy az ember szeret rövidíteni, egyszerűsíteni. Keresi a "rövidebb utat", ami egy ismeretlen terepen végzetes stratégia:

“Nekem ebből a library-ból nem az a verzió van fent amit ír, de sebaj, talán ez is jó lesz.”

“Szerintem az első három lépést kihagyhatom, mert az eredménye úgyis ugyanaz a file lesz ami nekem már megvan máshonnét”.

Ezek tipikus "utolsó mondatok". Minél értelmetlenebbnek és fölöslegesebbnek tűnik egy lépés ami a leírásban szerepel, annál nagyobb körültekintéssel, pontossággal és szolgalelkűséggel hajtsuk végre!

4. Légy konformista!

Egy könyvben olvastam a matematikai jelölésekre vonatkozóan: “A jelölések olyanok mint a fogkefék, mindenki szereti a sajátját használni”.

Az informatikusok viszont szeretik többmillióan használni pontosan ugyanazokat a jelöléseket és kód stílust. Ezek olyan külsőségek, melyek nincsenek rögzítve az adott programozási nyelv szintaktikájában, mégis kvázi a nyelv részét képezik, hiszen segítségükkel “beszélnek” egymáshoz és önmagukhoz a programozók. Ha valaki ignorálja ezeket az elterjedt, széles körűen elfogadott konvenciókat, az olyan, mintha egy saját tájszólást fejlesztene, amivel ki lehet tűnni a tömegből, de nem fogja érteni senki, gyakran saját magunk sem.

Hasonló a helyzet a felhasználói felülettel, melyet hosszú évek alatt kialakult és a felhasználók által rég megszokott konvenciók terhelnek. Ha ki akarjuk fejezni az egyéniségünk, és olyan felületet álmodunk ami a megszokottól lényegesen eltér, az jó eséllyel használhatatlan lesz másoknak.

5. Ne légy kreatív!

Matematikai analízis gyakorlaton az egyik házi feladatra frappáns megoldást mutatott az egyik hallgató. A gyakorlatvezető dícsérete lehangoló volt:

“Szép megoldás, de ebből nem látszik hogyan kell ezt a feladatot mechanikusan megoldani.”

Ezután megnéztük a megoldást az “iskolás”, “ötlettelen” módon is, mert a tanár szerint abból többet lehet tanulni. Akkor ezen eléggé felháborodtam, de ma már egyetértek vele. A programozásra vetítve pedig különösen. Egy frappáns kódot megírni nagyon mulattató, de ellenőrizni a helyességét, debugolni, valamint hetekkel később megérteni a működését már egyáltalán nem az. Az unalmas, sztenderd megoldás jobb mint az ötletes! Ha valamire ismerünk sztenderd megoldást, oldjuk meg úgy, és az így felszabadult energiát használjuk fel olyan feladatoknál, amire nincs bevett módszer, és tényleg ötletet igényel.

Szintézis

A fentiekben néhol szándékosan egyoldalúan fogalmaztam, mivel nem akartam az egyes pontok üzenetét túlságosan felhigítani “másfelől, viszont..” jellegű kiegészítésekkel. Nyilvánvaló, hogy egy programozónak mégiscsak kell tudnia gondolkodni, alkotni, kreatívnak, kísérlezezőnek lenni. A hangsúly a sorrenden van. Előbb figyelj, tanulj, és csak utána önállóskodj! Előbb tanulj meg egy amőba vagy egy kenyérpirító szellemi kapacitásával programozni, és ha már úgy is tudsz, teljes emberi intelligenciádat bevetve csodákra leszel képes. Légy nagyratörő, de addig is amíg a nagyságot eléred, légy szerény, az sokkal hasznosabb és célravezetőbb.

Végezetül álljanak itt Jackie Chan, a híres keleti bölcs szavai a Majomkirály című Kung Fu filmből:

“Learn the form, but seek the formless. Hear the soundless. Learn it all, then forget it all. Learn The Way, then find your own way.”

A bejegyzés trackback címe:

https://sebesbal.blog.hu/api/trackback/id/tr667152457

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása