De szép is volt az élet a nyolcvanas években! Ha valaki programozó szeretett volna lenni, szinte semmit nem kellett tudnia egy kiválasztott programozási nyelv szintaxisán és egy adott gép képességein kívül, és már dolgozhatott is. Igaz, nem olyan hatékonysággal, mint ma, mert az égvilágon mindent mindig meg kellett írni, de ki ne szeretett volna akkoriban színes pixeleket egyesével ki- és bekapcsolgatni a grafikus(!) képernyőn? Ebben a korszakban minden második tinédzser programozó szeretett volna lenni, és zsinórban gyártották 14-16 éves gyerekek az elképesztő demókat. Sztereó hanggal.
És ez volt az a kor, amikor nem volt egér- és nyomtatódriver, nem volt adatbáziskezelés, ja és persze Internet sem – de nem is hiányzott senkinek, hisz nem tudtuk, hogy létezhetnek ilyenek egyáltalán.
Ha valaki manapság szeretne belevágni ebbe a szép szakmába, azzal szembesül, hogy igaz, hogy mindent, de mindent megírtak már neki (és helyette), de fogalma sincs, hogyan érje el ezeket. A kihívás most már az, hogy hogyan NE írjunk meg olyasmit, ami konyhakészen rendelkezésünkre áll. Mind a JAVA, mind .NET Framework több tízezer objektumosztályt tartalmaz, amelyekkel elérhető a hálózattól elkezdve az ablakkezelésig minden. Sőt, van olyan komponens is (például az adatelérés), amiből egyenesen hat-nyolc változat is elérhető (ODBC, ADO.NET, LINQ, Entity Framework stb.). Ebből sajnos az következik, ha valaki programozó szeretne lenni, nem talál fogást a rendszeren. Egyszerűen nincs belépési pont. Bánatosan nézi a tízezer objektumosztályt, és nem tud elindulni az úton. A programozószakma a ló túloldalán van, ahová először valahogy át kell esni.
Ez azért van így, mert a programozást sikerül addig „egyszerűsíteni”, amíg olyan bonyolult lett, hogy tyúk-tojás problémává vált: addig nem tudsz jól és hatékonyan programozni, amíg nem tudsz hatékonyan és jól programozni. Nem véletlen hogy a mai fiatalok már nem programozó-, hanem zombilövöldöző-szakkörbe járnak. A programozást nem lehet elkezdeni.
Erről a sajnálatos helyzetről alapvetően az objektumorientált programozási környezetek tehetnek, amelyek egyáltalán nem természetesek egy kezdő számára, hiába gondolják a ló túloldalán lévő profik, hogy ez maga „A” természetes megközelítés. Ha egy programnak nincs sem eleje, sem közepe, sem vége – nem úgy mint a Basicnek, a gépi kódnak vagy a C-nek -, hanem csak egy kupac objektumból és példányosításból és metódushívásból és leszármaztatásból áll, a kezdők számára nemcsak hogy teljesen értelmezhetetlen, de – és ez a legnagyobb probléma – reprodukálhatatlan is. Mert ami könnyen megérthető, az ez:
10 print „hello”
20 goto 10
Se class, se példány, se metódus, se ős, se leszármaztatás, csak pucér kód. Ha odaadunk egy kezdőnek egy objektumorientált módon megoldható feladatot, olyan szépen készít belőle procedurális kódot, hogy „öröm” nézni. Csak úgy suhognak a statikus propertik és metódusok, mert azzal el lehet kerülni a csúnya, és egyben érthetetlen példányosítást.
Ehhez hasolnó jelenség, amikor a kezdő nem tudja felhasználni a mások által már megírt kódot (objektumosztályokat), mert olyan irgalmatlan bonyolultra sikerül a készítőknek a „segítség”, hogy az egyáltalán nem segítség. Kedvenc példám, amikor egy problémára azt mondja a ló túloldalán élő guru, hogy „ez semmiség, csinálj egy provájdert a gyári leszármaztatásával”, vagy, „implementáld ezt az interfészt, és már készen is vagy”. Ezek azok a segítségek, amelyek szinte el sem hangzottak, a kezdő egyik fülén be, a másikon ki, és jöhet a jó öreg proceduralitás.
Jól meg lehet figyelni ezt az elcsúszást a fórumokat böngészve. Ha valaki kérdez egy dolgot, nagyon ritka, hogy valóban szakszerű választ kap, mégpedig azért, mert a programozók többsége a ló innenső oldalán van. A ló túloldalára átesni elképesztően nehéz dolog, saját tapasztalatomból mondom. Én legalábbis értem az OOP-blablát, de sajnos az áteséstől még néhány év és néhány ezer sor kód választ el, tehát például provájdert leszármaztatni magamtól eszembe sem jutna.
Ugyanakkor tudom, hogy bármi, amit meg akarok írni, az már meg van írva, vélhetőleg bugmentesen, optimális kódolással, hibakezeléssel és mindennel. Vegyünk egy konkrét példát: el szeretnénk menteni a fajlnev változóban tárolt (mondjuk: „akarmi.txt”) fájlt a konyvtar nevű változóban megadott (mondjuk: „C:idetedd”) könyvtárba. Hogyan állítjuk elő a fájl teljes útvonalát? Vajon így?
var path=konyvtar + fajlnev;
Hopp, ez elszáll. Akkor így?
var path=konyvtar + ’’ + fajlnev;
Ez most jó, de majd el fog szállni később, amikor a programot már kiadtuk a kezünkből, mert majd akkor olyan könyvtárnevet ad meg a felhasználó, aminek a végén van backslash karakter, mi pedig befűzünk még egyet. Akkor írjuk le az eseteket if-ekkel? Nem. Nem! Erre találták ki a System.IO.Path osztály Combine metódusát. Ha beadunk neki egy tetszőleges formátumú (de helyes) könyvtár- és fájlnevet, előállítja abból a biztosan helyes teljes útvonalat. Ennyi.
A fenti példa egy gyakori élethelyzetet mutat: adott egy probléma, amit szívem szerint gányolással oldanék meg olyan 18-20 sorban, de valami azt súgja, hogy van tiszta, háromsoros megoldás is, de nem tudom, mi az. Amire állandó szükségem van, az a következő: „valaki” álljon rendelkezésemre, hogy amikor belefutok egy megoldandó problémába, jó előre mondja meg, mit és hogyan csináljak, ne állandóan a saját káromon tanuljam meg, hogy ezt sem így kellett volna. Nos, nekem rendelkezésemre áll ilyen személy, mert az egyik kollégám jól láthatóan a ló túlsó felén él. Ha szólsz hozzá, csak másodikra figyel, mert egyébként éppen objektumot orientál fejben, ezért se lát, se hall. A segítsége azonban felbecsülhetetlen értéket képvisel! Több napnyi szenvedés kerülhető el, ha az ember a megfelelő szót kapja a ló túloldaláról.
Az IT Factory következő képzése, a november hetedikén induló Hatékony programozás .NET-ben mindenki számára hallhatóvá, sőt, érthetővé teszi a hangokat a ló túloldaláról. Kiválasztottunk tizenvalahány olyan feladatot, amely a mindennapi .NET-es programozás során előkerülhet, és ezekből gyúrtunk egy egyedi tanfolyamot. Hogyan kezeld a fájlokat és útvonalakat? Hogyan írj SMTP-levelet kódból? Hogyan hozz létre autentikációs rendszert? Hogyan érdemes az adatokat megjeleníteni egy WPF-es alkalmazásban programozás nélkül?
Akit megérintett a modern objektumorientált programozási világ szörnyűsége, és szeretne tenni ellene valamit, szeretettel várjuk tanfolyamunkon.