Friday, February 23, 2007

How Idiots Develop Software...

I hate all of the modern software development tools. Nearly all of the IDE's out there focus on writing code, even though about 90% of your time is spent debugging code. I think the motivation behind this is that IDE developers have no idea how to make a debugger, so they help us with writing code so we can litter our code with printf's.

I'm sick of using printfs. Why is it that developers still use them even though its a 30 year old technique? Every time you want to find something out about how your code is working, you have to find the printf insertion point, recompile your entire project (which could take minutes), and then re-run the program until your printf gets hit. And what happens when the printf doesn't get hit, or it doesn't spit out enough information? Well then you have to start all over again. If you repeat this process enough, pretty soon your code is littered with printf's and the debugging output becomes a nightmare to analyze.

I got more gripes with modern debuggers....

One of the biggest advances in the new IDEs are error highlighting. Don't get me wrong, error highlighting is cool. But how much of your day is spent tracking down hard to find syntax errors. For me its about 20 to 30 seconds a day. So thank you error highlighting! You saved me 2 hours last year!

Seriously is error highlighting the best that you can do? I've spent days, weeks, months (years??), tracking down impossible to find memory leaks and corruptions, race conditions, and bugs in complicated control flows. I spend a negligible time amount of time tracking down compile-time bugs.

Today IDEs either provide no UI making it difficult to browse and write code (ahem gdb), or there's so much UI that it waters down all of the features (ahem eclipse). Visual Studio is better than both, but I could still spend a week explaining why it sucks. None of them make it easy to browse code without clicking a half-dozen menus. None of them make it easy to track race conditions. Some of them help you with memory corruptions (valgrind) but are a bitch to setup. None of them really help you understand how your code works.... displaying the class hierarchy is a nice visual touch, but is pretty useless when trying to track down bugs.

I've got some ideas on how to make these debuggers much much better. Maybe later on I'll try to explain my new ideas techniques and formally analyze why each IDE sucks, but for now I'll just bitch.

No comments: