Tanulj Te is a saját forráskódodból!

Lehet, hogy van mit. Nekem egészen biztosan. Ha Te is úgy vagy vele, mint én - ha szeretnél fejlődni és egészen természetesnek veszed, hogy bizony bőven van mit tanulni még -, akkor egész biztos, hogy érdemes. Őszintén remélem, hogy segíthetek neked ebben, hacsak egy keveset is!

Azt mondom hát, érdemes visszafordulni néha és alaposan átnézni a korábbi munkáinkat is. Én pontosan ezt tettem - az elmúlt pár napban foglalkozhattam egy viszonylag régen készített Drupal modulommal. Mindezt azért, mert

  • felmerült egy pár új igény, hogy még miket kellene tudnia,
  • pár héten belül kerül majd igazán intenzív használatba.

Adott volt hát a legjobb alkalom - mit szólnál, ha beszélgetnénk egy kicsit arról, amire jutottam?

Első észrevétel - „Hé, ez milyen nyelven van?”

…természetesen PHP és társai, de most nem egészen erre gondoltam :) Van egy elég kellemetlen és rossz szokásom, amiről igyekszem leszokni, vegyünk egy példát: könnyen lehet, hogy ez már előfordult veled is.

Elkezdesz „nagyjából” angolul programozni egy adag kódot, aztán ahogy haladsz előre az időben, egy angol-magyar keveréknyelven köt ki az egész. Ez ilyen 2-3 ezer sor körüli kódnál már roppant zavaró tud lenni, nem? Adódik hát a kérdés: milyen nyelven programozzunk egy magyar oldalra? (A kérdés megválaszolásához feltételezhető, hogy ez a modul soha nem kerül majd „nemzetközi forgalomba”, sőt valószínűleg még az adott weboldalon kívülre sem…)

Alapesetben én ahol lehet, igyekszem kizárólagosan angolul kódolni, de úgy látom, ezt az egy évvel korábbi énem még nem szerette betartani. ;) Érdemes-e átdolgozni az ilyen kódot? Ott, ahol bosszantóan olvashatatlan módon ugrál a nyelvek között, egész biztosan igen. (Ilyen hely viszont nem nagyon volt a kódomban.) Egyébként ennyi kódon átmenni és refactor-ölni kismillió változó- és függvénynevet…? Lehet, hogy majd nem ártana, egyszer. Viszont ha elkezdeném az egész kódot angolra alakítani, akkor nyilván a string-eket is le kéne fordítanom angolra - hogy aztán honosíthassam vissza magyarra… Nah, mi is a logikus ilyenkor?

(Józanéletű, elpocsékolt időre érzékeny programozó társaink ilyenkor talán felállnak, elmennek meginni egy kávét - és miután visszajönnek, már nem nagyon foglalkoznak többet ezzel a problémával.)

Te milyen nyelven programozol? Tisztán angolul vagy magyarul (is)?

Második észrevétel - „Mi történt a stílusommal?”

(Most sem a CSS-re gondolok…) Bizony, bizony: mostanra nagy nehezen hozzászoktattam magamat ahhoz, hogy ahol lehet, betartom a Drupal.org-on olvasható, kódolási stílussal kapcsolatos tanácsokat, de ezt még anno nem vettem ennyire komolyan. Ha az ilyen előírásokat követed, az több szempontból is jól jöhet: - mások jobban érthetik a kódot: javítja a kódod túlélési esélyeit, ha mások nem kapnak idegbajt, amikor javítani kell rajta vagy tovább kell fejleszteni. - nem kell kétfelé szakadnod, ha kódolsz, lásd ugyanolyan stílusban programozhatsz közreadható modulokat, mint a saját privát dolgaidat. Megspórolod a javítgatást a közreadás előtt.

Ezt a bizonyos „magasabb stílust” elsajátítani idő és energia kérdése. Jó fejlesztőkörnyezet sokat segíthet azon, hogy ne legyenek problémák - itt van erre a phpStorm, mint tökéletes példa -, de helyetted ő sem fogja kitalálni, hogy milyen stílust kellene követni. Vannak olyan pontok, ahol kifejezetten érdemes lehet lazítani az elvárásokon, lásd az előző dilemma arról, hogy mégis milyen nyelven programozzunk egy nem angol nyelvű weboldalra.

