HTML

ITÉlet

Egy multinacionális cégnél dolgozó informatikai manager szakmai blogja. Észrevételek, tapasztalatok szoftver fejlesztésről, vezetésről, managementről és hatékonyságról itthoni és külföldi példákon keresztül. Az informatikáról másképp...

Utolsó kommentek

  • 232323: Szóval managernek jó lenni, akkor dől a nagy lé, felelősség meg számonkérés sehol. Krém. (2019.10.31. 15:24) Kirúgják-e a menedzsert ha hibázik?
  • Simon Géza: "A következő forradalmi áttörés, nagy dobás, ami megint tőzsdei felfutáshoz vezet, az nem valamilyen informatikai dolog lesz, hanem egészen más." Ha a generic AI nem informatikai, akkor igazad van.... (2018.02.19. 07:01) Az IT jövője
  • pggp: @AnyTink: Köszi, de én csak egy blog olvasó vagyok, aki jól tudja használni a keresőt ;-) (2017.10.17. 07:19) Milyen volt hazaköltözni?
  • AnyTink: @pggp: :) Gratulálok a család bővüléséhez és a sikeres 'hazatelepedéshez'. Mi most gondolkodunk a hazaköltözésen és jó olvasni mások élményéről! Köszönöm az írásod :) (2017.10.16. 18:49) Milyen volt hazaköltözni?
  • pggp: Tulajdonképpen igen, alakult valami: akocsis.com "2017 április, Dália eloször Szentesen" ;-) (2017.06.06. 21:51) Milyen volt hazaköltözni?
  • Utolsó 20

Amikor egy idő után atomtudós kell az alkalmazás üzemeltetéséhez.

Amikor egy idő után atomtudós kell az alkalmazás üzemeltetéséhez.

Üzleti alkalmazások fejlesztésénél hajlamosak vagyunk beleesni abba a csapdába, hogy minden megoldás azonnal kell, mindegy bármi áron. És vannak fejlesztők, akik elég ötletesek ahhoz, hogy minden kérésre tudnak megoldást adni. Ez így rövid távon nagyon win-win (az ügyfél megkapja amit akar, a fejlesztő pénztárcája pedig vastag lesz), ám hosszú távon gondok lépnek fel, az alkalmazást egyre nehezebb üzemeltetni és továbbfejleszteni.

Nyilván ez általános probléma a szoftverfejlesztés teljes spektrumában, valahogy mégis MS technológián alapuló fejlesztéseknél láttam igazán látványos meghökkenéseket.

Ahhoz nem kell MS technológia, hogy valaki rossz kódot írjon. Rossz kódot bármilyen nyelven, bármilyen eszközzel lehet írni. A kód-cowboy-ok bárhol képesek spagetti kódot írni, a dokumentáltság és a konvenciók teljes mellőzésével. Csakhogy úgy egyébként a játéktér (mármint amin belül garázdálkodni lehet) eléggé limitált.

Ha webes alkalmazást írunk (mondjuk PHP-ban), akkor sokféle eszköz áll a rendelkezésünkre, de ezek mind a web szerveren belül vannak. Ha nem működik az alkalmazás, akkor elég webes területen belül szétnézni, mert a hiba forrása ott lesz. Ha telepíteni kell az alkalmazást, akkor csak vinni kell azokat a fájlokat, konfigurálni a web szervert, és kész.

Ezzel szemben amikor MS alkalmazást írunk, akkor nem csak a web szerveren és/vagy az adatbázison belül dolgozunk, hanem egy komplett ökoszisztémával dolgozunk (operációs rendszer). Például registry bejegyzéseket módosítunk, Scheduled Tasks segítségségével futtatunk programokat, a web szerveren keresztül hívunk meg OS szinten telepített programokat. (Például a felhasználó elküld egy formulát, a web szerver szerver oldalon létrehoz egy Excel példányt, kiszámolja a formulát, és visszaadja a web oldalon az eredményt)

Ezzel gyakorlatilag olyan függőségek alakulnak ki, amiket átlagos fejlesztő nem fog tudni egyszerűen átlátni. Természetesen egy idő után igen, de az új fejlesztő kinevelési költsége az egekbe fog kúszni.

Másrészt pedig ha hiba lép fel az alkalmazásban (például az Excel-es példában a kérdéses web oldal az 1. lépésben elszáll), akkor az átlagos rendszermérnök nem fogja tudni azt megoldani. Mert az átlagos rendszermérnök megnézi a webszervert (OK működik), az oprendszert (az is OK), és innentől kezdve nem érti.

