As you’ll know from my previous post, I was ‘heckled’ during the Q&A of the framework talk I did. This wasn’t aimed at me, but rather at all 3 of us on the panel, and more importantly, at ‘MVC’ frameworks as we commonly see them today. Marcus Boniton also mentions this incident on his blog.
Personally, I don’t think he’s a crazy guy, I just like the title and find it quite amusing
I pointed the ‘crazy guy’ to my previous blog entry, where he replied to an author of one of the comments, and CCed me in. I thought it was a very interesting mail, so it’s included below. I put this here with full permissions from Mike.
My name is Mike. I am the “crazy guy” from the London framework debate, as you called me on Ian’s blog. I am 28 and I live in the Middle East. I am the propaganda officer (a fancy title for a guy who looks for interesting people and drags them in) of the Agavi project, but despite coming off as a loudmouth, I actually managed to restrain myself during the so-called debate because I realized that if I push it any further I would be met with anger and not a listening ear . I suppose having opinions gets you this sort of treatment sometimes. Either way, I think it is unfortunate that in a room of well over 300 people, only five actually listened to what I said and approached my team after the debate with genuine concern and curiosity (Ian, in all fairness, was the first one to come). In fact, it’s quite sad that the applause I received was more due to my sarcasm than the actual point I was trying to make.
It appears that you are one of the people who missed the point, so I think I should clarify myself so that you have a decent opportunity to assess whether you have a right to call me crazy or not. If you feel like it, feel free to forward this rant to UK PHP community.
All major Rails clone PHP frameworks that exist on the market today are a complete and utter failure. All of them call themselves MVC frameworks and none of them implement actual MVC. In fact, some of the worst ones merely resemble MVC, and have no right whatsoever to be called frameworks. Whatever benefits of sexy ORMs and flexible build systems and scaffolding and other secondary tools these frameworks have are nullified by the fact that using them results in architectural chaos which is no better than your usual spaghetti code. This is because the people who wrote Rails didn’t bother to understand MVC, and the PHP amateurs who were excited about the idea of getting done more in less time blindly tried to clone Rails into PHP and in so doing not only replicated the stupidity of Rails into PHP but also multiplied it by their own incompetence and PHP’s shortcomings as a language and a platform. Here’s a great unrelated example of a person espousing nonsense without having a first clue what they’re talking about and other equally ignorant people supporting him:
In a true MVC implementation, the application itself resides in the model. The model is a wrapper in which the developer expresses the application as an API in terms of the business problems that the application solves. No part of the controller-view chain has anything whatsoever to do with the application logic. Controllers are not allowed to make assumptions about the user interface presentation, and views are not allowed to perform changes in the application’s state. In proper implementations, database access is wrapped inside the MVC models, and templating is located underneath the views. Controllers can’t set page titles, and templates can’t query the database. DAL specific output formats can not cross the boundary of a model. Rails-style helpers have no place in the MVC architecture. All these are factual rules of MVC, and the frameworks violate them left and right, including Symfony, Cake, Trax, Seagull, and many others whose names I can not recall. MVC dictates in very clear terms what goes where which wouldn’t be a challenge had anyone actually spend an hour thinking about it. Of course, everyone is too busy deceiving their customers and writing code that can not ever be fixed.
I have been actually approached by a couple of people trying to argue that MVC can be interpreted in many ways. That is ridiculous. If one of the basic constraints of MVC is violated, the whole codebase becomes infected with code that will need to be taken out before forward compatibility that MVC promises can be invoked. If you ever need to replace the database backend, or completely swap out a session storage, you will be surprised to discover that the MVC magic has evaporized and you now have to spend next months rewriting the whole thing and then hunting down bugs caused by the rewrite, which will inevitably lead the project into its bitter end.
In all three presentations that were shown to us in London, horrible mistakes were made in the example code, not by way by programmers’ shortsightedness or sloppiness, but because the frameworks themselves were designed in such a way that making these mistakes was a fundamental requirement of the frameworks to the point the programmers don’t even realize that what they’re doing is completely wrong and harmful. I hoped that the newer releases of the frameworks that I reviewed in the past would realize what they’re doing and correct their mistakes but it is too late now. It appears to me that many people which consider themselves veteran PHP developers who think they’re sufficiently endowed to educate the public (and I do not mean to imply here that these are the same people as London conference speakers) can not recognize neither these mistakes themselves nor the devastating implications propagation of these mistakes has on both their own career and the PHP developer community as a whole, more often than not because their idea of web application architecture is limited to the mentality of PHP 3 age and the notion that PHP is something that turns a database into a web page.
In other words, 95% of the people who say they do MVC have not actually read the MVC papers, have not thought the whole thing through, and have not done anything to verify that the ridiculous nonsense they’re parroting has correlation with reality. These frameworks proliferate and multiply at great rate. It is the textbook example of irresponsibility and incompetence. What’s even more disturbing is that the PHP developer public has lost its ability to think critically, which makes me think that I don’t really want to be a part of this public. The stupid and dangerous actions of this public also cast their shame on me and other developers who do not make the same mistakes as the rest. Right now, the Java developers have a field day laughing at us.
When I was speaking, sarcastically, about all three frameworks being broken, at the point I said the word “criminal” there was laughter and applause because people love the shock value. If anyone actually bothered to listen instead of clapping their hands, they would have let me continue to make my point, which was that what is being in marketing materials of all Rails clones is false advertising, which is in fact a crime in many places, and that people who use these frameworks are about to face some very unpleasant questions from their past employers.
MVC makes certain promises which the PHP developers love to pass on to their customers. Nevertheless, when doing their jobs, these very developers do the exact opposite of what MVC requires them to be doing in order to be able to deliver on their promises. The net result of that is that in a year or two when new protocols evolve and new technologies arrive, people who relied on the cheap programmer labour that is enabled by shiny self-proclaimed MVC frameworks would suddenly discover that their applications can not scale without a full rewrite, and all of the funds invested in development and maintenance of their business are now down the drain. When that happens, I’ll be quietly watching in the corner and watching the lawsuits and the fireworks. The reputation of PHP as a platform will be damaged beyond repair, but hey, who cares about cutting the branch you’re sitting on as long as it makes you fat dollars, right?
I’m glad that some people have actually listened and will hopefully reconsider their reliance on other people’s ignorance before it lands their asses in hot water.
I have the option of going around slamming other frameworks directly and naming names, but why should I waste my time? None of them can be fixed without forcing everyone who uses them to abandon everything they’ve written so far. I’ve got what I need and I am damn sure I am not getting angry phone calls long after I’m done with my projects. Do you still think I’m crazy?
If nothing else, the email is at least an interesting read! It’s also my longest blog post ever, though very little work of my own!