Prosinec 21st, 2006PHP 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?
Prosinec 21st, 2006 at 21.51
Hmm, já zůstávám u PHP. Doufám že se to časem zlepší.
Prosinec 21st, 2006 at 21.54
*Teda doufám že se zlepší PHP.
Prosinec 22nd, 2006 at 8.41
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á.
Prosinec 23rd, 2006 at 14.54
PHP se mi líbí ale chybí mu jakýsi pravidla. PHP programuje každý, proto ty aplikace podle toho vypadají
Prosinec 24th, 2006 at 20.32
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:)
Prosinec 24th, 2006 at 20.36
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ě;)
Prosinec 29th, 2006 at 10.22
<texy>to Ronnie: Já se nepouštěl do přímého porovnání PHP vs. Java. Název článku jsem volil záměrně, protože si spoustu lidí myslí, že lze tyto věci napřímo porovnávat. Java je platforma, PHP je skriptovací jazyk. Je to jako porovnávání frameworku .NET s programovacím jazykem, toto je také nesmysl.
Více měné jsem se ale snažil porovnat možnosti a vývoj aplikací. Kdyby bylo tak jednoduché opustit PHP, už dávno bych to udělal, ale jsou zde určité okolnosti, které mě stále drží u PHP:
PHP není především procedurální jazyk, PHP jen na začátku nedisponovalo OOP modelem na takové úrovni, aby bylo možné OOP použít k plnému nasazení. S tím rozšířením si nemyslím, že by to bylo z důvodu procedurálního způsobu psaní, ale z důvodu snadné implementace, ať už webového serveru či aplikací psaných v PHP.
Co se týče set_error_handler, je to přesně jedna z PHP prasáren o kterých jsem psal. Je sice hezké, že můžu použít jakousi obkliku, ale stále mi to neřeší tu efektivnost přímého vyhazování výjimek. Výjimky mají mít určitou hierarchii, což by zde bylo dost obtížné řešit. Raději bych uvítal alespoň direktivu v ini, kde by bylo možné si vyhazování výjimek zapnout :) Samozřejmě, že se výjimky nesmějí zpát všude, návratová hodnota (Boolean) má občas také své kouzlo :) Spíše se mi jedná o to mixovaní návratových hodnot, jednou dostanu String a podruhe Boolean:false, jak krásné :/
Co se týče míchání aplikační a prezentační logiky, tak máš sice pravdu, že je to otázka kázně, ale je rozdíl, pokud mám jasně stanovená pravidla ve formě patternu MVC nebo jestli mám možnost smíchat vše dohromady. Toto by mělo být řešeno konceptem jazyka, popř. příslušného frameworku a ne kázní programátora.
Pokud skutečně pracuješ s Javou a někdy jsi používal Struts či JSF a vyzkoušel věci jako jsou entity classes s geniální myšlenkou anotací, tak mi snad nemůžeš tvrdit, že na web aplikace je PHP lepší. To se mi nějak nezdá. :)
Jinak, často zmiňovaná věc je podpora unicode (v PHP6 by měla být nativní UTF-16), ale abych byl upřímný, nějak se mě toto téma přímo nedotýká. Lépe řečeno neovliňuje mi to vývoj natolik, aby to pro mě byl palčivý problém :)
S tím divným chováním OOP musím souhlasit. Podle mého je jedním z důvodů i dynamická typovost jazyka, která OOP příliš nenahrává. Co se týče pojmenování, je tím PHP docela dost známé, že standardy jsou pro tvůrce neznámý pojem :)
Co se týče množství kvalitního kodu, zmínil jsi tři věci, s kterými souhlasím, ale co ten zbytek? Koukal jsi někdy na knihovny v PEAR? Takový bastl kodu se jentak nevidí :) A toto má být považováno za jakousi zbírku knihoven pro PHP, která se doporučuje k využití? To mi příjde spíše jako špatný vtip.
K té kalkulačce: ano, sám jsem to i psal, že špatná aplikace se dá napsat v čemkoli. Ale nebudu posuzovat programovací jazyk podle toho, jak v něm nějaký lamer programuje ;)
K druhému příspěvku: přečti si fora na java.cz či jinde, spoustu lidí hlásá, jak Java není vhodná pro malé web aplikace. Ano není vhodná pro lamy, s tím souhlasím, ale na druhou stranu jsem zatím stále nepochopil či neodhalil důvod, proč se nedá využít stejně efektivně (podle mého i efektivněji) na malé web aplikace jako PHP.
Jinak nevím jak sleduješ vývoj, ale když se sám podíváš, tvůrci PHP se snaží protlačit ZEND Framework všude, kde jen to je možné, myslím, že je otázka času, kdy bude jako hlavní framework, na kterém se budou vyvíjet web aplikace v PHP. Proč to píši? Tento framework totiž používá pattern MVC, což je pro JSP standard někdy od verze 1.1. Prostě PHP jde jen radikálně pomalejší cestou tam, kde jsou nyní jeho konkurenti. A to, že je populárnější vůbec neznamená, že je lepší, v tomto případě to znamená jen to, že je jednodušší a proto dovoluje, aby vyvíjela web aplikace každá lama, která si přečte tutoriál, z roku raz dva, o tom, jak si vlastně udělat tu svojí návštěvní knihu ;)
Otázkou je, jestli to je správně či nikoli, já si stále myslím, že nikoli. Důvod proč jsem už několikrát zmiňoval.
Prosinec 30th, 2006 at 17.21
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:/
Prosinec 31st, 2006 at 9.06
<texy>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/…iv/index.php?…
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.
Březen 26th, 2007 at 6.49
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?
Březen 26th, 2007 at 8.06
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:
Březen 26th, 2007 at 10.59
Odpověď na otázku, za jak dlouho by se v PHP dalo vygenerovat administrační rozhraní: 6 minut a 9 sekund včetně doprovodného komentáře.
Březen 27th, 2007 at 17.46
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.
Březen 28th, 2007 at 8.05
<texy>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:
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.
Červen 14th, 2008 at 15.20
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ě