Egy idő után a fejlesztő úgy fogja érezni, hogy egyszerűbb ha ő maga javít hibákat és ő telepít, mert sokkal hosszabb leírni/elmagyarázni mintha maga csinálná. És ezután az a szoftver nem lesz karbantartható. A fejlesztő előbb-utóbb úgyis elmegy a cégtől, vagy kinevezik valahová, és összeomlik a rendszer.

Miért van ez így?
Habár a Microsoftot említettem a címben, alapvetően nem ők okozzák ezeket  a problémákat, hanem azok a fejlesztők, akik túlságosan zseniális megoldásokat találnak ki.
Mert amikor megoldás kell, és valakinek van egy „ötlete”, akkor senki nem fogadja el a „túlságosan bonyolult” vagy „nem szabványos” ellenérveket.

Aztán eltelik 5 év, 3-4 fejlesztő, és az alkalmazás telepítéséhez 10 DLL-t és 30 registry változtatást kell vinni, de igazából senki sem tudja mi hogy működik, csak ha valami nem jó akkor visszakövetik a kódban hogy ki kit próbál meghívni.

Igazából senki sem kényszeríti a fejlesztőket, hogy átláthatatlan, fenntarthatatlan kódot írjanak. A lehetőség ott van, és egy képzett Microsoft-os fejlesztő nagyobb kárt tud okozni, mint egy JAVA-s, mainframe-es vagy adatbázisos kollégája. Valahogy az ilyen jellegű problémák nagyobb eséllyel fordulnak elő MS alkalmazásoknál.

Pedig a határvonalakat a Microsoft is meghúzta. A C# például kimondottan arra törekszik, hogy átlátható legyen a kód és az, hogy milyen eszközöket használunk. De persze lehet trükközni, hiszen vannak esetek, amikor nincs más mint közvetlenül a biztonságos környezeten kívülre merészkedni. (Most nem is említem azt az esetet, amikor az oprendszer vagy a fejlesztőeszköz „known issue”-ja miatt kell egy workaround-ot villantani)

A jó fejlesztői környezet, a sok dokumentáció és a RAD-os támogatás nagyon jó – hiszen csökkenti a fejlesztésre fordítani időt, hamarabb lesz megoldás, stb stb. Viszont ezáltal túlságosan a time-to-market-re helyeződik a hangsúly a minőség helyett. Ha könnyű programot írni, akkor jönnek a szakmunkás kódvetők, akik kezében a rendszer kalapács lesz, és mindent szögnek néznek.

Van valami jó abban, hogy az MS-es fejlesztők olcsóbbak a többieknél, mert biztosan fogunk találni elég embert ha MS fejlesztést indítunk. De a drága JAVA-s fejlesztők valahogy hozzák a minőséget és kevésbé hajlamosak az öngyilkos kódolásra. Valahogy jó lenne a kettőt ötvözni és kialakítani a gyors, de fenntartható szoftverfejlesztés irányelveit.

Ugyanis amikor ezen módszerek és eszközök alapelveit meghatározták, akkor még megszokott volt a sűrű verzióváltás, a max 4 évig élő szoftver. Manapság már 10+ évről beszélünk. Valami különös ok miatt az IT ipar nem követi az ügyfeleket, és a múltban él. A múlt nem fog visszatérni. Ez itt az új norma.

Címkék: szoftver fejlesztés fenntartható

A bejegyzés trackback címe:

https://akocsis.blog.hu/api/trackback/id/tr235211491

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

JoeP 2011.02.23. 18:40:16

Ne hagyd ki a számításból az ügyfelet se. Az egyik kedvenc projektem így nézett ki: kapcsoljunk össze egy Mysql-re épült alkalmazást egy Oracle alkalmazással, egy MSSQL alkalmazással, egy Windows Active Directoryval, egy C-ben írt alkalmazás saját adatfájljaival és egy Delphi-ben írt adatbázis adatfájljaival - Excel táblán keresztül. Minden alkalmazásban legyen export-import funkció (plain text-be), a mester adatbázis pedig az excel tábla, telepakolva vbscriptekkel. És ez az ötlet az ügyféltől minden évben előjött, aztán mivel a cégünkben akkoriban elég nagy volt a fluktuáció, az aktuális döntéshozók minden évben be is vállalták (jó pénz, sok munka) és minden évben nekem kellett legyilkolnom a projektet a technikai nehézségek alapos ismertetésével.

MekkElek 2011.02.23. 20:58:26

