Archive for the ‘Commentary’ Category
In 2001 I created a PHP 4 web application framework from scratch as the backbone of a sophisticated application. Back then frameworks weren’t cool. Smarty templates were the hotness.
My framework had URL routing, templates with a capable templating syntax similar to mustache, loosely coupled and tightly cohesive object-oriented design, an elegant way to access the database without dumbing it down, and nicely separated business logic and presentation layers — among many other nice things you find in good frameworks. As the application grew more and more complex, the framework continued to serve well with only occasional enhancements.
I mention this because it illustrates that I’ve been aware of how to design maintainable systems for a long time. But the so-called MVC paradigm (model, view, controller) has never made sense to me.
The design goals make sense. See above. It’s just that I find MVC itself — the abstraction and implementation of those goals — to be unhelpful at best, on a day I’m being charitable. On a day I’m telling it like it is, I’ll just bluntly say MVC is the most confusing pile of acronym bulls**t I can think of.
Tell me, without knowing what MVC is, what would you guess the model represents? Controller? View? It would be bad enough if these were abstract terms like “node” or “resource,” but they’re not abstract. They hint at meaning, and then you discover that MVC doesn’t align with the hinted-at meaning. Instead, the M, V, and C represent concepts that are vague and hard to understand, and are kind of a stretch to mentally fit with the terms. This is worse than abstract, it’s misleading. It’s like bait-and-switch for someone who’s trying to grasp what it means.
I don’t know where MVC came from and I’m sure I won’t change my mind if I find out. I have a hard time believing that I’m the only one who wishes someone had formed a committee to discuss what kind of names to represent the concepts. Especially since there are so many frameworks that abstract things slightly differently, because MVC apparently doesn’t suit their designers either, and thus it’s necessary to explain the relationship between Framework X’s view of the world, and how that loosely maps to the MVC view of the world. It becomes a sloppy comparison to a sloppy analogy.
Even more fun: some folks try to invent an MVC framework, like the original ASP.NET, and “get it wrong,” to disdainful criticism. Then they have to reinvent it, sometimes several times.
It’s kind of like the OSI 7-layer model, which everyone agrees doesn’t actually represent modern networking technology stacks cleanly, and yet everyone talks about the OSI layers. There’s a clean way to think about networking layers, but the OSI model ain’t it. Or NoSQL — the most unhelpful, undescriptive name for an … amorphous category of technologies or worldviews or design patterns or whatever… ever.
The lesson: great concepts that teach great truths, and could result in great advances in engineering due to a common mental model around which other things can be built, can be sidetracked by slapping an ill-fitting monicker or set of analogies on them. And sometimes we never seem to get another chance. NoSQL believers can’t seem to think of anything better than NoSQL as a name (and neither can I, as much as I deplore the NoSQL name). We’re stuck.
I’m sure my strong opinions on this are a) somewhat ignorant and b) not shared by everyone. Discuss! :-)
 Yes, I’m aware that awful things come from committees, like SQL. But I have faith that it would have been better than MVC.
