fontos a happy path

                                                  

ha éppen programozol, akkor két út van előtted. az egyik, ha most kezdted, akkor lekódolod a zöld utat, vagy boldog utat. azt amikor minden sikerül, minden hibátlan, minden szuper. aztán jön majd vagy a valóság, vagy egy senior kolléga és pofon vág. esetleg mindkettő, hiszen ezért van két arca az embernek. miért? azért, mert lehet, hogy tök hamar elkészültél, de - és ezen a ponton jön végtelen sok dolog amire nem gondoltál... de van egy másik lehetőség is amikor programozol, most nézzük ezt. tegyük fel, hogy kaptál már pár pofont akár senioroktól, akár a valóságtól, és már tudod, hogy minden rendszer szabadság, ünnep vagy hétvége alatt fog összeomlani. ezért amikor nekilátsz programozni, akkor fejben már elképzeltél egy csomó rossz esetet, ha meg az api leiráokat böngészed, akkor még több fog szembejönni. végül ezekre mindre megpróbálsz felkészülni. mi van ha elindul a programod, de elfogy a ram, a hdd, az xy periféria. vagy nem teljesen fogy el, csak jogosultság probléma lesz, vagy valami nem található, vagy ott van minden, csak nem pont olyan amilyennek kéne lennie, vagy nagyon lassú lesz, vagy épp túl gyors, stb stb.
és ennek az egésznek az a vége, hogy már eleve hibakezeléssel kezded a kódod, valamint a kódod jelentős része abból áll, hogy azt irod le, mi legyen akkor ha baj van. mert, mint fentebb irtam is, baj mindig lesz. és ott tartunk, hogy amit a junior kolléga x idő alatt elkészit optimistán azt a tapasztaltabb kolléga 2x-10x idő alatt késziti el pesszimistán

de miért kell pesszimistának lenni? miért nem lehet simán csak működni? miért kell hogy elromoljon minden, vagy ha elromlott, akkor miért nekünk kell vele foglalkozni? foglalkozzon vele az, aki azt a hibát elkészitette.
például ha elfogyott a ram, akkor az utoljára inditott n folyamatot kell kérdőre vonni, hogy mégis mit csinálnak ott ahol az általunk irt kódnak kéne lennie.
vagy ha elfogyott a tárterület, akkor azt aki rajtunk kivül utoljára oda mentett adatot. például az alkalmazásunk 71 terabyte logot köpött ki, és már nincs több hely, ezért meg kell keresni, hogy micike a titkárságról milyen cuki cicás jpeget mentett a gépre 2 hónappal ezelőtt, és felszólitani, hogy távolitsa el.
persze ez most viccesen hangzik, de ha azt feltételeznénk, hogy a mi kódunk jól működik, és valóban szüksége van 71 terabytera, akkor ez helyes út lenne. ezzel ellentétben most folyton az a létbizonytalanság van, hogy biztosan a mi kódunk a hibás, és ezért saját magunkban keressük a hibát. és erre sok idő elmegy.
tehát, ha egy alkalmazásnak a logja minden határon túlnőhet (általában azért igy van) és ez valódi igény hogy minden tárterületet fogyasszon el, akkor tényleg micikét kell elővenni. ráadásul ezt automatikusan kell megtenni, úgy hogy a futtatott kód számára ez transzparens maradjon
ha meg nem az az igény hogy a világ összes tárterületét használjuk el logolásra, akkor illik egy takaritást beletenni, hogy mondjuk az x évnél régebbi logok menjenek a levesbe.
és mi a helyzet a többi dologgal? például a user rossz adatot irt be a mezőbe? azt kérdeztük mikor született, ő meg beírta hogy "húsz éve". hibás? az egyszeri kóder szerint igen, mert jön a hülyeség hogy integer meg validáció meg bla bla bla. de ez mind bullshit. ez jó adat! ez a happy path része kéne hogy legyen. ha nem kéne a sok kivétellel foglalkozni, akkor jutna idő ilyesmire is, és mindenki úgy irhatná be a születési évszámát, ahogy csak akarja.
na jó, de ez sarkitott példa volt, a "húsz éve" az szélsőségesen nem parseolt jó példa. mi a helyzet az "asd" vagy "test" esetleg a "lorem ipsum..." válaszokkal? (itt ragadnám meg az alkalmat hogy reklámozzam a "lórum ipse" chrome extensiont, ami azt tudja hogy magyaros hangzású halandzsaszöveggel tölti ki azt a mezőt amire épp megkéred)
szóval vannak ezek a nyilvánvalóan rossz válaszok. de ezek csak azért rosszak, mert szándékosan úgy határoztunk, hogy leszűkitjük a megadható válaszok számát 100-ra. pontosabban nem a megadható válaszokék, hanem az elfogadott válaszokét. mi van ha az emberünk 36-os számrendszerben irta be az évszámot? igy máris értelmes lehet az "asd", ami éppen 13981-et jelent, ami a blog irásának pillanatában még jövőbeli. na és mi a helyzet a "test" vagy "lorem ipsum" szavakkal? test=1372205, lorem=36427198, ipsum=31436878.
és el is jutottunk a mondandóm lényegéhez, miszerint ne magunkat szivassuk elszaporodó else ágakkal, hanem a rossz adatot beíró ember kezdjen magyarázkodni, hogy miért tér el 11983 évvel a születési dátuma a weboldalon megadottól a személyi igazolványban megadott.
és minden adatot fel lehet dolgozni. azt javaslom legyen minden adat feldolgozás a boldog út része.
oké, mi a helyzet ha kellene egy fájl a programnak, de nincs ott? most vegyünk egy egyszerű példát, mi lehet benne. mondjuk ez egy táblázat és különböző termékeink nevei és árai lennének benne. de nincsenek. ekkor az a hunyó aki elmozgatta onnan, vagy méginkább aki oda sem tette. ugye abból indulunk ki, hogy a kód - és a hozzá tartozó fájlok - jók, így aztán a program nem lehet hibás azért mert nincs ott valami aminek ott kéne lennie. ezért nehogymár a kódba kelljen else ágakat késziteni, hogy ha ott van akkor kiirjuk, különben meg kiirjuk hogy átmeneti üzemzavar. különbenis dehogy átmeneti. na mindegy, mit tegyen ilyen esetben a kód? a happy path alapján a fájlból egy kb kétdimenziós tömböt kapnánk, amiben szeretnénk megtuni hogy 42-es terméknek mi a neve horvátul és mennyi az ára. hát csináljunk úgy, mintha ott lenne. ezt legkönnyebben egy olyan programszerkezettel tudjuk megtenni, ami az előző termék nevét és árát adja vissza ha az újat nem sikerül kiszedni, de egy default érték is jó lehet ebben az esetben, például "márklár" és 42. ez már hibakezelés, mondhatná bárki, pedig nem. ha hibát kezelsz, akkor csinálhatod igy is, de lehet sokkal szövevényesebben is. ez csak simán az emberi viselkedés utánzata. gondolj csak bele, amikor a kétdimenziós táblázatból kérdezek le dolgokat a fejedből, akkor minden jól működik, amig túl nem indexelem azt a táblázatot. mire gondolok? 2x2? 4! ezt mindenki tudja. na és 3x4? 12! ezt is tudja mindenki. na és 671537123512756341243125634217365213451x72153128734123741523467123586231? őőőő... megpróbálhatod kiszámolni (ez lenne az aszinkron megvalósitás, addig várjon a user az adatra amig valaki oda nem teszi a fájlt) vagy mondhatod a default értéket: "nem tudom".
szóval happy path-ra fel!