Just What Are We Developing?
I’ve been thinking about this post for some time and I finally decided I should go ahead and try to express my frustration with current application development.
The root of the problem is that currently the applications that are given the most press and the most “excitement” are useless. We are at a time when there is computing power literally in the hands of users that until now was unprecedented. Yet what are we developing on these new platforms like the iPhone, Blackberry, and G1? Well a quick survey of the popular applications will tell you very quickly that apparently the great achievement of having a “smart” phone is being able to play games. I don’t know about all programmers out there but I’ve never gotten excited about the potential of a game. After all it doesn’t save a company money or make a user more productive or increase safety or anything that a really well designed application might be able to accomplish. If it isn’t a game it is a restaurant finder or something that identifies a song on the radio or pretends to pour a beer. Well there is a great advancement to our society a device that pretends to pour a beer! However, one programmer did connect up a phone to a servo motor to pour a beer once you have loaded up the bottle and the empty glass of course.
Similar problems exist with the “run anywhere” platforms like Adobe AIR. So far I haven’t found many real applications written in Adobe AIR. Sure there are little apps you can download that will show you twitter feeds or pull other RSS feeds to your screen but what about a real application. I actually did find one application called Klok for tracking time that seems to be an actual application and not another glorified RSS reader. But a quick review of the Adobe AIR marketplace will let you decide for yourself.
And what about the great web applications frameworks that are supposed to allow us to put together great applications on the web? Anything out there with meat to it? Rails, Grails, Django and others all claim to speed our development and to some degree they do but what are we developing? Another friend application so I can communicate useless status to people that I probably don’t hang out with but for some reason need to be my friends. I laugh at social media applications that pull together all my RSS feeds from every useless service like facebook, twitter, linkedin and all my other “essential applications” (I apologize to my friends that have worked on these applications since I know the code does take some time but for the “real” aspect no such apology). I want to see really useful tools that people can use to really do something meaningful like save money on groceries, gas or save on heating costs.
All this useless development leads to a lot of dead ends. It causes rates to go down and makes it so that the average business person has about as much respect for programming as they have for what their kids are doing on their smart phones.
So what is the answer? I have a suggestion. Let’s all start to look beyond games and communicating with our virtual friends. Real programmers can certainly make something useful for these platforms. Let’s try to develop things that really matter? Of course this won’t be easy. First we would like to get paid. Free software is for people without families and bills to pay. So that means real work. Not some weekend of coding that produces another RSS feed reader but real work with a long time line and possibly some real use in the future. If you are in college and considering programming as a career learn more about the real world connections to computers like embedded systems and hardware. Don’t just think you can write the next facebook. Ad supported models are not good business plans. I think the future of application development is going to be in understanding how to use real data like temperature and energy use to then make real changes that can benefit users. If you are thinking about writing another game or “social” application then good luck to you. Personally I think that is the reason we will continue to see hard economic times…we can’t focus on anything beyond a day or two and that leads to games and “social media”. Which by the way tells me we are not in hard enough economic times when people are still paying an extra thirty to forty dollars a month for a data plan that allows them to look up restaurants, compare prices of other things to buy or send email.
Drupal 6 Module Development
In my continued quest to increase my Drupal 6 knowledge I picked up this book on module development for version 6. 
Over all this is an excellent book. This is definitely targeted more at a developer which is probably why I liked this book. I think the author does a great job of explaining the basics of how Drupal works and specifically covers a lot of information on hooks which are key to understanding how to accomplish most any task in Drupal.
The modules that are developed through the book are well chosen because they cover the essential pieces of module development and at the same time allow a little time for some more advanced topics. I was surprised at how well the theming code was covered in this book. Most module development books usually leave all the user interface development out but this book shows how you implement your module in a way to take advantage of the theming capabilities in Drupal.
Over all this is a great book and if you are familiar with Drupal a great way to either learn about module development or get up to speed on some of the Drupal 6 changes to modules.
Drupal 6 Book
Just finished reading “Building powerful and robust websites with Drupal 6” by David Mercer from Packt Publishing.

