Dziś jest piątek, 21 listopada 2008 roku (z kalendarza...)

7 grzechów PHP - komentarz

Icon

16.07.2006, 22:56

PHP

Komentarze (5)

Powrót

Splatch napisał do swoich czytelników wpis "7 grzechów głównych PHP, inwokacja". Zamierzałem go pierwotnie uraczyć paroma krótkimi spostrzeżeniami i nieścisłościami w kilku miejscach, ale ostatecznie rozrósł się on tak bardzo, iż mój komentarz postanowiłem opublikować na własnych śmieciach. Zainteresowanych najpierw zachęcam do zapoznania się z oryginałem: Siedem grzechów głównych PHP - inwokacja.

Na PHP patrzę jako na narzędzie pracy, a nie sens życia, ideologię lub coś podobnego. Pracuje mi się na nim dość wygodnie, ale każdy śledzący regularnie Dzienniki zyxowe pamięta, że nie szczędziłem też mu słów krytyki. Na pozór ciężko się nie zgodzić z argumentami Splatcha, lecz na zdrowy rozsądek część jest napisana z podejścia "PHP jest B od A do Z".

API, technologie. Splatch zarzuca projektowi brak jakiegokolwiek API dla rozszerzeń oraz wsparcia przy ich tworzeniu. Było to prawdą w erze PHP 2 i 3, lecz już przy pisaniu "czwórki" zwrócono uwagę, że monolityczna struktura jest nienajlepszym pomysłem. Aktualnie każdy, kto chce napisać nowe rozszerzenie do PHP, musi tylko znać język C, znać cel swej pracy oraz przeczytać rozdział 46 dokumentacji PHP zatytułowany "Zend API: Hacking the Core of PHP" i poświęcony właśnie tworzeniu modułów. Kod źródłowy PHP pełen jest makr i funkcji, których celem jest automatyzacja i uproszczenie niemal wszystkich rutynowych czynności związanych z podpinaniem dowolnego kawałka kodu źródłowego pod silnik. Ogromna ilość modułów standardowych oraz drugie tyle w PECL'u coś musi oznaczać.

PDO. Rozszerzenie to powinno pojawić się już w wersji 5.0, ale niestety twórcy wpadli na pomysł jego napisania po jej premierze. Porównywanie PDO do ADODB jest w niektórych miejscach dość nietrafione. Lodówka i zamrażarka na pozór wykonują podobne zadanie, ale porównywanie ich to dziwny pomysł (jedna utrzymuje temperaturę powyżej zera, druga zamraża, ale czy jest lepsza? Nie, po prostu ma inne zadanie). Nawet dokumentacja o tym wspomina: PDO provides a data-access abstraction layer, which means that, regardless of which database you're using, you use the same functions to issue queries and fetch data. PDO does not provide a database abstraction; it doesn't rewrite SQL or emulate missing features. You should use a full-blown abstraction layer if you need that facility. PDO jest jednolitym interfejsem. Projekt ten nie miał nigdy poprawiać po egoistycznie nastawionych twórcach baz danych oraz ich kreatywnym podejściu do implementacji standardu ANSI SQL, ale na plus należy zaznaczyć, że niektóre braki bibliotek klienckich są emulowane (np. podpinanie). Trudno nie odnieść wrażenia, że coś jeszcze by się przydało, ale według mnie PDO w obecnej formie pozostać także powinno, właśnie przez to, że dawałoby wybór: kiedy nie pasuje Ci z jakichś względów rozwiązanie gotowe, nadal możesz wykorzystać API niższego poziomu i stworzyć to, co cię satysfakcjonuje.

