👋 Nový obsah na borekb.cz

Info Tento blog je v "read-only módu" a nový obsah již nebude přibývat. O vývoji píšu na DevBlog.

Jak jsem skončil s PHP

V minulém zápisku o TDD jsem zmínil, že v práci začínáme s novým projektem a že jako implementační prostředí bylo tak nějak automaticky vybráno PHP (protože s ním má rámcovou zkušenost většina lidí u nás ve firmě). Extra fanda PHP jsem nikdy nebyl, ale pár větších projektů už jsem v tom dělal a vždycky to nějak šlo, takže i tentokrát jsem zpočátku neměl námitky. Moje trpělivost ale právě přetekla – ztratil jsem už tolik hodin zbytečně, že mě PHP spíš brzdí než aby mi pomáhalo udělat práci včas – a s takovým nástroje končím. Během posledních dní mě potrápily především následující věci:

  • S PHP až příliš často platím daň za to, že můj oblíbený operační systém je Windows a ne Linux nebo jiný Unixoid. V minulosti jsem narazil na několik Windows-specifických bugů (nejšťavnatější byl ten, kdy po upgradu setinkové verze PHP přestala fungovat konstanta PHP_SELF a okamžitě tak spadlo několik mých webů), pro některé verze PHP se občas nedají sehnat Windows binárky doplňků třetích stran (třeba non-thread safe binárka XDebugu), dokumentace občas používá konvence z Linuxu nepřenositelné na Windows atd. Prostě život PHP vývojáře na Windows (a nedej bože, pokud používá IIS!) je občas pořádně komplikovaný.
  • Debugging … prakticky neexistuje. PDT (PHP Development Tools postavený nad Eclipse) je sice pro psaní kódu poměrně pěkný nástroj, ale i v roce 2008 mu ladění v základu chybí. Kdo s PHP nemusí pracovat, se asi jen soucitně usmívá, já jsem ale nefalšovaně trpěl a debuggování se mi nepodařilo rozchodit ani po opravdu slušném úsilí. Stručně řečeno, Zend Debugger byl nepoužitelný kvůli najednou dlouhým časům odezvy PHP skriptů (z 0.05 sekundy to vylítlo někam nad 10 sekund; nepodařilo se mi odhalit proč) a pro XDebug se mi nepodařilo sehnat Windows binárku pro non-thread safe verzi PHP (viz předchozí bod). Takže mi zbylo jen var_dump() – to bylo hodně smutné.
  • Pomyslnou poslední kapkou ale byla chybovost knihoven pro práci s XML – a XML je pro můj současný projekt naprosto klíčové. Když jsem zjistil, že základní načtení XML stringu do DomDocumentu závisí na tom, jaké konce řádků se v XML používají (Windows nebo Unix), věděl jsem, že tudy opravdu ne, přátelé. Opravdu někdo knihovnu libxml testoval?

S PHP už jsem toho vydržel hodně, ale bugy si do vlastních aplikací tahat nenechám. Aspoň pro tento projekt tedy prchám k .NETu a rád za sebou nechám i další drobnosti, které mi vadily, i když bych jen kvůli nim bych na PHP zcela nezanevřel:

  • PHP jako jazyk není nic moc
  • Bordel ve jménech základních funkcí
  • Schizofrenie mezi objektovým a procedurálním programováním
  • Relativně slabá podpora v IDE, ačkoliv PDT se s tím v poslední době snaží něco udělat (Zend Studio je dobré, ale drahé)
  • Osobně jsem příznivec staticky typovaných jazyků, komfort v IDE umožněný design-time znalostí typů u mě převáží výhody jazyků dynamických (v tomto ohledu se mi moc líbí C# 3.0, který dynamicky vypadá, ale přitom není)
  • PHP manuál je na první pohled sympaticky jednoduchý, ale ne vždy se v něm lze dočíst vše podstatné. MSDN je pravý opak – objem informací na první pohled zaskočí, ale zase se celkem dá spolehnout na to, že požadovaná informace tam někde bude. Kombinace Google Custom Search a MSDN funguje.
  • Při různých interakcích s jinými vývojáři z PHP komunity jsem často měl pocit, že jaksi nejsme na stejné vlně. Třeba autor PHPUnit celkem zarytě odmítal, že by pro spuštění testů mohlo existovat něco lepšího než příkazová řádka (a vůbec mu nevadilo, že z TDD mantry „red, green, refactor“ se v jeho pojetí stává „gray, gray, refactor“). Nebo třeba komentář pod tímto bug reportem: http://bugs.php­.net/bug.php?… mi vyloženě připadá jako WTF.

PHP mělo i své světlé stránky, jako jednoduchost na naučení nebo Zend Framework, ale minimálně na svůj současný projekt si od něj rád odpočinu.

Zařazeno do kategorií |
David Grudl (Po, 2008-06-30 20:18):

Připoměl jsi mi mé poznámky z bojiště s XML. Hele, programovat v ASP.NET umí každej, ale psát v PHP, to je teprve umění, to chce trpělivost! :-))

