Harom fele programozo letezik

Evek soran sokfele munkakorulmenyt es kulonbozo projektmereteket, csapatmereteket latva arra jottem ra, hogy tulajdonkeppen haromfele programozo letezik. Mindharom csoportban vannak jo es kevesbe jo fejlesztok, igaz mas aranyban. Lassuk hat az osszeallitast:

Az "A" tipusu a legmuveltebb csoport kozuluk. Altalaban multinacionalis cegek szoktak ilyen programozokat keresni vagy kinevelni maguknak. Ok azok, akik betartjak a szabalyokat. Sokszor "barmi is az ara" alapon. Eppen ezert ok a leginkabb alkalmasak egy 1000 fos 99.999%-os rendelkezesre allasu projekt fejlesztesere, de ugyanakkor sokszor 10-szer annyi fo es ido kell nekik egy adott feladatra, mint mas fejlesztoknek (pont az alapossaguk miatt).
Toluk nem fogsz meg gyengen tipusos nyelvben sem olyat latni, hogy egy fuggveny visszateresi erteke false, null, -1 es 'pistike' is lehet, es ok nagyon szepen dokumentalni fogjak altalaban a feladatot. Cserebe viszont ok az egyetlenek, akiknel igaz a "havi 200 sor kommit" legenda (hozzateszem itt arrol van szo, ami kodsor vegul elesbe megy, es ugye a tesztelesi folyamat elotte is multiknal a legkemenyebb, akik eloszeretettel veszik fel az "A" tipusu fejlesztot). Kepesek egy technikailag teljtesen jol mukodo 10 soros fuggvenyrol 3-4 oras szinvonalas szakmai vitat folytatni. A gond sokszor ott kezdodik, hogy ezt munkaidoben teszik. Eppen ezert talaljak meg sokszor multinacionalis cegekkel egymast (ez persze nem jelenti azt, hogy minden multi minden programozoja ilyen). Ott nem szamit, hogy fel kell venni egy 11. embert is egy olyan projekthez, ami 3 honapja huzodik, es egy lazabb fejleszto mar egyedul is feleennyi ido alatt elkeszult volna vele.
Hatranyuk meg, hogy sokszor tul komolyan veszik a patterneket. Kevesbe figyelmes eseteknel elofordulhat, hogy egy tok olvashato, mindenki altal ranezesre is erthetoen mukodo 300 soros osztalyt kepesek egy olyan absztraktosztaly+interfesz+factory tengerbe onteni "refaktoralas" cimszo alatt, hogy onnantol mindenki orakig fogja nezni, hogy "na akkor ebben a kodban most ki kivel van". Tobbek kozt kozuluk kerulnek ki azok, akik meg nem jottek ra,hogy a HATEOAS csak egy idopocsekolas az esetek nagy reszeben. Ezenfelul az "A" tipusu programozokra a leginkabb jellemzo, hogy amikor kapnak egy tarsuktol egy 2 perc alatt konstruktivan megvalaszolhato kerdest a sajat kodjukkal kapcsolatban, kepesek az illletot elkuldeni, hogy olvasson el egy 2 napos tutorialt, vagy egy 600 oldalas konyvet, mintha az tok normalis lenne.
Ritkan hibaznak, de az olyankor sulyos tervezesi hiba (pl. csak IE6 kompatibilis weboldal), ami evtizedekig kiserteni fogja a vallalatot.
De visszaterve az elonyeikre mindenkepp erdemes megemliteni, hogy big datat (>8TB) peldaul csak o rajuk lehet bizni, valamint olyan fejlesztokre, akik szot ertenek az "A" tipusu fejlesztokkel. Igen nagy aranyban vannak osszessegeben okos peldanyaik, meg ha sokszor a ritkabb es kevesbe tehetsegesnek mondhato peldanyok kepesek is 10 masik programozonak munkahelyet teremteni mindossze nehany mondattal. Es ebben az a legszomorubb, hogy mindezeket szabalyokat es patterneket kovetve teszik.
Kedvenc technoligaik altalaban bonyolultak es nehezen tanulhatok (Peldaul AngularJS es egyes NoSQL fanok tipikusan idetartoznak altalaban)

