Ahogy különböző cégeknél végzek tanácsadásokat, sok helyen látom, hogy saját keretrendszert fejlesztettek, fejlesztenek, döntenek a fejlesztése mellett. Én nem vagyok híve az ilyen jellegű saját megoldásoknak, és mivel sokszor kérdezik, és szóba kerül, leírom az ezzel kapcsolatos gondolataimat.
Saját keretrendszer fejlesztésének több oka is lehet. Találkoztam több, mint tíz éves (igen, Java) rendszerekkel, ahol ilyent használnak még mindig. Ezen szoftverek abból az időből származnak, amikor még JDBC, Servlet API létezett, és nem volt egységes, kialakult irány, szabványok, kvázi szabványok. Nem volt objektum-relációs megfeleltetés, MVC webes keretrendszerek. Ebben az esetben természetesen elfogadható saját keretrendszer kifejlesztése, bár itt is erősen ajánlott haladni a korral, és ahol lehet, újabb, szabványosabb irányokba elmozdulni. Láttam Java 1.4-en beragadt projektet, régi alkalmazásszerver verziókhoz kötött rendszereket. Ilyenkor érdemes olyan keretrendszereket bevezetni, melyek nem tolakodóak (non-intrusive, azaz a kódot nem járják át az architektúrális elemek), és lépésenként bevezethetőek. Egyik projektünkbe pl. a Spring-et sikerült úgy bevezetni, hogy először csak a perzisztens rétegben, majd egyre felsőbb rétegekben, végül a felhasználói felület rétegben. Érdemes a maradvány kódokat szépen elkeríteni. Amennyiben a maradvány kódjaink nem is objektum orientáltak, használhatjuk az object wrapper megoldást, azaz a procedurális kódunkat körbevesszük egy szép, objektumorientált API-val. Ez alatt az implementációt később cserélhetjük. Barátunk ilyenkor a refactoring, amivel kapcsolatban sokan elfelejtik, hogy refactor közben nem módosítjuk a funkcionalitást. A funkcionalitás teljes megtartásával strukturáljuk át a kódunkat, hogy könnyebben átláthatóbb és továbbfejleszthetőbb legyen.
Nagyon ritkán érdemes ilyenkor a teljes újraírás mellett dönteni. Nem lehet egy tíz éve fejlesztett rendszert pár hónap alatt újraírni. Kisebb lépésekben érdemes haladni. És közben viszont szerfelett mennyiségű tapasztalattal lehet gazdagodni.
Másik indok az szokott lenni, hogy a megrendelőknek, vagy inkább a fejlesztőknek egyedi igényeik vannak. Ezt csak nagyon ritkán tudom elképzelni. Amennyiben egy architect kellő tapasztalattal és tudással rendelkezik, biztos, hogy a legtöbb problémára már látott valamilyen megoldást. Nem hiszem el, hogy 9 millió Java programozó, és a nem tudom mennyi egyéb programozó nem futott volna bele ugyanabba a problémába. Ez legtöbbször a fejlesztő csapat szűklátókörűségét bizonyítja. Vagy egyszerűen túl lelkesek, és szeretnék megvalósítani saját ötleteiket. Melyek gyanítom nem is annyira világmegváltóak, hogy ne lehessen azokat máshol megtalálni.
Ennek kicsit finomabb változata, hogy ugyan tud a fejlesztő csapat arról, hogy vannak már létező eszközök, de nem felel meg mind az összes igénynek. Esetleg összehasonlító elemzést is végeztek, hogy melyik miért nem felel meg az igényeknek. Sajnos a legtöbbször már ismert a vágyott cél, hogy mit kell az elemzésnek kihoznia. Itt is el kell gondolkodni azon, hogy ne a tökéletességet keressük, hiszen nem biztos, hogy pont mi fogjuk azt elérni. Lehet, hogy együtt lehet élni egy eszköz hiányosságaival, ahelyett, hogy teljesen sajátot fejlesztenénk. És ha találunk egy igényeinkhez közel állót, miért ne szállhatnánk be a fejlesztésébe, vagy miért is ne tudnánk arról leágazni (, bár utóbbival is vigyázni kell, hiszen a leágazás után már elveszik az automatikus magasabb verzióra váltás lehetősége, és merge-öléssel találjuk szembe hamar magunkat - ez talán az elosztott verziókezelő rendszerek megjelenésével már kevésbé fájdalmas).
A gyakori ügyfél igény az, hogy az alkalmazás minél testre szabhatóbb, minél jobban konfigurálhatóbb legyen, igen, programozás nélkül. Mikor ilyen igény merül fel, legyünk óvatosak. Hiszen mit akar az ügyfél? Azt, hogy fejlesztés nélkül újabb funkciókat tudjon maga megvalósítani. Itt már gyanút foghatunk, hiszen nem nekünk akar fizetni, hanem a problémáit maga szeretné megoldani. Azaz bizalmatlan, és ez nem biztos, hogy jó jel egy projekt elején. Egy általános eszköz fejlesztése feltehetően nagyobb költség, mintha a kívánt funkciókat, egyesével, saját keretrendszer nélkül kifejlesztetné. És sajnos sokszor láttam, hogy a személyre szabás túl absztrakt, túl technikai lett, így az ügyfél mégsem tudta használatba venni. Így ahelyett, hogy a programozók implementálták volna a funkciókat standard módon, valami saját eszközben kellett ezeket speciálisan megoldaniuk.
És már el is jutottunk a 4GL, CASE és RAD eszközök világához. (Vigyázat, nem ugyanazt jelentik, csak ugyanarra a problémára szeretnének megoldást adni.) A programozókban mindig is megvolt az igény, a lustaság, hogy olyan eszközöket készítsenek, melyek saját és mások munkáját könnyítik, akár programot generáljanak. Lehessen "egérrel programozni", informatikai szaktudás nélkül. És valahogy mégis, ezek az eszközök mégsem hozták el a világmegváltást. Miért van az, hogy egy egyszerű programozási nyelv, melyhez csak parancssoros fordító volt, szövegszerkesztőben írtuk a kódot, le tudott taszítani a trónról olyan eszközöket, mint a Delphi, Oracle Forms, stb.? És most is születnek ilyen nyelvek, és megvan a létjogosultságuk, terjednek. Miért hisszük azt, hogy amibe a Borlandnak, Oraclenek beletört a bicskája, mi meg tudjuk valósítani? A nagy piros gombot, amit megnyomunk, és kiesik a szoftver?
Véleményem szerint itt is látszik a ciklikusság, egyre jobban elkezdenek a nyelvek, platformok elmenni az irányba, hogy automatizálják a fejlesztést, és a végén mindig a süllyesztőben kötnek ki, és egy primitív, egyszerű eszköz veszi át a helyüket. Gondoljunk a Java ilyen irányú fejlesztéseire is, pl. VisualAge for Java, NetBeans ilyen irányú fejlesztései, stb.
Itt érdemes megemlíteni a forward engineering, reverse engineering és ennek egyvelegét, a roundtrip engineeringet is. Vagy beszélhetünk a Model-driven architecture (MDA) megközelítésről is. A háttérben mindig valami kódgenerálás is áll. Ilyen projektet is gyakran láttam, és sosem tudott meggyőzni. Mi is próbálkoztunk ilyenekkel, de nem sikerült egyértelmű eredményeket elérni. A legtöbb esetben nagyon nehéz belőni a modellezés absztrakciós szintjét, amiből az alkalmazás vázát le lehet generálni, és az fejlesztéssel befejezni. Általában elmennek olyan irányba, hogy már mindent a modellbe akarnak leírni. Ezáltal egy programozási nyelvhez közeli, vagy bonyolultabb modellező nyelv sül ki belőle. A fejlesztőknek ez csak egy darabig izgalmas. Miért kell egy Java fejlesztőnek diagramot rajzolnia? Ezzel kapcsolatban tetszik az UMLet álláspontja. Egy modellt sok tíz képernyőn keresztül, sok ezer tulajdonsággal, szabállyal beparaméterezni sokkal bonyolultabb, mint egy leíró nyelvet használni erre. Sosem szerettem a Rational Rose-t. Sajnos ezen rendszerek a megbízhatatlanságukkal, kiforratlanságukkal szintén elveszik az ember kedvét. Próbáltam AndroMDA-t, openMDX-et, de nagyon behatároltak voltak és hibáktól hemzsegtek. Próbáltam Posseidon for UML, ArgoUML, StarUML eszközöket. Kimérve mindig sokkal gyorsabb volt Java forráskódot írni, Java interfészekkel tervezni, JavaDoc-ot írni, és abból visszagenerálni a modellt. Nem, a Spring Roo-ban sem hiszek.
Nézzük, milyen hatása van a saját keretrendszerek a programozókra. Gyakran láttam, hogy egy-két okos programozó írta a keretrendszert, és a kevésbé okosnak tartott programozók csak használták. Ismerős? Kérdeztétek már meg, mit gondolnak úgy igazán a keretrendszerről? Egyrészt nagyon sok munkával megtanulnak egy olyan dolgot melyet sehol máshol nem tudnak használni, melytől nem lesznek többek, mely nem motiválja őket, nem írható be az önéletrajzukba. Ki vannak zárva egy körből, nem hozhatnak döntéseket, nem tudnak a miértről. Nem kapnak megfelelő szintű támogatást, dokumentációt. Hallottam programozóról, aki úgy kezdi az interjút, hogy kell-e saját keretrendszerben dolgozni. Ha a válasz igen, akkor nem folytatja az interjút.
A fejlesztők manapság mindig modern, divatos, trendi technológiákkal akarnak dolgozni. Nehéz őket saját keretrendszerrel megfogni.
Gyakran láttam, hogy a keretrendszer alkotójának elege lett, továbbállt, otthagyta a rendszerét. Olyanoknak kellett átvenniük, akik nem értették, nem látták át teljesen, nem voltak tisztában a döntési folyamatokkal. A keretrendszer alkotókat gyakran nem lehet elég sokáig lekötni, aktív, kreatív emberek, akik nem állapodnak meg, újabb és újabb ötleteket próbálnak ki, és folyamatosan patkolandó dolgokat hagynak maguk után. Mivel pezseg a vérük, nem töltik idejüket olyan haszontalan dolgokkal, hogy a legapróbb részleteket is átgondolják, a legutolsó részt is lefejlesszék és dokumentálják a rendszert.
Ilyen fejlesztők gyakran abba a hibába esnek, hogy egy problémát túlzottan általánosan próbálnak megvalósítani. Igaz ugyan, hogy most nem kell, de később jól jöhet. Gyakran lehet a YAGNI (You ain't gonna need it) elvet hallani, hogy pontosan azt fejlesszük le, amire szükség van, ne fejlesszünk olyan funkcionalitást, amire azt gondoljuk, hogy majd szükség lehet rá. Vagy nem lesz rá szükség, vagy nem úgy lesz rá szükség. Az ügyfél ilyen szempontból hatalmas kreativitással rendelkezik, hogy olyant kérjen, amire úgysem gondoltunk.
Milyen lehet egy ilyen rendszer minősége? Gondoljunk bele, hogy olyan keretrendszereknél, mint a Spring, Struts, stb., melyet több ezren használnak, tesztelnek, nézegetik a forrását, milyen gyakran jegyeznek be hibákat, milyen gyakran frissülnek, milyen a fejlesztői aktivitás. Hogy gondolhatjuk, hogy pár fejlesztővel ugyanolyan szintű eszközt képesek vagyunk gyártani? Úgy, hogy nekünk nem ez a fő profilunk, hanem fő munkaidőben az ügyfelek óhajait, problémáit kell megoldanunk. A keretrendszer fejlesztésére, unit tesztelésére, dokumentációjára sosem marad idő. Előbb az égető problémákat kell megoldani, a funkcionalitásra kell összpontosítani, az ügyfél azért fizet.
Miért jó ez a menedzsmentnek? Örülnek, ha olyanra költik a pénzt, aminek semmi látszatja nincs? Nem lesz tőle több képernyő. Nem tőle lesz több funkció. A keretrendszer implementálásával csak a lehetőségét valósítjuk meg, hogy a felhasználó számára alkalmazást fejlesszünk. De még nem fejlesztettünk egy percet sem. Mennyire felel meg ez a manapság annyira oly divatos agilis módszertanoknak? Mennyire követi a KISS (keep it simple ...) elvet?
A keretrendszer azért kell, hogy a képernyőket, funkcionalitást gyorsabban ki tudjuk fejleszteni? Hányszor hangzott el, hogy ezt nem tudja a keretrendszer, ezt a keretrendszerben kell kifejleszteni, ez így túl lassú lenne a keretrendszerben, stb.?
Bizonyos emberekben valamilyen blokk van, hogy más munkáját használják fel. Kritizálják, mindenből sajátot akarnak írni, saját XML parser, saját protokoll, saját formátum, saját keretrendszer. Ismert a jelenség, nem csak informatikában, "Not Invented Here (NIH)", általában pejoratívan használják.
Ezek a keretrendszerek nem felelnek meg a szabványoknak. Nem széleskörűen elterjedtek. Nem lehet az utcáról felvenni egy olyan programozót, aki értene hozzá. Nagyon drága a betanítás. Hiszen nincsenek képzett oktatók, nincs oktató anyag. Általában elé adják az új fejlesztő elé, és próbálja meg egyedül felfejteni (a vezető programozónak nincs ideje pátyolgatni), próbálja meg az eddigi megoldásokat lemásolni. Csak általában egy keretrendszer használatával is ugyanarra a problémára a fejlesztők három különböző megoldást használtak.
Nem csak már bevált, működő, széles körben elterjedt keretrendszereket érdemes használni, hanem érdemes (kvázi) szabvány API-k közül választani, ami alatt cserélhetjük az implementációt. Cseréltünk már Hibernate-et EclipseLink-re, mert jobban megfelelt az igényeinknek. Építkezzünk modulárisan, hiszen csak így van lehetőségünk a modulok esetleges későbbi kiváltására, programozzunk interfészekkel, használjunk rétegeket, tartsuk szem előtt a loose coupling, high cohesion elveket.
Nagyon fontos, hogy az ezzel kapcsolatos viták során mindig eljutunk a szép architektúra, szép kód fogalmához. A szépség szubjektív. Ízlésről nem vitatkozunk. Parttalannak érzem az XML kontra programozott konfiguráció, a NetBeans kontra Eclipse vitákat, az annotációk túlzott használatát elítélő kijelentéseket. Érvek, objektív érvek kellenek. És még sajnos így is beleütközünk abba, hogy minden megoldásnak van jó és rossz oldala is. És ráadásul lehetnek ezek egyensúlyban is. Döntsünk ésszerűen, érveljünk ésszerűen.
Félreértés ne essék. A postban direkt sarkítok. Próbálok erős érzelmeket kiváltani. Nem azt mondom, hogy ne fejlesszünk saját keretrendszert, mert akkor még mindig assembly kódot írhatnánk. Vannak okos emberek, okos ötletekkel. Sőt, sok esetben nem is kell nagy ötlet, csak egy elegáns megvalósítás. De mindig alaposan gondoljuk át. Ne játszunk a cégünk, vagy a megrendelő pénzével. Saját keretrendszer kifejlesztése nagyon-nagyon drága, a legtöbb projekt ezt nem bírja el. Ne játszunk a kollégáink türelmével. Ne a saját önzésünk vezéreljen, hanem mérlegeljünk. A kreativitásunkat máshol éljük ki, úgy, hogy az ne menjen egy cég, egy csapat, egy projekt rovására. Próbáljunk különböző vérmérsékletű, kvalitású embereket is bevenni a döntési folyamatba. Legyen lelkes, legyen kétkedő, legyen tapasztalt, legyen kezdő.
Azt hiszem, hogy a legtöbben azért beleestünk abba a hibába, hogy saját keretrendszert fejlesztettünk, vagy kezdtünk fejleszteni. Ne szégyelljük, próbáljunk idejében váltani, tanulni belőle.
Érezhető, hogy a szoftverfejlesztés során nagyon fontos az emberi tényező. Nagyon kevés mindenki által elfogadott alapelv van, mindenre lehet érvet/példát találni, és annak ellenkezőjére is. Kevés, hogyha jó technológusok vagyunk, néha jobb lenne pszichológusnak lenni. Próbáljuk felismerni és kihasználni az tipikus fejlesztői viselkedésformákat.
Van a postban olyan, amit ti is gyakran tapasztaltok? Mi a véleményetek?

Gratulálok a cikkhez! Ilyenekre van szükség. Még, még!
VálaszTörlésHát láttam ilyen saját keretrendszert zseniális fejlesztővel. Legszivesebben kihagynám a CV-mből, de másfél évig szivattam magam velük.
VálaszTörlésKöszönöm! Ez kevésbé illik az eddigi sorba, kicsit bizonytalan is voltam, kíváncsi vagyok a visszajelzésekre!
VálaszTörlésNalunk is sajat keretrendszer van, evek ota probalkozok kulso cuccok (JPA, Spring) bevezetesevel, csak nekem tul lassan halad, meg hat ki vagyok en? sima developer ;)
VálaszTörlésA cikk jo, gratula ;D
Nagyon jó írás, bár sajnos még nem tudtam végig olvasni a meló miatt :) Ilyen cikkek jöhetnek bármikor!
VálaszTörlésEzt a megjegyzést eltávolította a szerző.
VálaszTörlésKöszönöm a pozitív visszajelzéseket! Ez a post nem annyira technikai jellegű, kíváncsi voltam, mit szóltok hozzá!
VálaszTörlésMilyen téma lehet érdekes még számotokra a metodológia vonalon?
Nagyon jó cikk! Itt is nagy sikert aratott kollégák között. A z 1.4-es Java-nál volt nagy mosoly - most mentünk 1.3-ról 1.5-re :)
VálaszTörlésAmúgy ez a keretrendszer dolog - mindig lesz/van olyan dolog/igény, hogy valami minimál keretrendszert készíteni kell. Lehetőség szerint ezt kell minimalizálni - és bele kellene venni a fejlesztési/élettartam ciklusba azt is, hogy a meglévő, régebben fejlesztett keretrendszereket az aktuális/új szabványokhoz kell húzni/portolni. Szerintem ez a migrálás "fáj" mindenkinek.
Sokan azt is keretrendszernek hívják, amikor a kiválasztott eszközöket (3rd party library-ket) integrálod, és fejlesztési szabályokat alakítasz ki, hogy hogyan kell azokat alkalmazni, esetleg ezekhez segédosztályokat is gyártasz, vagy egy példa funkciót megvalósítasz benne. (Erre Maven-ben szép példa az archetype.) Gyakorlatilag egy best practice, hogy milyen konvenciókat tartsunk be az alkalmazásban. Ezt teljesen elfogadhatónak tartom.
VálaszTörlésEgyetértek, bár egy keretrendszernek nem feltétlenül kell akkorára nőnie, mint az itt leírtak és nem kell minden egyes problémát egyedi módon megoldania. Használhat különféle libeket a küldönböző problémákra és maradhat kicsi, egyszerű.
VálaszTörlésKicsit hasonlítanám a saját keretrendszer fejlesztését az új platformra/verzióra portolásához - kell az izgalom, a kihívás. Mindenfajta tudományos megalapozottság igénye nélkül én ezt az érdekes problémák hiányával (is) magyaráznám - sajnos még a ma is jellemző, hogy a fejlesztőt nem az üzleti igények megvalósítása motiválja, mert számára az csak egy újabb if beleépítése vagy egy újabb konfigurációs opció bepipálása, s mint ilyen, nem motiváló. De a kreativitást ki kell élni, s mivel az üzleti területet nem, a technológiát meg ismeri, ezért ott keresi (s találja meg) a kihívást.
VálaszTörlésLehet, te több helyen jártál mint én - azoknál a kis csapatoknál is megfigyelhető ez a frameworkitis, ahol közelebb állnak az üzlethez a fejlesztők?
Messze bonyolultabb a témakör mint amit egy megjegyzésbe beleférne, de lenne pár gondolatom:
VálaszTörlésNagyrészt igazad van, általában semmi értelme keretrendszer fejlesztésébe kezdeni, projekttel együtt pedig kimondottan öngyilkosság.
A framework fejlesztési vágyat általában az kelti fel, hogy az évek óta fejlesztett, toldozott foldozott "szabványos" rendszerek lassan/nehezen tanulhatók, legalább egy sikeres projekt tapasztalata kell a hatékony használathoz, és többnyire nem elég gyors velük a munka, nem beszélve az elkészült cuccok módosíthatóságáról.
Pl. részt vettem egy projektben, amit struts 2-ben kezdtünk írni, mert "ahhoz mindenki ért", "a struts 1 már bizonyított". Óriási hiba volt. A kb. 30 fejlesztőből senki nem ismerte alaposan, lényeges követelményeket nem lehetett vele teljesíteni, és sebeségre sem remekelt (ognl miatt pl.). A sok ész nélküli belenyúlkálás után gyakorlatilag egy beépített feature sem működött rendesen.
Vagy láttam már megerőszakolt liferay-es projektet is, ami koloncként húzza magával az egész portál funkcionalitást. Működni már semmi nem működik belőle.
Nem azt mondom hogy nincsenek használható eszközök, de nagyon kell tudni választani, és ha már választott az ember, ki kell ismerni a specialitásait, mert messze nem szabványos minden. Pl. klaszterezés, deployment, monitorozás.
Aztán megváltoztatják itt ott, és lehet tanulni az új hülyeségeket.
Én és a programozók többsége nem olyan eszközökkel szeretne dolgozni, amiket kiválasztani integrálni, kiismerni, optimalizálni kell. Csak működjön és tudjam elvégezni vele a munkám.
Szomorú látni, hogy mennyi a rossz eszköz, és hiába a java tool-ok fejlettsége és bonyolultsága, ha egy jó php-s csapat fejlesztési időre és akár a megvalósított funkcionalitásra nézve is nagyobb javas team-eket aláz porba.
Félre ne érts, a java és a php nem említhető egy lapon, de sajnos az ügyfelet nem érdekli, hogy mi hogy van megoldva. Ha agyon kell egy oldalt ajaxozni, én nem mondhatom, hogy nem támogatja a framework, a több perces fordítás és deployment szintén nem fér bele. (Tudom, elvileg ez újabban kikerülhető, de könnyű belecsúszni)
Ha annak idején felteszem a karrierem a j2ee valamelyik korai verziójára, hát igen csúnya bukás lett volna belőle.
A gyakorlatban nálunk egy php-s saját keretrendszer vált be. Évek óta fejlesztjük, és nagy projekteket is csinálunk vele. Erről legalább tudom, hogy nincs benne semmi felesleges, nincsenek integrációs problémák, és mindent támogat amit kell, ha pedig nem, akkor hagy teret az egyéni megoldásoknak. Van par feature benne, aminek máshol nem sok nyomát láttam: metaadatok, adatbázisszerkezet és adat menedzsment, egy gombnyomásos deploy (nem csak kódra, db-re is), jól kereshető automatikus adatmódosítás és híváslog, jogrendszer, perzisztencia (nem olyan profi mint a hibernate, de elég), query builder, ajax támogatás, stb.
Azt gondolom, most ezzel a rendszerrel messze versenyképesek vagyunk, ha az ügyfél elfogadja a php-t. Hosszú távon portolni szeretnénk java-ra, de nem sok előnye lenne, főleg ha a php-s eclipsen még javítanak egy kicsit.
Egyébként van benne java is, a nyomtatás jasper, az aszinkron üzenetkezelőt pedig épp most írjuk grizzly alapokon.
A ciklikusság amit említettél az azért van, mert rossz alapokra építve előbb utóbb összedől bármi, ha elég nagy lesz. Nem lehet az információkat össze vissza kódban, uml rajzokban, xml-ben, annotációkban, html-ben stb. tartani.
Nekem is vannak egyébként hosszú távú framework terveim, szeretnék egy teljesen formális alapokra helyezett rendszert, de nem tudom hogy lesz-e energiám és időm rá. Egyelőre még a szükséges elmélet is csak félkész állapotban van, az pedig biztos, hogy másképp nem lehet a meglévő rendszereknél jobb eredményt elérni.
Arra gondoltál már, hogy több energiát elvisz a különböző keretrendszerek tanulása, mint egy saját megírása? Elsőre vadul hangzik, de én sokszor éreztem így.
VálaszTörlésTovábbá: egy idegen keretrendszert soha nem fogok annyira töviről-hegyire ismerni, mint amit én írtam.
Ezzel együtt minden igaz, ami a posztban van.
A konfiguracion keresztuli programozashoz szeretnem hozzatenni a leirtakon tul, hogy erre is rengetegfele kiforrott eszkoz van, amik akar integralva is lehetnek elterjedtebb frameworkokhoz.
VálaszTörlésBeagyazhato scriptnyelvek, MVEL, rule engine, satobbi.
A testreszabando funkciok rendszerint csak gombok a kabaton, es nem forditva.
Hi
VálaszTörlésA lényeggel egyetértek, általában nem érdemes keretrendszert fejleszteni. Csak akkor mint korábban Csiszár Tibor irta, ha a saját keretrendszerére tudja építeni az üzletet. Ekkor jó lehet, de nagyon el kell tudni kapni a célt.
Emlékezem, amikor korábbi munkahelyemen a rendszer fejlesztés átcsapott keretrendszer fejlesztésbe aztán a végén ár driverekt is akartak irni a fejlesztők. A projekt sohasem fejeződőtt be ...
Sajnos már találkoztam a saját keretrendszer problémájával, néha még ma is szívunk miatta. Persze aki írta már nincs a cégnél, de ő tipikusan az az ember aki mindenből sajátot ír. Nyilván ez is még több nehéz napot idézett elő.
VálaszTörlésGrat a cikkhez!
Alapvetően egyet értek, de azért lenne két megjegyzésem:
VálaszTörlés1. Szerintem kifejezetten hasznos, ha ír valaki egy saját framework-öt, csak utána tegye félre, és használjon valami mást. Ebből rengeteg tapasztalatot lehet szerezni, és olyan dolgokat is meg lehet ismerni, amit amúgy ma már egy fejlettebb framework simán elfedne.
2. Lehetnek azért speciálisabb esetek is, pl. nálunk (Ustream) annó azért csináltam egy sajátot (előttem is mondjuk saját volt), mert fontos volt a teljesítmény. Sikerült elérni, hogy egy hello world appból egy kb. butított symfony tudású framework-ben átlagos szerveren 2-3000 req/sec-et ki tudott szolgálni, akkor a népszerűbb framework-ök ennek a nyomában sem voltak. Utólag elég sok mindnet belepakoltunk még (van jó pár olyan feature is, ami pl. a symfony2-ben lett csak a symfony esetén), de így is jóval hatékonyabb, mint a létező frameworkök (nyilván speciálisabb is).
Nagyon jó post gratulálok. A saját keretrendszer készítése tényleg őrült munka... De még őrültebb amikor a vezetőség mindent szeretne legeneráltatni egy 3rd party cuccal, nálunk már volt pár microsoft bemutató ahol a "neves" szakember mindent legenerált pár kattintással és páran tényleg elhitték, hogy működik. Sajnos tapasztaltam hogy mostanában az oracle marketingje is hasonlo a jdeveloper + adf + ora trioval.Idősebb korosztályba akik magicen, delphin és nem tudom milyen egyéb dolgokon nőttek fel vagy az jellemző, hogy nem akarnak kódolni vagy hogy mindent egy saját noname megoldással akarnak megoldani...
VálaszTörlésEn csak par dologra reagalnek a kommentek kozul.
VálaszTörlésEloszor is, ha az architect olyan frameworkot valaszt, amihez senki sem ert a fejlesztok kozul, vagy a kisebbseg ert csak hozza, akkor ezt jelezni kell fele, ha ez nem eleg, akkor el kell tole koszonni. Egy ilyen architect barmikor barmilyen projektet megolhet a hozza nem ertesevel. Szerintem.
Egy framework megtanulasa valoban neheznek tunhet, es egy-egy projekt eseteben nem is biztos hogy kifizetodo, de ezt "hosszutavu befektetes" cimszo alatt ismeri a bankszakma. Lehet, hogy akkor, ott nem fogod tudni hasznalni az adott keretrendszert, vagy kiderul, hogy rossz dontes volt, de barmikor johet egy olyan projekt, amikor azt mondod, hogy "jee, hiszen ehhez fel lehet hasznalni az XY keretrendszert!". Es ez sokszor nagyon jol tud jonni.
Egy kisebb csapatnal, egy nagyobb projektnel siman elojohet az, hogy az adott keretrendszer megsem valtja be a remenyeket, le kell cserelni. Ettol az adott keretrendszerrel szerzett tapasztalat nem vesz el a semmibe, ott marad a fejekben. En ugyan rendszergazdai vonalon mozgok inkabb, de rengetegszer volt olyan esetem, hogy tudtam segiteni egy olyan problemaban, amihez senki meg csak hozza sem tudott szagolni, pusztan azert, mert en messzirol, tavcsovel lattam mar ilyet.
A sajat keretrendszer irasaval kapcsolatban en is csak azt tudom mondani: csak akkor, ha mar minden mas ut jarhatatlannak bizonyult. Es akkor is, lehet hogy erdemes egy meglevo keretrendszerbol kiindulni, azt lebutitani/atirni, hogy gyorsabb legyen. Igy meg lesz az az elony is, hogy ha a kiindulo rendszer szabvany feluletekkel kompatibilis volt, akkor a mi rendszerunk is az lesz, kovetkezeskeppen jobban fog illeszkedni barmilyen mas rendszerhez, mintha nekunk kellene a biteket atlapatolni.
@Hodicska Gergely: azt állítod, hogy jelenleg nincs/vagy nem ismersz olyan keretrendszert, mely megfelelő teljesítményt lenne képes leadni? Én ezzel együtt tudok élni, csak nagyon elszomorodnék. Egyszerűbb, de nagyobb forgalmú webes rendszerek létrehozására nem alkalmas a Java a létező keretrendszereivel? Nem lehet, hogy itt maga a Java és a hozzá tartozó programozási paradigmák lehet egy szűk keresztmetszet? És mindenki a horizontális skálázhatóság irányába megy, ahelyett, hogy ettől a kolonctól válna meg? Ha viszont nektek sikerült egy nagy teljesítményt biztosító keretrendszert megalkotni, nem akarjátok megnyitni a forrását? :)
VálaszTörlés@Gábor ötlete, hogy érdemes lehet egy már meglévő keretrendszert lebutítani, nagyon érdekes ötlet!
Köszönöm a véleményeiteket, látom ez a téma mindenki fantáziáját megmozgatja. Magasan a legolvasottabb cikkem lett. Van még olyan téma, amiről szívesen olvasnátok?
Úgy látszik, ami hiányzott a cikkből, az annak definíciója, hogy én mit tartok keretrendszernek. Én a nagyra nőtt monstrumokat hívom így, melyek bonyolultak, betanulása lassú. Többen említettétek, hogy egy projektnél egy ragasztó jellegű keretrendszer kellhet, apró, pár osztállyal, egyszerűen. Természetesen ezeknek én is mellette vagyok, de ezeket max. egy óra alatt át lehet látni, és a kiválasztott technológiákat integrálja.
VálaszTörlésSajnos eddig én még csak olyan csapatokat láttam, ahol előbb vagy utóbb előbukkant a probléma, és lehet, hogy egy eldugott zugból, de kezdett egy keretrendszer előburjánzani. A fejlesztők még mindig jobban szeretik a technológiai kihívásokat, és az üzleti problémák elől szeretnek saját kis zugaikba elmenekülni, ahol kiélhetik kreativitásukat. Erre egy keretrendszer kitűnő eszköz.
Elhangzott az is, hogy a szabványos keretrendszerek gyakran rosszul kerülnek kiválasztásra, nincs velük éles tapasztalat, és a projekt során derül ki, hogy ez nem lesz megfelelő. Én is azt az elvet vallom, hogy ott az architect rontotta el az elején, nem lehet egy fejlesztésbe így belemenni. Sajnos rengeteg cég projekten tanulja meg az új technológiákat, ami alapvetően hibás. Sajnos nálunk még nem terjedt el a nézet, hogy hívunk egy szakértőt, aki segít az elindulásnál, akár kis kód review-t tart. Így beleugranak egy meglévő keretrendszerbe, hogy majdcsak megoldják. És persze ismeret és tapasztalat hiányában rosszul használják a keretrendszert, utána elkezdik minden fórumon szidni.
Sajnos a Java-nak vannak hátrányai, és igen el lehet csúszni. PHP-val szembeállítva elhangzott, hogy sokkal lassabb a fejlesztési ciklus (kódolás, telepítés, tesztelés), valamint voltak bukott dolgok, mint a J2EE. Mindkettővel egyetértek. Lassan én is úgy érzem, hogy üzleti logikára nincs alkalmasabb nyelv a Java-nál, de webes fejlesztésre nem biztos, hogy a legmegfelelőbb. A J2EE-nél mi kivártunk, és mikor már az úttörő cégek belefutottak, és levonták a következtetéseket, hogy nagyon körülményes a használata, akkor döntöttünk, hogy ebbe nem ugrunk bele. Más tapasztalataiból is rengeteget lehet tanulni. Az élet fura fintora, hogy most pont egy J2EE projektet fejlesztünk tovább, és annyira jól van megírva a J2EE réteg (kb. 6 éve lett kifejlesztve), hogy nem migrálunk fel, hanem ezt használjuk. Élő példa, hogy lehet rossz keretrendszerrel is szép, tiszta üzleti alkalmazásokat írni. A mai, modern, annotációkkal teletűzdelt keretrendszerekkel írt alkalmazásainkat fogjuk több év múlva is érteni? És meg is válaszolom. Nem a keretrendszer a lényeg, hanem hogy hogy lett az alkalmazás felépítve. De a J2EE-hez találtam most is dokumentációt, egy saját keretrendszerhez nem találnék.
Elhiszem azt is, hogy egy saját keretrendszer kifejlesztése van, hogy rövidebb idő, de... És visszautalnék a cikkre. A befektetett tanulás később meg fog térülni. Saját fejlesztése esetén nem nyersz annyit.
Másrészt igaz, hogy egy idegen keretrendszert nem ismersz annyira, mint a sajátod, de egy másik fejlesztő, aki a projekten van, tuti, hogy nem a tiedet szeretné megismerni, hanem egy elterjedtebbet. Az ok egyszerű, talán túl egyszerű. Ha egy szabványos keretrendszer belekerül az önéletrajzába, nő a fejlesztő piaci értéke.
Testre szabandó funkciókkal kapcsolatban igaz, hogy azoknak csak plusz funkcióknak kéne lenniük, de láttam olyan keretrendszert, melyet át és átfűzött az az igény, hogy az ügyfél bárhol be tudjon avatkozni. Itt is az van, mint sok helyen, hogy nagyon nehéz meghúzni a határt. Az ügyfélnek nagyon nehéz elmagyarázni, aki nem ért a technológiához, hogy valamit miért konfigurálhatnak, valamit meg miért nem. És akkor jön egyrészt az új igény, hogy akkor azt is, meg hallottam a gyakran bevethető mondatot is, hogy a konkurencia terméke viszont tudja. Ezzel kapcsolatban mindig felvetődik bennem, hogy abból az energiából, melyből egy általános keretrendszer kerül kifejlesztésre, vajon hány egyedi funkciót lehetne kifejleszteni? Itt egyedül a bizalom hiányzik, az ügyfél és a fejlesztő cég között.
István:
VálaszTörlés"üzleti logikára nincs alkalmasabb nyelv a Java-nál, de webes fejlesztésre nem biztos, hogy a legmegfelelőbb"
Csak érdeklődésképpen van jobbnak tűnő megoldás, annál ha GWT -t a megfelelő kliens oldali patternekkel és architektúrával alkalmazzák (MVP, események felületi elemek között, Command -ok küldése a szerver oldalra...) ? Még amiatt is sokkal egyszerűbbnek tűnik, mert így a kliens oldalon is Java -ban lehet fejleszteni és nem kell html, jsp, javascript stb.
---------
Ahogy látom még nem írtál az Distributed version control megoldásokról (Git, Mercurial...). Ha vannak ezekkel tapasztalataid, miben jobb mint az SVN, lehet -e egyszerűen migrálni, mennyire kiforrott az IDE integrációjuk stb. az engem érdekelne.
Ezt a megjegyzést eltávolította a szerző.
VálaszTörlésA cikk megjelent a Liferay Hungary falán: http://www.facebook.com/LiferayHungary
VálaszTörlésA cikk címe lehetne: Egy nap a magenta T-nél :) Nagyon jó anyag, köszi
VálaszTörlés