Tuesday, September 25, 2007

Most of programming is routine, and that's a problem.

While coding, I always have this nagging feeling that someone has already done what I'm doing, and done a lot better job of it than I. Heck, its more than a feeling, I just know it! It frustrates me, knowing there is this useful information that could save me time, just beyond my grasp.


At the end of the day I am interested in building programs with interesting functions, that I know about Java or SQL is purely a side effect of creating these interesting programs. If I could get away with knowing a lot less about Java and SQL, I would!


I'm not saying that aren't a lot of benefits from knowing low level systems, I think there is a huge advantage from knowing low level systems well. Just look at Skype, an application that is only so amazingly useful because the creators knew a lot about NAT traversal and P2P networking. But the creators of Skype also had to program a lot of routine things as well, things that ARE well understood, and that is where the wasted effort is.


If only we could spend a majority of our time working on the things that WEREN'T well understood, the interesting things. The mundane things, well, they are just as mundane to program as well.



This isn't a comment about OO in general, its more a comment about everything we do in software development in particular.


There are lots of things we (software developers) do, that are well understood:

1. If you need data for twelve rows of data, don't do twelve queries to get the data, do one.
2. When displaying read only data, no need to marshal all the objects, just load the relevant data.
3. In Swing programming don't do long running operations on the AWT-EventQueue thread.
4. Etc...


There are many rules that people apply for each situation that arises. The frustrating part is that when you encounter a new technology/framework you have to discover all of these rules of thumb, even though chances are that you are walking down well trodden path.


To me a great example is the email lists, where 90% of the time people are asking about the same 10 things. This is how the FAQ was born. But the FAQ has really gone no further, its not in an actionable form, we can't reason with it, we aren't able to programatically derive semantic meaning from it.

So? How do you design a system to have the smarts to know what to do?

Well I promise to post about it as soon as I figure that out :)

1 comment:

Karl Tyson said...

Hi James,

I'm browsing around to everybody's blogs and found yours, and thought I'd maybe try out a comment.

I don't know if this applies or not, but are you getting at the problem that many functionalities we would want to embed in our programs could be available "on demand" in some form generic enough to just fit in without thinking about it?

Of course, some development environments, like Visual Studio which I am familiar with, try to supply all sorts of shortcut features (like data connectors), usually with badly evolved wizards, which will try to supply you with code but just as often mess up your program and lock you into their product.

I know this is a wild idea, but what if you could just assemble programs from really good pieces of open source code that have already been built and tested. You would just reference them, and they would build themselves into your project. They would be benign parasites, and just do the stuff you want them to without requiring oversight.

But I have no idea how you would implement that. Anyway, good question.