niedziela, 17 października 2010

Co jest nie tak z PHP?

Do napisania tego tekstu zabierałem się dość długo. W końcu się odważyłem. Mam zamiar podzielić się z Wami moimi przemyśleniami na temat języka PHP. Wszystkie jednak mogę podsumować następująco: PHP to najgorszy język programowania wysokiego poziomu w jakim miałem okazję pisać. Zacznijmy może od początku. Skąd się wziął pomysł na stworzenie PHP? Otóż miał to być prosty język skryptowy wymyślony po to, aby sprawić by proste strony internetowe były dynamiczne. To założenie się udało. Na tym polu pisanie prostych kilkulinijkowych skryptów jest bajecznie proste i do tego PHP nadaje się wyśmienicie. Powinno tak zostać. Niestety w PHP powstają spore aplikacje klasy Enterprise. W pisaniu większych rzeczy przeszkadza sporo rzeczy, które poniekąd wynikają z historii PHP, który nagle stał się językiem, w którym pisze się coś więcej niż prostą stronę internetową. Oto lista rzeczy, które mnie najbardziej denerwują:

- dynamiczne typowanie ze słabą typizacją – dla niektórych wygoda, a dla mnie porażka jakich mało, rozwiązanie to uniemożliwia skuteczne debugowanie. Wytłumaczę to na przykładzie: piszę sobie pewien większy kawałek kodu, uruchamiam go, a moim oczom ukazuje się biała strona zamiast wyniku. Zastanawiam się co jest źle. Nie mam żadnego wyjątku informującego mnie o tym, że przekazałem do jakiejś funkcji argument o złym typie. Aplikacja w jakimś momencie wykonała coś czego nie przewidziałem, funkcja zwróciła zamiast Stringa wartość 0, którą następnie przekazałem do innej funkcji. Idąc dalej okazuje się, że kod wykonał się bez zarzutu, a jednak wyniku nie ma. Porównam tą sytuację do przykładu w Ruby. Otrzymując nil-a z funkcji zamiast stringa,  a następnie wykonując na nim metodą np. length otrzymam taki wyjątek, że mało co nie spadam z krzesła. Druga sytuacja mająca częste miejsce to literówka w nazwie zmiennej. W PHP robię gdzieś literówkę, kod się wykona, a ja otrzymam nie poprawne dane. Ruby mnie poinformuje, że nic nie wie o nowo powstałym czymś, co się nazywa jak zmienna z literówką. No to już mamy 2 do 0 dla Ruby. Ruby to język dynamicznie typowany z silną typizacją. To oznacza, że jeżeli gdzieś potrzebujemy String-a, a podamy np. liczbę całkowitą to nie zadziała. Sami musimy się zatroszczyć o to jaki typ ma nasza zmienna. Zdecydowanie ułatwia to szukanie błędów, a konwersja pomiędzy typami jest bardzo prosta.

- programowanie obiektowe – PHP miał być prostym językiem skryptowym, pewnie dla tego nie zaimplementowali w nim od samego początku obiektowość przynajmniej na takim poziomie jak w Javie, w której jednak nie wszystko jest obiektem. Chyba każdy przyzna mi rację, że zdecydowanie lepiej jest wywołać metodę na obiekcie niż pisać w sposób proceduralny. Nienawidzę wykonywać funkcji na String-ach. W zasadzie praktycznie wszystko w PHP jest funkcjami. Dlaczego nie mogły być one od samego początku powkładane pięknie do klas. Gdy powstał PHP była końcówka XX wieku. W tym czasie było już kilka świetnych języków obiektowych, a twórcy PHP pozostali w latach 70. Ruby jest obiektowym językiem programowania. Wszystko w nim jest obiektem, do tego stopnia i nawet dalej, że można wykonać coś takiego s = 1.to_s(), co oznacza, że jedynka jest obiektem i wywołujemy na nim metodę. Tak więc mamy 3 do 0

- brak konwencji – wygląda na to, że PHP projektowało 100 osób i każda robiła po swojemu. Dzięki temu mamy między innym niejednolitą konwencję nazywania funkcji np. strstr, str_replace, ucfirst. Wszystkie trzy funkcje operują na String-ach, raz nazywają się z podkreśleniem, a raz bez, raz z przedrostkiem, a raz bez. Każdy musiał robić po swojemu. Takich perełek znajdzie się więcej. W Rubym konwencja nazewnictwa jest raczej zachowana. Chociaż podobnie jak w PHP w podstawowych klasach znajdują się metody o nazwach po których ciężko rozszyfrować do czego służą. Jak dla mnie jest 4 do 0.

- obsługa wyjątków – każdy szanujący się język programowania powinien mieć coś takiego, Dobrze by było, aby również to działało. W PHP z tego co wiem nie zawsze chce to działać. Co z tego, że wrzuciłem cały kod do bloku try catch jak i tak otrzymałem fatal error.

- PHP czyli jak to spotkało się na początku 3 programistów. Z moich obserwacji wynika, że podczas grubej imprezy w akademikach musiało wpaść na pomysł trzech programistów: Javy, C i Perla, aby zrobić nowy język programowania. Zabrali się oni do pracy zaraz gdy się obudzili i byli na dużym kacu. Mi nie podoba się składnia PHP, choć muszę przyznać, że przypadnie ona raczej do gustu programistom C bardziej niż składnia Rubego. Jak dla mnie dalej jest 4 do 0. Nikt nie dostaje punktu.

Czas na podsumowanie. Każdy w życiu ma raczej taki etap, w którym pisze w PHP. Ja ten etap mam za sobą i mam nadzieję, że nigdy nie powróci. Pomimo tego, że sam jestem negatywnie nastawiony do PHP muszę przyznać mu kilka punktów. 

Pierwszy punkt za możliwość wdrożenia aplikacji PHP. Ta technologia dostępna jest za darmo, prócz tego nie ma najmniejszego problemu ze znalezieniem serwera nawet za kilka złotych miesięcznie, który ma wbudowaną obsługę PHP. Jeden punkt dla PHP.

Drugi to wsparcie społeczności. Społeczność PHP jest spora. Bez problemu znajdziemy fora dla PeHaPowców, w miarę dobrą dokumentację i sporo bibliotek. Dla Ruby jest ciut gorzej. Często zdarza się, że bibliotekę dla Ruby znajdziemy i jest ona całkiem dobra ale gorzej już np. z dobrą dokumentacją. Nie ma co, punkt dla PHP

Wydajność. Nie rozumiem jak można było stworzyć wydajny i dość dobry interpreter PHP, który stoi zdecydowanie na wyższym poziomie niż sama koncepcja PHP, a wykombinować tak słaby język na poziomie konceptualnym.  W ostatnim czasie dla Ruby zrobiono sporo, aby pod względem wydajności zbliżyć się do czołówki, w tym do PHP. Tak więc w tym pojedynku nie ma punktów.

Wynik końcowy 4 do 2.

Jeżeli uważacie, że PHP to dobry język programowania bo łatwiej i szybciej można coś sensownego w nim napisać to polecam poczytać trochę o Ruby. Jestem fanem tego języka i polubiłem go bardzo szybko. Podczas pisania pierwszej większej aplikacji w Ruby przekonałem się, że jest on bardziej dla mnie intuicyjny niż PHP z którym znam się od liceum, chociaż moją przygodę z nim zacząłem kilka miesięcy wstecz.




Brak komentarzy:

Prześlij komentarz