A "B" tipusu programozok egyszerubb emberek. Mindenkeppen joval rugalmasabbak. Mondhatni arany kozeput az "A" es a kesobb emlitett "C" tipusu programozok kozott. Kelloen igenyesek ahhoz, hogy olvashato es karbantarthato kodot irjanak, de "hasznaljak az eszuket". Csak akkor alkalmaznak patterneket, ha patterneket kell alkalmazni. Tipikusan ok azok a fejlesztok, akik peldaul 10-bol 9x teljesen MVC-nek megfeleloen valositanak meg valamit, 10. alkalommal pedig total megkerulik az MVC-t, mert eppen olyan feladatuk van, aminek megvalositasara az MVC pattern vagy az altaluk hasznalt MVC framework teljesen alkalmatlan (pl. egy SQL utasitassal tobb sor INSERT optimalisan). Altalaban nem annyira muveltek, mint az "A" tipusu programozok, de hasznaljak az eszuket, es jobban epitenek sajat logikajukra.
Hatranyuk, hogy a munkaeropiac legtobbszor pont olyan embert keres, aki vagy "A" (illik a megfontolt csapatba), vagy "C" (nem sz*rozik) tipusu programozo. Ok ugymond az "atmenet", akiknek el kell adniuk magukat vagy "A" vagy "C" tipusu programozokent igenynek megfeleloen. Masik hatranyuk, hogy bar sokszor logikus es kovetkezetes a kodjuk, sokszor a rajtuk levo stressz mennyisegen mulik kodjuk minosege. Ha raernek, ugyanugy kepesek orakat vitatkozni egy 10 soros es amugy mukodo fuggvenyen, ha meg kapkodnak, akkor meg olyan kodot irnak, hogy sikitofraszt kap, aki csak hozzanyul kesobb, es a kesobb emlitett "C" tipusu fejlesztokkel ellentetben nicns is "nagy rutinjuk" a "kapkodva kodolasban". Sokszor nagyot lehet csalodni bennuk egy pillanat alatt, mikor evekig jo kodernek hitted. Jellemzo parbeszed veluk tobb ev egyuttdolgozas utan: "Te, miert generalsz a modelben olyan javascript kodot, ami html class-t ad egy DOM-hoz? Te nem szoktal ilyet csinalni en meg ket oraja ezt debuggolom" "Bocs, kapkodtam amikor ezt kellett release-elni".
Hibaik ritkan annyira komplexek, mint az "A" tipusu fejlesztoke, es ritkan annyira primitivek mint a "C" tipusu fejlesztoke, de mindketto hibatipus naluk is elofordul, es a "ketto kozottinek mondhato" hibak sem ritkabbak naluk. Sokan kozuluk azonban okosan tesztelnek, hasznalva az eszuket. Erteni szoktak a unit test-eles trukkjeit is, de ok szoktak a leghangosabban hangsulyozni, hogy vannak bizonyos feladatok, amikhez a unit test abszolut nem nevezheto megoldasnak. Erdekesseg meg, hogy neha ok maguk is visitanak a sajat kodjuktol, mikor megtudjak, hogy egesz mas lett vegul a feladat.
Emellett a "B" tipusu fejlesztok a legrugalmasabbak, sosem mondjak, hogy "ebben ezt nem lehet megirni", esetleg felvazoljak, hogy "nem erdemes", de megcsinaljak ha kell. Legtobbszor gyorsan megertheto es felfoghato a kodjuk, es rajuk a legjellemzobb, hogy egy bonyolultabb fuggveny kozepen is lesz magyarazo komment, nem csak a fuggveny fejleceben, mondvan "ott kotelezo". Ha elmennek szabadsagra is jo esellyel lesz, aki pillanatok alatt tudja folytatni kodjaik 90%-at, emellett altalaban kepesek par percben megmagyarazni, mit miert csinaltak ugy, ahogy csinaltak.
Szeretik az egyszeru de nagyszeru megoldasokat, kedvenc technologiaik sokszor "egyfuggvenyes" github projektek, par soros scriptek, egyszerubb fuggvenykonyvtarak.

