čtvrtek 21. prosince 2006

PHP vs JSP

Vím, že po internetu existuje spoustu srovnání programovacích jazyků. Já se ani nechci tak moc pouštět do srovnání jako osvětlit některé věci, které mi lezou v poslední době dost krkem.

Zejména se jedná o lži, které hlásají pubertální mladící, kteří si přečetli jeden článek, naprogramovali 100 řádků kódu a provádějí srovnání různých řešení mezi sebou. Často házejí špínu na věci, které neznají ani koncepčně, natož z pohledu vývojáře.

Když jsem začal s programováním, začal jsem na PHP, které se mi zdálo jako nejlepší volba. PHP bylo populární, rychle se rozvíjející jazyk, perspektivní, jednoduchý a dalo se najít spoustu tutoriálů po internetu.

Na začátku jsem byl vlastnostmi tohoto jazyka naprosto uchvácen a směle jsem prohlašoval, že je to geniální dílo :)

Dnes jsem již o mnoho skeptičtější a směle prohlašuji: PHP je bordel, který jsem se raději neměl učit. Důvodů, proč si něco takového myslím je několik a já proberu jen ty nejpalčivější:

  • každá nová verze je často nekompatibilní se starými skripty

  • dodnes neexistuje namespaces a to co jsem viděl v připravované verzi PHP6 mě nijak nenadchlo

  • OOP model je na příšerné urovni a programátor musí dodržovat spousty pravidel, aby se nenechal unést nesmyslnostmi jazyka

  • neexistuje schopný framework pro data (ORM, DAO)

  • php už od základu míchá aplikační a prezentační logiku dohromady

  • funkce v php nedokáží vracet výjimky, jen ty, které si sám napíši

  • znovupoužitelnost vlastních tříd je dost problematické, už z důvodu konceptu celého PHP



Mohl bych takto pokračovat dál a dál, ale to není záměrem mého příspěvku. Spíše než to, chci říci, že PHP nemá cenu tlačit někam, kam nepatří. A nyní bych ho už netlačil asi ani na web.

Našel jsem na: www.jakpsatweb.cz diskuzi o jsp-servletech. Názory o tom, že Java je framework nebo, že jsp je lepší šablonovač mě vážně pobavili. Nejsem žádný expert na jsp-servlety, spíše s nimi začínám, ale tohle už je moc :(

Srovnávat skripovací jazyk PHP s platformou jako je Java, je asi jako srovnávat cukroví s plechem na pečení (přece jen jsou vánoce :)).

Existují mýty o tom, že v JSP nelze napsat, to co v PHP. Je to omyl. Ba co více, je to neznalost konceptu JSP a PHP. JSP už od samého začátku (nepočítaje první verzi) vyzchází z patternu MVC (model-view-controller), který zaručuje oddělení aplikační od prezentační logiky. Navíc řešení webové aplikace v jave umožňuje více možností, jak danou aplikaci programovat (např. JSF).

Nebudu zde zabíhat do detailů, protože nejsem na Javu žádný znalec a primárně v ní "zatím" nevyvíjím, ale co vím jistě, je, že mi java umožňuje programovat nejen webové aplikace. Umožňuje mi použít JPA, umožňuje mi použít skutečně kvalitní IDE ve formě NetBeans či Eclipse. apod. apod.

Dalším mýtem bývá, že se Java nehodí na malé webové aplikace typu e-shop apod. Já v tomto stále nevidím problém. Ale vezmu to z druhé strany. Budu psát v PHP OOP kód. Budu se snažit využívat controllery a budu používat oddělení aplikační logiky od prezentační + použiji vlastní vrstvu na data ve formě jakéhosi paskvilu ORM s DAO. Než toto připravím, pokud nemám připravené vlastní skripty, zabere mi to spoustu času. PHP mi samozřejmě umožňuje danou aplikaci napsat procedurálním způsobem, který bude mixovat všechny vrstvy do sebe. Super, mám vše během chvilky, ale přestanu zvedat telefony ve chvíli, kdy po mě zákazník bude chtít další úpravy a další vylepšení. Raději tedy vše udělám podle MVC a budu dodržovat základní patterny, abych se vyhnul námaze při dalších úpravách. V podstatě to samé mohu udělat pomocí JSP-servletů aniž bych musel pracně dodělávat či mapovat "pofidérní" frameworky na dané vrstvy aplikace. Jak dlouho mi daná aplikace bude trvat v JSP, pokud použiji stávající frameworky, které jsou pro to přímo určené? Jak dlouho mi bude trvat sestavit aplikaci z vlastních tříd, které jsem použil minule?