This is a general beginners book for Drupal and web development in general. Overall I’d say it is a good book for those wanting to learn about Drupal. My biggest issue is with some of the more generic advice on how to develop a site or how to decide about what you want your site to do. These are just extra elements that I think should be left to a different book.
Still I’d recommend this book if you are interested in learning about how Drupal works and whether you can use it for your site. Combine it with a book on module development that I am currently reading and you have a good round view of the basics of Drupal.
Rails and Seaside
I’ve been looking at Seaside recently as a web framework. Rails is nice but I cannot get over the problems I see with Rails when you are not developing some brand new web application and database. My previous rant about this is still valid I think. In fact many of those shortcomings are repeated and some additional ones added in this blog post that is also looking at Seaside and Rails.
I think Rails still needs to grow up and I’m not sure that is going to happen very soon. It has some very good advantages but I’ve only found them useful in limited new projects with no legacy data.
Ruby Hype
Recently a friend sent me a link to this article on InfoQ Why would a .NET Programmer Learn Ruby on Rails? We rant a lot on our list and mine was particularly long. He suggested I publish it so here it is.
I think the points in this article show a lack of understanding about the architecture and features of .NET.
Here are the points from the article:
Do not compile. So what. How does this help anything? He claims as long as you have good unit tests, dependency injection help etc. it doesn’t matter but no real project is every that nice and clean. Rarely is anything that good unless I write it LOL.
Dynamically enhance the behavior of a class without a Decorator. This is something you can do with any non-compiled language. The problem is you will need to do this someday when you don’t have access to the source. Actually can you have some Ruby code without giving away the source? That might be a problem for the future of the language.
Slim down your code base by stripping off type declarations and interface declarations.
Have you ever tried to use a class that you didn’t write that doesn’t have a well defined interface with types? This ability has existed for a long time in VBScript and ASP with objects/perl objects/smalltalk (first two are not truly object oriented languages but not necessary for this example). The point is that this has led to more problems and issues than it ever solved. It was great for prototyping but broke down so fast you always ended up re-writing.
Ajax it.
This is one of the better features of Ruby. He of course fails to mention that ATLAS lets you drag and drop ajax functionality (even on existing projects). And with the integrated environment of Visual Studio it offers 10 times the debugging and development performance of the Ruby IDEs I’ve tried (ya I know that is a silly hype statement just like the Rails statements :-). ATLAS it is officially beta but so is Google mail.
With Rails you don’t need an O/R Mapper.
Yes you do. It is called ActiveRecord. Just because you bundle it in doesn’t mean you don’t need it. And you don’t have to implement one on your own if you don’t use Ruby. Has this guy ever heard of Hibernate/NHibernate/iBatis? All of these (included the great Rails) have the same problems. They all work very fast and great as long as you “apply a few naming conventions”. Well that knocks out 95% of the projects since the database and data usually already exist. You don’t tell the DBA to rework the database of 2 billion measurements because you want to use Rails. You can map Active Record to your schema but just like Hibernate this takes all the “speed of development” out of the equation. As for his example of Rails automatically adding a field to the database…well once again in what universe? What does a developer then do with his changes to get them into production where he doesn’t have access? This is where Ruby/Rails lands squarely in the PHP world of every application is a new application and a small application.
Using Ruby to build/deploy/release.
I know Rake is pretty good and I can’t (due to not using Rake enough) really compare these at the feature level. One thing is that article says is Rake uses Ruby…well duh NANT uses .NET and ANT uses Java. As far as how many times I’ve done things like “for each file with .sql extension” well honestly just once many many years ago and I’ve been reusing it for years which makes it at least x years more productive than Rake :-) I also don’t guess he has tried Maven and Jelly where you can completely script things in seconds (they are Java but there are .NET equivalents). I wrote a web service client generator in 4 lines of Jelly code for my Maven build. Took no time at all.
No pain no gain.
Here at least some hints of real work. I had to go through the emotions of accepting the fact that it will take longer to find a new Ruby solutions than to use an existing technology that I am comfortable in.
So he then enjoys the work…I’m sure the business dev. people will agree with taking longer as long as the programmers are happy!
So do I think Ruby sucks. No. It is a neat language. But there are many neat languages. I’ve used VBScript with WSH to prototype COM components for years. And until they bottleneck I never had to rewrite them (just like the Basecamp folks who rewrote some of their Ruby in C when it bottlenecked). The VBScript isn’t typed either and it is very fast. Ruby is like an evolution of those types of environments. (btw. Microsoft is releasing a fully object oriented command shell language that will replace VBScript…it has been beta for over a year).
But the Ruby hype is out of control. I think Ruby will continue to eat away at the PHP crowd. PHP isn’t object oriented and it’s database access code sucks (custom calls for each database brand require putting a layer in). Ruby solves these issues. But Ruby isn’t going to be an Enterprise language. I might be wrong and that is why I always learn every language I can but right now I see it as the next PHP. I don’t have any clients wanting it except people that have PHP sites that are frankly simple non-complicated sites.
And my final issue with Ruby is use of symbols. This makes it look terse but that is not a benefit. What is @ in Ruby? What about @@? Instead of just using a simple “private”, “public” or “static” keywords they choose symbols. I thought we had enough of this with Perl. This is also why Smalltalk/Squeak have not been widely adopted. Sure once you learn the symbols you know what they mean but it doesn’t produce truly readable code. Ruby does use private/public keywords on methods but allows symbols too often.
My Ruby rant is done.