A programozási módszertani szempontok (avagy miképpen dolgozzuk fel az anyagot?)
Rossz kód - jó kód - optimális kód
A programozásban leginkább azt szeretem, hogy -ellentétben például a zenével
vagy az irodalommal-, a lehető legegzaktabb tevékenység. Gépnek címzett,
kódolt utasításokat adunk és ha ezeket nem megfelelően tesszük meg, akkor nem
lesz eredmény.
Rossz kód az, amelyik nem
fut le, hanem hibaüzenetet produkál. Ám az is rossz kód, amelyik lefut, de nem
az elvárt eredményeket szolgáltatja.
Ebből következően alapértelmezésben jó kód az, amelyik lefut és az elvárt
eredményeket produkálja.
Azonban mindannyian jól tudjuk, hogy ma már ennél jóval bonyolultabb a
helyzet. Hiszen bármilyen algoritmus megírható egyszerű szekvencia, elágazás
és iteráció használatával (Böhm-Jacopini tétel), ám a magasszintű programozási
nyelvek, közvetve maga a programozási szemlélet már messze megelőzte ezen
egyszerű megoldási lehetőségeket. Manapság már
osztályokról,
referenciákról
és még bonyolultabb, rendkívül összetett adatszerkezetekről beszélünk (például
Collections keretrendszer). Még az is meglehet, hogy a bonyolult
programozási struktúrákat a számítógép voltaképpen egyszerű programlépésekké
konvertálja át, ám minket, Java-programozókat ez nem érdekel, mert ilyen
szinten nem látunk bele a mélységekbe. Megjegyzem, nem is a feladatunk. Nekünk
az aktuális programozási trendeket kell elsajátítanunk, illetve megtanítanunk.
Ebben a pillanatban tehát a jó kód fogalma mellett felmerül az optimális
kód fogalma is.
Az optimalitás a programozásban nehéz ügy. Az optimális kód inkább szemlélet,
semmint konkrét implementáció, bár nyilvánvalóan az utóbbi magában hordozza az
előbbit. Az optimális kódot a programozási trendek, a szakértők (például a
programozási nyelv felelős fejlesztői) és néha piaci mozgások alakítják.
Mindezeket megemlíthetjük egy kezdőnek, de több megértést ne is várjunk tőle,
hiszen az alapkódot is alig érti, nemhogy a kód optimalitását.
A fenti fejtegetés lényege, hogy egy oktatási módszertanban nem szabad kezdeni
az optimális kód fogalmával, tágabb értelemben optimális programozási
trendekkel. Ezért (is) “szájbarágósak” kissé az itt található kódok: az
elsődleges cél a probléma megértetése és megoldása, az optimalitás csak jóval
később fog hozzáadódni, még az is lehet, hogy nem ezen a honlapon keresztül. S
ezen célból kezdtem el publikálni tanítványi megoldásokat. Egyrészről
találhatók bennük igazi programozási gyöngyszemek, másrészről minimum már “jó
kódok”, hiszen megoldottak egy felmerült problémát. (Természetesen minden
ilyen kódot publikálás előtt felülvizsgálok, a csúnya tartalmat kissé
kiszépítem, de mindig igyekszem megtartani a kód egyedi, csakis a tanítványra
jellemző jellegzetességeit.) Vélekedésem szerint mindenből lehet tanulni, a
rossz kódból éppúgy, mint a jó kódból. A középszerűből éppúgy, mint az
optimálisból. Már az is komoly mesterségbeli tudást sejtet, ha a kettőt meg
tudjuk különböztetni egymástól.
Következésképpen:
olvassunk és írjunk minél több kódot. Ha rossz a kód, értsük meg, hogy miért
az és hogyan lehet kijavítani. Ha jó a kód, jegyezzük meg eljárásait és
gondolkodjunk el azon, hogy meg tudnánk-e jobban írni. Ha igen, próbáljuk meg,
akár többféle módon. Valójában nincs rossz vagy jó kód, csakis megértendő,
feldolgozandó kód.
Gyakran mondom, hogy az emberi elme integráló elme. Meglehet: a kifejezést
pontatlanul, nem eredeti jelentése szerint használom fel, ám ez számomra azt
jelenti, hogy a rengeteg megtanult tudásanyagot az elme képes elrendezni és
úgy megérteni, hogy abból végül valami új keletkezzen. Az integrálás tehát nem
csak egyszerű rendszerezése vagy összegzése a megtanultaknak, hanem a
tudásanyag lényegi átlátása, megértése. Azaz a rendszerszemlélet elsajátítása.
Java-tanulmányaink során bízzunk ebben, noha ennek nagyon sokáig nem leszünk
birtokában. Éppen ezért szükséges előzetes bizalmat szavazni az oktatónak, a
módszertannak és nem utolsósorban önmagunknak.