PHP to badziew, ale to nie ma znaczenia

Oryginalny post: PHP Sucks, But It Doesn't Matter

Autor: Jeff Atwood

Oto lista wszystkich funkcji zaczynających się na literę "A" w indeksie funkcji PHP:

abs() apc_load_constants() array_intersect() array_values()
acos() apc_sma_info() array_intersect_assoc() array_walk()
acosh() apc_store() array_intersect_key() array_walk_recursive()
addcslashes() apd_breakpoint() array_intersect_uassoc() ArrayIterator::current()
addslashes() apd_callstack() array_intersect_ukey() ArrayIterator::key()
aggregate() apd_clunk() array_key_exists() ArrayIterator::next()
aggregate_info() apd_continue() array_keys() ArrayIterator::rewind()
aggregate_methods() apd_croak() array_map() ArrayIterator::seek()
aggregate_methods_by_list() apd_dump_function_table() array_merge() ArrayIterator::valid()
aggregate_methods_by_regexp() apd_dump_persistent_resources() array_merge_recursive() ArrayObject::__construct()
aggregate_properties() apd_dump_regular_resources() array_multisort() ArrayObject::append()
aggregate_properties_by_list() apd_echo() array_pad() ArrayObject::count()
aggregate_properties_by_regexp() apd_get_active_symbols() array_pop() ArrayObject::getIterator()
aggregation_info() apd_set_pprof_trace() array_product() ArrayObject::offsetExists()
apache_child_terminate() apd_set_session() array_push() ArrayObject::offsetGet()
apache_get_modules() apd_set_session_trace() array_rand() ArrayObject::offsetSet()
apache_get_version() apd_set_socket_session_trace() array_reduce() ArrayObject::offsetUnset()
apache_getenv() array() array_reverse() arsort()
apache_lookup_uri() array_change_key_case() array_search() ascii2ebcdic()
apache_note() array_chunk() array_shift() asin()
apache_request_headers() array_combine() array_slice() asinh()
apache_reset_timeout() array_count_values() array_splice() asort()
apache_response_headers() array_diff() array_sum() aspell_check()
apache_setenv() array_diff_assoc() array_udiff() aspell_check_raw()
apc_add() array_diff_key() array_udiff_assoc() aspell_new()
apc_cache_info() array_diff_uassoc() array_udiff_uassoc() aspell_suggest()
apc_clear_cache() array_diff_ukey() array_uintersect() assert()
apc_compile_file() array_fill() array_uintersect_assoc() assert_options()
apc_define_constants() array_fill_keys() array_uintersect_uassoc() atan()
apc_delete() array_filter() array_unique() atan2()
apc_fetch() array_flip() array_unshift() atanh()

Pamiętam moje pierwsze doświadczenie z PHP dawno temu, w 2001 roku. Pomimo mojego wątpliwego pochodzenia z ASP i Visual Basic'a, przeglądanie alfabetycznej listy funkcji PHP wystarczyło, by odstraszyć mnie na lata. Jakkolwiek by nie było, przeglądając powyższą listę, nie sądzę, żeby wiele się zmieniło od tamtego czasu.

Nie jestem specjalistą od języków, ale projektowanie ich jest trudne. Istnieje powód, dla którego większość sławnych informatyków na świecie jest także projektantami języków programowania. I wielka szkoda, że żaden z nich nie miał nigdy okazji pracować z PHP. Na tyle na ile go znam, PHP nie jest językiem, a raczej losową kolekcją przypadkowych rzeczy, wirtualną eksplozją w fabryce słów kluczowych i funkcji. Miej na uwadze, że te słowa pochodzą od człowieka, który był przyzwyczajony do BASIC'a, języka, który otrzymuje tyle respektu co Rodney Dangerfield. Tak więc tego rodzaju rzeczy nie są mi obce.

Oczywiście to są stare nowiny. Jak stare? Prastare. Z czasów Internet Explorera 4. Internet jest przepełniony artykułami o tym, że PHP jest beznadziejne -- praktycznie zabrakło mi zakładek w przeglądarce, żeby otworzyć je wszystkie. Tim Bray dzielnie przełamał tę tendencję razem ze swoim wpisem z długotrwałej serii "On PHP":