.NET oldal: - jól dokumentált fejlesztői, és üzemeltető szempontból, és sok best practices jellegű dokumentum van az MSDN-en is - aktuális silver bullet technológiák lassabban gyűrűznek be, emiatt érettebb, átgondoltabb az implementáció - monokultúra, nincs fragmentálódva a felhasználói tábor, teszteltebb (többen használják), probléma esetén könnyebb a hibát kideríteni - egységes összefüggő keretrendszer, egyszer megírták, és azóta stabilan megy - Többféle célcsoportnak készülnek a szoftverek, lásd: http://blogs.msdn.com/b/ericlippert/archive/2004/03/02/cargo-cultists-part-three-is-mort-a-cargo-cultist.aspx - emiatt az egybites fejlesztő könnyen be tud menni az erdőbe, viszont sokkal több egybites fejlesztő is tud vele dolgozni Java oldal: - nem egységes keretrendszer, sok párhuzamos ökoszisztéma, ami egyrészt jó, --- mert cserélhetőek az implementációk, vagy megoldások, és az igény szerint választhatóak, --- az innováció, az újdonságok is sokszor innen jönnek, De a gyakorlatban: --- inkompatibilitás, ugyanazt nem ugyanúgy implementálják (harmadszorra cseréljük az XML parsert a projekt közepén, mert xy funkció nem megy) --- adott implementáció nem dokumentált, kicsi a felhasználói bázisa, kevesen tesztelik, emiatt nem stabil, nehezen lehet haladni vele. --- nehezebb egy jó architektúrát összekalapálni, a választás szabadsága költséges --- mint fejlesztői, mint üzemeltető oldalról sokkal precízebb tudású emberek tudnak sikeres projekteket vinni Tanulság: a megfelelő tudású embereket kell felvenni a megfelelő helyekre. Ha nincs felelős architect (elvis), és nincs dokumentálva a dolog, akkor keletkeznek ilyen bakik. Egyébként az Excel-t mint asztali szoftvert az MS nem ajánlja nem interaktív folyamatokra, már jóideje cikk is van róla: http://support.microsoft.com/kb/257757

tocsa 2011.02.23. 23:56:04

Hogy mennyire irtózom a trükkös és zseniális kódoktól. Nem mintha nem tudnám őket megérteni (bár néha sok időbe telik, és mikor megérted akkor kb úgy fáj mint a nagyon durva faviccek), de már ezektől a hívó szavaktól futkos a hátamon a bőr. Kódolva van a karbantarthatatlanság. Amit szeretek: átláthatóság, egyszerűségre törekvés, konvenciók, tesztek, dokumentáció. Egyik cégnél volt egy "zseni", aki irtózatos mennyiségű kódot kifosott magából. A dolgok működtek is, ezért volt ő egyfajta zseni, azonban senki nem nézett rá az általa írt kódokra. Persze, mikor mér nem dolgozott a cégnél, akkor egy idő után elkezdtek kiesni a csontvázak a szekrényből. Annyira durva dolgokat művelt, hogy az tényleg úgz fájt, mint egy favicc. Volt neki egy megszokott kommentje a különösen trükkös részeken figyelmeztetés képpen: "This is a trick!". Na ilyenkor már tudta az ember, hogy fájni fog. Több részletet nem akarnék nagyon elárulni, nem szeretném felfedni a céget se senkit. Mindenesetre az egyik vezető fejlesztő fogalmazta meg lésőbb az illető zsenire vonatkozóan azt a kijelentést, miszerint "XY a C++ teljes eszköztárát ismerte, azonban teljesen félreértelmezte azt". Egyébként hogy nehogy valaki azt higgye, hogy beképzelt vagyok: bár jó programozóbak tartom magam, még mindig sokat próbálom képezni magam és a célom az, hogy olyan olyan programot írjak, ami valóban tökéletes már első kör után.

tocsa 2011.02.24. 00:00:12

Tyűha, ez az utolsó dolog a beképzeltségről kicsit fordítva sült el :). A lényeg: nem én vagyok a világ _legeslegjobb_ programozója, de törekszek arrafelé. Tehát nem akarok lebecsülni senkit, még az említett trükkös zsenit sem. Bár ahhoz hasonlót nem produkáltam mint ő, de én is vétettem sok hibát már a pályafutásom során.

Rónai Balázs · http://it-tanacsado.hu 2011.02.24. 00:11:34

