Java versus PHP
Jakie są zalety PHP w stosunku do Javy (Struts/Spring) dla stworzenia serwisu internetowego średniej wielkości? Jakie są zalety i wady? W którym środowisku można szybciej pisać aplikacje? Jakie są zagrożenia związane ze skalowalnością?
Czego łatwiej się nauczyć? Jakich specjalistów łatwiej znaleźć?
Wszelkie opinie mile widziane.
29/03/2007,
Paweł
Zastrzegam, że nie napisałem żadnego dużego systemu w PHP lub Javie, ale od początku kariery zawodowej pracuję nad więcej, niż średnimi, aplikacjami webowymi (obecna jest na około 1300 miejscu wg Alexa.com).
Główne zagrożenie związane ze skalowalnością jest takie, że można stracić czas i pieniądze na eliminację tego zagrożenia i nie mieć szans na spotkanie z tym problemem w rzeczywistości :). Tak piszą w ,,Getting Real''.
Pewnie szybciej można zacząć coś (z sensem i dużego) tworzyć w PHP, ale o sensownego specjalistę od PHP to pewnie trudniej niż o specjalistę od Javy...
Technologia nie ma znaczenia, trzeba używać tego co się zna, a co pozwała na sprawne rozwiązanie problemu.
Na pewno bardziej bym się przejmował, czy znajdę specjalistów, niż czy technologia ,,się skaluje''.
Według moich obserwacji w tej chwili na rynku dużo łatwiej o specjalistów od PHP niż Javy. Pewnie dlatego, że łatwiej się nauczyć języka skryptowego niż javy.
Z drugiej strony ci specjaliści są często bardzo słabi - nie znają żadnych frameworków php, nie znają zasad programowania obiektowego, a nawet z zasadami programowania strukturalnego jest u nich słabo. Tak więc znalezienie kandydatów do napisania większego systemu w php może być równie trudne (lub trudniejsze) niż znalezienie takowych do systemu w javie.
Pozdr.
Marek
Zdecydowanie nie polecam robienia czegoś większego w PHP niż w miarę prosta witryna. Ostatnio brałem udział w dość dużym projekcie, gdzie nieświadomi potencjalnym problemów z tym językiem wybraliśmy PHP jako technologię, z elementami Javy (applety), ponieważ znaleźliśmy napisaną w tym języku (PHP) już część wymaganej funkcjonalności. Też wydawało nam się że to nie jest takie istotne - ale okazało się, że jednak jest.
Język PHP jako skryptowy ma parę fajnych cech z tego tytułu, jak np. elastyczność, gdzie klasy możesz budować naprawdę dynamicznie, czego w Javie nigdy się nie da osiągnąć. To jest fajne na etapie programowania, ale jak zaczynasz czytać później ten kod i próbować coś zmienić to przy takim podejściu już na prawdę nie wiadomo co jest czym i jak to naprawdę działa. Dodam, że przy dużych projektach tego kodu jest napraaawdę dużo. Po prostu nie da się tego wszystkiego porządnie zdebugować, przetestować i poprawiać. Masz wrażenie że jak zmienisz jedną linijkę gdzieś tam to cały ten kolos na glinianych nogach się rozleci. I co najlepsze przy braku kompilatora nikt Ci naprawdę nie powie gdzie jest błąd i czy w ogóle jest.
Druga rzecz która naprawdę wkurza to brak kontroli typów - kolejna fajna rzecz jeśli chodzi o elastyczność i swobodę. Co siedzi w zmiennej $zmienna? Obiekt, tablica, string? Co reprezentuje? Gdzie jest przypisywana i dlaczego w tym miejscu powinna być przypisana a jest null? Znowu - szukaj zdrów. Próbujesz się wspierać zepchnięciem opisów do komentarzy, ale jak nie wpiera Cię kompilator to wiele to nie daje. Miotasz się po prostu po tym całym kodzie - pod koniec projektu miotanie się po kodzie zajmowało mi do 70% dnia spędzonego nad projektem.
Trzecia rzecz trochę z innej beczki, o czym już pisał mój przedmówca: problem jakości istniejącego kodu PHP jak i specjalistów w tej dziedzinie. Jak chcesz zatrudnić kogoś do pisania w PHP to najpierw spytaj czy zna jakiś inny język. Jeśli nie - to do widzenia. Prawdopodobnie jest to człowiek na ogólny poziomie późnego liceum ogólnokształcącego: zaczynał od robienia HTML-a i gdzieś tam pościągał skrypty PHP które później sam zaczął modyfikować i w ten sposób nauczył się pisać w tym języku. Albo tworzysz zatem taki system takimi ludźmi, albo otwierasz przedszkole programistyczne. O sensowych specjalistów w tej dziedzinie jest naprawdę trudno/bardzo trudno/nie ma w ogóle(?). Ci, z którymi pracowałem i byli dobrzy to byli ludzie którzy programowali w zupełnie innych językach a PHP to był dla nich po prostu kolejną technologią której trzeba się było nauczyć.
Przestrzegam więc: nie róbcie tego błędu co ja. Ostatecznie okazało się, że taniej było napisać to wszystko w Javie/innym języku kompilowalnym od zera niż dopisać swoją funkcjonalność do istniejącego systemu PHP, który agregował 70% wymaganej przez nas funkcjonalności.
Pozdrawiam
Łukasz
zgadzam się Java to jest COŚ. Mam większe doświadczenie w Java Swing niż J2ee, ale zauważam, że jeśli znasz dobrze Javę i odpowiednio wykorzystujesz obiektowość to nie trzeba niczego więcej.
Jest na Javę (i na C++) biblioteka AcpectJ (odpowiednio inna zorientowana na C++), która realizuje paradygmat programowania aspektowego (wcinanie wskazanego ze specjalnego pliku do kodu innej klasy - napisanej np przez kogoś innego). Ale nie chodzi tu o wstrzykiwanie, tylko użyteczność i w razie potrzeby wyłączenie tej dodatkowej fukcjonalności(np. różne wersje oprogramowania).
Jestem osobiście za wprowadzeniem rozwiązania omijającego html w sieci a oferującego programiście mniejsze z nim problemy.
15/04/2008,
michal
@Łukasz
Niestety nie mogę się z Tobą zgodzić. Programuję w PHP i tylko i wyłącznie w PHP, innych języków po prostu "nie lubię". Nie chodzi o to że ich nie znam/nie rozumiem, po prostu zakochałem się w PHP :).
Jakość kodu w PHP. Cóż, PHP rzeczywiście słabo kontroluje programistę i mało narzuca, nie ma tutaj kontroli typów jak w C choćby. Wg. mnie jakość kodu w PHP zależy w większości od programisty. Czasami jak widzę skrypty kolosy i jak są napisane to głowa mnie boli. W większości przypadków nadają się jedynie do ponownego przepisania.
Moim zdaniem pisanie czegoś większego bez porządnego frameworka w PHP mija się z celem. ( i tutaj reklama Symfony ;) )
Wsparcie przez kompilator? Polecam Zend Studio. W niczym nigdy wygodniej mi się nie pisało, mimo że wykorzystuje co najwyżej jego połowę możliwości.
"Zaczynał od robienia HTML-a i gdzieś tam pościągał skrypty PHP które później sam zaczął modyfikować i w ten sposób nauczył się pisać w tym języku"
Otóż to, PHP jest bardzo dynamicznym językiem i dużo osób zatrzymało się na poziomie PHP3 który był, szczerze mówiąc, syfiasty. PHP5 Dużo rzeczy poukładał, a w planach jest PHP6.
"Po prostu nie da się tego wszystkiego porządnie zdebugować, przetestować i poprawiać. Masz wrażenie że jak zmienisz jedną linijkę gdzieś tam to cały ten kolos na glinianych nogach się rozleci."
Osobiście nigdy nie odniosłem takiego wrażenia, ale częściowo masz rację. W PHP trzeba bardzo uważać na to co się pisze. Łatwo zacząć pisać coś na "hurrra".
A tak w ogóle... strasznie mnie denerwuje, że wszyscy narzekają na PHP, ale jednocześnie sporo stron na tym powstaje ;). Kwestia samokontroli, phpdoca i wszysko ładnie śmiga :).
No i dlaczego panuje opinia, że PHP to "do skrypcików" się tylko nadaje?
Złe podejście, to i kod zły ;)
02/05/2008,
Kamil
Przede wszystkim - nie twierdzę, że programista PHP to zawsze zły programista. Nie mnie oceniać człowieka... Ale moge się wypowiedzieć, że:
Bawiłem się w dużo języków skryptowych i wiem że w żadnym z nich nie napisałbym poważnego systemu. Przy tym zaznaczę, że "poważnego systemu" może dla mnie oznaczać coś zupełnie innego niż dla Ciebie.
Dlaczego? Dlatego, że nie pisanie kodu to nie wszytko. Takie języki jak np Ruby są naprawdę bardzo fajnie i pokaz tworzenia kodu jest bardzo efektowny, ale ja wiem, że tworzenie kodu to naprawdę niewiele z tego całego biznesu, może 10-20%. A co ze zrozumieniem czyjegoś kodu, refaktoringiem, poszukiwaniem błędów, rozbudową, architekturą (słowem, którego nie znało żadne rozwiązanie PHP ktorego dotknąłem-może jestem pechowcem?). Otóż - NIC - w tych językach/technologiach takie coś nie istnieje, a na pewno nie w stopniu w którym mógłbym zarządzać 5-7 osobowym zespołem którym miałby w tym klepać projekt. Naprawdę, chyba w moich najgorszych koszmarach, podziwiam ludzi którzy to robią, a na razie nie słyszałem żeby robili development np. dla banków. Jak usłyszysz to daj znać, fajnie się w tym pisze więc może też dołączę do tego.
A poważnie - każda technologia jest do swoich zastosowań, i Personal Home Page też ma swoje zastosowania (jak sama nazwa wskazuje, chociaż teraz zmieniona na bardziej marketingową) i nie jestem zwolennikiem wyskakiwania z armatą na muchę. Ale wierz mi, że dotknąłem development ze wszystkich stron i nie zrobię poważnego projektu na PHP. Nigdy.
11/10/2008,
l0co
Moim zdaniem wszystko zalezy od projektu. Do rozwiazania niektorych problemow PHP wystarczy, do innych sie w zupelnosci nie nadaje.
Zgodze sie z tym, ze przy duzym projekcie trzeba bardziej pilnowac porzadku (dobrze przemyslana architektura, elastyczne zarzadzanie bilbiotekami i przede wszystkim tluste komentarze). Wlasciwie jest to niezalezne od technologi, natomiast zdaje mi sie, ze przy PHP jest to niezbyt czesto spotykane.
Wiadomo rowniez, ze trudniej znalezc dobrego programiste PHP niz dobrego programiste Javy. Z PHP stosunkowo latwo wystartowac i tryb "html - skrtypty z internetu - programowanie" jest dosc czesto spotykany.
Z Java nie jest tak prosto. Mnogosc bibliotek i technologii uzywanych w Javie wymaga zdobycia wiekszej wiedzy i lepszych umiejetnosci.
Sadze tez, ze duzy wplyw ma to, ze programista uzywa rowniez innych jezykow. Jezeli ktos zna dobrze jakis jezyk (lub kilka). Zna np. Erlanga, Ade, Lispa, Ruby'ego, Smalltalka, czyli jezyki, ktore nie sa powszechnie uzywane, ale tez klasyczne C/C++), to nie bedzie mu trudno uzyc innego narzedzia niezaleznie od tego, jakie by bylo.
Ale nie musi to byc regula. Znam jednego bardzo dobrego programiste, od ktorego wiele mozna sie nauczyc, ktory zna dobrze PHP, Javescript i tyle - wiecej nie potrzebuje.
Nie zgodze sie natomiast z tym, ze w jezykach skryptowych nie mozna napisac duzego projektu z solidna architektura i naciskiem na pozniejsze utrzymanie.
Wezmy Ruby'ego z jego genialnymi frameworkami. Pythona, na ktorym opiera sie wiekszosc interfejsow Google.
Sa jezykami skryptowymi, ale o wiele bardziej zaawansowanymi niz PHP.
Zwroccie rowniez uwage, ze ostatnio mozna zauwazyc zainteresowanie autorow jezykow komilowanych cechami jezykow skryptowych - typy anonimowe w .NET, wsparcie Jruby'ego przez Suna, Groovy, ktory zaczyna zdobywac uznanie w srodowisku developerow Javy.
Konkluzja jest to, ze nie mozna stwierdzic, czy PHP jest lepsze od Javy - czasami tak, czasami nie.
21/10/2008,
rafwic
przeciez w PHP mamy tez frameworki, nawet jest struts for php - tylko ze tutaj sie nie przyjal. Najpopularniejsze to symfony i zend framework, oparte na MVC. Tak wiele stron opartych jest o PHP.
03/11/2008,
plurr
To może zamiast odwiecznej licytacji kto jest lepszy spróbuję odpowiedzieć na pytanie zadane początku:
"Jakie są zalety PHP w stosunku do Javy (Struts/Spring) dla stworzenia serwisu internetowego średniej wielkości?"
Jeżeli serwis internetowy średniej wielkości to to co dla mnie, czyli rozbudowany portal, z CMSem, polecam PHP.
"Jakie są zalety i wady?"
Zaletą PHP jest szybkość tworzenia serwisów, wadą natomiast konieczność posiadania programisty, który wie co to dobry jakościowo kod PHP. Począwszy od właściwego i konsekwentnego nazewnictwa zmiennych, a skończywszy na umiejętnym zaprojektowaniu architektury serwisu.
Java sama niejako "wymusza" jakość kodu, co wpływa ujemnie na szybkość tworzenia aplikacji, ale gwarantuje lepsze wyniki jeżeli nie uda Ci się znaleźć guru a jedynie programistę.
"Czego łatwiej się nauczyć? Jakich specjalistów łatwiej znaleźć?"
O Specjalistów trudno w przypadku obu języków, o "podwórkowych" programistów PHP, którzy uważają się za GURU, bardzo łatwo.
05/12/2008,
B.