Oto mój problem, w oparciu o moje ograniczone doświadczenie z PHP (uruchomienie paru darmowych aplikacji, które robia to i tamto, oraz debugowanie strony dla nietechnicznego przyjaciela tu i tam): nie zdarzyło mi się jeszcze widzieć kodu PHP, który nie byłby niechlujnym, niemożliwym do utrzymania bajzlem. Spaghetti SQL opakowany w spaghetti PHP, opakowany w spaghetti HTML, powtarzany w niewiele różniącej się formie w wielu miejscach.

Artykuł Tim'a jest dobrym początkiem jak każdy inny; wyłapał grupkę powiązanych odnośników w następującej dyskusji. Jak będziesz go czytał, zauważysz oczywiste podobieństwo pomiędzy amatorszczyzną w programowaniu w PHP a w Visual Basicu 6, porónwanie, na które wielu programistów samemu by wpadło.

Fredrik Holmström:

Każde oprogramowanie jakie kiedykolwiek widziałem, bądź pisałem w PHP, sprawiało wrażenie niezdarnego i nieporęcznego, nie było w nim ani trochę elegancji, czy wdzięku. Pracowanie z PHP jest troche jak rzucanie 10 funtowego betonowego pustaka z dziesięciopiętrowego budynku: Szybko dostaniesz się tam dokąd zmierzasz, ale nie jest to piękne. ... Kocham PHP, i jest to odpowiednie narzędzie do niektórych zadań. Jest po prostu brzydki, nieporęczny i sprawia, że chce mi się płakać i mam koszmary. To jest nowy VB6 w przebraniu C.

Kral Seguin:

Z mojego własnego doświadczenia, oraz z niezliczonych tutoriali i blogów z sieci, wielu programistów PHP jest winnych tego samego badziewia, co kiedyś programiści VB. OO, N-Warstwowość, obsługa wyjątków, modelowanie domeny, refaktoryzacja oraz testy jednostkowe są obcymi konceptami w świecie PHP.

Zrozum, że jako stary programista VB jestem pełen współczucia do wyśmiewania, jakiego doświadczysz, programując w bardzo popularnym języku programowania, który nie jest uznawany za "profesjonalny".

Pisałem w VB jak i w PHP, i według mnie porównanie jest rażąco niesprawiedliwe dla Visual Basica. Czy PHP jest beznadziejne? Oczywiście, że jest. Czy przeczytałeś jakikolwiek z odnośników we wpisie na blogu Tim'a? To galaktyczna supernowa, niepojęcie olbrzymiego, niedającego się zrozumieć, okropnego badziewia. Jeśli usiądziesz, żeby coś napisać w PHP i masz w sobie choć odrobinę talentu programisty, nie ma możliwości, aby wyciągnąć z tego jakiś inny wniosek. Jest nieodparty.

Ale również chciałem powiedzieć, że nie ma to znaczenia.