A "C" tipusu programozok a leglenyegretorobbek. Ok tudjak a leginkabb betartani a hataridoket. Kepesek 1 honap alatt 3 olyan projektet befejezni specifikacionak megfeleloen (es veletlenul sem jobban), amin "A" tipusu programozok tizei ulnenek honapokig. Altalaban uj projektekre teszik oket, es ajanlgatjak egymasnak oket startupok tulajdonosai, mert "valakinek el kell kezdeni epitenie a kodot", es ugye fontos, hogy egy ilyen kod minel hamarabb mukodjon. Egy okos "C" tipusu fejleszto eseteben szinte "zsenirol" beszelhetunk szemelyeben, de ugyanakkor a "C" tipusu fejlesztoknel a legnagyobb az az arany, akiket nem az eszukert szeretunk. De a hataridoket a kevesbe ertelmes egyedeik is tartjak, lehet hogy a projekt vegul egy 8000 soros spagetti kod lesz egyetlen forrasfajlban tele copy-paste-elt kodduplikacioval, de elkeszul.
Ugyanakkor ok vegtelenul tiszteletlenek. Sokszor muveletlenek is. Nem hajlandok ertelmezni pattern doksikat, ha van egy cegnel kodolasi konvencio, semmit nem tartanak be belole. Csak a sajat hibaikbol es peldakodokbol hajlandok tanulni, es elzavarjak a fenebe azokat, akik tul bonyolult technologiat akarnanak letolni a torkukon.
Ezenfelul ok a felelosek a gyengen tipusos nyelvek letezeseert. A PHPistikek is az o halmazuk kevesbe tapasztalt peldanyai (meg nem tanultak a sajat hibaikbol), es ok azok, akiknel egy fuggveny visszateresi erteke akar 4 kulonbozo tipusu is lehet - a nullt bele sem szamitva. Mar ha hasznalnak fuggvenyt egyaltalan. Ha mar a PHPistikeket ebbe a halmazba tettuk, erdemes megemliteni, hogy a "script kiddie"-k is idesorolhatok, mar ha ez a halmaz nem a script kiddie definicioja onmagaban.
Van, hogy egesz eletukben nem csinalnak absztrakt osztalyt, interface-t, es singletont is csak tizevente egyszer. De ugyanakkor az o REST-like (veletlenul sem RESTful) API-juk mindig valahogy tizedannyi ido alatt kesz van valami csoda folytan, es tokeletesen teszi a dolgat.
Barmilyen meglepo is az eddig leirtak utan, sokszor nagyon is hajlandoak ujat tanulni. De ehhez az kell, hogy olyan legyen a tanitott technoliga altal megoldott problema, amit mar lattak, vagy konnyen el tudnak kepzelni. Es ez sem eleg onmagaban: keves bemutatkozassal es rizsaval rogton valami latvanyosat kell mutatnia ennek az uj technologianak. Kedvenc technologiaik azok a kozepes komplexitasu technologiak tartoznak altalaban, amiknek kesobb jovoje is lesz. Szinte ok a hirnokei annak, hogy mi fog elterjedni ebben a nagy IT dzsungelben. Webes peldakon maradva a composer peldaul tipikus peldaja annak, amiket "C" tipusu fejlesztok irtak "C" tipusu fejlesztoknek, persze az evek soran kinotte magat, leven ahogy varhato volt, elterjedt. Mas weboldalak scrape-eleseben is mindenkeppen ok a leghatekonyabb csoport, a curl parametereit altalaban kivulrol tudjak, valamint a html feldolgozassal kapcsolatos libek kozul is kulon erzekuk van kivalasztani a leghatekonyabbat.
Hibaik ritkan bonyolultak, leven ritkan dolgoznak bonyolultabb logikan vagy kis reszfeladatokra nem lebonthato feladatokon. Ugyanakkor a kodjaik rendszeresen allnak meg bent hagyott "echo 'reached'; exit;"-ek es egyeb trivialis "manualis debug" uzenetek miatt. Rajuk a legjellemzobb, hogy egy text editort szeretnek hasznalni IDE helyett, az automatikus debuggerre pedig csak annyit mondanak: "overkill" vagy "overengineering". Emellett az o kezeik kozul kerulnek ki a legsurubben - halistennek altalaban rovid, de - write-only kodreszletek es kommentalatlan tobb soros regexpek is. Ha a kodjukban nem talalod meg 5 perc alatt a hibat, jobb is, ha visszaadod a koltonek, eselyed sincs. De az a jellemzobb, hogy megtalalod. Jellemzo reakciod meg, mikor a kodjukba futsz: "Miert igy? En ezt total maskepp csinaltam volna" (de legalabb ekkor megertetted, mit es hogy valositott meg). Jellemzo, hogy 2-3 oran at gyakorlatilag refaktoralod egy kodreszletet szebbre, pedig valojaban az elejen a feladat csak egy 5 perces bugfixnek indult.
Ezekbol is kovetkezik, hogy egyedul dolgozva a projekten a leghatekonyabbak, esetleg kis meretu csapatban. De ugyanakkor elonyuk, hogy pontosan tudjak, hogy az ido penz, ok pazaroljak a legkevesbe a megrendelo penzet "oradij" cimszo alatt, es nem csinalnak csak ugy masik 10 fejlesztonek munkat. A legproblemasabb kodreszeik is aranylag keves munkaoraval lecserelhetoek, refaktoralhatoak. Sot, barmilyen hihetetlen, altalaban erre szukseg sincs, mert a kodjuk evekkel kesobb is teszi a dolgat. Es ami meg az idot illeti, az "A" tipusu fejlesztokkel ellentetben azt is felfogjak, hogy nem eppen lesz fejlesztotarsuknak a legjobb elfoglaltsaga egy 600 soros konyvet elolvasni, es altalaban tudnak konstruktivabb tanacsot adni a feladatra koncentralva.