I’ve been trying out Republic Wireless, a startup that offers very inexpensive wireless service: $19 for unlimited talk, text, and data. In a nutshell: they resell Sprint’s network, and you agree to connect to wifi as much as possible; they use the Internet instead of the cell network when you’re on wifi. I thought for $19/month it wouldn’t hurt to give it a try. After several months, my experience has been that it isn’t worth using at all, no matter how cheap it is.
I don’t want to dwell on the problems at great length, but here are some of the issues I’ve had.
- The phone is junk. It’s a super-low-quality Motorola Defy XT, which is basically hardware and software (Android) from 3 years ago. It has flaky behavior such as turning off the screen when I try to use the keypad during a call, for example, when I try to press the 7 key to delete a message from voicemail. It also does bizarre things like rotating the screen from landscape to portrait repeatedly and unpredictably when I’m in the middle of trying to use it. It’s a really poor experience in every way; my 3-year-old Droid 2 was much better.
- Sprint’s network is awful. Just awful. Voice quality is terrible. I haven’t been able to actually have a call for more than a couple of minutes at a time. It disconnects or goes into some kind of zombie state where the call still seems to be connected but nobody can hear anything — or only one person’s voice gets through. The phone is literally unusable as a telephone.
- Connecting to wifi doesn’t work. I connect to wifi, I have a strong signal, and their VOIP software uses the cell network instead. It’s incredibly buggy. VOIP calls are better than over-the-air calls, but not much.
- Something is wrong with number routing. I’ve gotten calls from people who were dialing completely different numbers (same area code, but different last 7 digits.) When these people apologized and hung up, then tried calling the number they were trying to reach, they’d get me again. This never happened on Verizon.
- Customer service isn’t merely bad, it’s actually nonexistent. They just use a community forum, and they don’t even answer threads on the forum. See, for example, my thread asking them to make voicemail passwords optional, after they removed passwords from everyone’s voicemail (which is a serious and well-demonstrated privacy/security blunder).
- Text messages stopped working several weeks ago, with basically no notification except for a relatively hidden post in some area of the community forums. Last I looked, there’s no update on whether they’re even trying to fix this.
I’m sure there is more, but that should be enough for now. The summary is that the phone is almost completely unusable for voice calls, completely unusable for text, and practically unusable for anything I’d like to do that requires data (e.g. typing an email) because of the hardware’s flakiness. It’s little more than a small, poorly behaved Android tablet that I paid $250 for.
My wife and I switched from our previous price-gouging phone network at the same time, and both of us have had all the same issues. So this isn’t “just me.” There’s a sample size of at least 2.
The technology industry moves incredibly fast, from one bubble to another. Web 2.0. Online auctions. (Remember when the Internet was filled with hundreds of eBay clones?) Social. Mobile. Location-based. Big Data. Whatever.
I don’t think anyone will call me insightful for observing that the general idea of “social” had a peak in its hype cycle some time ago. I’d say three years ago was really the peak. At some point, lots of people were excited about applying social-ness to everything. Social was going to be the way everything happened in the future. Businesses were going to revolutionize the way internal communications happened by making everything social. Government was going to be more transparent by being social. We were all going to be constantly tuned in to all this frenzy of everything happening — events, information, whatnot — and it would all be saturated with socialness. (This sounds like a new level of hell to me, but some people thought it was a good thing.)
There were basically no bounds to what social could do. IT was going to get more agile through things like social monitoring, for example, like Nodeable. It’s since been renamed and pivoted entirely, but what I remember was that people chit-chatting and promoting/liking/recommending and having relevance-based feeds about system problems was going to improve the signal-to-noise ratio of monitoring alerts, and allow IT staff to focus on stuff that really needed to be fixed.
Social became a golden hammer. Got a social hammer? Everything looks like a social nail. Bang, bang, bang. Solve it with social, get rich with social.
Personally, I have no use for most social media. I tried Facebook for a few months. It’s a platform for little info-bites that are distracting, pleasing, fun, endorphin-releasing. But in my opinion, it is not a way to meaningfully engage with people I really care about on a deep level. So I deactivated my account. Google is trying to go the same route with Google+ and I have no use for that either. The idea that a crowd of people babbling is going to produce something relevant and actually valuable for me, is not something I agree with. Both Facebook and Google+ are this way. I would much rather pull my content from carefully selected places than have it pushed to me by algorithms and the so-called “wisdom of crowds.”
In other words, most social media seems to me to be more about popularity than relevance, value, or meaningfulness. I truly do not care what other people think about pictures or events or celebrities or news or whatever. Their opinions have a very small chance of matching mine. Opinion-based social is just another name for popularity-based social. I have observed that the things I value the most are often the least popular. Just look at how most world governments are run and it’s easy to see that crowd-pleasing things and sensible things are pretty much mutually exclusive.
But there is more than one way to do social.
There’s real, enduring value in the concepts of social. Take a look at Github. It isn’t promoted as “the social coding platform where code gets social and social is how the code is socialized,” but their TITLE tag talks about making better code together. Use their service and what do you do? You have conversations in issues. You have comments on commits and pull requests. You can @mention people. You interact with other coders via code, code itself becomes conversational, and coders have meta-conversations on those conversations. It’s totally social. Heck, Git itself, by its very design, is social.
But Github is not overtly social. That’s the difference. They don’t act as if social is first, and code hosting and issue tracking is secondary. They don’t act as if the core value proposition is socialness and code hosting is just the medium through which they do it.
I think that’s the right way to do it. Take a solid business idea — code hosting and revision control and so on — and add the ability for people to have meta-interactions around it, where it makes sense and actually enriches the core of the business.