Jak to się stało, że ciągle wracam do PHP i CodeIgniter
Jako entuzjasta nowych technologii, zawsze “sprawdzam” wszystkie nowinki w postaci node.js, frameworki PHP Laravel czy Phalcon PHP. Wszystko ładnie, pięknie – wszystko jest szybsze i lepsze niż jego poprzednicy. Niektóre, nawet pozwalają na niepisanie kodu, a używanie generatorów.
Niestety większości przypadków nowe technologie nie są wcale lepsze. Weźmy na przykład node.js – super szybkie, super łatwe (przecież to JavaScript) ! Milion dostępnych bibliotek. Problemy pojawiają się jednak jak trzeba napisać coś bardziej złożonego, gdzie nad projektem pracuje więcej niż jedna osoba. Złożoność kodu i piekło odwołań powodują że każdy projekt staje się koszmarem. Ilość zagłębień w metodach i odwołań – emitery, callback – dramat. Łatwo zginać w kodzie a jeszcze trudniej znaleźć problemy jak już się pojawią.
OK. Może więc nie szukajmy za daleko, skupmy się na PHP – phalcon, Laravel – dwa super fajne frameworki. Zasadniczo koncept wszędzie jest podobny – MVC – modele, widoki klasy, wsparcie dla Composer i cheja. Sprawdziłem oba – phalcon jest super fajny – szczególnie do budowania API typu REST i microframeworków – przepięknie proste modele, ładne konstrukcje. Gdzie leży problem? Po pierwsze trzeba skompilować moduł, po drugie – brakuje mi czystej struktury katalogów – a próbowaliście obsługiwać CLI w phalconie ?
Może więc Laravel – framework dla rzemieślników. No nie do końca – rzemieślnik dobiera sobie sam narzędzia, którymi pracuje – tutaj mamy Blade, Eloquent ORM i kilka innych rozwiązań które nie do końca dają mi tą swobodę. Np generatory z linii poleceń. Czy naprawdę nie można się bez tego obejść ? Oczywiście – można wymienić na coś innego, tylko… ja lubie jak działa prosto pudełka. Bez dostosowywania przez godzinę moich ustawień.
Dlaczego więc jak bumerang wraca CI ? Bo jest proste, bo działa – bo ma wszystko co trzeba po rozpakowaniu i nie trzeba kombinować za dużo. Zestaw solidnych bibliotek na których można polegać i aktualizacje nie pojawiają się raz na tydzień. Zasadniczo nie jestem zmuszony do niczego. Mogę korzystać z Active Record, albo nie. Mogę używać PHP w widokach, a mogę podpiąć Smarty, albo inne rozwiązanie. A linia poleceń ? Nigdy nie była prostsza – php index.php controller metoda – działa ?
Aby skończyć ten przydługi wywód dodam tylko, że CI nie umarł, wciąż żyje – i żyć będzie bardzo długo. Bo to zdrowy, solidny framework i nie należy się go bać. Należy go szanować…
Jeśli lubisz eksperymentować to spróbuj golang. To jest na prawdę wypas. Jest też wydajniejszy od nodejs-a. Posiada statyczne typowanie (znacznie lepsze od tego które znamy z c++ czy javy) którego nie odczuwasz i masz lekkość pisania kodu z dynamicznego języka. No i projekt kompiluje się na jedną binarkę bez zależności. Kompilować można kros-platformowo. Czyli że na linuxie przykładowo skompilujesz sobie binarkę na windowsa, solarisa czy cokolwiek tam chcesz 🙂
Jeśli tego spróbujesz to już nigdy więcej nie wrócisz do php 😉 Tak było w moim przypadku przynajmniej 🙂
Spędziłem trochę czasu z golang ostatnio, faktycznie jest bardzo przyjemny i wygodny do pisania. Dużo bardziej zorganizowany niż node.js.
Czy jest w stanie zastąpić PHP ?
Nie sądze – w PHP możesz naprawdę szybko prototypować i budować aplikacje które uruchomisz praktycznie wszędzie i na każdym sprzęcie. Go lang wymaga trochę więcej pracy żeby cokolwiek przygotować – oczywiście dając w zamian super wydajność.
W go lang napisałem kilka “usług” takich jak SMTP relay, prosty serwer do przechwytywania wszystkich emaili, oraz bramkę do przekazywania danych do innego API via SOAP. Z większych tematów – nie było potrzeby.
> Nie sądze – w PHP możesz naprawdę szybko prototypować i budować aplikacje które uruchomisz praktycznie wszędzie i na każdym sprzęcie. Go lang wymaga trochę więcej pracy żeby cokolwiek przygotować – oczywiście dając w zamian super wydajność.
Nietrafiony argument. W php możesz stworzyć bardzo szybko bardzo zły kod. W go, możesz stworzyć bardzo szybko bardzo dobry kod. Statyczne typowanie niesamowicie ułatwia pracę. Kompilator szybko zwraca informację o miejscu wystąpienia błędu. Dodatkowo obsługa błędów poprzez wartość zwracaną z funkcji to coś czego zawsze mi brakowało. Znacznie upraszcza się “flow” programu. Dodatkowo możliwość zwrócenia wielu argumentów z funkcji pozwala na łatwą refektoryzację kodu (tak jak statyczne typowanie zresztą też).
Go też uruchomisz na każdym sprzęcie. Kompiluje się w jedną binarkę bez zależności.
W przypadku php już nie jest tak przyjemnie. Trzeba się pozastanawiać która aktualnie flaga w php.ini powoduje wywalanie się świeżo przeniesionego skryptu na nowy serwer. Dodatkowo aktualizacje php są ryzykowne bo mogą łatwo wywalić istniejące oprogramowanie.
W go jest takie narzędzie jak gofix. Jeśli zdarzy się że w przyszłej wersji w języku zmieni się coś co spowoduje utratę wstecznej kompatybilności kodu napisanego w starszej wersji, to po uruchomieniu tego narzędzia, kod jest automatycznie konwertowany do nowszego dialektu.
I tak… i nie 🙂 W każdym języku możesz zrobić gówniany kod – zależy od tego jakim programistą jesteś.
Facebook jest zrobiony w całości w PHP (a właściwie to już w HACK), PayPal korzysta z node.js a Dropbox przepisał Pythona na Golang – więc każdy język ma swoje zastosowania i entuzjastów.
Nie zrozum mnie źle – uwielbiam Go – jest bardzo czysty, klarowny i nie widziałem lepszej implementacji asynchroniczności, ale nie potrzebujesz sportowego auta, żeby pojechać na zakupy do biedronki. Możesz pojechać np. autobusem…
Jasne. Twój wybór 🙂
W przypadku złego programisty i tak mniej gówniany kod zostanie napisany w “go” (bo mu na wiele rzeczy nie pozwoli).
Mega fajne jest to że bardzo dużo pracy którą normalnie musisz poświęcić w dynamicznym języku programowania na poszukiwanie “głupich” błędów, jest przerzucona na kompilator. Dzięki czemu można się skupić na algorytmie a nie na tym czy w którymś miejscu projektu funkcja została wywołana z czterema a nie trzema argumetami.
To jest jak dla mnie niesamowite ułatwienie 🙂
Rozbudował bym Twoje porównanie. Go jest jak sportowe auto i limuzyna jednocześnie (z jacuzzi w środki) 🙂
Zgadzam się – dużo trudniej przegapić coś w Go niż w PHP. Trzeba dużo więcej “myślenia” włożyć w napisanie czegokolwiek, co powoduje że pisanie jest wolniejsze, ale efekty są lepsze.
I Ja Kohane lubię 😉
Chociaż jak dla mnie to szybciej się pisze kod w go 🙂 Dobra, już nie ciągnę tematu dalej 🙂
polecam Laravel
Polecam zobaczyć Yii framework, fajny i prosty.