TIOBE community index, do którego odniosłem się powyżej? Jest napisany w PHP. Wikipedia, która jest na pierwszych miejscach wyników wyszukiwarek w dzisiejszych czasach? Napisana w PHP. Digg, społecznościowy serwis z zakładkami, który jest tak popularny, że odnośnik na stronie głównej może spowodować, iż nawet najmocniejsze serwery odmówią posłuszeństwa? Napisany w PHP. WordPress, niewątpliwie najbardziej popularna platforma dla blogów w obecnej chwili? Napisany w PHP. YouTube, najbardziej znany serwis internetowy umożliwiający prezentowanie klipów video? Napisany w PHP. Facebook, warte miliardy dolarów społecznościowe oczko w głowie inwestorów funduszy Venture Capital? Napisany w PHP. (Update: Początkowo, Youtube został napisany w PHP, ale został zmigrowany do Pythona przez Matt'a Cutts'a i Guido van Rossum'a niedługo po tym jak powstał)

Zauważasz pewną zależność?

Niektóre z największych stron w Internecie -- stron, z którymi prawdopodobnie masz doczynienia codziennie -- są napisane w PHP. Skoro PHP jest tak bardzo beznadziejne, to dlaczego zasila tak znaczną część Internetu?

Jedyny wniosek jaki mogę wysnuć jest taki, że stworzenie atrakcyjnej aplikacji jest o wiele ważniejsze niż wybór języka. O ile PHP nie byłoby moim wyborem, a jeśli zmuszony, mógłbym się kłócić, że nie powinien być wyborem żadnego rozumnego człowieka siedzącego przed komputerem, nie mogę zaprzeczać wynikom.

Prawdopodobnie słyszałeś, że odpowiednio niekompetentni programiści mogą pisać stylem FORTRANowym w każdym języku. To prawda. Ale odwrotność jest również prawdziwa: odpowiednio utalentowani programiści mogą pisać wspaniałe aplikacje w okoropnych językach. To bolesna lekcja, ale ważna.

Po co z tym walczyć? Lpeiej naucz się to akceptować. Połącz się ze mną w celebrowaniu następnych 50 lat wspaniałego PHP tworzącego Internet. Tylko nie zapominaj wywoływać funkcji PHP utrzymuj_moją_wolę_do_życia() co pewien czas!

Data publikacji oryginału: maj 20, 2008

20 komentarze:

Anonimowy pisze...

dzieki Bogu w DZISIEJSZYCH czasach jest juz symfony, zend, cake itp i ze spaghetti nie wiele zostalo.

Anonimowy pisze...

tez mam wrazenie ze ten artykul troche nie na czasie jest, a 1/3 tych dziwnie wygladajacych funkcji jest z opcjonalnych (standardowo wylaczonych) rozszerzen

Anonimowy pisze...

W maju zeszłego roku (czas powstania oryginalnego wpisu) te frameworki już istniały, co nie zmienia faktu, że istnieje masa oprogramowania w PHP, którego jedyną zaletą jest to że działa (np. Joomla, Wordpress). Taki Joemonster jest oparty na PHP-Nuke, które piękne nie jest, ale działa. O tym właśnie pisał autor.

airborn pisze...

podstawowy Twój argument jest w zasadzie taki, że php jest be, bo jest be i ludzie nie umieją pisać, ale czy to wina języka? moje doświadczenie zawodowe pokazuje, że przy takiej logice, C# jest jeszcze gorszy...

rafek pisze...

@airborn: Chyba chodzi o to, że PHP pozwala na nieeleganckie pisanie kodu i większość "programistów" to wykorzystuje. Dobrze to Atwood ujął w tym zdaniu: "Prawdopodobnie słyszałeś, że odpowiednio niekompetentni programiści mogą pisać stylem FORTRANowym w każdym języku. To prawda. Ale odwrotność jest również prawdziwa: odpowiednio utalentowani programiści mogą pisać wspaniałe aplikacje w okoropnych językach."

airborn pisze...

@rafek: dokładnie to miałem na myśli, jest to gówniany argument, bo świadczy nie o języku, a o osobach w nim piszących

TeMPOraL pisze...

Dawno temu w artykule związanym z gamedev'em i C przeczytałem mądre zdanie, które brzmiało mniej więcej tak: "To, że język sam w sobie nie jest zorientowany obiektowo nie oznacza, że nie możesz w nim pisać w sposób zorientowany obiektowo". Świetnym przykładem są kody źródłowe Quake'a II oraz FreeSpace II - pokazują, że nawet w C można pisać bardzo elegancki i przejrzysty kod. Podobnie sprawa odnosi się do PHP, aczkolwiek przyznam, że specyfika działania skryptów (jedno zapytanie - jedno wywołanie) dodaje tu trochę smaczków, dzięki którym robi się jeszcze większe Spaghetti ;).

Anonimowy pisze...

@airborn: PHP jest łatwy do opanowania (przez każdego, nie tylko programistę). Przez co jest popularny. Przez co powstaje dużo badziewia, który zasila znaczną część Internetu w dzisiejszych czasach. I tak jak autor zaznaczył, większości zależy na tym jak aplikacja wygląda z zewnątrz a nie od wewnątrz.

