Technisch is PHP een beetje oude rommel geworden. Halt, halt, wacht met de downvotes, dank u wel.
Voor de basis functionaliteit, het renderen van een html pagina, is PHP meer dan doeltreffend. PHP is de afgelopen jaren best verbeterd met meer "moderne" zaken, zoals types enz. En heel wat oudere zaken zijn obsolete gemaakt en verwijderd.
Als iemand dat een 20 jaar carrier met PHP gedaan heeft, kan je zeggen dat PHP mij goed bedient heeft over de jaren.
Maar ... de web wereld is ook veranderd. Wat je meer en meer ziet, is dat websites meer gebouwd worden als applicaties, dan puur pagina/pagina structuur. SPA's enz is tegenwoordig meer aanwezig dan afwezig.
Het gevolg is dat PHP meer als een data provider ingezet word voor SPA's, dan een web pagina generator. Vroeg was PHP ook meer "misbruikt" als communicatie platform in grote projecten, iets waar het niet voor design was. Dit had best wel leuke performance issues maar je had niet echt veel keuze in die tijd. Niemand ging zo een zaken schrijven in C, C++ of Java ( ja er zijn firma's maar dit is niet de meerderheid ). De simpelheid van PHP maakt het enorm makkelijk om projecten uit de grond te stampen en goedkope programmeurs te vinden.
Dit veranderd meer en meer.
NodeJS maakt het simpeler voor bedrijven dat hun personeel op 1 taal willen houden, om zo minder een split te hebben tussen front en back-end.
Go opent de deur voor een veel meer performance data provider voor front-end SPA's. Makkelijk aan te leren, snel, minder geheugen gebruiken enz. Al die verhalen van bedrijven dat omschakelende van PHP naar GO en in het process 3/4 van hun server dumpte, zegt genoeg.
Persoonlijk ben ik na heel wat jaren van zwoegen "switch ik over of niet", uiteindelijk omgeschoold naar Go full time. Ik zal even een lijstje geven van punten, van "waarom" of de "voordelen" zoals ik ze zag.
Snelheid
PHP is ontworpen voor 1 actie uit te voeren, de resultaat terug te sturen en dan al het werk te vergeten. Het voordeel van zo een ontwerp, is dat het simpeler is om te programmeren. Je acties zijn in sequentie en je moet geen rekening houden met coroutines, async, ... Maar het kost je performance. VEEL performance. Er zijn projecten om PHP in geheugen te houden zoals Swoole enz maar dit zijn 3de partij projecten en je neemt risico's als je gans je infrastructuur opbouwt hier rond.
Go is gewoon snel uit de box. Je wilt zaken in geheugen houden. Easy ... Je kan template cachen zonder memcache of andere 3de partij applicaties. Resource hergebruiken zoals DB pools enz. Geen probleem ( ja, zit ook in PHP ). Maar PHP kan bijvoorbeeld niet gzip in een sync pool plaatsen zodat je enorme snelheid winst kan halen bij het constant zippen van je content. Of je moet weeral een sync applicatie maken, socket communicatie enz ( kost allemaal performance en geheugen ).
Het is een andere stijl van programmeren dan met PHP. Die extra controle heeft enorme gevolgen voor de snelheid dat je uit een server kan halen, tegenover PHP.
Installatie / Gebruik
PHP zit je vaak te kloten met Apache of whatever server. Je moet de balans vinden van hoeveel PHP worker je in geheugen wilt. Wacht, ik moet ook memcache hebben. O en een hele serie van PHP extensies. HTTPS? Zucht ...
Laat staan de situatie waar je lokale ontwikkelingsomgeving iets andere zaken geïnstalleerd heeft dan je deploy omgeving. Het eet gewoon tijd. Docker is gewoon de zoveelste oplossing, wat ook weer tijd eet. Je geeft meer en meer controle over alles aan zoveel verschillende applicaties en extensies, waar je uiteindelijk onderhevig bent aan de goodwill van die app ontwikkelaars.
Go geeft je een HTTP server op nog geen 5 minuten tijd ( in je code! ). Memcache, makkelijk in te bouwen op nog geen 200 regels. Wilt je HTTPS certificaten die automatisch installeren en automatisch updaten? Effen "golang.org/x/crypto/acme/autocert" toevoegen in je import, een paar regels code en voila. Automatisch certificaten dat geïnstalleerd worden op iedere klant dat je product draait. Geen gezeikt met manueel zaken in te stellen of "andere" oplossingen te vinden. Dezelfde binary kan je deployen op zoveel server als je wilt met veel minder mentale overheid van wat draait waar met elke versie.
Geen gedoe met installeren van weeral de zoveelste aparte applicatie voor het automatiseren. Leuk als je applicatie over meerder server loopt. Eenmaal deploy en voila. Je moet je geen zorgen maken van verschillen tussen je development en deploy omgeving want het is 1 binary met exact dezelfde "applicaties" iedere keer ingebouwd.
Programmeren
PHP is letterlijk de taal om quick en dirt iets te kunnen maken. Je kan enorm makkelijk zonder 2 keer na te denken een product schrijven. Eenmaal dat je daaruit wilt stappen, vooral in bedrijven, dan zit je weer geboden aan frameworks. Wat dan weer de framework hell creëert waarbij je meer de framework leert dan de taal. En wat omschakelen tussen bedrijven moeilijker maakt wanneer iedere bedrijf hun keuze van framework draait ( sommige frameworks hebben massieve verschillen tussen elkaar ).
Go heeft frameworks maar ik zie de meeste mensen en bedrijven gewoon basis Go draaien, met links of rechts een paar packages voor whatever extra dat je nodig hebt. Dit maakt het heel wat makkelijk om in bedrijf A en B code aan te kijken, zonder je blind te staren naar de zoveelste framework, met hun eigen idee's over hoe alles moet werken.
Ja, Go zijn error handeling is enorm frustrerend als je van PHP komt. Maar als ik eerlijk mag zijn, de hoeveelheid code dat mensen draaien in PHP zonder enige error handeling is ENORM!! Het gevolg is dat PHP het veel te makkelijk maakt voor data corruptie in je databank te krijgen, waarbij code X doet, een fout negeert en je half complete dat in je databank hebt.
Te veel mensen kakken op PHP voor wat vaak de schuld is van de programmeurs zelf dat geen goede ontwikkeling patroon hebben. Want PHP is zo flexibel dat je eigenlijk slechte gewoontes aanleert van het begin.
Als ik code compile met Go, zelf zonder enige (Unit) tests, ben ik vrij zeker dat deze code geen kritische problemen zal opleveren dat men data kan comprimeren.
Conclusie
PHP is perfect goed voor de meeste websites en ik wens PHP voldoende succes toe. Maar de wereld is veranderd en we stellen deze dagen meer eisen aan onze "web applicaties" dan vroeger.
Is Go soms frustrerend als hell. O JA! Als je 20 jaar gewoon bent van PHP's nogal zachte hand in je code en dan krijg je de norse professor Go dat je constant op je vinger slaagt, dan wens je zo graag terug te gaan naar die zachte lerares. Maar in het einde, is de norse professor die dat je meer aanleert en je veel meer zekerheid bied op data integriteit.
Mijn applicatie doet zaken dat ik nooit kon met PHP, niet zonder C/C++ applicaties te schrijven die PHP moeten ondersteunen of een half dozijn 3de partij applicaties.
En hier spreek ik vooral in context van Go as web oplossing. Go kan veel meer dan web applicaties. Dit geeft mij meer toekomstige flexibiliteit.
PHP loopt achter op de tijden. Er zijn genoeg mensen dat wilde dat PHP een ingebouwde HTTP server krijgt ( niet die single process test ding dat er nu in zit ). Maar dat is een richting dat men niet wilde uitgaan. Je ziet ook in de split van PHP en Facebook, hoe Facebook hun PHP een andere richting uitging.
Op zicht blijft PHP eigenlijk te lang, ter plaatse vastklampen en de markt groeit met meer en meer concurrenten dat meer kunnen. Het gevolg zie je langzaam, hoe minder en minder start-up's beginnen met PHP. Hoe bedrijven switchen naar full NodeJS oplossingen. Of hoe men puur Go gaat. PHP zal nog jaren meegaan, levend op hun oude gebruikersbasis maar langzaam zal dat cijfertje zakken. De verbeteringen in PHP zijn enorm welkom maar men losten nooit het fundamentele probleem op, waarom nieuws bedrijven liever andere technologieën gebruiken.
En de JIT is in mijn mening een slechte oplossing. Zal het PHP iets sneller maken, ja. Maar de kostprijs is ook dat de core code onleesbaar word en minder makkelijker word voor contributers aan PHP. Een JIT in PHP zal niet Python vervangen. Noch zal het de markt dat Go nu begint in te palmen vervangen want PHP's fire-and-forget aanpak bij requests is nog altijd dezelfde. Noch zal het NodeJS iets aandoen. PHP evolueert maar het is gewoon te laat. Men had meer serieus moeten zijn 10 jaar geleden ( en de markt veranderingen moeten inzien ), ipv zo lang op hun achterste te zitten.
PHP is nog marktleider en zal het nog lang blijven. Voor basis websites is er totaal niets mis met PHP. Het is ontworpen hiervoor en doet zijn job perfect. Maar eenmaal dat je een teen buiten zo een project zet, dan kost PHP je enorm op performance en andere gebieden.
Zoals je altijd zeggen: Gebruik de juiste tool voor de job. En voor de meer moderne SPA wereld of Hybride SPA oplossingen, is PHP gewoon niet gebouwd.
Genoeg tekst voor vandaag. Sorry voor de blog.
[Reactie gewijzigd door Wulfklaue op 26 november 2020 20:03]