Thursday 19 June 2014

Programozni szívás


Ez csak egy fordítás: Peter Welch - Programming Sucks
Itt találhatod az eredetit:

Programozni szívás



Minden olyan barátom, akinek a munkája során legalább kétszer hetente meg kell mozdítania valamit ami nehezebb mint egy laptop, megtalálja a módját végül annak, hogy beszúrjon ilyesmit egy beszélgetésünkbe: "Öcsém, a te melód nem nehéz. Én most nyomtam le egy 4700 órás hetet úgy, hogy egy csavarhúzóval ástam alagutat Mordor alatt." (És a megszólítás mindig "Öcsém".)
Végülis mondanak valamit. Mordor szívás, és egyértelműen sokkal megterhelőbb fizikailag egy alagutat ásni, mint billentyűzetet böködni, hacsak nem hangya vagy. De - csakis a vita kedvéért - egyetérthetünk-e abban, hogy a stressz és az őrület rossz dolgok? Király. Isten hozott a programozás világában.

Minden programozó csapatot őrültek terveztek és alkotnak

Képzeld el, hogy mérnöki munkát kapsz. Izgatott vagy és ötletteli, pályakezdőként valószínűleg csordultig vagy letisztult és gyönyörű tervekkel, amik lenyűgözőek a maguk esztétikus, céltudatos és gazdaságos egységességében. Kezdetnek megismered Maryt, ő a projektvezetője egy nagyvárosi hídépítésnek. Mary bemutat Frednek, miután átjutottál a 15 féle biztonsági ellenőrzésen, amit Dave vezetett be, mert egyszer ellopták a melegítőjét az asztaláról, és azt Soha Többet. Fred csakis fával dolgozik, szóval megkérdezed, hogy miért is vesz részt egy híd megtervezésében, aminek képesnek kellene lennie arra, hogy megtartsa a nagyvárosi forgalomban részt vevő autókat, teli halandó emberi lényekkel több, mint 60m mélység felett. Ne aggódj, mondja Mary, Fred fogja tervezni a járdát. Milyen járdát? Nos, Fred eléggé alátámasztotta a járda iránti igényt, ami sokat fog hozzáadni a híd megjelenéséhez. Természetesen mindezt korlátok nélkül kell megépíteni, a szigorú “nincs korlát” szabály alapján, amit Phil hozott, aki nem mérnök. Senki sem biztos abban, hogy Phil mit is csinál, de bármi is az, teli van szinergiával és köze van a felsővezetéshez, akikkel egyetlen mérnök sem akar kezdeni, szóval mindenki hagyja Philt, hogy csináljon amit akar. Sara mindeközben számos eszeveszetten modern járdaépítési megoldást talált és mindet belerakta a híd terveibe, szóval mindegyikhez meg kell találni a megfelelő technológiát, mert mind másfajta alapozást és biztonsági megfontolásokat kíván. Tom és Harry már évek óta együtt dolgoznak, de egy véget nem erő vitájuk van arról, hogy metrikus vagy imperiális mértékegységeket használjanak, és az egész ügy egy "aki hamarabb elkezd dolgozni a terv adott részen határozza meg a mértékegységet" játékká vált. Ez persze olyan szintű nehézséget okoz azoknak, akik ténylegesen egymásba csavarozzák a dolgokat, hogy már régen feladták, és ahogy-esik-úgy-puffan módon erőltetik-kalapálják-hegesztik össze a különböző összetevőket. S bár a tervekben függőhíd szerepel, azonban senki sem tudja valójában hogyan is kell olyasmit építeni, szóval amire eljutottak a feléig, már extra támasztékként oszlopokat is építettek, de meghagyták a felfüggesztő kábeleket is, mert azok is tartják a híd bizonyos részeit. Senki sem tudja, hogy melyek azok a részek, de mindenki biztos abban, hogy fontosak. Miután mindenkinek be lettél mutatva, felkérnek, hogy oszd meg az ötleteidet, de neked nincs olyasmid, mert te hajtómű-mérnök vagy és semmit sem tudsz a hidakról.
Keresztülhajtanál ezen a hídon? Nem. Ha mégis elkészülne valahogy, akkor mindenkit kivégeznének, aki részt vett az építésében. De akár hiszed, akár nem, pont ezen a módon készült minden egyes program, amit valaha is használtál, legyen az banki szoftver, weboldal, vagy egy bizonyos titkosítási algoritmus, ami arra lett tervezve, hogy megvédje az adataidat az interneten, ám persze nem teszi.

