Nov 05, 2007
I've said many times before that I'm big on "bang for the buck." A significant part of that equation is making sure that you're using the right tool for the job. Allow me to provide an example. My wife, Gina, and I made a lot of improvements on our last house. While remodeling our front porch, we needed to replace the front steps. 2 simple concrete steps needed to be transported from the concrete supplier about 2 miles to our front porch. These concrete steps would "fit" into the back of my station wagon. After a little fussing about to get them in the back of my car, I surveyed the rear ride height of my car. It was pretty well compressed to the bump stops... but should make it to our house. After a very slow 2 mile ride, we needed to get the steps from the back of the car to the front porch. Gina retrieved a plastic garden cart from the back yard and rolled it to the back of the car. The 2 of us struggled to remove the first step from the rear of the car... and gently drop it into the garden cart. It went right through the bottom. Another concerning detail: the rear of my faithful little Subaru didn't start to rebound as I expected. We lugged the first step to the front porch and returned to the car to remove the second. Again, we struggled to extract the step. And, once again, the car failed to fully return to it's pre-traumatic ride height.
We eventually installed the new steps, mortar and all, but I learned a few things. First: compact cars do not haul heavy loads well. I ended up replacing the rear suspension in my Subaru. What the heck was I thinking? Just because the load fit didn't mean that I should carry it in that car! I should have rented a truck or bugged a buddy to help me out. Putting the concrete step through the bottom of the garden cart reinforced this. Perhaps a wheel barrel would have worked better.
I build websites for a living. More accurately, I lead a team of folks that build websites for a living. I still code quite a bit, but it's not my primary responsibility. Our websites are used by the public. We are Web Standards code snobs: our markup describes the content it contains. The tools we use allow us to do this quickly and easily. We have built several frameworks with PHP. Admittedly, the newest framework (which benefits greatly from PHP5's object oriented approach) is significantly better than our previous (early-PHP4-based) framework. However, both of these solutions allow us to meet the demands of our very creative marketing team as well as the unpredictable financial market. PHP is hands-off when it comes to the front-end. Do what you want (good or bad) and PHP will let you. Each of our frameworks has defined boundaries to ensure the separation of layout (display) from logic. In the end, however, we can be sure that our output (the web page content) is exactly we want it.
This has paid off in a big way. Search engines consume our content greedily thanks to concise, content-related URLs (which we control completely). Paragraphs, headlines, and lists (menus) are tagged as such instead of vague blocks (divs). Search engines like this and so do developers. There's no guessing about what something is on a page. Data grids are represented as tables, and table are not used for layout. (Just like you wouldn't use Microsoft Excel to design and publish a newsletter... at least you shouldn't... unless your clinically insane.)
I'm not claiming that other solutions don't allow you to do this. But some of them try to do too much for you. In the process of doing so, they make you do it their way. For example, the origins of one popular technology are founded in desktop application development. The development metaphors of desktop application are very different than those of web development. (Screens instead of pages and so forth.) Additionally, the mentality of platform agnostics escapes most desktop developers. They build for a specific platform, the end. Web developers must support many versions of many browsers, on many platforms and devices. This mentality is reflected in the approach that these technologies take in addressing user interface, layout, display, and session management. If you're going to build web sites, choose a tool made for building web sites... not everything else.
However, if you're building desktop apps you're in a great spot if you've chosen technology intended for such a task. When you find yourself straddling this workspace, it may make sense to compromise. Use a technology with strong ties to both worlds. I'm not talking about Java here, folks. .NET offers some powerful tools for application developers that are required to build web-compatible apps. Read that last sentence again... "web-compatible apps..." I'm pretty proud of that part. It encapsulates the spirit of those developers that use .NET technology for web apps. Whether you start out writing desktop apps or your goal is to someday write a desktop app, you'll probably be pretty happy using .NET to build web apps.
Face it! You're not thinking web. You're not buying into the philosophy and culture of a shared, universal experience. The web breaks down barriers, it should not invent new ones (Active X, I'm looking at you...). Some of the new things that Microsoft is working on, like Silverlight, have the right spirit. Now it's up to the real web development/design community to adopt them. Microsoft is going to need some feedback... and I've recently found out that they're really open to it. Tell them what you want, they're listening. Their tools reflect the needs of their core user base. If web standards focused developers use these tools and work with Microsoft to get it right, there's a good chance they'll get there (eventually).
Everybody has tools that they use to get work done. I admit that I've used wrench for a hammer in a pinch. Usually, the results aren't pretty. A carpenter wouldn't do the same thing. If you're a professional, make sure you use the tools that fit the job. If you're using tools that work, but aren't made for the job, tell the people that make those tools to get it right. Demand it. Now get back to work. Web 3.0 isn't going to happen by itself.