More on PHP’s “bad design”

In the previous post I was responding to “PHP: a fractal of bad design”, and I was talking about the main topic. Design that is. But the post also made me smile and shrug my shoulders many times, and I wanted to share why. I’m sorry, but I wasn’t able to find the author’s name anywhere on his site (speaking about design).

What amused me was that many of the discussed problems there are made up. For example, he is talking about this line of code:

@fopen ('', 'r');

He writes a whole thing about how it works, and presents every point in his list of things as a surprise. And my reaction is, yeah, that’s obvious for me that PHP would do that, so what exactly is wrong?

Or, he writes:

"6" == " 6", "4.2" == "4.20", and "133" == "0133" and adds “But note that 133 != 0133, because 0133 is octal.

He implies, I guess, that something about this is wrong or unpredictable, but he doesn’t say what, and I really have no idea. I mean, come on, you should know a language’s syntax to write programs in it, right?

Or he explains how global variables work:

Global variables need a global declaration before they can be used. [...] globals can’t even be read without an explicit declaration — PHP will quietly create a local with the same name, instead. I’m not aware of another language with similar scoping issues.

Not a word on what he thinks of as an issue. Isn’t it OK for languages to differ?

I’ve been programming in PHP for some ten years and for most of the things he talks about, it never even occured to me that it was a problem. Also, I didn’t know many of the things he wrote about, because to encounter them you have to be really sloppy. He deliberately writes some messy code (like five nested ?:’s or 2 < "foo") and then complains that PHP does not execute it the way he wanted.

If you don’t know the language really well, at least write a clear and readable code, and it will work fine.

2012   PHP

The great design of PHP

The epic post “PHP: a fractal of bad design” is worth a read. It’s really interesting, especially if you are a PHP programmer. The author of this post deserves a credit for the work he has done, and there’s a lot to learn (though I’ll get to some questionable details next time).

I was thinking about how to approach the design thing he’s talking about. I felt like he was totally missing the point. Probably, PHP’s design is bad from some theoretical, computer science point of view. But it is great from the real life point of view.

The PHP source code for a “hello world” page is literally “hello world”. This is where the design starts, and it’s big. Trivial things are trivial, simple things are simple, then language gets more complex the more you want from it... and one day it gets really complex and you build Wikipedia. It scales smoothly from hello world to that. While there are indeed many quirks in PHP, they are just minor details. But the learning curve thing is a major strength.

In the post, the examples like Wikipedia and Facebook and WordPress are dismissed like they are irrelevant. But it’s no coincidence that they are there. Jeff Atwood poses a question: “If PHP sucks so profoundly, why is it powering so much of the internet?” And I think I know why: because of its great design.

Good design in terms of computer science attracts geeks who usually make tools for geeks. Just look at the list of Python software. I bet my mum haven’t heard of anything in the list. Good real-life design attracts normal people who want to build something for normal people and who desperately want to start building it now. It’s the design of PHP that makes those great products much more likely to happen.

Simple and powerful leads to popular and successful. And for me “popular and successful” is a much better metric of good design than some criteria made-up specifically to make your point.

2012   design   PHP