Minden programkód hibás

Nagyritkán, amikor senki más nincs otthon, minden programozóval megtörténik, hogy leoltja a villanyt, tölt egy pohár italt, felrak valami könnyed német elektronikus zenét, és megnyit egy állományt a számítógépén. Ez az állomány más és más minden programozónál. Néha ő írta, néha csak úgy találta és azonnal tudta, hogy el kell mentenie. Olvassa a sorokat, és könnyezik a szépsége fölött, de aztán a könnyek keserűvé válnak, amikor eszébe jut az összes többi állomány és az elkerülhetetlen pusztulása minden jónak és igaznak a világon.
Ez az állomány a Jó Programkód. Értelmes és konzisztens alprogram- és változónevekkel. Velős. Nem csinál semmi nyilvánvaló hülyeséget. Sosem kellett odakinn a vadonban élnie, vagy megfelelnie a kereskedelmi csoport elvárasainak. Egyetlen, evilági, meghatározott dolgot csinál, és azt jól csinálja. Egyetlen ember írta, más sosem módosította. Olyan, mint egy vers, amit egy harmincnál idősebb ember írt.
Minden programozó ilyesmiket készít kezdetben, ilyen tökéletes kis hópelyheket. Aztán azt mondják neki pénteken, hogy keddre kell 600 hasonló hópehely, így nekiáll csalni egy kicsit itt és ott, talán lemásol néhány hópelyhet, és megpróbálja összeragasztani őket, vagy segítséget kér egy munkatárstól, aki persze leolvasztja az egészet, és így az összes programozó összes hópihéje összeáll valamilyen leírhatatlan formába és valaki odatámaszt elé egy Picasso reprót, mert senki sem akarja látni napvilágnál a macskapisát, amint beleolvad a hókupacba. A következő héten valaki még egy kis havat lapátol rá, hogy megtartsa a képet a helyén.
Egy elmélet alapján elkerülheted ezt, ha szabványokat követsz, kivéve persze, hogy több "szabvány" van, mint amire a számítógépek valójában képesek, és mindezek a "szabványok" állandóan tökéletesítve és kárhoztatva vannak a megíróik személyes érdekei által, szóval nincs olyan programkód, ami ki tudna jutni a való világba anélkül, hogy tucatnyi azonos dolgot nem csinálna tucatnyi távolról sem hasonló módon. Az első jónéhány heted egy új munkahelyen nem áll másból, mint hogy megpróbálod kitalálni mit is csinál a program - mégha tökéletesen ismered is az összes programnyelvet, keretrendszert és szabványt amit felhasználtak a készítéséhez, mivel a szabványok olyanok, mint az egyszarvú.

És mindig sötétség lészen