„Thank you for your interest in PHP.“

Aleš Roubíček (Po, 2008-06-30 21:08):

Kdyby v ASP.NET nebo v PHP uměl programovat každej, tak jsme bez práce ;)

Borek (Po, 2008-06-30 21:15):

>>> „Thank you for your interest in PHP.“

Jo jo, rrichards ví, co nas*anýho člověka dokáže úplně dodělat :)

vlko (Po, 2008-06-30 20:35):

Ak si projekt este nezacal, tak skus MVC vzor, bud priamo ASP.NET MVC, alebo project Castle. Zaciatok je mozno trosku pomalsi, ale potom to uz ide samo. A najma ak ta bavi TDD, tak na to je MVC pattern priamo urceny.

Borek (Po, 2008-06-30 21:21):

On ten projekt bude hodně malý (počítáno řádky produkčního kódu), takže MVC framework bych asi plně neužil (mimochodem, existuje pro ASP.NET MVC nebo pro Monorail nějaký „XML view engine“?)

I přes malý rozsah ale půjde o hodně důležitý kus kódu, takže na kvalitě bude záležet. A zde se přesun od PHP celkem k čemukoliv jinému musí vyplatit :)

Aleš Roubíček (Út, 2008-07-01 05:55):

V Brailu jde XML zapisovat dost zajímavě a ten je jak pro Monorail, tak pro ASP.NET MVC. Pro to také existuje XSLT ViewEngine. Stejně jsem ale nepochopil, k čemu by byl XML view engine dobrý. :) Stejně jako třeba JSON view engine, moc dobře nechápu…

Borek (Út, 2008-07-01 08:00):

Můj projekt má na svém výstupu XML, nikoliv HTML, proto by se hodil XML view engine. Kdybych měl na výstupu JSON, hodil by se JSON view engine a podobně. (Koncept modelů a controllerů pro můj projekt zůstane beze změny.)

Vzhledem k podobnosti syntaxe HTML a XML by se snad dal použít výchozí ASPX view engine, ale stále mám pochybnosti, jestli do relativně hodně jednoduchého kusu kódu zatahovat vůbec nějakou závislost na MVC frameworku.

vlko (Út, 2008-07-01 09:14):

na xml (teda vseobecne tagove jazyky) sa najlepsie hodi NHaml http://www.co­deplex.com/…ki­/View.aspx?…

Borek (Út, 2008-07-01 10:31):

Dvě věci:

  1. Haml se mi nelíbí – nepřipadá mi přehledný a navíc nemám rád, když je něco závislé na odsazení
  2. Myslel jsem, že Haml je alternativní zápis k HTML, ne k obecnému XML (aspoň myslím, že jsem v Hamlu viděl nějaké HTML-specifické věci)

No každopádně Haml není můj šálek kávy.

vlko (Út, 2008-07-01 12:27):

