Being a PHP programmer, I can concur: https://stitcher.io/blog/php-in-2020
Being a PHP programmer, I can concur: https://stitcher.io/blog/php-in-2020
You can, but in my experience, most people don't. Especially in Wordpress land. I've paid for plugins with egregious problems that "work okay" because error reporting is silenced.
> if you want to, you can write modern and clean PHP code, and leave behind much of the mess it was 10 years ago.
But most people haven't, and I'm not really interested in spending my career and hobby time playing Russian Roulette with coworkers and collaborators.
PHP doesn't have this accidental monopoly: you can use a language that doesn't require discipline and tooling to make something decent.
Bottom line, PHP is better than it used to be. But the technical debt remains, and it's easy to avoid if you can, so we do.
I started with PHP, but I have no reason to go back to it. It has no benefit and is worth it only if you have already a massive PHP code base, or a pool of PHP devs you need to employ.
This is probably the best way to understand the increasing push towards static types lately. It isn't so much necessarily the experience of writing the code the first time, where static types may at least sometimes indeed be a bit harder to work with. It's that it's a relatively easy to work with code that takes a list of OrderIDs and CustomerIDs and returns a map of CustomerID -> Order, and calls a function that takes an OrderID and yields an Order, a method that takes an Order and yields a Customer structure, and a method that takes a Customer and yields a CustomerID, and finally constructs exactly the promised structure. You can change it and feel pretty good about what's going on and what's going to happen both to the code it calls and the code that call it.
On the other hand, working with code that takes a something and a something and returns a something, calling a function that takes as something and yields a something, another function that yields a something and a something, and a method on one of those somethings that takes a something and yields and something, and then returns something, is harder to work with, before we even talk about the fact that these somethings may have no literal source code existence because there were dynamically assembled, and after the somethings were dynamically assembled, other somethings may have come along and turned those somethings into something else.
Obviously, the first case still isn't heavenly and the second case isn't as bad as I make it sound in this brief summary, but there's still a real difference.
And yes, Javascript has similar problems, but much less severe.
Part of the reason is the improvements of Hack over PHP, part of the reason is very aggressive linting (to, e.g., enforce the use of types), and part of it is probably that Facebook doesn't hire for "PHP positions", but for generalist software engineers.
However, all the other companies align themselves to the level of the average candidate they can hire.
The quality of the library ecosystem in both js and php is a good measure of that level - sadly.
Our stack at the time was transitioning to .NET Core, but the HR posting was some generic one (I believe for a "full-stack dev" with PHP experience).
Got a bizarre range of candidates who had got past the inital filtering, all except one whose PHP amounted to wordpress only experience (some who were not able to clearly differentiate between serverside and clientside state or logic).
Don't want to tar folks with the same brush, but that experience led me to believe the folks who got filtered through for possessing PHP experience, in this case, were extremely bottom of the barrel.
I do think that one of the big problems for PHP is that people who voluntarily do PHP instead of something else are immediately suspect. Why aren't they interested in learning something else? Do they not really care about code quality? Do they just say 'good enough' and only give a half-assed effort?
Modern PHP is fine, comparable to other dynamic languages but with some ugly weird bits (`empty`). However, most PHP I run into is not modern. It's leftover code from the 00s that has huge security holes that no one has noticed yet. If someone wants to make a new project with Laravel or Craft CMS, I wouldn't stand in their way, but I can't really imagine doing it myself just because of all the flashbacks to code that parses query parameters and calls the database in the middle of a templated for loop…
I write lots of PHP for work and for most of my personal projects. Learning other languages is just syntax, when you know the core concepts.
I once converted a personal project over to Python 3.X in a couple of weeks and it was much slower and took more memory than the PHP counterpart, so I scrapped it.
"However, most PHP I run into is not modern"
This may be the case for you, but I've worked with lots of companies that built their apps using PHP and most are modern.
"but I can't really imagine doing it myself just because of all the flashbacks to code that parses query parameters and calls the database in the middle of a templated for loop"
I'm sure there were many poor practices with other languages 20+ years ago.
I think many here on HN are living in a bubble where most companies use cool new frameworks and are looked down upon for their stack choices.
I haven't been out of work in the past two decades, and I work almost exclusively with PHP code bases. I suppose I should be happy for all of this language snobbery, because I make a very good living and haven't spent more than a few days between gigs.
I agree with most of what you wrote, but not this. Code written in PHP from the 5 and before era was bad in a unique way. Before it came bad VB and now there is a deluge of bad React. That’s what happens when a language is popular with inexperienced programmers. But bad PHP was bad and insecure by default, which led to a ton of security bugs. The only thing comparable is C, which has had tons of buffer overflow security bugs—but those were written by pros. ;-) I can’t think of anything else web facing with so many problems with SQL injection and string escaping. The problem was that making a webpage by naive string interpolation is a bad idea, but it seemed like a good idea and it’s what PHP did best and why it was so popular. PHP was lucky to be the wrong paradigm at the right time to take off like a rocket.
Modern PHP is MVC-ish like everything else, but without the simplicity of stupid string interpolation, it can’t attract users like bad PHP used to.
"Oh and we also have a couple [dozen] Wordpress sites but I doubt you'll be touching those much."
It's also announcing your pay will be way on the low end. At least that's what it means around here.
No. But it can be helped with a tech lead/team lead who can kindly but ruthlessly enforce good coding practices. I was lucky to have one of those when I was learning Java, and a lot of the habits they've taught me ended up being pretty universal, and I owe them a great deal of gratitude.
The same argument can be said of all languages.
It's true with PHP because the language is popular.
It's true with Java, because the language is pop^Wthe holy grail of entreprise software language.
Having seen both worlds in small and large corporate settings (and others, in Ruby, Python, C, Perl), I somehow prefer PHP, because at least, it does not pretend to be "the right thing" for enterprise software.
At least languages like Java and C# require static typing (though I'm sure there's some lazy sociopath out there writing C# with every single variable as a dynamic), PHP doesn't even have that minimum bar
And Java having a good one is no protection against the development cultures of large (consulting or non-tech) companies where the main metric is not the performance of the software neither the frugality of the hardware it runs on.
The one with System.ServiceModel.Install.Configuration.ServiceModelConfigurationSectionGroupCollection in it surely musts be awesome too; I've heard great things about it.
The footguns in a given language being more ornate and towering than in another doesn't make that language better, but the ability to produce resilient, maintainable solutions for a given problem space in it.
6. Maybe Monoliths Don't Suck
There really wasn't anything PHP-specific there. My monolithic Java backend restarts much faster than webpack can rebuild my frontend. Complex microservice systems (like Netflix's) make for complicated developer setups in any language.