"A zseniális programozótól ments meg Uram minket!" Azzal együtt, hogy a szerver oldali Office autómatizálás egy tudott módon nem támogatott megoldás (http://support.microsoft.com/kb/257757), talán itt mégis az a fő probléma, hogy rosszul lettek összerakva az általad látott projektek. A saját praxisunkban 10+ éve támogatunk MS alapú alkalmazásokat, ahol már az eredeti fejlesztők régen nincsenek ott, esetleg nem is mi fejlesztettük őket. Saját tapasztalatom éppen az, hogy az MS-nek nem csak az eszközei, de az architektúra mintái (patternek), elnevezési konvenciói, rendszertervei, stb. is meglehetősen egységesek és követhetőek az MS partneri körben. Legalábbis azoknál a cégeknél, akik nagyvállalati körben dolgoznak rendszeresen, embereiket képezik is. Ha ebben elakadtál, szólj!

m 2011.02.24. 14:47:39

Szerintem most kicsit felresiklottal :) A "draga" JAVA-s fejlesztovel egy arcsoportban mozgo (tehat szinten draga) .NET-es fejlesztok valoszinuleg pont annyira karbantarthato kodot tudnak irni, mint a kaves csapat. Csakhogy az ugyfel (mert arverseny van) nem oket, hanem az olcsobb .NET-eseket fogja felvenni a feladatra, mert minek fizetne tobbet, mint amennyit muszaj? A karbantarthatosag elvileg kriterium, nem extra feature, mindenkitol el van varva, maximum nem lesz teljesitve... Azaz valahol a rendszerbe van kodolva, hogy egy adott bonyolultsagu feladatot nem az annak megoldasara kepes szakemberek fognak csinalni, hanem azoknak egy olcsobb variansa, akik (hala a .NET konnyen elsajatithatosaganak) szinten 90%-os megoldast fognak vinni, a draga szakemberek dijanak feleert, ezzel viszont feladsz bizonyos dolgokat. Viszont ez nem azt jelenti, hogy a .NET kevesbe karbantarthato kornyezet. Csak azt, hogy itt szelesebb az "olcso szakemberek" savja, es az ugyfelek tobbsege koltseghatekonysagi megfontolasokbol eleve ebbol merit.

Ismeretlen_102125 2011.03.01. 17:42:27

@m: Meglehet hogy igazad van. A cikkben maga az észrevétel volt a lényeg, hogy valamiért a .Net fejlesztéseknek csúnyább a vége, pedig a Microsoft sokat tesz, hogy ezek a fejlesztések jók legyenek. A leírtakkal annyiban vitatkoznék, hogy manapság már minden magára valamit is adó multinál az összes fejlesztést LCC-ban (Leading Competitive Country) csinálnak, legyen az .Net, JAVA vagy Mainframe. Az LCC órabérek pedig ugyanazok, függetlenül a technológiáról (az is megérne egy cikket, hogy ez miért van így). És láttam már magát komolynak tartó, nem-LCC országbeli céget rosszul fejleszteni - nagyon hasonló hibákkal. Éppen ezért gondolom, hogy itt nem feltétlenül az ár vagy az ország jelenti a különbséget, hanem valahol a rendszerbe van kódolva a bukás. Persze amit láttam lehetett kivétel is, és lehet hogy tényleg az olcsó szakemberek saráról van szó. Kíváncsi lennék még további tapasztalatokra :)

m 2011.03.03. 13:55:55

akocsis: értem én, csak igyekeztem összekapcsolni a fontosnak ítélt tételeket: olcsóbb MS fejlesztő, jobb MS támogatás = rosszabb minőség. Mert szerintem összefügg, ugyanis a nagyon erős támogatás azzal jár, hogy sokkal többen képesek elsajátítani a .net fejlesztést egy bizonyos szintig, ellenben az erős védőháló miatt hajlamosabbak azt feltételezni, hogy többel is megbírkóznak vagy egyszerűen "értenek hozzá", mert nem tűnik nagy dolognak. Ez megmagyarázná azt is, hogy adott munkára általában miért tudsz olcsóbban MS-es fejlesztőt találni (mert valójában már egy kategóriával lejjebbről bejelentkeznek rá), hogy miért alkalmazod őket (a jó támogatás könnyebben elfed hiányosságokat - pl javaban ha egy GUI programozó kell, van két-három elterjedt lib, és valaki vagy ért hozzájuk, vagy nem.... míg .net-ben az ember hajlamos feltételezni, hogy a GUI fejlesztés "a csomag része"). Konkrét példa, mostanában többször interjúztattunk vezető fejlesztői munkakörbe (.net). A jelentkezők 90%-a a junior v. developer szintről jött, magukat több témakörben expertnek gondolták, de aztán csak maszatoltak, egészen egyszerű kérdésekre sem tudtak tiszta választ adni. Nem arról beszélek, hogy ők "bepróbálkoztak" - ők tényleg szentül hitték, hogy seniorok (és a legtöbb volt munkaadójuk és ügyfelük - szakmai cégek is! - ebben erősítették meg őket, csak épp igazán sikeres projektjuk, amit rendben átadtak, az ügyfél pedig elégedett volt, na az nem volt egy sem, inkább csak projektről projektre menekültek előre.
süti beállítások módosítása