Użyty przez Splatcha zwrot Z czym się do tej pory kojarzy PHP? Ze “stronkami” produkowanymi przez gimnazjalistów i licealistów. wmurował mnie w ziemię. Pora rozejrzeć się wokół! Internet to nie tylko komercha i wielkie projekty enterprise. Programowanie to nie tylko strony internetowe i projekty enterprise. Ja PHP bym raczej określił mianem bardzo uniwersalnego języka, który jakiś czas temu rozpoczął marsz TAKŻE w kierunku tegoż mitycznego enterprise'u (a czy kroczy właściwą drogą to inna sprawa). To nie jest cel sam w sobie, to po prostu jedno z kolejnych wyzwań. PHP spotkasz na witrynach wielkich firm, choć ich ilość na pewno nie jest tak duża, jak w przypadku innych technologii z powodu wymienionych przez Splatch'a niektórych wad lub opóźnień w stosunku do konkurencji. Ale tak, jak pisałem - Internetu nie tworzą korporacje. Tak naprawdę duszą sieciowej pajęczyny są właśnie te lekceważone "stronki gimnazjalistów i licealistów", niekomercyjne witryny tematyczne, projekty prezentujące własne dokonania. Na filozoficzne dywagacje tego stanu przyjdzie czas kiedy indziej, ale od strony technologicznej PHP jest tu nie do zdarcia. Może byłoby inaczej, gdyby społeczność takiej Javy czy ASP wzięła się za tworzenie tutoriali, forów dyskusyjnych, baz kodu czy "tanich Volksserverów" tak samo, jak to robią ludzie od PHP. Właśnie takie akademickie podejście odstrasza mnie od tamtych technologii, brak chęci do dzielenia się otwartym kodem. Co mi ze składni i opisu bibliotek standardowych? W 3 tygodnie to opanuję i dalej nie będę mógł stworzyć poważniejszych rzeczy z powodu braku wyczucia języka. Listing jednego kompletnego programu zawsze zastąpi mi sto najlepszych tutoriali, gdyż da mi jakiś wzór, obraz tego, jak te klocki można wykorzystać, by wykonać zadanie. W tym miejscu to właśnie te zaawansowane języki stoją daleko za lekceważonym PHP. Tu można przebierać do woli: ściągać, analizować, porównywać, opiniować i wreszcie tworzyć własne. W ten sposób buduje się "wyczucie języka". Osobiście wolę znać niewielką grupę technologii na wylot, niż całe mnóstwo po łebkach. W PHP włożyłem już 5 długich lat czasu. Testowałem najmniejsze głupoty języka, by mieć obraz jego działania. Czytałem do poduszki kod źródłowy i modyfikowałem dla zabawy Zend Engine. Gdybym miał to teraz przekreślić, pozostałoby mi tylko napisać na Zyxist.com wielki napis "JESTEM FRAJEREM". Żeby była jasność - na znajomości tylko PHP bynajmniej pozostać nie zamierzam. Ale głupotą byłoby negowanie go tylko dlatego, że w kwestiach wielkoskalowych ma braki, a Zend ostatnio stosuje dziwne podejście w kwestii doboru priorytetów i debugowania swego sztandarowego projektu.

Według mnie głównymi wadami PHP są:

  • Mnóstwo archaizmów z dawnych czasów, które już dawno powinno się wywalić w diabły.
  • ... co powoduje chaos w artykułach, kodzie źródłowym w miarę, jak jest tych coraz więcej.
  • ... i daje argument firmom hostingowym do nieistalowania PHP5, choć w tym wypadku bardziej świadomi programiści powinni stanąć murem i rzec, że w takim wypadku niechaj sobie tacy potłuką o kant d*** swoje serwery.
  • Dziwna polityka Zend Company w kwestii wyznaczania priorytetów rozwoju (debatowanie nad oczywistościami w stylu wbudowanego zrzutnika bytecode'u na HDD) i debugowania PHP (spróbujcie sobie zgłosić nawet oczywisty błąd, a zobaczycie).
  • Brak standaryzacji w nazewnictwie i kolejności parametrów.

PHP ma otwarty kod źródłowy. PHP ma trochę wad. Ludzie mają trochę umiejętności. Ci sami ludzie nie rozumieją polityki Zend.com. Zastanówmy się... które założenie idei "open-source" pasuje do tej sytuacji? Podpowiedź: PHP już raz z niego w swej historii skorzystał.

Powrót

Komentarze

Napisał SPECTATOR w wtorek, 18 lipca 2006 o 00:36

Spróbuj PYTHON'a :).
_W pewnych aspektach ma przewage nad PHP._
_Ma bytecode na HDD_
_DJANGO - interesujący FRAMEWORK_

Napisał Zyx w wtorek, 18 lipca 2006 o 17:38

Pythona miałem okazję oglądać w akcji. Bardzo mi się w nim podoba "wbudowana" implementacja wielu złożonych struktur danych (grafy :)), natomiast wykorzystanie wcięć do zaznaczania bloków kodu... idea w teorii dobra, w praktyce okazuje się do bani, biorąc pod uwagę to, co wyprawiają z nią klienty poczty i kupa edytorów.