Es barhogy is nezem, mindharom programozo szemelyisegtipusra szukseg van. Eppen ezert igyekeztem igazsagosan bemutatni elonyeiket es hatranyaikat, remelem sikerult.

Hozzászólások

uhh, nice...

--
"Van olyan ember sok az oldalon, akinek a kommentjeinek 100%-a zaj, oket miert nem kommentelitek ilyen lelkesen?" (hrgy84)

uhh, megrohantak az emlékek :)
szép összefoglaló

Amikor új dolgot fejlesztek, akkor CBA, de nem mindig jutok el az A-ig. :)

Nálam a leggyorsabb módszer kb ez szokott lenni:

Gondoljuk végig -> rajzoljuk le (UI + logika) -> hányjuk össze -> pucoljuk ki -> gondoljuk újra -> egyszerűsítés -> egyszerűsítés -> pucoljuk ki -> pucoljuk ki -> pucoljuk ki

Legtöbbször már a hányjuk össze után örül a felhasználó és a kód már válasz a problémára/feladatra, így nem feltétlen érzem, hogy lenne más dolgom. :) Később amikor a lelkiismeret nem hagy és unatkozom, akkor pucolom a kódot.

Szeretek kódolni, de nem csak önmagáért a kódolásért, hanem azért, mert a művem pénzt termel. Elsősorban a gazdasági probléma megoldása érdekel ami maga generálja a pénzt, másod- harmadsorban a tökéletesített kód. Még a kódot az UI is megelőzi nálam. Karbantarthatósággal nincs gondom, mert egyedül dolgozom.

"Van, hogy egesz eletukben nem csinalnak absztrakt osztalyt"

Ne is mond, héten dissassemblyztem egy .NET-es kódot, találtam benne egy ilyet:

protected virtual Foo Bar(/* 30 random paraméter, ami helyett egy osztály kellett volna átadni a paramétereket szépen strukturáltan */)
{
  throw new RandomSajatException("Nem használható metódus az Asdf osztályban!");
}

----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™

Na végére értem. Egy "C" típusú kóder kódjait örököltem meg, mikor ide jöttem 4 évvel ezelőtt. Miután egyéb okok miatt kirúgták a nyakamba szakadt az összes szarja. A legkevésbé pazarlással nagyon nem tudok egyetérteni. Te is leírod, időnként a bennhagyott, antipattern hadsereg miatt ezercsillió helyen állhat meg a monstrum, amit alkottak, ráadásul mivel minden épp annyira van összetákolva, hogy működjön, szeret kártyavárként leomlani minden.

