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.
 

www.informatika-programozas.hu - Ezt most meg kell tanulni!
 

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.