The programmer’s disease of doing it yourself

I had been taking a lot of digital pictures over the last few months, especially of my daughter. The numbers had grown so much that managing them was getting out of hand, so I did what most programers would do. I wrote code to do the backup. I used Ruby for the project and at the end I was the proud owner of a command line utility that backs up all pictures taken after a specific date and I then burn them onto CDs. After I wrote the program one of the things that bugged me is why did I do this? There are already tons of programs out there which do the same and I’m sure does a better job of it. Many of them are free as well, so price is not an issue. Over the last year I wrote a lot of major stuff which I could have done without. The list goes like WinForm custom-controls, web-cam motion detectors, ruby web server, C++ web server, text web-browser (similar to lynx), chat client/server, shell-extensions, lot of console utilities, game of tic-tac-toe, screen-saver framework, Rss aggregator/generators, source line count utility and the list goes on.

I have seen other coders have this similar do-it yourself trait where they write redundant stuff to take care of their day-to-day requirements or just for fun. But the question is why they do it. I think the reasons are varied and may include

  1. I think I can do a better job
  2. All tools out there sucks (mine doesn’t)
  3. I feel macho when I can write a web-server (hehe I am going to give Apache and IIS run for there money)
  4. Plain paranoia, I cannot live without knowing how motion-detection works and the fact that the author of that sample knows it. Does he think he knows more then me?
  5. The fun when you get it done and the thing actually works!!!

But seriously, I think this do it yourself teaches you a lot. And when one experiments with existing things new ideas come up and innovation takes place. So onto my next redundant project…

Comments (11)

  1. says:

    Good on you buddy. I know what it means since I myself do the same crime. You do learn a bit and also get confidence that you can do it.

  2. I hear ya…I tend to do the same thing quite often. My biggest flaw is at times I fail to complete the project due to something more interesting coming along. Usually once I’ve learned what there is to learn and the drudgery of the mini-project comes along, I find something more interesting to tackle.

  3. Jason I should have written about that too. I have these infinite number of semi-finished projects, I need to get back to….

  4. Joshua Bell says:

    Compare software development with other creative fields. In most, constant practice is required to keep your skills up. And in many, each exercise is effectively throw-away.

    For example, my dad plays piano. When he’s played for an hour, that particular performance is gone, except for the memories. (Assuming he didn’t record it.) Contrast that with an hour spent doing "hobby programming" where you’ve made a re-usable tool which will last as long as you need it, and continues to be of value.

    As software developers (meaning: everyone involved in product development at a place like Microsoft) we set a high bar – the things we work on at our day jobs are released to the world and have a (hopefully) positive impact that’s extremely widespread. On a daily basis, we often make lasting contributions to the world.

    So at worst, working on hobby projects keeps your skills honed and exercises your brain, which is no different than any other creative field; and if you finish the product you’ve made a lasting contribution to your own life. Maybe not the whole world, but you don’t have to hold yourself to the same high bar as you do at work. (Now if you release your hobby project to the world, that’s even better, but that’s also far more time consuming…. like work!)

  5. David Betz says:

    I have a strict personal rule to never reinvent the wheel…but there are times when a new rolling would be great (i.e. a sphere).

    But really, this reminds me of my website. I built the entire feed creation engine myself "because". It was insane though… a year later I realized that I don’t care about upgrading it as there are more important things in life so I moved everything to the infinitely customizable Blogger. I bow before their power…I don’t need to prove myself to anyone in this area.

  6. john west says:

    Heh, I’ve ran in to this same thought myself, and the same sort of justifications which I believe are valid.

    Recently, I found myself really needing a time management tool to track a boat load of projects, each with sub tasks. Now, my first thought was, write one tonight. But then I got to thinking about it and realised I was in the middle of something very involved at home and didn’t want to switch projects just yet. So I browsed arround, looking for what suited me as a time management app. Found a few that came close butnothing had quite the feature set I really wanted. Still, I did find one that worked for my purposes, and gave me some excellant ideas for my version of the ultimate planner/ time management tool. I think it’s defiantely good to be comfortable writing your own toolsfor the experience, fun, and so forth. But in our world there’s often not time to do everything ourselves, so sometimes we need to knuckle down and use someone elses creation.

    Great post by the way. it’s nice to see someone else asking similar questions. Take care,


  7. ac says:

    It’s often annoying that there are usually a lot of apps that do almost what I need, but can’t quite do what I require forcing me to reinvent the wheel atleast in part. If it can’t be done in few hundred lines of C# then I spend a good while searching whether someone has done something that meets my needs. Though in these cases I go for good reuse of others libraries etc since it’s going to be for my own use strictly (mixing licenses that do not go together). .NET is quite good for this.

    It’s probably much easier when you’re coming from C++, but if your background was in interpreted languages like mine, things can get way tough when you find need to do something that no one seemingly has done but requires some bit of native code and COM.

    In the end I did get the native bits working quite easily since though with some severe performance issues and drawbacks. I’d really love to share the project with couple friends but doubt that mixing licenses badly allow any other than strictly personal use.

  8. <Update: After some complains that it is difficult to cut paste code out of the blog, I have zipped…

  9. In PowerShell I ran (dir *.exe).Count to see the number of executables in System32 folder in a Vista…

  10. <Update: After some complains that it is difficult to cut paste code out of the blog, I have zipped

  11. ibomi says:

    Doing things to learn is OK,but as main root,we should fallow functionality. Especially, on computer field.Because it looks like endless.Doing necessary things will bring to us more time and more knowledge.Instead of knowing many things partially,better to know one thing fully…