A gyerekkoromban néhány évig olyan szobában éltem, ahol volt egy besétálós beépített szekrény. A szekrény furán lett megtervezve. Első blikkre normálisnak tűnt, de amikor bementél pakolászni, akkor felfedezted, hogy a jobb oldali falban egy alkóv van, egy ügyes kis polccal. Aztán felnéztél, és megláttál az alkóv felső részén egy üreget, ami helyet adott a tökéletes ürességnek, ahova semmilyen fény soha nem jut el, így azonnal azonosítható azon szörnyűségek nappali menedékeként, amiket minden éjjel zseblámpákkal és plüssállatokkal tartottál távol magadtól.
Pontosan ilyen programozni tanulni. Megismered a hasznos kis eszközeid, aztán körbenézel és újabbakat találsz, de azok csak arra jók, hogy megmutassák a feneketlen borzalmat, ami mindig is ott volt közvetlenül az ágyad mellett.
Tegyük fel, hogy egy átlagos webprogramozó vagy. Ismersz tucatnyi programnyelvet, egy halom hasznos programkönyvtárat, szabványokat, protokollokat, miegymást. Még így is minden héten egy újabbat kell megtanulnod, és emlékezned kell arra is, hogy folyamatosan naprakészen tartsd a már megismert néhányszázat, biztosítván a problémamentességüket és együttműködőképességüket, és azt, hogy senki sem javította ki azt a hibát bennük, amit felhasználtál valami igazán okos dologra azon a hétvégén, amikor olyan jól berúgtál. Tehát minden naprakész, minden működik, aztán bumm, beüt a ménkű. 
Mi-a-f...? mondod, és elkezded levadászni a problémát. Felfedezed, hogy egyszer régen egy idióta úgy döntött, hogy mivel egy másik idióta úgy döntött, hogy 1 osztva 0-val az végtelennel egyenlő, így ezt fel lehet használni a végtelen jelölésére, egyszerűsítvén a saját programkódját. Aztán egy nem-idióta helyesen úgy döntött, hogy ez idiótaság volt - ahogy persze az eredeti idiótának is döntenie kellett volna -, de mivel az nem így tett a nem-idióta meg úgy döntött, hogy ő meg egy pöcs lesz, és a saját új fordítójában ezt egy kivételi hibaként kezeli - így most az összes hópelyhed csak egy adag macskapisa és még a macskát sem találod.
Jó dolog a szakértőjének lenni mindezen technológiáknak, mert ez a szakértelem teszi lehetővé, hogy 6 óra alatt megtaláld a hibát ahelyett, hogy elveszítenéd az állásod. Tehát most van egy újabb apró kis tény, amit eltárolhatsz az agyadban a másik egymillió apró kis tény mellett, mivel programok sokaságát írták idióták és pöcsök.
És ez csak a saját választott területed a programozáson belül, ami csak egy apró töredékét reprezentálja mindazon dolgoknak, ami a számítógépekről tudható, és amikről akár még csak nem is hallottál. Egyetlen élő ember sem tudja hogyan működnek a dolgok az 5 éves MacBookodban. Miért is mondjuk, hogy kapcsold ki és be? Mert még csak a leghalványabb elképzelésünk sincs arról, mi mehetett gallyra benne, és igazán könnyű kómába küldeni a számítógépeket és hagyni, hogy a beépített kis doktorok kitalálják a bajt helyettünk. Csakis amiatt működnek jobban a számítógépes szakik számítógépei mint az átlagé, mert mi tudjuk, hogy a számítógépek valójában skizofrén kisgyerekek autoimmun betegségekkel, és mi nem verjük őket, amikor rosszak.

Egy csomó melót nyomtak már bele az internetbe, és az a saját különleges poklává vált