duke pisze...

Hmm... niezrozumiały badziew? Czy ja wiem... Jest pewien kłopot między pewnymi grupami programistów... Przykładowo takie strony pisane w asp. IDE do tego jest genialne i umożliwia bezproblemową przesiadkę kogoś, kto pisze aplikacje desktopowe na pisanie aplikacji webowych. Ale to nie to samo. Później niektózy się dziwią, że dodali kontrolkę inputa i im się krzaczy w różnych przeglądarkach... czy zdziwienie, że w PHP nie ma opcji zablokowania wysyłania drugi raz tego samego $_POST z powodu odświeżenia strony... I kolega w pracy po przesiadce z asp mówi, że w asp to mu się szybciej tworzyło... bo przeciągał kontrolki, ustanawiał zdarzenia, a tutaj musi ręcznie pisać tagi html... Jest smarty, XSLT, masę frameworków i cmsów... no ale kto będzie o tym wiedział, jak nie siedzi w branży od kilku lat? Będzie miał błędnie wyrobioną wizję i ją powielał...

Po prostu inna specyfika. Ja jakbym siadł do pisania w C elementów telefonu komórkowego, to pewnie bym też narzekał na ludzi którzy pisali biblioteki z których mam korzystać.

rafek pisze...

@duke: Chyba kolega nigdy nie pisał w ASP.NET (bo rozumiem, że o .NET chodziło, a nie o poprzednie ASP). Nie ma czegoś takiego jak bezproblemowa przesiadka kogoś, kto pisze aplikacje desktopowe na pisanie aplikacji webowych. W ASP.NET pełne zrozumienie "page and application lifecycle" bądź mechanizmu "viewstate" (nie wspominając już o pisaniu własnych kontrolek), może przyprawić o ból głowy. Poza tym PHP i ASP.NET to dwie różne klasy abstrakcji.

Anonimowy pisze...

PHP trochę mi przypomina ruski czołg.
Wygląda paskudnie, wszędzie zwisają jakieś kable, elektryka jak iskrzy, znaczy, że działa... ale zrzucony na spadochronie z samolotu wraz z załogą i uzbrojeniem, po wylądowaniu będzie jechał, póki się opary paliwa nie skończą i strzelał aż lufa się nie stopi.

To też jest spaghetti :) ? http://wklej.org/id/149989/

Anonimowy pisze...

Tak jak ktoś napisał "PHP jest łatwy do opanowania (przez każdego, nie tylko programistę)". Czyli każdy może się nauczyć pisać strony, ale po pierwsze nie każdy powinien, a po drugie nie nazywajmy tego jeszcze programowaniem.

Anonimowy pisze...

Warto jeszcze pamiętać o specyfice pracy w wielu firmach zajmujących się tworzeniem stron/portali. Liczy się, żeby było napisane jak najszybciej, jakoś tam działało i przede wszystkim ładnie wyglądało. Do tego jeszcze klient/szef wpadający co chwilę na nowe, świetne pomysły, zdychający windows na domagającym sie zezłomowania komputerze i pensja o której wstyd powiedzieć znajomym... W takich warunkach nie ma czasu na pisanie kodu zgrabnego i dobrze przemyślanego ;).

Btw. powodzenia wszystkim, którym marzy się kariera programisty PHP (o ile tacy wogóle istnieją :D).

Greg pisze...

