Nem igazán értem Rasmus ellenkezését a frameworkökkel kapcsolatban. Az oké, hogy anélkül gyorsabb, viszont azzal egyszerűbb - nekem legalábbis - ami azért nem egy utolsó szempont.
Én egy saját "framework"-öt fabrikálok. A cél nem egy framework létrehozása volt, hanem a saját munkamódszerek felfejelesztése egy robosztusabb megvalósításba, mellyel egységesíteni tudom a készített cuccokat, legyen szó egyszerűbb honlapról, webáruházról, vagy egy komplex céges webalkalmazásról.
Az idők során ahogyan találkoztam bizonyos dolgokkal, beépítettem a saját munkamódszereimbe, így fejlődik apránként a "framework". Nem ad komplex megoldást, nem tör olyan babérokra, mint a CakePHP vagy más nagyobb PHP-s keretrendszereket.
Nem célja, általános megoldás nyújtása, inkább csak egy vázat ad, amire tetszőleges rendszer felépíthető (tudom, ez a célja minden framework-nek, de jóval nagyobb szabadságot ad, mint egy komplex PHP-s framework).
Picit most elbizonytalanodtam. Elolvastam Rasmus ezzel kapcsolatos irományát, és kipróbáltam, milyen lenne megint framework nélkül dolgozni. Nem rossz. Sőt! Erősen elgondolkodtam, hogy visszaváltsak. A Zend Framework moduljait persze továbbra is használnám, ha szükség lesz rájuk. No majd meglátjuk.
... kb. arra jutottam, mint ő. A cikket nem olvastam végig, csak átfutottam, de ahogy látom a lényeg az, hogy jobb, ha nem állunk neki megérteni egy meglévő framework-öt, majd átfaragni úgy, hogy az nekünk, a munkamódszereinknek megfeleljen. Hanem csináljuk egyszerű, újrahasznosítható cuccokat, amik pontosan a mi igényeinknek megfelelően működnek. Így idővel egy saját mini framework-ünk lesz, amivel időt spórolunk meg és végeredményben jobb rendszereket tudunk fejleszteni.
Érdekes egyébként, mert pont azért döntöttem egy saját váz fabrikálása mellett, mert sem időt, sem energiát nem akartam szánni arra, hogy megismerjem (úgy globál) egy nagy framework képességeit.
Anno az MVC minta kapcsán belenéztem a CakePHP-be és tapasztaltam, vannak dolgok, amiket én másképpen oldanék meg. Ennek folyománya, hogy vagy én alkalmazkodom a meglévő framework-höz, vagy a már kialakult munkamódszerek, szemléletmód, programozási módszerek alapján átfaragom a framework-öt. Ennek így meg értelme nincsen, akkor inkább írok egy saját vázat, ami az én programozási-, munkamódszereim alapján működik.
A végeredménye a saját és már meglévő rendszer esetében is ugyanaz, egy vázra építünk fel egy alkalmazást. A különbség csak az, hogy a saját framework hozzánk igazodik és nem mi igazodunk a framework-höz, valamint nem általános megoldás születik, hanem magunkra nézve specializált. Nem mondom, hogy rossz dolog egy meglévő rendszer filofóziáját átvenni, de nem véletlen van megannyi framework. Szerintem érdemesebb ötleteket "lopni" és saját megoldásokat fejleszteni. OpenSource rulez ...
(Többek között ezért is zárkózom le a CMS-ek elől, mert egyedi igény megjelenésekor át kellene faragni a meglévő rendszert, ami időben és energiában már lehet, hogy kb. ott van, mint egy saját rendszer fejlesztése. Ebben az esetben inkább ott a saját framework, amivel tetszőlegesen kicsi, nagy, egyszerű, bonyolúlt rendszer felépíthető – a végső rendszer csak annyit tud, amennyit kell, se többet, se kevesebbet. Meglátásom szerint kellenek az általánosítások (lásd tervezési minták), de összeségében inkább az egyedi megoldások a nyerők, ha komoly munkáról van szó – itt most nem mérvadó, hogy Pistike tudjon portált csinálni az osztályának, stb.)
... kb. arra jutottam, mint ő. A cikket nem olvastam végig, csak átfutottam, de ahogy látom a lényeg az, hogy jobb, ha nem állunk neki megérteni egy meglévő framework-öt, majd átfaragni úgy, hogy az nekünk, a munkamódszereinknek megfeleljen.
Az előadás nem erről szól, hanem arról, hogy hogyan szervezik ezek a frameworkök a kódjukat.
Hanem csináljuk egyszerű, újrahasznosítható cuccokat, amik pontosan a mi igényeinknek megfelelően működnek. Így idővel egy saját mini framework-ünk lesz, amivel időt spórolunk meg és végeredményben jobb rendszereket tudunk fejleszteni.
Mik ezek a nagyon spéci igények? Teljesítmény szempontokat leszámítva relatíve nehezen tudom elképzelni (persze lehet), hogy annyira egyedi dolgok jöjjenek elő, amiket egy-egy framework nem fed le. A saját meg messze nem biztos, hogy jobb lesz, erre semmilyen garancia nincsen. Sőt. Gyakaran több, elég tapasztalt fejlesztő áll egy framework mögött, plusz egy közösség, aminek hatására adott esetben elég jó dolog tud kikristályosodni, ráadásul egy ortogonálisabb valami (pl. CLI-ben is jelen van ugyanaz vagy hasonló MVC felállás).
Anno az MVC minta kapcsán belenéztem a CakePHP-be és tapasztaltam, vannak dolgok, amiket én másképpen oldanék meg.
Emlékszel még esetleg, hogy mik voltak ezek?
Ezzel együtt úgy gondolom, hogy a legtöbb framework nem jelent túl sok megkötést, főleg nem olyat, ami nagyon bekorlátozná az embert, csak épp előír valamilyen egységes struktúrát (közös nevező).
OpenSource rulez ...
Azért ez részben arról is szólna, hogy meglévő dolgokat használjunk fel, tökéletesítsünk, ha úgy találjuk, hogy nem teljesen jó számunkra. Lásd A katedrális és a bazár című könyvet.
Többek között ezért is zárkózom le a CMS-ek elől,
Én a CMS-t nem keverném össze a framework-kel, más szint. Egy jó frameworkkel nyugodtan felépíthetsz tetszőleges alkalmazást, akár komolyat is. A CMS külön állatfajta, meg van a maga létjogosultsága, elég sok cég elég jól él meg abból, hogy a CMS-ét adja el, elég sok cég igényei lefedhetőek egy jobb CMS-sel, adott esetben 1-1 külön modult kell mondjuk mellé fejleszteni.
de összeségében inkább az egyedi megoldások a nyerők
Ezt azért nem gondolnám (mondom úgy, hogy saját rendszert használunk :)), ahogy fentebb is írtam az egyedi nem garantál semmit, simán lehet rosszabb minőségű, mint egy már kiforrott eszköz, ami mögött akár 1-1 elég komoly tapasztalattal bíró ember áll, és olyan komoly megoldásokat/technikákat használ, ami az egyedi fejlesztőnek nem is jutna eszébe, vagy épp nem lenne energijája, hogy megoldja. Pl. egy fullos formkezelőt elkészíteni nem kevés idő/energia. Vagy pl. egy AmfPHP is olyan cucc (a kódja mondjuk messze nem a legszebb), amiben már nagyon sok ember szívása beépült, és amit ha nekiállnál megírni, akkor elsőre biztosan nem sikerülne összehozni, és minden egyes ilyen szívással ha épp teritékre kerül, akkor neked kell zöld ágra vergődni.
... vesztemet. A kommentemben nem írtam le mindent egyértelműen.
Az előadás nem erről szól, hanem arról, hogy hogyan szervezik ezek a frameworkök a kódjukat.
Mint írtam, nem olvastam végig, csak átfutottam, valamint amit összegzésként írtam, azt a conclusion részben olvastam.
Éppen a kódszervezés volt az egyik dolog, ami miatt kialakult a saját megoldás. Természetesen folyamatosan csiszolva van, ha jön egy újabb dolog, amit úgy gondolok, hogy érdemes bevezetni az eddigi módszerek mellé.
Egy CakePHP vagy Symfony megismerése nem kis feladat (idő, energia, szemlélet átformálás), valamint vannak kialakult programozástechnikai dolgok, saját módszerek, hogy mit hogyan oldok meg. Hosszú évek alatt csiszolódik és mint írtam, vagy feladom ezeket a framework filiózófiájáért, vagy szépen lassan beleviszem az én dolgaimat, ami egy komplex framework esetén sok idő, energia, ami nem biztos, hogy megtérül.
Másrészt, esetemben a fő szempont az volt, hogy egy általános platformot hozzak létre, ami minden project esetén azonos lesz. Ez kiegészül azzal, hogy egyszemélyben valósítom meg egy honlap vagy internetes rendszer teljes programozását, kezdve a HTML+CSS-sel, JS-en át a PHP-ig. Így a framework-öt úgy alakítottam ki, hogy a többi területet könnyen tudjam kezelni, szóval itt jön főként az egyedi szemléletmód, követelményrendszer.
Mik ezek a nagyon spéci igények? Teljesítmény szempontokat leszámítva relatíve nehezen tudom elképzelni (persze lehet), hogy annyira egyedi dolgok jöjjenek elő, amiket egy-egy framework nem fed le.
Ez írtam fentebb, vagy átveszem a fw filozófiáját, vagy beleviszem a sajátomat, ergo testreszabon a fw-öt, ami hosszú távon egyenlő a saját fw fejlesztésével.
A saját meg messze nem biztos, hogy jobb lesz, erre semmilyen garancia nincsen. Sőt. Gyakaran több, elég tapasztalt fejlesztő áll egy framework mögött, plusz egy közösség, aminek hatására adott esetben elég jó dolog tud kikristályosodni, ráadásul egy ortogonálisabb valami (pl. CLI-ben is jelen van ugyanaz vagy hasonló MVC felállás).
Nem is volt cél a legtökéletesebb framework létrehozása. A saját kialakult munkamódszerekhez illő rendszerre van szükségem, kell egy szabványos platform, ez a saját framework. De nem minden igényt kielégítő, minden problémát lefedő rendszerre van szükségem, hanem egy vázra, amire azt és úgy építek fel, ahogy akarok.
Alapvetően szeretem tudni, hogy mi hogyan működik. Egy framework egy magasabb absztrakciós réteget képvisel, sok dolgot eltakar, ami engem sok esetben zavar. Ált. meg akarom érteni, hogy mi hogyan működik és a saját megoldásomat létrehozom. Ez persze nem igaz olyan dolgokra, mint e-mail küldés, mert arra ott a PHPmailer.
Tehát ahány programozó, annyiféle szemléletmód. A végeredmény ugyanaz lesz, a rendszer működik. Hogy a dobozban mi hogyan megy, az pedig a programozón múlik.
Emlékszel még esetleg, hogy mik voltak ezek?
Anno néztem egy diplomamunkát, amiben CakePHP-vel hozott létre a srác egy rendszert (már nem emléxem mit). Itt pl. nem tetszett, hogy a M-V-C hogyan kommunikál egymással, nem állt kézre a logika. Ezért a logikát nagyjából adaptáltam (MVC), viszont a tényleges működést máshogyan oldottam meg.
Ezzel együtt úgy gondolom, hogy a legtöbb framework nem jelent túl sok megkötést, főleg nem olyat, ami nagyon bekorlátozná az embert, csak épp előír valamilyen egységes struktúrát (közös nevező).
Itt a kulcs, hogy az egységes struktúrát én akarom meghatározni, a saját logikám, munkamódszereim alapján. Ez lehet, hogy nem eredményezi a legjobb megoldást, nem kapok érte szakmai díjat, de hatékonyan tudok általa dolgozni.
Azért ez részben arról is szólna, hogy meglévő dolgokat használjunk fel, tökéletesítsünk, ha úgy találjuk, hogy nem teljesen jó számunkra. Lásd A katedrális és a bazár című könyvet.
Ebben igazad van, viszont mint írtam, nem volt célom, hogy tökéletesítsem a mások által kitalált rendszert, hanem saját használatra dolgozzak ki egy módszert, amivel kényelmesen tudok dolgozni. Másrészt messze nem rendelkezem olyan ismeretanyaggal, hogy tökéletesíteni tudjam a meglévő framework-öket.
Ez kb. olyan, mint hogy van az optika egér, de létezik trackball is. Az emberek 99%-a nem tudna mit kezdeni egy trackball-lal én meg imádom és ezzel tudok kényelmesen dolgozni. A végeredmény ugyanaz (mozog a kurzor), de nekem mégis egy alternatív megoldás fekszik. (Tudom hülye hasonlat és sántít rendesen, de remélem érthető, hogy mit akarok mondani.)
Én a CMS-t nem keverném össze a framework-kel, más szint. Egy jó frameworkkel nyugodtan felépíthetsz tetszőleges alkalmazást, akár komolyat is. A CMS külön állatfajta, meg van a maga létjogosultsága, elég sok cég elég jól él meg abból, hogy a CMS-ét adja el, elég sok cég igényei lefedhetőek egy jobb CMS-sel, adott esetben 1-1 külön modult kell mondjuk mellé fejleszteni.
Persze, hogy más kategórai a CMS. Itt az elvet akartam szemléltetni, hogy én pl. nem akarok Drupált használni egy kisebb honlaphoz, mert a saját framework-ömmel is össze tudom állítani az oldalt. Az eredmény ugyanaz lesz, csak jóval egyszerűbb lesz a kód, a saját logikámat követi, nem kell megtanulnom a Drupal filozófiáját; ami lehet, hogy teljesen ellentétes az enyémmel.
A framework lényegében egy általánosított platform, egy magasabb absztrakciós réteg, ami növeli a produktivitást. Abban az esetben van értelme ismert, sokak által használt rendszer alkalmazni (szerintem), ha nagy eséllyel mások fogják majd módosítani a kódot, így van egy közös nevező (persze ez csak egy érv a sok közül).
Esetemben mivel egyszemélyes megoldásban dolgozom, számomra kényelmesebb, ha a saját logikám, munkamódszereim alapján létrehozott rendszerrel dolgozom. Amennyiben esetleg más kezébe kerülne a rendszer, jó lenne az egységes platform, amit biztosít pl. a Symfony. De mi van, akkor ha az emberke CakePHP-t használ? Meg kell tanulni a Symfony-t, hogy tudja módosítani a rendszert.
Másrészről pedig, ha minőségi kódot ír az ember, jól kommentezve és van fejlesztői doksi is, akkor szerintem minimális az az idő, ami alatt bele tud nyúlni más ember a rendszerbe. A GDF Abakusz nevű programozói versenyén évről évre szembesültek a verseny szervezői azzal, hogy nem tudak a programozók fejlesztői doksit írni ...
Nem utolsó sorban pedig a programozók nincsenenk egy szinten. Én például látom, hogy mennyi mindent nem ismerek még, merre lehetne fejlődni. Viszont mivel nem életcélom, hogy nagynevű programozó legyek (régen ez volt, de azóta sok minden változott, másfelé orientálodom, egyre távolabb a programozástól), viszont minőségi munkát akarok kiadni a kezemből kell egy köztes állapot. Többet tudok mint a kezdők, kevesebbet, mint a profik, viszont próbálok hasonló megoldásokat alkalmazni, mint a nagyok. Nem lesz így tökéletes a rendszer programozói szempontból, de mint azt tapasztalom a megrendelőt ez cseppet sem érdekli. Én törekszem az aktuálisan adható legjobb kivitelezésre, de ebbe nem fér bele, hogy a legprofibb programozói megoldásokat alkalmazzam (kevés idő, energia, kapacitás), mert ahhoz évek kellenek, hogy elsajátítsam.
Lehet, hogy jól megél a CMS-t fejlesztő, majd értékesítő cég, de a nyakam rá, hogy van jó néhány olyan ember, akinek sokkal jobb lenne egy teljesen saját, a cégre szabott megoldás, aminek a kódja lehet, hogy 10x egyszerűbb lenne. Az áltánosság üzleti szempontból nagyon jó, de az ügyfélnek nem biztos (lásd lentebb).
Ezt azért nem gondolnám (mondom úgy, hogy saját rendszert használunk :)), ahogy fentebb is írtam az egyedi nem garantál semmit, simán lehet rosszabb minőségű, mint egy már kiforrott eszköz, ami mögött akár 1-1 elég komoly tapasztalattal bíró ember áll, és olyan komoly megoldásokat/technikákat használ, ami az egyedi fejlesztőnek nem is jutna eszébe, vagy épp nem lenne energijája, hogy megoldja.
Itt egyedi alatt a Drupal vs. célorientált fejlesztést értem. Nem dolgoztam eddig sok helyen, viszont egyre inkább azt látom, hogy az egyedi, egyénre szabott megoldásokra van sok esetben szükség (ez nem jelenti azt, hogy ne lenne piaca az általánosítot megoldásoknak). Anno megvette a volt munkahelyem az SBO-t, majd ráköltöttek még 4x annyit az egyedi fejlesztésekre. Ebben az esetben jobb lett volna egy teljesen egyedi, testreszabott vállalatirányítási rendszert iratni (hogy miért nem ez történt az nem ide tartozik).
Pl. egy fullos formkezelőt elkészíteni nem kevés idő/energia.
Ez igaz, de itt jön az, hogy ha nekem van saját metódusom, hogy hogyan kezelem a form-okat, akkor miért használjam a meglévő megoldást, ami nekem lehet, hogy 10x kényelmetlenebb?
Ez kb. ugyanaz, hogy miért van kismillió autó? Az egyik a családosoknak készült, a másik az üzletembereknek, a harmadik a kispénzüeknek, stb. Hiába tud 300-al menni egy Ferrari, ha nem fér bele a család motyója. Így talán érthetőbb, hogy mit értek saját igények alatt.
Vagy pl. egy AmfPHP is olyan cucc (a kódja mondjuk messze nem a legszebb), amiben már nagyon sok ember szívása beépült, és amit ha nekiállnál megírni, akkor elsőre biztosan nem sikerülne összehozni, és minden egyes ilyen szívással ha épp teritékre kerül, akkor neked kell zöld ágra vergődni.
Ezért használok pl. PHPmailer-ert és nem írok saját mailer class-t. Viszont más esetben, lehet, hogy a saját megoldás sokkal jobban kézreáll.
A framework lényegében egy általánosított platform, egy magasabb absztrakciós réteg, ami növeli a produktivitást. Abban az esetben van értelme ismert, sokak által használt rendszer alkalmazni (szerintem), ha nagy eséllyel mások fogják majd módosítani a kódot, így van egy közös nevező (persze ez csak egy érv a sok közül).
Bevallom ledöbbentem olvasva soraidat. Nem is értem mire alapozva gondolod hogy a kódodat, amit nem magadnak írsz (hanem pl. ügyfelednek) másnak nem kell majd módosítania! Ekkora pökhendiséggel már rég találkoztam. Igenis vedd tudomásul, hogy ha ügyfélnek dolgozol (mégha egyedül is), akkor kollektív felelősséged van. Period.
Azoknak akik pedig azon vacilálnak, hogy framework (esetleg CMS) vagy ne, üzenem hogy én nem akarok a ti logikátokhoz alkalmazkodni (és gondolom ti sem az enyémhez), főleg nem 10 millió különböző logikához, viszont hajlandó vagyok megtanulni használni 10 gyakoribb framework-öt.
Ezzel ugyanis az ügyfeleitekkel b*sztok ki, csak sajnos később derül rá fény, hogy átvertétek. Amikor máshoz fordul a kedves ügyfél mert nem szeretne veletek dolgozni, vagy eltüntetek, akkor horribilis összegeket fognak elkérni csak azért hogy
1) átnézzék és megértsék a kódot, vagy
2) átültessék egy népszerű framework-re vagy CMS-re
Technikai oldalról pedig azzal támasztanám alá a véleményemet, hogy egyrészt egy keretrendszer kódját jó sokan nézegetik nap mint nap, a saját megoldásotokét meg egy idő után sokáig senki. Remélem nem gondolja magáról senki hogy hibamentesen és szuperbiztonságosan tud programozni és sohasem lesz remote hole az alkalmazásában...
Másrészről minél nagyobb szabadságot adsz a résztvevőknek, annál inkább ki fogják ezt használni. Ennek következménye hogy nincs egységes programozói stílus, követhetetlen és átláthatatlan a kód és szépen lassan tele lesz hibákkal, nehézkes módosítani, a módosítások beláthatatlan következményekkel járnak. Persze ha egyedül nyomod az más. Úgysem adod oda senkinek a kódod és élettartam garanciát adsz minden kódsorra, ingyen vagy nyomott áron vállalod a mindenkori piaci árhoz képest a továbbfejlesztést, ha az ügyfél elégedetlen veled vagy eltünnél, akkor pedig egy tichuanai bankszámlán 100 millió forint kártérítés várja...
... amit írtam, de még bővebben kell kifejtenem, hogy egyértelmű(bb) legyen.
Bevallom ledöbbentem olvasva soraidat. Nem is értem mire alapozva gondolod hogy a kódodat, amit nem magadnak írsz (hanem pl. ügyfelednek) másnak nem kell majd módosítania! Ekkora pökhendiséggel már rég találkoztam. Igenis vedd tudomásul, hogy ha ügyfélnek dolgozol (mégha egyedül is), akkor kollektív felelősséged van. Period.
Tegyük fel, hogy én Symfony-ban írok egy webáruházat. A megrendelővel megromlik a viszonyom, megszakad a kapcsolat. Eltelik egy év, kellene neki egyedi fejlesztés, bővítés a webáruházhoz. Keres programozót, de mivel nem ért a technikai részletekhez, ezért csak annyit mond, hogy van egy webáruháza, ezt szeretné továbbfejlesztetni. Jelentkezik egy ember, aki CakePHP-t használ. Ha őt alkalmazzák, mert a referenciái alapján megfelelőnek tartják, akkor meg kell tanulnia a Symfony-t, hogy tudjon fejlesztéseket csinálni.
Ebben az esetben meglátásom szerint mindegy, hogy a Symfony-nak áll neki, vagy egy egyedi rendszert néz át, hogy mit miért, hogyan. Megint csak azt tudom mondani, hogy ha értelmesen van kommentezve egy kód, akkor nem nagyobb feladat egy saját rendszert megérteni, mint egy meglővő keretrendszert (a kommentezési konvencióm részben követi a PHPdoc sémát). Ha nincsen megfelelő doksi egy cucchoz, akkor úgyis a forrásból kell keresgélni az info-t, hogy mit hogyan (pl. anno nuSOAP-hoz nem volt leírás, így kénytelen voltam a kódot bújni, hogy mi hogyan megy ...).
Másrészt pedig én egyedül dolgzom, erre is vagyok berendezkedve és nem is fogok csapatban dolgozni, mert mire szükség lenne rá én már nem leszek aktív webfejlesztő (viszont a megfelelő mennyiségű és logikus komment miatt át tudja venni más az írt kódokat, legalábbis én így gondolom). A kódjaimat megfelelően kommentezem, szépen taglalom, próbálok logikát vinni bele (az OOP erre kényszerít).
Említettem azt is, hogy egy meglévő keretrendszer megismerése, a filozófia megértése, majd adaptálása sok idő és energia, valamint nincsenek egy szinten a programozók – ha valakinek még ismeretlen az OOP, akkor mit kezd egy CakePHP-vel például. Egy keretrendszert akkor lehet szerintem hatékonyan használni, ha az alapvető filozófiát megáénak tudja az ember (pl. tervezési minták).
Sajnos megint beleestem abba a csapdába, hogy általánosítottam, pedig nagyrészt a saját helyzetemről írtam.
Tudom, hogy egy külön állatfaj vagyok sok tekintetben, ezért tűnhet hülyeségnek, vagy logikátlanságnak sokszor, amit írok. Az utóbbi időben tapasztaltam, hogy sok esetben másképpen látom a dolgokat, mint a többség (úgy általában az életben). Alapvetően a saját utamat járom és sok esetben ez ütközik az általánosnak vett dolgokkal, gondolkodásmóddal, értékrenddel.
Nos, egy meglévő framework alkalmazása nagyon is helyes dolog, egyrészt a közös nyelv miatt (más tudja folytatni a munkát, ha beszél a közös nyelven), másrészt a fejlesztők tapasztalata miatt. Viszont magam részéről szeretem a saját utamat járni. Az, hogy ez mennyire jó vagy sem programozói szempontból vitatható, minden esetre az egyéni fejlődésem szempontjából úgy gondolom, hogy nekem ez bevált út. Nem lehet mindent egyszerre megtanulni, egy komplex keretrendszer használta, már egy elég magas szint, ahova fel kell fejlődni. Én – úgy gondolom – a kezdő, haladó és a profi szint között állok, mert több ismeretanyag van már meg, mint a kezdőknek, de kevesebb mint a nagyoknak, viszont ezen a köztes állapoton is próbálom adaptálni a profinak számító megoldásokat, de a saját szintemen, a saját megoldásaimban, mert sem időm, sem energiám nicsen megismerni, megérteni egy nagy és sikeres keretrendszer filozóiáját.
Technikai oldalról pedig azzal támasztanám alá a véleményemet, hogy egyrészt egy keretrendszer kódját jó sokan nézegetik nap mint nap, a saját megoldásotokét meg egy idő után sokáig senki. Remélem nem gondolja magáról senki hogy hibamentesen és szuperbiztonságosan tud programozni és sohasem lesz remote hole az alkalmazásában...
Nem gondolom, hogy szuperbiztos a kódom, de pontosan ez motivál arra, hogy megismerjem a dolgok miértjét és hogyanját. Ezt eltakarja a framework, ergo produktívan dolgozom, de nem biztos, hogy a leghatékonyabban. Azt is írtam, hogy folyamatosan csiszolódik a rendszerem, ahogyan találkozom újabb, számomra még ismeretlen, vagy nem használt módszerekkel. Tehát a fejlesztés nálam sem áll meg, csak nem lesz egy minden problémát lefedő komplex rendszerem, mert nem is ez a cél. Az aktuális igényeknek feleljen meg, ha a jövőben vannak újabb technikai igények, akkor majd beépítem a rendszerembe.
Másrészről minél nagyobb szabadságot adsz a résztvevőknek, annál inkább ki fogják ezt használni. Ennek következménye hogy nincs egységes programozói stílus, követhetetlen és átláthatatlan a kód és szépen lassan tele lesz hibákkal, nehézkes módosítani, a módosítások beláthatatlan következményekkel járnak.
Lehet, hogy eddig nem jött le egyértelműen, de pontosan az volt az egész saját rendszer építgetésével a célom, hogy a saját munkamódszereimet "szabványosítsam", kialakítsak egy olyan rendszert amiben benne van a minőségorientált hozzáállás. Ezért is van pl. PHPdoc formában kommentezve a kód, ezért van úgy formázva a kód ahogy, stb.
Persze ha egyedül nyomod az más. Úgysem adod oda senkinek a kódod és élettartam garanciát adsz minden kódsorra, ingyen vagy nyomott áron vállalod a mindenkori piaci árhoz képest a továbbfejlesztést, ha az ügyfél elégedetlen veled vagy eltünnél, akkor pedig egy tichuanai bankszámlán 100 millió forint kártérítés várja...
Egyedül dolgzom, de ezt már néhányszor írtam. Másrészt pedig látva és tapasztalva azt, hogy a megrendelőt a kezénél fogva kell vezetni, ezért ma már csak részletes specifikáció mellett vállalok munkát. Jelenleg dolgozom egy rendszeren, de amíg nincsen meg a végső koncepció, hogy mi hogyan működjön, mik a pontos követelmények egy betűt nem vagyok hajlandó a rendszer kódjából írni.
Nos, akkor összefoglalnám. Én szeretem a saját utamat járni. Nem ellenzem a nagy framework-ök használtatát, de nekem most még túl profi megoldás. Úgy gondolom, hogy félúton járok afelé, hogy hatékonyan tudjak használni egy keretrendszert, mert ahhoz még sokat kell tanulnom (főként elméleti dolgokat). Ha valaki ilyen területen akar dolgozni, akkor igenis ismerjen legalább egy-kettő keretrendszert és az egyikből legyen májer, ne csak ismerje, hanem tudja kihasználni a lehetőségeit.
Én a keretrendszer használatához vezető úton megnézem, hogy mit hogyan csinálnak a nagyok, és adaptálom a saját rendszerembe. Ezzel úgy gondolom, hogy hosszabb távon pontosan előnyét élvezem a helyzetnek, mert utána járok, hogy mit miért csináltak, hogyan működik a keretrendszer, ezért az általa nyújtott magasabb absztrakciós rétegen produktívabban fogok tudni dolgozni, ismervén a gépház fedele alatt döbörgő motor működését. Ha közvetlenül ez nem is jár előnnyel, egy későbbi egyedi, speciális igény megjelenésekor, lehet, hogy pontosan ezen háttértudás birtokában tudok gyorsan és hatékonyan lépni.
Vannak emberek akik nem tudnak spanyolul és vannak akik tudnak.
Vagy te aki kitalálta a Blabla nyelvet és nincs olyan aki rajtad kívül tudná a nyelvet és kénytelenek maguktól megtanulni Blabla-ul, ha szeretnének veled kommunikálni.
Szerinted bárki aki új nyelvet tanulna spanyolul fog elkezdeni tanulni vagy Blabla-ul? :)
... de mint írtam a Blabla út a Spanyol felé és ha a Spanyolból nyúltam ötleteket a Blabla-hoz, akkor a Spanyol-t könnyebben és jobban fogom tanulni, mint aki csak a Spanyolnak áll neki a Blabla nélkül. Elég hülyén hangzik az előző mondat így hasonlat formájában, de talán érthető, hogy mit mondok.
Tehát vagy kimarad a Blabla vagy sem. Ha kimarad, akkor lehet, hogy jóval több idő lesz a Spanyol adaptálása, mert hiányzik a háttér, az elmélet, a gyakorlati szopás ahhoz, hogy ne csak csináld, hanem tudd is, hogy mit miért csinálsz. Tudom, hogy a keretrendszer pontosan azt hivatott elfedni, amivel a szopás van (lásd JS keretrendszerek), de ha valaki ismeri a szopás forrását, akkor ezzel ő értékesebb programozó. Legalábbis én így gondolom, de lehet, hogy tévedek.
Tovább gondolva, ha valaki belemegy a Blabla-ba, akkor lehet, hogy később ő lesz egy kulcs elem a Spanyol továbbfejlesztéséhez (ez így nagyon hülyén hangzik, de logikailag szerintem helytálló megondolatmenet) ...
Még tovább gondolva sok esetben a konvenciókkal szembeforduló (egyedi) ötletekből lesznek a későbbi nagy durranások ...
Először: szerintem egy weblap élettartalma ma 2 év. Az üzleti logika, a látogatók elvárásai annyit változnak (fejlődnek?) két év alatt, hogy általában elkerülhetetlen az oldal újraírása. (Ha a cég komolyan foglalkozuika weboldallal). Ez általában a modell lényeges bővítésével keződik, folytatódik a dizájnnal, ami elavult, és amúgy sem utdná befogadni az új ui elemeket (pl hozzászólások ritkán tervezhetők be egy nem erre dizájnolt oldalba).
Ezalatt a két év alatt nem érdemes fejlesztőt/céget váltani. Amikor az oldal megérett a lecserélésre, akkor pedig mindegy, hogy a jelenlegi csapat folytatja, vagy valaki más készíti el az oldal következő generációját.
Nem tudom, egy nyilvános framework használata mennyivel tolja ki ezt a ciklust, főleg a framework két évvel későbbi verzióját tekintve (valljuk be, a kompatibilitás nem minden opensource projekt erőssége).
Felkészültem arra a kézenfekvő válaszra, hogy "Azért, mert az én szar kódom elvaul, nem azt jelenti, hogy másé is". Lehet, hogy így van, de szerintem nem érdemes egy kódbázist túl sok ideig életben tartani. Mindig vannak előre nem látott fejlesztési irányok, a legjobb tervezési minták használata sem ad megoldást minden jövő beli fejlesztésre.
Másrészről pedig, ha minőségi kódot ír az ember, jól kommentezve és van fejlesztői doksi is, akkor szerintem minimális az az idő, ami alatt bele tud nyúlni más ember a rendszerbe. A GDF Abakusz nevű programozói versenyén évről évre szembesültek a verseny szervezői azzal, hogy nem tudak a programozók fejlesztői doksit írni ...
Hmmm. Lehetőség van megtekinteni egy általad írd ilyen fejlesztői doksit vagy funkcionális specifikációt vagy architektúratervet? Ha kell aláírok NDA-t.
Mint írtam, nem olvastam végig, csak átfutottam, valamint amit összegzésként írtam, azt a conclusion részben olvastam.
Okok, nem offenzive írtam, csak hogy erről volt szó alapjában.
Éppen a kódszervezés volt az egyik dolog, ami miatt kialakult a saját megoldás.
Mik voltak azok a pontok, amik általában nem tetszettek, illetve mi az amiben a te megoldásod eltér?
Egy CakePHP vagy Symfony megismerése nem kis feladat (idő, energia, szemlélet átformálás), valamint vannak kialakult programozástechnikai dolgok, saját módszerek, hogy mit hogyan oldok meg. Hosszú évek alatt csiszolódik és mint írtam, vagy feladom ezeket a framework filiózófiájáért, vagy szépen lassan beleviszem az én dolgaimat, ami egy komplex framework esetén sok idő, energia, ami nem biztos, hogy megtérül.
Tudsz esetleg konkrétabb dolgokat is írni? Tényleg érdekel, mert az én szememben ezek a frameworkök elég fix dolgokat valósítanak meg, általában ugyanazokból a részekből állnak főleg controller szinten, épp csak adott esetben máshová kell tenni egy action-t, vagy másképp lehet az url mappinget meghatározni. A kód érdemi része úgyis kb. az üzleti logika lesz, ebben meg többnyire nem kötnek meg (nem kötelező a cucc model részét használni, már ha épp van neki). Szóval érdekelne, hogy hol érzed komolyan korlátnak?
Itt a kulcs, hogy az egységes struktúrát én akarom meghatározni, a saját logikám, munkamódszereim alapján.
Itt szintén az érdekel, hogy egy framework hol gátol meg téged a munkamódszered alkalmazásában.
Ez írtam fentebb, vagy átveszem a fw filozófiáját, vagy beleviszem a sajátomat, ergo testreszabon a fw-öt, ami hosszú távon egyenlő a saját fw fejlesztésével.
Attól függ, hogy mi az a "saját", ha írsz a fentiekre, akkor ez jobban ki fog derülni. Elég sok féle pluszt bele lehet vinni egy frameworkbe is, de attól még az alapokat ő szabhatja meg.
Itt a kulcs, hogy az egységes struktúrát én akarom meghatározni, a saját logikám, munkamódszereim alapján.
Egyre jobban érdekelne mit fed a "saját". :) Azért gondolj arra is, hogy bármikor előfordulhat, hogy egy projektbe más is be kell szálljon, vagy épp másnak kell tovább vinni, kiesel a munkából, bármi, ilyenkor nem mindegy, hogy az újonnan beszálló milyen felállssal találkozik. Nem látom, hogy annyira sokféleképpen lehetne csinálni ezeket a dolgokat, vagy ha éppen mégis, akkor ezzel eléggé meg lesz nehezítve a belépő ember dolga. Ha meg nem, akkor célszerűbb egy sok ember által ismert, illetve jól dokumentált rendszert használni.
Másrészt messze nem rendelkezem olyan ismeretanyaggal, hogy tökéletesíteni tudjam a meglévő framework-öket
Ebben így van némi önellentmondás. ;) Mert tökéletesíteni egyszerűbb, mint újat építeni.
Anno néztem egy diplomamunkát, amiben CakePHP-vel hozott létre a srác egy rendszert (már nem emléxem mit). Itt pl. nem tetszett, hogy a M-V-C hogyan kommunikál egymással, nem állt kézre a logika.
Ne a CakePHP-ból indulj ki, nem legjobb megvalósítás, bár logikai szinten szerintem ez is nagyjából olyan, mint a többi. Mi az amúgy, ami zavart benne?
De mi van, akkor ha az emberke CakePHP-t használ? Meg kell tanulni a Symfony-t, hogy tudja módosítani a rendszert.
Ha ismeri a CakePHP-t (illetve tisztában van azzal, hogy mit nyújt egy ilyen framework), akkor pár nap alatt bele fog rázódni a symfonyba is. Lesz még pár dolog, ami másképp működik, de ezzel elég gyorsan tisztába fog jönni, főleg, hogy elég jól dokumentált rendszerről van szó.
Nem utolsó sorban pedig a programozók nincsenenk egy szinten.
Pontosan ezért is jó a framework. Kevesebb mozgásteret enged ott, ahol amúgy se nagyon van értelme "ugrálni", valamint előírhat olyan dolgokat, amelyeknek az eredményeképpen automatikusan jobb minőségű software keletkezik, még akkor is, ha éppen a fejlesztő nincs teljesen tisztában azzal, hogy miért épp úgy kell csinálni, ahogy.
Ez igaz, de itt jön az, hogy ha nekem van saját metódusom, hogy hogyan kezelem a form-okat, akkor miért használjam a meglévő megoldást, ami nekem lehet, hogy 10x kényelmetlenebb?
Itt megint arra lennék kíváncsi, hogy mi lehet az, amit annyira másképp kezelsz. Egy jobb cucc maximálisan testre szabható a kinézetet illetően, a működési logikánál meg nem tudom, hogy mi lehet annyira eltérő.
Ez kb. ugyanaz, hogy miért van kismillió autó? Az egyik a családosoknak készült, a másik az üzletembereknek, a harmadik a kispénzüeknek, stb. Hiába tud 300-al menni egy Ferrari, ha nem fér bele a család motyója.
Ez eléggé sántít az én szememben, mert a framework nem egy kész autó, hanem olyan fogalmakkal operál, mint a 4 kerék, kormány, ajtók, te döntöd el, milyen motort teszel bele, illetve ha kicsi a csomagtartó, akkor nyugodtan tehetsz rá egy nagyobbat.
Egyrészt az ő általa bemutatott felállás is egyfajta framework, csak sok minden kb. egy szóbeli megállapodás, amit általában nem igazán sikerül sokaknak betartani. Másrészt meg egy ilyen mórizcka példa esetén jópofának tűnhet, de azért egy nagyobb alkalmazás esetén szerintem kb. használhatatlan ez a felállás főleg akkor, ha több fejlesztő is dolgozik az adott projekten. Legalábbis ezt a struktúrát meghagyom a 3 nagymamájuaknak. :)
Elsőre én is hülyeségnek tartottam, meg én is inkább az ismert rendszereket preferálom, nem utolsó sorban az esetleges kollaboráció miatt, de eljátszottam a gondolattal, hogy "mi lenne, ha". Mi lenne, ha csinálnék egy raklap (szigorúan jól átgondolt) célfüggvényt, amik jelentősen megkönnyítenék a munkámat, és a hagyományos, többnyire procedurális módszerrel dolgoznék (persze továbbra is az MVC modell szerint). Épp most vagyok egy nagyobb projekt elején, még van jó pár hét, amíg elkezdem a tényleges programozást, addig agyalok rajta, hogy kiváltható-e ezzel a módszerrel (a fejlesztés hatásfokát nem elveszítve) a ZF + Doctrine páros. Aztán ha nem, akkor nem. Semmi esetre sem vágok bele úgy, hogy kétes a kimenetel.
szerk.: röviden megfogalmazva, biztosan rosszabb volt a mai frameworkök előtti idő, vagy csak nem tudtunk ésszerűen bánni a nyelv nyújtotta nagy szabadsággal?
röviden megfogalmazva, biztosan rosszabb volt a mai frameworkök előtti idő, vagy csak nem tudtunk ésszerűen bánni a nyelv nyújtotta nagy szabadsággal?
Benne van a nevében is: keretrendszer. Keretbe foglalja a nyelv lehetőségeit, kanonikalizálja azokat. Tehát lehet programozni natív PHP-ban is hatékonyan, csak átlagon felüli önuralmat, rendszerszemléletet és tapasztalatot kíván meg.
Mi lenne, ha csinálnék egy raklap (szigorúan jól átgondolt) célfüggvényt, amik jelentősen megkönnyítenék a munkámat, és a hagyományos, többnyire procedurális módszerrel dolgoznék (persze továbbra is az MVC modell szerint).
Ez is kb. egy framework lenne, amit idővel szépen bővítgetni kell, és végül eljutsz simán egy lightweight frameworkhöz, csak egy szép kis kerülőúton.
Illetve mit vársz attól, hogy procedurális megközelítést használsz? Én összedobtam most egy frameworköt ami OOP, kb. tudja amire alapban szükség lehet, és egy kis trükkel APC mellett kiszolgált kb. 3000 hello world oldalt másodpercenként az egyik amúgy élesben lévő szerverünkön. Eleve kérdéses, hogy olyan-e a projekt, amit fejlesztesz, hogy érdekesek az ilyen mikro optimalizálások, általában nincs erre szükség, és az a fontos, hogy minél rövidebb legyen a fejlesztési idő.
Illetve mit vársz attól, hogy procedurális megközelítést használsz?
Sebességet, és nagyobb rugalmasságot. Az előbbi mondjuk ennél a projektnél nem egy kardinális probléma, ezért sem valószínű, hogy belevágok, de egy nagy terheltségű oldalon érdekes lenne megnézni, hogy mennyi pluszt ad az OOP keretrendszerekhez képest egy ilyen pehelysúlyú megoldás.
Én ott húzom meg a határt a kettő között, hogy az első az alkalmazás szerkezetére ad modellt, még a második (pl a PHP mysql függvényei) egy behatárolt problémára koncentál, általánosabb eszközöket ad.
Mostanában a depencence-hell elkerülése érdekében igyekszem különáló könyvtárakat létrehozni. Ezek öszekapcsolása pedig a felhasználó (jövő beli önmagam :) ízlésére van bízva.
Én úgy érzem, hogy attól, hogy más terminológián vitatkozunk, nem jutunk előbbre. A lényeg, hogy egy adott feladra megfelelő eszközt válassz, legyen az CMS (mert néha az a hatékony), Framework vagy éppenséggel egy 10 függvényes adatbázis-függvénykönyvtár (mert ilyen projekt is van).
Framework vagy nem?
Saját "framework"
Az idők során ahogyan találkoztam bizonyos dolgokkal, beépítettem a saját munkamódszereimbe, így fejlődik apránként a "framework". Nem ad komplex megoldást, nem tör olyan babérokra, mint a CakePHP vagy más nagyobb PHP-s keretrendszereket.
Nem célja, általános megoldás nyújtása, inkább csak egy vázat ad, amire tetszőleges rendszer felépíthető (tudom, ez a célja minden framework-nek, de jóval nagyobb szabadságot ad, mint egy komplex PHP-s framework).
Hmm
Azt hiszem ...
Érdekes egyébként, mert pont azért döntöttem egy saját váz fabrikálása mellett, mert sem időt, sem energiát nem akartam szánni arra, hogy megismerjem (úgy globál) egy nagy framework képességeit.
Anno az MVC minta kapcsán belenéztem a CakePHP-be és tapasztaltam, vannak dolgok, amiket én másképpen oldanék meg. Ennek folyománya, hogy vagy én alkalmazkodom a meglévő framework-höz, vagy a már kialakult munkamódszerek, szemléletmód, programozási módszerek alapján átfaragom a framework-öt. Ennek így meg értelme nincsen, akkor inkább írok egy saját vázat, ami az én programozási-, munkamódszereim alapján működik.
A végeredménye a saját és már meglévő rendszer esetében is ugyanaz, egy vázra építünk fel egy alkalmazást. A különbség csak az, hogy a saját framework hozzánk igazodik és nem mi igazodunk a framework-höz, valamint nem általános megoldás születik, hanem magunkra nézve specializált. Nem mondom, hogy rossz dolog egy meglévő rendszer filofóziáját átvenni, de nem véletlen van megannyi framework. Szerintem érdemesebb ötleteket "lopni" és saját megoldásokat fejleszteni. OpenSource rulez ...
(Többek között ezért is zárkózom le a CMS-ek elől, mert egyedi igény megjelenésekor át kellene faragni a meglévő rendszert, ami időben és energiában már lehet, hogy kb. ott van, mint egy saját rendszer fejlesztése. Ebben az esetben inkább ott a saját framework, amivel tetszőlegesen kicsi, nagy, egyszerű, bonyolúlt rendszer felépíthető – a végső rendszer csak annyit tud, amennyit kell, se többet, se kevesebbet. Meglátásom szerint kellenek az általánosítások (lásd tervezési minták), de összeségében inkább az egyedi megoldások a nyerők, ha komoly munkáról van szó – itt most nem mérvadó, hogy Pistike tudjon portált csinálni az osztályának, stb.)
használhatóság != kódszervezés
Ezzel együtt úgy gondolom, hogy a legtöbb framework nem jelent túl sok megkötést, főleg nem olyat, ami nagyon bekorlátozná az embert, csak épp előír valamilyen egységes struktúrát (közös nevező).
Üdv,
Felhő
Látom ...
Mint írtam, nem olvastam végig, csak átfutottam, valamint amit összegzésként írtam, azt a conclusion részben olvastam.
Éppen a kódszervezés volt az egyik dolog, ami miatt kialakult a saját megoldás. Természetesen folyamatosan csiszolva van, ha jön egy újabb dolog, amit úgy gondolok, hogy érdemes bevezetni az eddigi módszerek mellé.
Egy CakePHP vagy Symfony megismerése nem kis feladat (idő, energia, szemlélet átformálás), valamint vannak kialakult programozástechnikai dolgok, saját módszerek, hogy mit hogyan oldok meg. Hosszú évek alatt csiszolódik és mint írtam, vagy feladom ezeket a framework filiózófiájáért, vagy szépen lassan beleviszem az én dolgaimat, ami egy komplex framework esetén sok idő, energia, ami nem biztos, hogy megtérül.
Másrészt, esetemben a fő szempont az volt, hogy egy általános platformot hozzak létre, ami minden project esetén azonos lesz. Ez kiegészül azzal, hogy egyszemélyben valósítom meg egy honlap vagy internetes rendszer teljes programozását, kezdve a HTML+CSS-sel, JS-en át a PHP-ig. Így a framework-öt úgy alakítottam ki, hogy a többi területet könnyen tudjam kezelni, szóval itt jön főként az egyedi szemléletmód, követelményrendszer.
Ez írtam fentebb, vagy átveszem a fw filozófiáját, vagy beleviszem a sajátomat, ergo testreszabon a fw-öt, ami hosszú távon egyenlő a saját fw fejlesztésével.
Nem is volt cél a legtökéletesebb framework létrehozása. A saját kialakult munkamódszerekhez illő rendszerre van szükségem, kell egy szabványos platform, ez a saját framework. De nem minden igényt kielégítő, minden problémát lefedő rendszerre van szükségem, hanem egy vázra, amire azt és úgy építek fel, ahogy akarok.
Alapvetően szeretem tudni, hogy mi hogyan működik. Egy framework egy magasabb absztrakciós réteget képvisel, sok dolgot eltakar, ami engem sok esetben zavar. Ált. meg akarom érteni, hogy mi hogyan működik és a saját megoldásomat létrehozom. Ez persze nem igaz olyan dolgokra, mint e-mail küldés, mert arra ott a PHPmailer.
Tehát ahány programozó, annyiféle szemléletmód. A végeredmény ugyanaz lesz, a rendszer működik. Hogy a dobozban mi hogyan megy, az pedig a programozón múlik.
Anno néztem egy diplomamunkát, amiben CakePHP-vel hozott létre a srác egy rendszert (már nem emléxem mit). Itt pl. nem tetszett, hogy a M-V-C hogyan kommunikál egymással, nem állt kézre a logika. Ezért a logikát nagyjából adaptáltam (MVC), viszont a tényleges működést máshogyan oldottam meg.
Itt a kulcs, hogy az egységes struktúrát én akarom meghatározni, a saját logikám, munkamódszereim alapján. Ez lehet, hogy nem eredményezi a legjobb megoldást, nem kapok érte szakmai díjat, de hatékonyan tudok általa dolgozni.
Ebben igazad van, viszont mint írtam, nem volt célom, hogy tökéletesítsem a mások által kitalált rendszert, hanem saját használatra dolgozzak ki egy módszert, amivel kényelmesen tudok dolgozni. Másrészt messze nem rendelkezem olyan ismeretanyaggal, hogy tökéletesíteni tudjam a meglévő framework-öket.
Ez kb. olyan, mint hogy van az optika egér, de létezik trackball is. Az emberek 99%-a nem tudna mit kezdeni egy trackball-lal én meg imádom és ezzel tudok kényelmesen dolgozni. A végeredmény ugyanaz (mozog a kurzor), de nekem mégis egy alternatív megoldás fekszik. (Tudom hülye hasonlat és sántít rendesen, de remélem érthető, hogy mit akarok mondani.)
Persze, hogy más kategórai a CMS. Itt az elvet akartam szemléltetni, hogy én pl. nem akarok Drupált használni egy kisebb honlaphoz, mert a saját framework-ömmel is össze tudom állítani az oldalt. Az eredmény ugyanaz lesz, csak jóval egyszerűbb lesz a kód, a saját logikámat követi, nem kell megtanulnom a Drupal filozófiáját; ami lehet, hogy teljesen ellentétes az enyémmel.
A framework lényegében egy általánosított platform, egy magasabb absztrakciós réteg, ami növeli a produktivitást. Abban az esetben van értelme ismert, sokak által használt rendszer alkalmazni (szerintem), ha nagy eséllyel mások fogják majd módosítani a kódot, így van egy közös nevező (persze ez csak egy érv a sok közül).
Esetemben mivel egyszemélyes megoldásban dolgozom, számomra kényelmesebb, ha a saját logikám, munkamódszereim alapján létrehozott rendszerrel dolgozom. Amennyiben esetleg más kezébe kerülne a rendszer, jó lenne az egységes platform, amit biztosít pl. a Symfony. De mi van, akkor ha az emberke CakePHP-t használ? Meg kell tanulni a Symfony-t, hogy tudja módosítani a rendszert.
Másrészről pedig, ha minőségi kódot ír az ember, jól kommentezve és van fejlesztői doksi is, akkor szerintem minimális az az idő, ami alatt bele tud nyúlni más ember a rendszerbe. A GDF Abakusz nevű programozói versenyén évről évre szembesültek a verseny szervezői azzal, hogy nem tudak a programozók fejlesztői doksit írni ...
Nem utolsó sorban pedig a programozók nincsenenk egy szinten. Én például látom, hogy mennyi mindent nem ismerek még, merre lehetne fejlődni. Viszont mivel nem életcélom, hogy nagynevű programozó legyek (régen ez volt, de azóta sok minden változott, másfelé orientálodom, egyre távolabb a programozástól), viszont minőségi munkát akarok kiadni a kezemből kell egy köztes állapot. Többet tudok mint a kezdők, kevesebbet, mint a profik, viszont próbálok hasonló megoldásokat alkalmazni, mint a nagyok. Nem lesz így tökéletes a rendszer programozói szempontból, de mint azt tapasztalom a megrendelőt ez cseppet sem érdekli. Én törekszem az aktuálisan adható legjobb kivitelezésre, de ebbe nem fér bele, hogy a legprofibb programozói megoldásokat alkalmazzam (kevés idő, energia, kapacitás), mert ahhoz évek kellenek, hogy elsajátítsam.
Lehet, hogy jól megél a CMS-t fejlesztő, majd értékesítő cég, de a nyakam rá, hogy van jó néhány olyan ember, akinek sokkal jobb lenne egy teljesen saját, a cégre szabott megoldás, aminek a kódja lehet, hogy 10x egyszerűbb lenne. Az áltánosság üzleti szempontból nagyon jó, de az ügyfélnek nem biztos (lásd lentebb).
Itt egyedi alatt a Drupal vs. célorientált fejlesztést értem. Nem dolgoztam eddig sok helyen, viszont egyre inkább azt látom, hogy az egyedi, egyénre szabott megoldásokra van sok esetben szükség (ez nem jelenti azt, hogy ne lenne piaca az általánosítot megoldásoknak). Anno megvette a volt munkahelyem az SBO-t, majd ráköltöttek még 4x annyit az egyedi fejlesztésekre. Ebben az esetben jobb lett volna egy teljesen egyedi, testreszabott vállalatirányítási rendszert iratni (hogy miért nem ez történt az nem ide tartozik).
Ez igaz, de itt jön az, hogy ha nekem van saját metódusom, hogy hogyan kezelem a form-okat, akkor miért használjam a meglévő megoldást, ami nekem lehet, hogy 10x kényelmetlenebb?
Ez kb. ugyanaz, hogy miért van kismillió autó? Az egyik a családosoknak készült, a másik az üzletembereknek, a harmadik a kispénzüeknek, stb. Hiába tud 300-al menni egy Ferrari, ha nem fér bele a család motyója. Így talán érthetőbb, hogy mit értek saját igények alatt.
Ezért használok pl. PHPmailer-ert és nem írok saját mailer class-t. Viszont más esetben, lehet, hogy a saját megoldás sokkal jobban kézreáll.
Megdöbbentő
Bevallom ledöbbentem olvasva soraidat. Nem is értem mire alapozva gondolod hogy a kódodat, amit nem magadnak írsz (hanem pl. ügyfelednek) másnak nem kell majd módosítania! Ekkora pökhendiséggel már rég találkoztam. Igenis vedd tudomásul, hogy ha ügyfélnek dolgozol (mégha egyedül is), akkor kollektív felelősséged van. Period.
Azoknak akik pedig azon vacilálnak, hogy framework (esetleg CMS) vagy ne, üzenem hogy én nem akarok a ti logikátokhoz alkalmazkodni (és gondolom ti sem az enyémhez), főleg nem 10 millió különböző logikához, viszont hajlandó vagyok megtanulni használni 10 gyakoribb framework-öt.
Ezzel ugyanis az ügyfeleitekkel b*sztok ki, csak sajnos később derül rá fény, hogy átvertétek. Amikor máshoz fordul a kedves ügyfél mert nem szeretne veletek dolgozni, vagy eltüntetek, akkor horribilis összegeket fognak elkérni csak azért hogy
1) átnézzék és megértsék a kódot, vagy
2) átültessék egy népszerű framework-re vagy CMS-re
Technikai oldalról pedig azzal támasztanám alá a véleményemet, hogy egyrészt egy keretrendszer kódját jó sokan nézegetik nap mint nap, a saját megoldásotokét meg egy idő után sokáig senki. Remélem nem gondolja magáról senki hogy hibamentesen és szuperbiztonságosan tud programozni és sohasem lesz remote hole az alkalmazásában...
Másrészről minél nagyobb szabadságot adsz a résztvevőknek, annál inkább ki fogják ezt használni. Ennek következménye hogy nincs egységes programozói stílus, követhetetlen és átláthatatlan a kód és szépen lassan tele lesz hibákkal, nehézkes módosítani, a módosítások beláthatatlan következményekkel járnak. Persze ha egyedül nyomod az más. Úgysem adod oda senkinek a kódod és élettartam garanciát adsz minden kódsorra, ingyen vagy nyomott áron vállalod a mindenkori piaci árhoz képest a továbbfejlesztést, ha az ügyfél elégedetlen veled vagy eltünnél, akkor pedig egy tichuanai bankszámlán 100 millió forint kártérítés várja...
Eddig sem volt rövid ...
Tegyük fel, hogy én Symfony-ban írok egy webáruházat. A megrendelővel megromlik a viszonyom, megszakad a kapcsolat. Eltelik egy év, kellene neki egyedi fejlesztés, bővítés a webáruházhoz. Keres programozót, de mivel nem ért a technikai részletekhez, ezért csak annyit mond, hogy van egy webáruháza, ezt szeretné továbbfejlesztetni. Jelentkezik egy ember, aki CakePHP-t használ. Ha őt alkalmazzák, mert a referenciái alapján megfelelőnek tartják, akkor meg kell tanulnia a Symfony-t, hogy tudjon fejlesztéseket csinálni.
Ebben az esetben meglátásom szerint mindegy, hogy a Symfony-nak áll neki, vagy egy egyedi rendszert néz át, hogy mit miért, hogyan. Megint csak azt tudom mondani, hogy ha értelmesen van kommentezve egy kód, akkor nem nagyobb feladat egy saját rendszert megérteni, mint egy meglővő keretrendszert (a kommentezési konvencióm részben követi a PHPdoc sémát). Ha nincsen megfelelő doksi egy cucchoz, akkor úgyis a forrásból kell keresgélni az info-t, hogy mit hogyan (pl. anno nuSOAP-hoz nem volt leírás, így kénytelen voltam a kódot bújni, hogy mi hogyan megy ...).
Másrészt pedig én egyedül dolgzom, erre is vagyok berendezkedve és nem is fogok csapatban dolgozni, mert mire szükség lenne rá én már nem leszek aktív webfejlesztő (viszont a megfelelő mennyiségű és logikus komment miatt át tudja venni más az írt kódokat, legalábbis én így gondolom). A kódjaimat megfelelően kommentezem, szépen taglalom, próbálok logikát vinni bele (az OOP erre kényszerít).
Említettem azt is, hogy egy meglévő keretrendszer megismerése, a filozófia megértése, majd adaptálása sok idő és energia, valamint nincsenek egy szinten a programozók – ha valakinek még ismeretlen az OOP, akkor mit kezd egy CakePHP-vel például. Egy keretrendszert akkor lehet szerintem hatékonyan használni, ha az alapvető filozófiát megáénak tudja az ember (pl. tervezési minták).
Sajnos megint beleestem abba a csapdába, hogy általánosítottam, pedig nagyrészt a saját helyzetemről írtam.
Tudom, hogy egy külön állatfaj vagyok sok tekintetben, ezért tűnhet hülyeségnek, vagy logikátlanságnak sokszor, amit írok. Az utóbbi időben tapasztaltam, hogy sok esetben másképpen látom a dolgokat, mint a többség (úgy általában az életben). Alapvetően a saját utamat járom és sok esetben ez ütközik az általánosnak vett dolgokkal, gondolkodásmóddal, értékrenddel.
Nos, egy meglévő framework alkalmazása nagyon is helyes dolog, egyrészt a közös nyelv miatt (más tudja folytatni a munkát, ha beszél a közös nyelven), másrészt a fejlesztők tapasztalata miatt. Viszont magam részéről szeretem a saját utamat járni. Az, hogy ez mennyire jó vagy sem programozói szempontból vitatható, minden esetre az egyéni fejlődésem szempontjából úgy gondolom, hogy nekem ez bevált út. Nem lehet mindent egyszerre megtanulni, egy komplex keretrendszer használta, már egy elég magas szint, ahova fel kell fejlődni. Én – úgy gondolom – a kezdő, haladó és a profi szint között állok, mert több ismeretanyag van már meg, mint a kezdőknek, de kevesebb mint a nagyoknak, viszont ezen a köztes állapoton is próbálom adaptálni a profinak számító megoldásokat, de a saját szintemen, a saját megoldásaimban, mert sem időm, sem energiám nicsen megismerni, megérteni egy nagy és sikeres keretrendszer filozóiáját.
Nem gondolom, hogy szuperbiztos a kódom, de pontosan ez motivál arra, hogy megismerjem a dolgok miértjét és hogyanját. Ezt eltakarja a framework, ergo produktívan dolgozom, de nem biztos, hogy a leghatékonyabban. Azt is írtam, hogy folyamatosan csiszolódik a rendszerem, ahogyan találkozom újabb, számomra még ismeretlen, vagy nem használt módszerekkel. Tehát a fejlesztés nálam sem áll meg, csak nem lesz egy minden problémát lefedő komplex rendszerem, mert nem is ez a cél. Az aktuális igényeknek feleljen meg, ha a jövőben vannak újabb technikai igények, akkor majd beépítem a rendszerembe.
Lehet, hogy eddig nem jött le egyértelműen, de pontosan az volt az egész saját rendszer építgetésével a célom, hogy a saját munkamódszereimet "szabványosítsam", kialakítsak egy olyan rendszert amiben benne van a minőségorientált hozzáállás. Ezért is van pl. PHPdoc formában kommentezve a kód, ezért van úgy formázva a kód ahogy, stb.
Egyedül dolgzom, de ezt már néhányszor írtam. Másrészt pedig látva és tapasztalva azt, hogy a megrendelőt a kezénél fogva kell vezetni, ezért ma már csak részletes specifikáció mellett vállalok munkát. Jelenleg dolgozom egy rendszeren, de amíg nincsen meg a végső koncepció, hogy mi hogyan működjön, mik a pontos követelmények egy betűt nem vagyok hajlandó a rendszer kódjából írni.
Nos, akkor összefoglalnám. Én szeretem a saját utamat járni. Nem ellenzem a nagy framework-ök használtatát, de nekem most még túl profi megoldás. Úgy gondolom, hogy félúton járok afelé, hogy hatékonyan tudjak használni egy keretrendszert, mert ahhoz még sokat kell tanulnom (főként elméleti dolgokat). Ha valaki ilyen területen akar dolgozni, akkor igenis ismerjen legalább egy-kettő keretrendszert és az egyikből legyen májer, ne csak ismerje, hanem tudja kihasználni a lehetőségeit.
Én a keretrendszer használatához vezető úton megnézem, hogy mit hogyan csinálnak a nagyok, és adaptálom a saját rendszerembe. Ezzel úgy gondolom, hogy hosszabb távon pontosan előnyét élvezem a helyzetnek, mert utána járok, hogy mit miért csináltak, hogyan működik a keretrendszer, ezért az általa nyújtott magasabb absztrakciós rétegen produktívabban fogok tudni dolgozni, ismervén a gépház fedele alatt döbörgő motor működését. Ha közvetlenül ez nem is jár előnnyel, egy későbbi egyedi, speciális igény megjelenésekor, lehet, hogy pontosan ezen háttértudás birtokában tudok gyorsan és hatékonyan lépni.
Spanyol és Blabla
Vagy te aki kitalálta a Blabla nyelvet és nincs olyan aki rajtad kívül tudná a nyelvet és kénytelenek maguktól megtanulni Blabla-ul, ha szeretnének veled kommunikálni.
Szerinted bárki aki új nyelvet tanulna spanyolul fog elkezdeni tanulni vagy Blabla-ul? :)
Persze, értem én ..
Tehát vagy kimarad a Blabla vagy sem. Ha kimarad, akkor lehet, hogy jóval több idő lesz a Spanyol adaptálása, mert hiányzik a háttér, az elmélet, a gyakorlati szopás ahhoz, hogy ne csak csináld, hanem tudd is, hogy mit miért csinálsz. Tudom, hogy a keretrendszer pontosan azt hivatott elfedni, amivel a szopás van (lásd JS keretrendszerek), de ha valaki ismeri a szopás forrását, akkor ezzel ő értékesebb programozó. Legalábbis én így gondolom, de lehet, hogy tévedek.
Tovább gondolva, ha valaki belemegy a Blabla-ba, akkor lehet, hogy később ő lesz egy kulcs elem a Spanyol továbbfejlesztéséhez (ez így nagyon hülyén hangzik, de logikailag szerintem helytálló megondolatmenet) ...
Még tovább gondolva sok esetben a konvenciókkal szembeforduló (egyedi) ötletekből lesznek a későbbi nagy durranások ...
Egykét gondolat
Ezalatt a két év alatt nem érdemes fejlesztőt/céget váltani. Amikor az oldal megérett a lecserélésre, akkor pedig mindegy, hogy a jelenlegi csapat folytatja, vagy valaki más készíti el az oldal következő generációját.
Nem tudom, egy nyilvános framework használata mennyivel tolja ki ezt a ciklust, főleg a framework két évvel későbbi verzióját tekintve (valljuk be, a kompatibilitás nem minden opensource projekt erőssége).
Felkészültem arra a kézenfekvő válaszra, hogy "Azért, mert az én szar kódom elvaul, nem azt jelenti, hogy másé is". Lehet, hogy így van, de szerintem nem érdemes egy kódbázist túl sok ideig életben tartani. Mindig vannak előre nem látott fejlesztési irányok, a legjobb tervezési minták használata sem ad megoldást minden jövő beli fejlesztésre.
Doksi
Hmmm. Lehetőség van megtekinteni egy általad írd ilyen fejlesztői doksit vagy funkcionális specifikációt vagy architektúratervet? Ha kell aláírok NDA-t.
pár konkrétum?
Üdv,
Felhő
Itt reagáltam ...
ne dőlj be
Üdv,
Felhő
Szkeptikus vagyok, de meggyőzhető
szerk.: röviden megfogalmazva, biztosan rosszabb volt a mai frameworkök előtti idő, vagy csak nem tudtunk ésszerűen bánni a nyelv nyújtotta nagy szabadsággal?
Keretrendszer
Benne van a nevében is: keretrendszer. Keretbe foglalja a nyelv lehetőségeit, kanonikalizálja azokat. Tehát lehet programozni natív PHP-ban is hatékonyan, csak átlagon felüli önuralmat, rendszerszemléletet és tapasztalatot kíván meg.
célfüggvény is keretrendszer ;)
Illetve mit vársz attól, hogy procedurális megközelítést használsz? Én összedobtam most egy frameworköt ami OOP, kb. tudja amire alapban szükség lehet, és egy kis trükkel APC mellett kiszolgált kb. 3000 hello world oldalt másodpercenként az egyik amúgy élesben lévő szerverünkön. Eleve kérdéses, hogy olyan-e a projekt, amit fejlesztesz, hogy érdekesek az ilyen mikro optimalizálások, általában nincs erre szükség, és az a fontos, hogy minél rövidebb legyen a fejlesztési idő.
Üdv,
Felhő
Persze, hogy az, csak más :)
Sebességet, és nagyobb rugalmasságot. Az előbbi mondjuk ennél a projektnél nem egy kardinális probléma, ezért sem valószínű, hogy belevágok, de egy nagy terheltségű oldalon érdekes lenne megnézni, hogy mennyi pluszt ad az OOP keretrendszerekhez képest egy ilyen pehelysúlyú megoldás.
Framework vs rutinkönyvtár
Mostanában a depencence-hell elkerülése érdekében igyekszem különáló könyvtárakat létrehozni. Ezek öszekapcsolása pedig a felhasználó (jövő beli önmagam :) ízlésére van bízva.
Nem mindegy? :D