Jediný důvod, proč se JSP nehodí na malé webové aplikace je ten, že neexistuje tak masivní podpora hostingů jako u PHP. To je nejzásadnější důvod, proč vlastně je JSP hozené pod PHP v oblasti vývoje web. aplikací po internetu. Lidé, kteří tvrdí, že se něco na něco nehodí by měli předem znát daný jazyk, aby mohli toto tvrdit. Já tyto výkřiky slyším pouze od lidí, kteří neumí OOP či neumí JSP.

Ukončím to malým srovnáním: kolik znáte programátorů, kteří přešli z OOP zpět na procedurální programování? Kolik znáte lidí, kteří přešli z Javy na PHP?

Nakonec jen malá ukázka pro PHPčkáře. Za jak dlouho byste byli schopni udělat toto, co Roman Štrobl v NetBeans?

14 komentářů:

  1. Hmm, já zůstávám u PHP. Doufám že se to časem zlepší.

    OdpovědětVymazat
  2. *Teda doufám že se zlepší PHP.

    OdpovědětVymazat
  3. Zatím tomu bohužel nic moc nenaznačuje. Spoustu lidí si myslelo, že se koncept zlepší s nástupem ZEND Frameworku, kde vývojáři sami budou požadovat lepší OOP Model a budou se snažit o zkvalitnění jazyka natolik, aby byl více použitelný i ve větších projektech. Bohužel tomu nic nenasvědčuje, což je pro mě trochu zklamání.
    Ale i tak zůstává PHP v oblasti web. aplikací zatím na prvním místě. Dost často se diskutovalo, že PHP to má odpískané, apod., ale nic z toho pravda není. Jeho největší síla je v tom, že je to prostě jednoduchý skriptovací jazyk a jeho hostování je o mnoho jednodušší. Narozdíl od JSP či ASP nemusí mít vývojář tolik znalostí pro vývoj. A to je právě ten kámen úrazu, že na jedné straně můžu v PHP začít psát během pár týdnů, ale na druhé straně tím vznikne spousty nekvalitních aplikací a jazyk to dopředu nijak neposouvá.

    OdpovědětVymazat
  4. PHP se mi líbí ale chybí mu jakýsi pravidla. PHP programuje každý, proto ty aplikace podle toho vypadají

    OdpovědětVymazat
  5. Pánové, nevím, proč se neustále pouštíte do porovnávání php vs. zbytek světa. Pokud programovat v PHP nechcete, tak se prostě na PHP vykašlete, osobně v tom nevidím problém.
    Problém je v tom, že v PHP hledáš Javu, ale to samozřejmě nelze. PHP je především procedurální jazyk, kdyby podporoval čistě OOP a ne procedurální styl, jako Java, tak by nikdy nebyl tak rozšířen.
    Co se týče vyhazování výjimek, proč nepoužívat funkci set_error_handler? Můžete si nadefinovat, které chyby se budou vyhazovat jako výjimky a pak s nimi klasicky pracovat, nevidim v tom takový problém.
    Míchání HTML a PHP taky nevidím jako problém, to je přeci otázka kázně programátora a nikoli jazyka. Osobně pracuji s Javou i PHP, ale u mě jednoznačně pro webové aplikace vede PHP.
    Nekompatibilita je problém, ale vzhledem k tomu, že používám na vše svůj framework, změna několika tříd pro práci např. s databází zabere jen pár vteřin, v tom nevidím problém.
    Osobně mi nejvíce vadí problémy s unicode, divné chování OOP a nedodržování pravidel tvůrci PHP při pojmenování.
    To první by mělo být odstraněno v PHP 6, to druhé doufám také a s tím třetím jsem se už smířil. Naopak velmi se mi líbí množství kvalitního kódu (třeba Zend Framework, Texy, Smarty), vysoce kvalitní IDE Zend Studio, kvalitní profilování s APD, relativně kvalitní testování s PHPUnits a nesrovnatelná rychlost vývoje pro mále aplikace.
    Mimochodem, před několika dny jsem viděl kalkulačku v jave od studenta VŠE a nikdy jsem horší kód neviděl ani v PHP:)

    OdpovědětVymazat
  6. Mimochodem, "Dalším mýtem bývá, že se Java nehodí na malé webové aplikace typu e-shop apod", třeba czechcomputer je v Javě;)

    OdpovědětVymazat
  7. Co se týče webhostingu, tuším, že u nás krom Pipni podporuje JSP už jen jeden hosting, to je myslím problém. V současné době dělám pro jednu firmu, která plánuje, že během kratší doby začne nabízet i hosting pro JSP.

    Se set_error_handler souhlasim, bohužel výjimky jsou v PHP v současné době velmi špatně použitelné. A zapínat vyhazovaní v php.ini...maš naprosto stejný nápad jako já:)

    PHP teď jednoznačně volím, protože mám několik měsíců vyvíjený framework a nemám v sočasné chvíli potřebu k jave i pro web aplikace přecházet (nicméně počítám, že v budoucnosti, pokud u nás bude několik slušnějších hostingů s podporou JSP, přejdu).

    Co se týče podpory unicode...dělal jsem eshop, kde cron automaticky stahoval z FTP soubor v unicode. Bohužel nešel načíst žádnou funkcí v PHP, tak jsme to nakonec vyřešili tak, že se skript stáhnul v PHP, Perl pak změnil kodování a PHP dále pokračovalo...zkoušeli jsme všecho možné až tohle nakonec fungovalo:/

    OdpovědětVymazat
  8. Ano, pipni.cz znám. Problém je s jejich podporou, která je na katastrofální úrovni. Stačí se podívat po forech, jak lidé hodnotí tento webhosting. :(
    Navíc mě zaujalo spíše řešení postavené na Sun Application Server 9 (glassfish) a Java EE5. Použití Java Persistance API (JPA) pro objektový přístup k databázím, kde pomocí jednoduchých tříd (entit) namapuji tabulky a pak pracuji jen s objekty. To samé platí o JSF frameworku, který je komponentně orientovaný a přináší skutečně zajímavé možnosti, např. s podporou AJAXu.
    Doporučuji se mrknout na tuto přednášku: http://avc.sh.cvut.cz/archiv/index.php?id=1041&rid=336&offset=0&select=NetBeans

    Co se týče webhostingu na glassfish, tam je problém úplně. Ono ani z daného konceptu to nejde přímo udělat. Nevím, jak by se portovali nové aplikace bez restartu serveru. (možná ale jen jsem zatím lama a nevím to :))
    Jednoduše řečeno: "Když už jsem se naučil programovat objektově, začal jsem současně s tím nesnášet stupidní PHP a zamiloval se do Javy.", asi tak :)
    Důvody, proč jsou jasné, je to něco, co jsem hledal v PHP. Přenositelnost kodu, nastavby, vytváření nejen web aplikací pod apachem. PHP je strašně omezené, když k tomu ještě započítám jeho postupný vývoj, který mě nijak nenadchnul (kromě vylepšeného OOP Modelu v PHP 5), vyjde mi z toho, že je nejvyšší čas opustit skriptovací jazyk a učit se něco pořádného a perspektivního. Když se dnes podívám na fora o PHP, spíše mi je smutno, co tam lidi řeší. Samej lepič kodu a lamer, který se ani po doporučení nesnaží něco naučit sám z manuálu, ale čeká na hotové řešení.
    Prostě mě naštvalo tvrzení lidím, kteří hlásají, že PHP je na web lepší. NENÍ, NENÍ, NENÍ :))
    Je jen jednodušší, což sebou časem přináší jen problémy a omezení. Asi tak.

    OdpovědětVymazat
  9. Nedá mi to nezareagovat...

    > Důvody, proč jsou jasné, je to něco, co jsem hledal v PHP. Přenositelnost
    > kodu, nastavby, vytváření nejen web aplikací pod apachem.

    Kolikrát, a kam jsi přenesl Javovskou aplikaci?

    OdpovědětVymazat
  10. musel som sa naucit asp.net (c#) v praci a musim povedat, ze ak niekto raz vyskusal c#, uz sa mu nechce vratit spat k PHP.
    V PHP mi najviac chyba:
    - getter setter
    - method overloading
    - strong typing
    - zakladne triedy ako collection, ...

    OdpovědětVymazat
  11. Odpověď na otázku, za jak dlouho by se v PHP dalo vygenerovat administrační rozhraní: "6 minut a 9 sekund":http://php.vrana.cz/vytvoreni-administracniho-rozhrani-v-php.php včetně doprovodného komentáře.

    OdpovědětVymazat
  12. Nemam nic proti Jave ( JSP ), a do urcite miry i sam vim, ze je to mnohem cistci jazyk nez-li PHP, ale nesouhlasim, ze se Java hodi na male weby. Dle me nehodi. Duvodem je jeji "pomalost" a systemova narocnost oproti PHP v malych projektech. U velkych projektu je to samozrejme uz zavysle na projektu samotnem a programatorovi :) Zaroven i to je dle me duvod, proc na ceskem webu se JSP prilis nenabizi.

    OdpovědětVymazat
  13. to kjn: Například nyní budu potřebovat další desktop aplikaci, u které ale chci aby vzdáleně volala EJB z aplikacniho serveru. Samozrejme, že ns samodné EJB je postavena web. aplikace. Nic mi ale nebrání vzít kus kodu ve spodní vrstve a nechat ho zdílet s jinou aplikací, která ani nemusí být webová.
    A co se týče té přenostitelnosti, je to jasné, pokud budeš navrhovat třídy tak, aby nebyly přímo vazbeny s dalšími v nemyslném duchu, tak prostě vezmu packages a nalinkuji si ji jako knihovnu do jiného projektu :)

    to attila: co se týče OOP, tak souhlas, prostě PHPko tě stále nutí se vracet zpět a místo vracení objektů vracet už jen stringy, int, atd. je to spíše dáno tím, že neexistuje žádné PHP API, které by bylo objektové. Jen to, které si napíši sám. S těmi setry getry máš asi namysli ten C# zápis, že? :) Osobně se mi zase líbí spíše klasické setry a getry, i když konečná logika je naprosto stejná.

    to Gransy: Na webhosting se nehodí z důvodů takových, že není zrovna jednoduché portovat tisíce web aplikací v JSP kvůli JVM, které by po jedné štapně napsané aplikaci, mohlo celé spadnout či vytíž příliš server. To je ten důvod. V dnešní době bych to viděl asi takto:
    1. na intranet na 100%
    2. na internet, jen pokud mám vlastní server, nebo mám výhodné podmínky jinde
    3. na klasický webhosting, zde mám prostě smůlu; spousta webhostingů podporuje, i v dnešní době PHP 4.0 či MySQL 3.40, nemůžeme přece od nich chtít, aby se někdo zabíval Tomcatem či nějakým app. serverem. Prostě hosting pro JSP je finančně příliš náročný s složitý na správu, z toho důvodu je výhoda pro PHP, ne proto, že by se na web. aplikace JSP nehodilo.
    Ale v podstatě souhlasím s tím, že malé projekty, typu kniha návštěv použiji PHP, už jen z toho důvodu, že nebudu mít tolik problému s nastavením a portováním aplikace. U projektů, nad 10 objektů v DB bych se začal asi hodně rozmýšlet.
    Tyhle hádky jsou také zapříčeněny tím, co kdo z nás dělá. Já třeba dělám intranet aplikaci. Proto jsem začal pokukovat po jiných možnostech. Kdybych tvořil jen eshopy či redakční systémy, bylo by pro mě JSP sprosté slovo. Asi tak.

    OdpovědětVymazat
  14. Já jsem dělal rok v c# a přišel jsem si jako v sedmým nebi :)...fakt kvalitní oop s mocnou základnou tříd a manuálů...teď se kvuli práci učím javu a je vydět,že z ní opravdu pochází(teda s toho objektového stroje)
    a hned si moje srdce získala,po těch všech pascalech a phpčkách..je to skvělej objektovej jazyk a myslím si,že kdo to myslí s programováním maličko vážnějc procedurální programování nemuže naplnit jeho potřeby a mely by se nad sebou zamyslet,bez objektů nejde psát větší aplikace přehledně

    OdpovědětVymazat

Když programátor založí a řídí firmu

Jako malý jsem chtěl být popelářem. Ani ne tak proto, že bych měl nějaký zvláštní vztah k odpadkům, ale hrozně se mi líbilo, jak...