Można tu dopasować zasadę ilość przebija jakość (http://www.devblogi.pl/2009/09/ilosc-zawsze-przebija-jakosc.html) - piszący aplikacje w PHP są po prostu ta grupą, która robi od cholery garnków ;)

Maciek pisze...

Święta prawda Anonimowy.

Firm webmasterskich i agencji interaktywnych jest od groma...fakt jest zapotrzebowanie na rynku na strony internetowe, ale bez przesady. Większość tych agencji to jednoosobowe działalności, które 'zatrudniają' freelancerów do zleceń. Ma być szybko, byle klient zaakceptował. Przez to powstają dziwne twory, programiści pracują na czarno, co 2 miesiące jest zmiana zespołu, bo nikt nie będzie klepał kodu 8 godzin dziennie za 1500zł, wypłacane nie w terminie i to w ratach 'jak klient zapłaci'. Oczywiście są porządne firmy w których można solidnie zarabiać. A sam język? Jakby był zły to nie napisano by w nim milionów czy miliardów stron www i aplikacji.
Więcej niż w firmie można zarobić pracując freelance, tylko kwestia ciągłości zleceń.

Pozdrawiam:)

Anonimowy pisze...

Pisałem przez kilka lat w PHP i zaczynałem od spaghetti code, potem przyszły SMARTy, potem własne obiekty i klasy, nawet wyglądało to ładnie. Ale jak zacząłem używać Visual Studio z ASP.NET powiedziałem, że nigdy więcej nie użyję PHP. Głównie ze względu na istnienie typów danych, świetne środowisko pracy itd. Po kilku latach pracy z ASP.NET też mam go trochę dość, bo jak zrozumieć, że input może aż tak koszmarnie wyglądać w kodzie HTML:
[input type="image" name="ctl00$ContentPlaceHolder1$ucWnZPGE$gv$ctl03$btnEdit" id="ctl00_ContentPlaceHolder1_ucWnZPGE_gv_ctl03_btnEdit" title="Szczegóły" src="../../../resources/images/details_icon.gif" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$ContentPlaceHolder1$ucWnZPGE$gv$ctl03$btnEdit", "", true, "", "", false, false))" style="border-width:0px;" /> Nie mogę tego przeżyć w zasadzie, nie rozumiem dlaczego, w jakim celu ten kod HTMLowy jest tak koszmarny. Pewnie trzeba skorzystać z jakiegoś frameworka, dodatkowych klas by ten kod zaczął wyglądać przyzwoicie. Tak jak za czasów nauki PHP...

Mario pisze...

Kiedyś (kilka lat temu) na studiach używałem C++, potem trochę PHP ale to wina przedmiotu na studiach. Potem już programowałem tylko w PHP. Teraz natomiast niezmiernie ciesze się z tego, że pilnie uczę się Pythona (Django). PHP lubię, na codzień używam Zend_Framework - nie zmienia to faktu, że Python mnie zmiażdzył i raczej tak już zostanie :)

Django pisze...

Polecam Pythona i Django ! W ostateczności PHP/Symfony.

Anonimowy pisze...

Python Pylons/Django/Bottle.
Nawet rzekomo zapomniany Perl - nie umarł ! za to nabrał rozpędu i nie zamierza zwalniać. PHP jest bałaganiarski, każdy to wie, i zaczyna przegrywać. Jedynym wyjście dla PHP jest zaprojektowanie go od nowa. "Miliony much nie mogą się mylić" - a ja mówię "że mogą".
Ilość programistów znających PHP jest ogromna, dzięki tej dostępności firmy mogą przebierać w ludziach. Taka sytuacja powoduje że freelancing w Polsce i na świecie dla php to bagno.

Filip Serewa pisze...

Są wg mnie 3 główne powody dlaczego o PHP mówi sie źle:
1. jest najpopularniejszy - to się go nienawidzi - patrz Windows (i pewnie niebawem google)
2. jest prosty - kiedyś programiści to byli "magowie" - tylko nieliczni umieli pisać kod i zarabiali krocie - dziś sporą cześć tortu zagarniają amatorzy... od PHP
3. jest luźny - przez to powstaje tona złego kodu z punktu widzenia inżynierii oprogramowania, utrzymania i skalowalności - ale dla firmy "Janek - śrubki" nie trzeba serwisu opartego na zaawansowanych serwerach aplikacji do prowadzenia jego katalogu śrubek na WWW! Oczywiście język ten pozwala także na kod "dobry" o wysokiej jakości, z zastosowaniem wzorców i dobrych praktyk - jedynie tego nie "wymusza".

Prześlij komentarz

Related Posts with Thumbnails