add 1. Mozno vec nazoru, ale xml sa lepsie cita ak je odsadzovane, k tomu opakovane casti riesit cez partial views a moze sa dosiahnut celkom pekna managovatelnost a rozsirovanie kodu aj bez rozsiahleho odsadzovania cez dve obrazovky:) add 2. To ze je primarne urceny pre html, neznamena, ze sa neda pouzit na vystup xml, sice pouzije sa len mensia podmnozina moznosti celeho nhaml, ale na generovanie xml ma vsetko potrebne, ved v podstate xhtml by mal byt tiez validny xml

ZP (Po, 2008-06-30 23:15):

Poznámka BB: Staženo na přání ZP :)

Maragall (So, 2008-08-16 22:45):

Panove…klanim se, ackoliv nerozumim ani slovo… Rad bych se nekdy dostal na Vasi uroven (profesionalni)… Poradite mi, kde si po netu najit opravdu „lamacsky“ kurz programatorstvi…??? Zkousel jsem jaknaveb..atd.. malinko si delam stranku, ale to, o cem se tady bavite je pro me velka neznama… Diky, pokud se budete obtezovat .
Josef

Borek (Ne, 2008-08-17 09:30):

Po webu pro úplné začátečníky jsem se nikdy nedíval, ale Google je tvůj přítel.

Marek Soldát (Pá, 2008-08-29 07:11):

Já jsem velký příznivce PHP, už čistě z toho důvodu, že ho umí (na dobré úrovni) používat poměrně hodně lidí, takže v případě velké vytíženosti není problém s nabíráním externistů.

Nicméně k jednotlivým bodům technicky:

  • Windows vs. Linux – nechci začínat flame, ale na server bych (pokud by nebyla jiná možnost) Windows prostě nedal. Pokud jde o PHP, je pár věcí co nejde na Windows, je zas pár věcí co nejde na Linuxu, vesměs jde o alternativy zápisu, uznávám, že je to více Unix-like jazyk.
  • Debugging si píšu sám. Je to semtam trochu zbytečná práce, ale dá se s tím žít, na druhou stranu se dá přizpůsobit vlastním potřebám.
  • libxml – souhlasím, hrůza. Chybovost je jedna věc, rychlost mi vadí víc. Když jsme stavěli pár let zpátky Naakup.cz, rychle jsem pochopil, že na parsování 150MB souborů je to prakticky nepoužitelné (a to neprobíhala kontrola podle DTD) – nechápu jak to vnitřně funguje, vlastní parser, byť neuměl vše, to zvádnul za méně jak 1/10 času (kdybych napsal 1/100, možná bych nebyl daleko od pravdy).
  • Bordel ve jménech základních funkcí je, nicméně se připravuje docela konstruktivní řešení (v PHP6 nebo novější, teď z hlavy nevím)
  • K PHP manuálu nemám větších připomínek. Sice občas něco chybí, u MSDN se to ale stává taky (s ASP nic nemám, MSDN projíždím kvůli implementaci JavaScriptu v IE a občas mi přijde, že je v tom tedy nehorázný bordel, což ovšem nemusí být nutně problém i manuálu k ASP)
Borek (Pá, 2008-08-29 12:40):

Nic proti, Marku, ale kdo napíše „Windows bych si na server prostě nedal“, ten dává víc na předsudky než na fakta.

MM (Út, 2010-04-27 17:44):

Moje řeč, Windows Server, obzvláště verze 2008 R2 je opravdu velmi výkonný, nepadá a nejsou s ním problémy. Já ho dokonce používám jako workstation na mém notebooku a pohoda.

Co se týče PHP a ASP.NET, jsem zastáncem .NETu hned z několika důvodů: Přehlednost, podpora, špičkové IDE (Visual Studio je prostě nepřekonatelné…), spousta softu 3. stran (jako devexpress, dundas apod.) a hlavně je to normálně objektové a pevně typované.

PHP je ale taky dobré, ale pro mě hold ne tak dobré… :-)

Radši než k PHP bych se přiklonil k Javě a JSP, škoda že je to tak složité…

Komentáře jsou uzavřeny (blog je v read-only módu). Pokud mě chcete kontaktovat, můžete mailem.