Emlékszel még az idiótákra és a hibás kódra? Na, az internet az pont az, csak milliószor rosszabb. Weboldalak, amik dicsőített online üzletek, kb. 3 dinamikus oldalból állnak, és mégis megállás nélkül javítgatja őket egy egész csapat, mivel az az igazság, hogy állandóan mindig minden elromlik. Ebben a pillanatban is valaki a Facebooknál tízezernyi hibaüzenetet kap és kétségbeesetten próbálja megtalálni a problémát mielőtt az egész parádé összeomlik. Van egy csapat a Googlenál, akik már nem aludtak 3 napja. Valahol egy adatbázis programozó üres üdítősdobozokkal körbevéve üldögél, miközben a férje azt hiszi róla, hogy halott. És ha ezek az emberek abbahagyják amit csinálnak, akkor a világ lángba borul. A legtöbb embernek fogalma sincs arról, hogy a rendszergazdák mit csinálnak valójában, de hidd el nekem, ha mindannyian egyszerre vennék ki az ebédszünetük, akkor hamarabb elfogyna az összes töltényed, miközben a nehezen megszerzett konzervjeidet védelmezed a támadó mutáns hordáktól, minthogy hazajutnál a sarki boltból.
Az internetet nem tudod újraindítani. Dollárzilliárdok múlnak mindenféle rozoga pókhálóján a nemhivatalos megegyezéseknek és a "jó-lesz-ez" programkódoknak, amik teli vannak ilyen 10 évvel ezelőtti megjegyzésekkel: "KI KELL JAVÍTANI, MIVEL EZ EGY IGAZÁN VESZÉLYES TÁKOLÁS, DE NEM TUDOM MI A HIBA VELE". És akkor még nem is említettem azt a légiónyi embert, akik állandóan támadják az internet bizonyos részeit, kémkedésből, profitszerzésből, vagy csak unatkozásból kifolyólag. Hallottál valaha a 4chanról? A 4chan meg tudná semmisíteni a létezésed és megélhetésed, ha egy délután úgy döntene, hogy nem kedvel - de végül is nem kell izgulni, mert mit számít egy újabb atombomba a nukleáris télben.
Az interneten nem gáz azt mondani: "Tudod, ez még akár működhet is néha, ha a megfelelő technológiát használod", és bumm, máris az internet részévé vált. Bárki, akinek van néhányszáz dollárja és egy számítógépe, lehasíthatja magának az internet egy apró szegletét és tehet fel mindenféle borzasztó programkódot, így téve az egészet még egy kicsit rosszabbá. Még a jó programozók sem zavartatják maguk azzal, hogy megtanulják azokat a szabványokat, amiket valamilyen szervezetek arra terveztek, hogy a saját egyszarvújukat valósítsák meg, szóval a fél életünk azon ténnyel való birkózással töltjük, hogy valójában semmi sem működik rendesen együtt semmivel, és bármikor elromolhat, így csak megpróbáljuk elkendőzni az egészet, és reméljük, hogy senki sem veszi észre.
Tessék, itt az internet titka: 5 perccel azután, hogy megnyitottál egy böngészőt, az adataid egy orosz kölyök kezében vannak. Regisztráltál valahova? Az NSA egy számítógépe onnantól kezdve automatikusan követ bárhová is mégy a Földön. Elküldtél egy emailt? A címed már fel is került egy listára Nigériában.
Ezek a dolgok nem azért nem igazak, mert nem törődünk velük, vagy mert nem próbáljuk megakadályozni őket, hanem azért igazak, mert jó programkód híján minden rossz az alapjaitól és mindenki csak megpróbálja az egészet valahogy működésben tartani. Ha a munkád az internettel kapcsolatos, akkor csak reméled, hogy a legutolsó dolog amit csináltál, kitart néhány óráig, hogy megehesd a vacsorád és aludhass kicsit. 

Nem alapból vagyunk őrültek, hanem azzá váltunk

 "HIBA: Reguláris kifejezésekkel próbálta értelmezni a HTML-t; Cthulhu visszatért a rendszerbe."

Vicces, mi? És akkor ez a kis szóváltás?

"- Úgy hívják, hogy visszaTomb?
- s/teve/_/
- Faja, koszi."