Szóval egy pillanatig nem érzem olcsónak azt, hogy folyamatosan tákolja a szarját és olyan "problémákat" old meg, ami egy normális megoldás használata esetén elő sem fordult volna a büdös életben. Csak néhány példa:

- iconv használata helyett str_replace("\0", "", $content) + egyedi str_replace-k a két byte-s karakterekre (UCS16/UNICODE xml forrás)
- regexpel XML feldolgozás (aztán néhol nem volt egy-egy mező emiatt elcsúsztak teljesen az indexek)
- CSV/TSV feldolgozás explode()-al (opcionálisan kombinálva az első pontban említettekkel)
- XML írás kézzel, escapelésre szarás magasban.
- tranzakciók használata értelmetlenül (pl. logolás DB-be, tranzakción belül, rollback esetén ugrik a log. Aztán meg csodálkozás, hogy "de hát nem született hibaüzenet").
- cron/windows időzítő helyett percenként időzíett PHP script if ($ora == N && $perc == M) feltételekkel, majd file_get_contents-el távoli HTTP kérés, mert "utálom a parancssort" és "egyszerűbb így böngészőből tesztelni). A honnan hova irányt már meg sem merem mondani.
- egymásra futások nem kezelése, majd később egy elvben sem működő megoldás erőltetése.
- rsync helyett SMB két linuxos szerver között, majd PHP scriptből szinkron fenntartása
- escapelések, validálások a legkülönfélébb módon hanyagolva vagy teljesen egyedileg megoldva, mikor ott lenne rá egy egy soros, atombiztos kész megoldás.
- OOP használata. Az OOP minimális megértése nélkül. Pl. konstruktorban van benne egy teljes oldal generálásáért felelős kód. Hja az osztályban csak a konstruktor van.
- Egy osztály használata egyszerre collectionnak és adatosztálynak is.
- Verziókezelés teljes mellőzése
- Éles rendszeren fejlesztés
- Éles adatbázison fejlesztés

----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™

Az utolso 3-at vegyuk le, mert azt projektmenedzsment szinten kene kieroltetni, valamint a sajat hibajabol is megtanulta velhetoen azota, hogy ezt miert is kene.

Azokat leszamitva: ezek tipikusan azok a hibak, amiknel mindenki fogja a fejet, mikor meglatja. Valoban kezdobb "C" tipusu fejlesztok muvei, haladobb "C" tipusu fejlesztok is csak neznek hogy mire gondolhatott a kolto.

De ugyanakkor a tobbseguk azert par ora vagy max 2-3 nap alatt teljesen atirhato es megkerulheto kod volt, meg ha azt az idot vegig is karomkodtad, ahogy en is szoktam, ha ilyen kodba futok. (Oke, a db tranzakcios kivetel, azt tenyleg szar lehetett debuggolni). Lenyeg: barmennyire is szarul csinalta, aranylag gyorsan volt otleted ket karomkodas kozt, hogy hogy fog ez megis mukodni. Es ez az ami egy nagyobb tervezesi hibanal mar nem lenne igy.

Nekem kb. fél évembe telt kipucolni mindent. Többnyire azzal indítottam, hogy kibasztam az egészet a picsába, mikor hozzáláttam valamihez és megírtam jellemzően normálisan B style-ban.

Illetve sok kis gányolás le lett cserélve egy egységes platformra. Több munka volt, de azóta lehet azzal foglalkozni, hogy hogyan előre és nem azzal, hogy hogyan tartsuk életben a szart. (Az alatt a kb. 4 hónap alatt, mialatt ott volt, az ideje 90%-a azzal ment el. Lehet, hogy gyorsan megvan, de hogy utána horribilis időt igényel a karbantartás, az is hótziher).

--

Projektmanagement: mivel one man army volt ameddig én nem kerültem oda másodiknak, emiatt az ő felelőssége volt. Mivelhogy nem szoftverház vagyunk, hanem kereskedőcég. Most is hárman vagyunk fejlesztők + külsős üzemeltetés. Maga cégcsoport meg kb. 30 fő.

----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™

Te melyik csoportba sorolod magad?