Milyen kódolási előírásokat követsz (ha követsz egyáltalán)?

Harmadik észrevétel - „Hát ez meg mi a… szösz?”

Nem árulok el újdonságot: amikor leprogramozunk valamit, általában még tudjuk, mire gondoltunk; negyed órával később még emlékszünk rá nagyjából; két nap múlva még talán fel tudjuk idézni; két hónap múlva már fogalmunk sincs (tisztelet a kivételnek!) Annak idején a szegedi Szabad Szoftver Konferencián is beszéltem erről, de most visszatérek rá egy picit: az az ideális állapot, amikor a kód magáért beszél. Amikor úgy van leírva, hogy ránézünk és már értjük is, miről van szó, hiszen olyan nyilvánvalóan van megfogalmazva, hogy világos, mint a Nap…

Amikor átnéztem a kódomat, ennek fényében bizony jópár helyen kellett javítanom rajta. Voltak rosszul megfogalmazott és/vagy felesleges kommentek; volt, ahol hiányzott egy pár jó szó; volt, ahol szimplán buta változó/függvénynevek voltak használva és így tovább. Ezek után a módosítások után megnyugtat a tudat, hogy tudom, mi történik odabenn!

…és még lehetne ennél jobb is a helyzet; a kedves Tamás kolléga például egész biztosan sokat tudna mesélni azokról a metrikákról, amikről anno nekem is, lásd: milyen hosszú kódrészleteknél érdemes elkezdeni kutatni azután, hogy nem lenne-e mit áttervezni?

Szoktál kódot újratervezni? Ha igen, milyen eszközöket szoktál hozzá használni?

Negyedik észrevétel - „És a tesztek hol maradtak?”

A mai napig nem tudtam magamat rászoktatni Drupal fejlesztés közben, hogy teszteseteket írjak automatizált teszteléshez. Csúnya és buta dolog, mondhatni szégyen, de ez van. Ez viszont nem jelenti azt, hogy nem kellene valahogy ellenőrizni, ami történik…

Körülbelül hat olyan, kisebb-nagyobb hibára bukkantam a modul átnézése közben, amiket - őszintén szólva - jobb, hogy én találtam meg, mintha menet közben derültek volna ki, mert tényleges éles üzemben a hajamat téptem volna miattuk. (Volt például egy olyan SQL lekérdezés, amit sikerült fejben odáig optimalizálnom anno, hogy körülbelül - teljesen - működésképtelen lett. Fél óráig röhögtem rajta, miután megfejtettem - de a hiba következménye nem volt annyira vicces, mint ahogy elkövettem azt!)

Megpróbálom magamat és egyúttal téged is rávenni arra, hogy használjunk már automatizált tesztelést is, ha elérhető ilyen. Ha jobban belegondolok, az egyetlen komolyabb ok, amiért ezt eddig nem használtam, az a saját személyes lustaságom volt; de mivel ettől amúgyis meg akarok szabadulni, itt az ideje komolyabban ráfeküdni a témára! Ne álltasd Te se olyan dolgokkal magad, mint például „a megfelelő teszteléshez a tesztkörnyezetet felállítani sok időbe telik”. Megtanulni, hogy ezt hogyan érdemes és begyakorolni a megfelelő módszert nyilván időbe telik, de mi ez ahhoz képest, amit nyerhetünk vele? Továbbmegyek: sok időbe nem az kerül, hogy átgondoljuk, hogy az adott kódrészeknek hogyan kellene működniük, mire hogyan kellene reagálniuk. Viszont az, hogy ismeretlen hibaszázalékű kódrészeknek a kombinációjából előálló hibákat visszakutassunk… na az rengeteg időt és energiát pazarolhat el.

Használsz-e automatizált tesztelést és ha nem, akkor miért nem?

Feltettem ezt a négy kérdést. Akár kezdő programozó vagy, akár vérprofi, feltétlenül kíváncsi vagyok: mit válaszolsz rá?