Hát nem segítőkész volt? A tevével? Nem tűnik megfelelő válasznak? Nem? Jó. Még mindig megtalálhatod Jézust. Még nem töltöttél annyi időt programkód olvasással, hogy elkezd beszélni is. Az emberi agy nem kimondottan jó az alapvető logikában és mégis egész életpályákat alapozunk arra, hogy nem igazán csinálunk semmi mást, mint igazán-de-nagyon-összetett logikai feladványokat próbálunk megoldani. Hatalmas mennyiségű elvont feltételt és egyéb algoritmust kell átmazsoláznod, hogy megtalálj egyetlen lemaradt pontosvesszőt. Miután egész nap ezt csináltad, egészen enyhén afáziássá válsz, csak nézed az emberek arcát miközben beszélnek hozzád, és nem érted őket, mert amikor befejezik a mondatokat, akkor nem látod a pontosvesszőt. Elmerülsz a tökéletes értelmetlenség világában, ahol csak az számít, hogy apró számsorozatok menetelnek bele egy hatalmas labirintusba és egy másik számsorozat vagy egy kép egy kismacskáról jön ki a másik végén.
A fentieknek az agyvelőn elért pusztító hatása demonstrálható magukkal az ezen emberek által kreált programnyelvekkel is. Ez egy program ami kiírja, hogy "Hello world!":

#include <iostream>

int main( int argc, char** argv ) {
    std::cout << "Hello World!" << std::endl;
    return 0;
}


Ez ugyanazt csinálja, csak egy másik programnyelven:

`r```````````.H.e.l.l.o. .w.o.r.l.di


Ez is:

>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.[-]
>++++++++[<++++>-] <.>+++++++++++[<++++++++>-]<-.--------.+++
.------.--------.[-]>++++++++[<++++>- ]<+.[-]++++++++++.


És még ez is:

Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook.
Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook?
Ook! Ook! Ook? Ook! Ook? Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook.
Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.
Ook? Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook. Ook! Ook. Ook! Ook? Ook! Ook! Ook? Ook!
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook.


És egyszer valaki alkotott egy programnyelvet, ami lehetővé tette, hogy valaki más megírja ezt a kódot:

#:: ::-| ::-| .-. :||-:: 0-| .-| ::||-| .:|-. :||
open(Q,$0);while(){if(/^#(.*)$/){for(split('-',$1)){$q=0;for(split){s/|
/:.:/xg;s/:/../g;$Q=$_?length:$_;$q+=$q?$Q:$Q*20;}print chr($q);}}}print"n";
#.: ::||-| .||-| :|||-| ::||-| ||-:: :|||-| .:|
"

Az írója szerint ez a program "két sornyi kód, ami másik két sornyi beágyazott megjegyzést értelmez a Maya számrendszer alapján, ami az egyszerű ASCII karaktertáblát használva egy magazin címét írja ki, 90 fokban elforgatva".
Ez a program megnyert egy versenyt - hát persze. Akarsz egy ilyen világban élni? Nem. Ez az a világ, ahol egy dobozzal elfüstölsz naponta, és senki sem ítél el érte. "Hát persze, hogy elszív napi egy dobozzal, ki ne tenné?" Végül minden programozó egyszer úgy ébred, hogy mielőtt az agya teljesen elérné a tudatosság szintjét az egész világot és benne minden kapcsolatát programkódként látja, és aztán arról mesél, hogy az álmosság miatti hallucinációk teljesen normális dolgok. Ez az a világ, ahol némely emberek hanyagolják a szexet csak azért, hogy orángutánoknak írjanak programnyelvet. (Ook?) Minden programozó arra kényszeríti az agyát, hogy olyasmit tegyen, amit sosem kellene csinálnia, és ezt egy olyan helyzetben, amit sosem tud jobbá tenni, napi 10-15 órán át, 5-7 napot egy héten, és mindegyikük szépen lassan megbolondul.

</nyavalygás>

Szóval nem, nekem nem kell nehéz dolgokat emelgetnem a napi munkám során. Elcseréltem ezt arra a lehetőségre, hogy a Sátán szeméremszőrzetét nyesegetem, miközben ő a nyitott koponyámból csemegézik, és mindezt csak azért, hogy az internet működjön még néhány napig.