En a B tabort erositem/gyengitem. Erdekessegkent, szerintem a funkcionalis programozast elonyben reszesitok tipikusan B-k: a C-sek tul hujek/onfejuek ehhez, az A meg keptelen kimaszni a maga asta godorbol, olyan melyen benne van (hacsak nem toltott hosszu idot a felsooktatasban a megfelelo projekteken / kutatasban, de ilyen nem sok van, aki megis, abbol szuletnek a hires mondasok ("A monad is just a monoid in the category of endofunctors, what's the problem?")).

Na es a lenyeg: termeszetesen 10 fele programozo letezik... :-P

A magam részéről mindhárom vagy egyik sem. Projektje válogatja.

+1

A projektre szánt pénz és határidő függvénye, hogy melyik vagyok én :)

Pont egy hete volt egy olyan ügyfelem, aki hétfőn szólt, hogy neki keddre komplett webshop kell.
Hát ilyenkor mit lehet tenni? WordPress + Woocommerce + free template kicsit átszínezve, egy használati doksi írása hozzá oszt csókolom.

Ma pedig olyan ügyfélkel konzultáltam, akihez személyesen mentem el megtárgyalni a részleteket. Nem akar világmegváltást azonnal, így nem is egy WP + pár plugin lesz a weboldala.

Tehát én olyan programozó vagyok, amilyenné az ügyfél tesz!

En meg arra jottem ra, hogy nekem nem kell versenyeznem a "Weboldal 50000 ftbol Pistike es Tarsa Kft"-kkel. Ha olyan ugyfellel talalkozom, akinek eleg egy gyorsan osszekattintott CMS weboldal es ez lenne az elso, annak megmondom: "figyelj, en sokmillio useres rendszereken dolgozom/dolgoztam, kicsit pazarlas volna ha azon dolgoznek, hogy 100 latogatodnak bekuldhess egy ket cikket, meg hetente 2x fizessenek a webshopodbol. Neked is aranytalanul draga lenne, foleg ha nem gondolkodsz nagyobban, hidd el". Altalaban ezutan van meg valaki, akit tudok javasolni magam helyett.

De nem csak a CMS-es rendszereket kerulom. Mas altal folytatott kodnal van egy masik szuro is: ssh jelszot es verziokezelo url-t kerek. Ja, hogy cpaneles webftp only szarra fizettel elo, mert sporoltal/ olyan sysadminod volt aki ennyire se tudott rabeszelni? Hat rajtam mar nem fogsz fillereskedni, ezt el nem vallalom.

Es ami kodot betettek egy verziokezelobe, az mar altalaban valamennyire hasznalhato szokott lenni, akkor is, ha nagyon spagetti kod es http path-ban van a mysql jelszo, altalaban lehet vele valamit csinalni.

Éleslátásra vall ez az írás. Te magad melyik vagy? :-)

Én B-nek szeretem gondolni magam. A C osztályba csak azért nem lógok át, mert én gyűlölöm a kódduplikációt, a DRY koncepció a mániám. Annyira, hogy képes vagyok 4 absztart ősosztályt csinálni, hogy 1 sor duplikációját megússzam. Egyszer tényleg csináltam egy ilyet, de a végén a commit log átnézése után úgy döntöttem, hogy visszavonom, nem teszem be a közösbe.

Valoban jo lenne, ha bekapcsolnam, csak ahhoz kene olyan email cim, amivel nem leakelne rolam tul sok info a profession adatbazisaba, es mindemelle emlekeznek is a jelszavara (ellentetben azzal, amelyikrol regszitraltam, kulon vicces lehet, ha trey azota mar kuldott ra mailt, hogy viselkedjek, tobb eve nem jelentkeztem be oda ;) ). Hetvegeig megoldom ezt a problemat, csak ma nem nagyon lesz levegom, ideirni is utoljara ebedidoben tudtam.

Ha csak pusztán véletlenül volt közös az a kód és te mégis öröklést használtál volna, akkor nem vagy A. Ha tényleg specializált esetek voltak (4 szinten kétlem) és te mégse használtál öröklődést, akkor nem vagy A. És még képbe jön az LSP is. Te valószínűleg nem vagy A. :)