Napisał shw w wtorek, 18 lipca 2006 o 22:56

wlasnie - jest kilka jezykow, ktore mi sie podobaja - wpasowywuja sie, sa wzglednie proste, a jednoczesnie ulatwiaja kupe rzeczy - np. .NET'owy boo. tylko wlasnie - dlaczego nigdy (nigdy nie mow nigdy) nie bede pisal nic bardziej skomplikowanego niz proste skrypty w jezyku boo? wciecia, z reszta nie tylko, bo i nie ma srednikow na koncu linii chociaz ich umieszczenie nie wywala bledow - sa wciecia i dziwne konstrukcje (np. " if costam > 0: " ). Do skryptow moze to i dobre, ale pisac w tym klasy? Jeszcze nie majac wsparcia od takiego Visual Studio, ktory ci pomoze z wcieciami? Nie wyobrazam sobie czegos bardziej skomplikowanego w tym.
Niech klamry beda jako opcja - nie ma ich - licza sie wciecia, sa - licza sie klamry. Ale nie wspierac klamr lub wrecz wywalac bledy? Naprawde - ja dzieki klamrom lepiej widze co gdzie sie zaczyna/konczy. Pieni mnie jak ktos stosuje "sztuczke" w C++ (itp), gdzie dla jednolinijkowego kodu po if'ach i petlach nie trzeba klamr robic. Co szkodza te 2 znaki - a jak przejrzysciej.

A wracajac do tematu PHP. PHP jest proste, jak cep. Nie oszukujmy sie - wieeele mu brakuje, obiektowosc u niego mierna - sa zaczatki, ale tylko i do tego jakies takie nienaturalne, kiedy tyle lat tejze sie praktycznie nie uzywalo, archaizmy z czasow php3 sie ciagna. Ale jedno trzeba mu przyznac - napiszesz w tym wszystko (jezeli chodzi o www). Lepiej/gorzej, latwiej/trudniej, ale wzglednie sprawnie da sie robic cuda.
I powiem tak - po roku ostrego obcowania z ASP.NET - jezeli mialbym wybrac ktorys z tych jezykow, zeby robic cos dla siebie - byloby to PHP. Prawda - brakuje mu wielu ficzerow, udogodnien takiego ASP.NET, ale - cholera - ja tam decyduje o stopniu zaawansowania kodu, tego jak chce go pisac i jak ma wygladac i funkcjonowac. ASP.NET jest dobry - jak robisz aplikacje z interfacem www, ale jezeli to ma byc plynne, plastyczne i pojsc nawet na IE4 - wybralbym PHP. Nie ma moze tej komponentowosci, obiektowki, prawdziwego, aplikacyjnego podejscia do tworzenia, ale - jest elastyczny, mily, zwawy - taka plastelina - w porownaniu z plastikowym, klockowatym ASP.NET.

Napisał asdf w czwartek, 20 lipca 2006 o 12:28

czy to jest pogrubione? a to _podkreślone?_

Napisał Zyx w czwartek, 20 lipca 2006 o 14:12

Znaki formatujące należy powtórzyć dwukrotnie: w linku "Formatowanie wiki" obok pola na komentarz jest wszystko opisane. Niedawno doszedł też jeszcze jeden znacznik: "no" w nawiasach klamrowych - pozwala on zignorować kody formatujące w zamkniętym przez siebie obszarze.

Strona 1 z 1 :: 1

Skomentuj

NickInformacja
E-mailTylko do użytku wewnętrznego.
WWWNie zapomnij o http://
LayoutNapisz tu, czy widzisz dzienny czy nocny layout.
WpisFormatowanie wiki
Internauto, pamiętaj! Wolność to nie samowola - dbaj o kulturę wypowiedzi oraz dyskusji w sieci.

Na Zyxist.com panuje swoboda wyrażania opinii oraz krytyki pod dowolnym adresem. Jedyny warunek: musi być ona kulturalna i rzeczowa. Na chamstwo, prostactwo lub jawne obrażanie kogokolwiek nie ma tu miejsca i takie komentarze są bardzo szybko usuwane. Jeśli zamierzasz polemizować z treścią wpisu, wpierw uważnie ją przeczytaj.

© Tomasz "Zyx" Jędrzejewski 2005 - 2008 | Wykonanych zapytań: 2 | Serwer wirtualny zapewnia