A 4 szint túlzás volt :-). A lényeg az, hogy 1-2 sor duplikálásának megspórolásához kellett volna gyártani egy rakás boilerplate kódot, amire a végén azt mondtam, hogy egye fene marad minden a régiben. Amúgy biztosan nem vagyok A. Mindhárom kategóriában vannak rám jellemző jegyek, de egyikbe sem tudnám 100%-ig besorolni magam.

Mindezt lehet még súlyosbítani azzal, ha az adott fejlesztők nem alkalmazottak, hanem fix idejű szerződéssel projektre lettek felvéve, hogy segítsék a cégnél dolgozó csapatot. Különösen kártékonyak, mert egységnyi időn belül több projektet tudnak tönkretenni.

1. Contractor, A mint Architect. Projekt felénél lelép, rendszerint új projektre. Projekt fejlesztés hirtelen lelassul, aki képes átlátni az AdapterFactoryFactoryRegistry interface-ek (és rendszerint egyetlen implementációja) labirintusát, az csak fogja a fejét, hogy hogy fog ez a vacak élesben egyáltalán teljesíteni. Projekt csúszik, lehet hogy behal. Tervezési hiányosságokat kéne javítani implementálás helyett, persze nincsenek iterációk, mert nincs is már architect. Ki a hülye? A B típusú programozó. Architect megálmodott egy fantasztikus architektúrát, de a tehetségtelen barmok nélküle már nem tudták befejezni.

2. C típusú contractorok csapatokban képesek sáska módjára letarolni egy kódbázist és teleszórni rejtett bugokkal, majd odébbálnak, hátrahagyva a szart, szívjon aki ott melózik.
Kedvenc példányom: Backend rendszer nem publikus admin felületét kell GWT-ben megírni. Előre ki van kötve, hogy csak Firefoxon fog működni, IE-t felejtse el mindenki. Emberünk csak IE-t hajlandó használni fejlesztéshez. Azon kívül hogy a GWT tooling IE-hez gyenge volt akkor, IE specifikus bugokkal múlatta az időt. Mikor sehogy sem tudta IE-ben disabledre állítani egy gomb státuszát, létrehozott a mi forrásfánkban egy com.google.gwt.whatever.Button osztályt, copy-paste-el belerakta az eredeti forrást és átírta hogy működjön IE-ben. Távozása után hetekkel GWT upgrade, belső API-k módosultak, a gombok szép csendben elkezdtek látszólag random módon nem működni. A legszebb az egészben, hogy jól dokumentált módon lehetett GWT-ben adott böngészőre szabott saját implementációkkal kicserélni a beépített dolgokat, ezt elmondtam neki, dokumentációra linkekkel specifikáltam a feladatot. Aztán persze velem morgolódtak hogy ezt mégis hogy, aztán meg jogosan: mégis hogy mehetett ez át a code review-n.

Annyival egészíteném ki, hogy szerintem egy folytonos átmenet van C-ből A-ba.

A-ról két dolog jutott az eszembe, az egyik hogy van egy ilyen mondás, miután egy fejlesztő megismeri a design patterneket, mindenre azt akar használni. A valóságban a GOF-t se úgy kell olvasni mint szentírást, a benne vázolt patterneket adoptálni kell a konkrét feladatra, ami általában szükségtelen részek elhagyásával jár. A másik, hogy én is hajlamos vagyok túltervezni dolgokat, ilyenkor sűrűn mormolom hogy YAGNI, az általában segít. :)

C-ről pedig az jut eszembe, hogy az write once, write it again* kódot eredményez. Valójában nem a fejlesztés tempója gyors, csak gyorsan kerül látványos eredmény szállításra. Később a karbantartási időn ezt az előnyt nagyon gyorsan el lehet veszíteni. Vagy az összegyúrt sárlabda egyben tartása lesz egyre nehezebb, vagy folyamatosan refaktorálni kell, míg végül egy jól karbantartható szoftver lesz belőle. Persze ez a megrendelőt annyira nem fogja zavarni, ha cserébe a szoftver sokkal hamarabb elkezdi termelni a pénzt számára. Csak ott valós probléma ez, ahol nem lehet rossz minőségű kódot munkára fogni. Az ügyféllel viszont fontos megértetni, hogy ettől a szoftver nem lesz olcsóbban / gyorsabban kész.

*: van egy hasonló kifejezés, de azt nem találtam, ezt most találtam ki