views:

702

answers:

12

Lately, I've been going through a pretty weird phase. I feel the need to write/rewrite all the tools I use ( text editors,IDE's,libraries/modules ) and I don't know why .
Even though this can be seen as a good thing ( because I learn alot of things in the process , and my software design skills are improving constantly ) , the weirdest part is that I throw away all the code after I'm done, so I kinda work in vain. I'm never satisfied with the code I write. Have you been experimenting this too? How did you get over it?

+2  A: 

If you are just duplicating your existing tools, there is little value. But if have an idea on how to make it better, even in just one way, its worth it.

This way at the end of it you'll have a slightly better tool and you won't just throw it away.

I went though a similar phase with tools, but then I got more interested in other topics like graphics and games.

Pyrolistical
+6  A: 

I do this all the time (well, except for the throwing away part). Personally, I started to do this early in my programming learning (when I was a student); it got the point where I would examine the Java core source code and if I didn't like it, I would make my own/extend it. It got to the point where the running class joke was that I was going to reinvent Java.

Personally, I never got over it... Instead I found new ways to use the to my benefit. For example, rather than simply reinventing things, I found that there were things that I wanted that were/are not available anywhere else, so I would make them for myself. My first such project was a chat program. Sure many existed, but this was the only one my teacher didn't know about (hehe). Sure learned a lot about networking protocols through it, but once it was "done", my first action was to send it to all my buddies and we would chat while the teacher was lecturing... Soon enough he found out about it and has since then forced all his students to turn their monitors off while he is talking, but it was fun while it lasted.

Since then, I have been continuing to come up with my own projects that are useful to me, have at least one aspect that I will need to learn along the way, and one or more aspects of there not being a current program that solves the problem for me for free.

So in all, I recommend that rather than trying to reinvent the IDE and then throwing your code away, try to find some project or problem that you would like to solve on your own and use again. I believe that dogfooding (using your own programs) is the best any programmer can hope to achieve.

Mike
+1 for the dogfooding link!
gnovice
+5  A: 

Put whatever code you write in a website and make it open source.

Let others discuss the code and make it better.

This helps you to improve your coding skills while you are giving back to the community.

Later you will be amazed to find that your code got better than what it was when you left it.

Niyaz
+3  A: 

I think the nature of us as programming species is to want to control everything. We're total control freaks. Everyone has tons of reasons not to trust someone else's work. Any given day at the office can be proof of that.

However, in general, you'll be wrong. Chances are that tool/library/IDE/whatever was developed by a team that put a lot more time in to it than you'll be able to. Sure, it has it's flaws from the outside, but by the time you're done with your version, you'll probably find that yours has a few flaws of it's own.

It's just something you have to come to terms with.

In hindsight, it's not an entirely bad habit. It takes you out of your normal programming area and gives you exposure to other problems. Ultimately you'll be more versatile for it. If you continue doing it from that perspective, and mix it in with real productivity, I think it's perfectly healthy.

Andy Baird
+2  A: 

I only write tools when it's going to save me time (or, of course, achieve more in the same time).

There's plenty enough application code to be written without wanting to write tools as well.

If you're doing it in your spare time, then each to his own, I guess, but I find that the need to make money from the code I write kinda focuses my mind on what's important.

ChrisA
+1  A: 

It also sounds like you might be really dissatisfied with the other work you are doing. I find that when I'm not enjoying my job, I tend to find anything else to do, and will get especially fixated on things that I can excuse as not being time-wasters because they are, on the surface, productive. Things like going back and cleaning up code that was really a one-time only ad-hoc, rewriting what already works, and making my own "improvements" on tools. If I'm right, it makes sense that you would then throw it out/walk away/find something else because if you are only doing that to avoid doing other work.

eutocius
As a matter of fact,I was dissatisfied with some work I had to do ( this went on for some months ) . This might be a good explanation . Didn't think about it this way .
Geo
+1  A: 

I've experienced it sometimes. For example, when preparing HTML documents for publication, I felt compelled to write my own tool to do it just the way I want. It's natural to want to make the world better. If you feel that urge - I suggest you go for it.

Dmitri Nesteruk
+3  A: 

You opted for the red pill didn't you? Somebody should have told you NOT to do that.

The problem is that if you really really like computers, and you spend way too much of your life thinking about them, you get to this point where the entire random/irrational state of software development -- that arbitrarily complex working mess -- seems to be clearly far more convoluted than necessary, even if you don't know what necessary is yet.

There is underneath it all, a fabulously amazing tool just waiting to be set free. It teases you from time to time, hiding in various programs, embedded along with various bits of data. Tantalizing functionality, that if only you could find a real way to join it all together to make one big super-cool system, you could ...

It's that purely mathematical sense that computers could in fact be something wonderful, if only they didn't suck so much.

Now take the blue pill, and get back to work ...

Paul.

Paul W Homer
Very nicely put.
Geo
I would +1 this if i had any votes left today
Click Upvote
+16  A: 

It sounds like you're driven by one of a couple different possible "syndromes" (or maybe more than one).

  1. Not invented here syndrome (NIHS). This is where nobody's code is good enough, or does things in the way you want them done. So you think you can do it better.
  2. How Does It Work? Syndrome (HDIWS). This where you are fascinated by a program and want to understand how it works, so you basically get down to writing it yourself.
  3. Biting off more than you can chew syndrome (BOMTYCCS). This is where you think "That can't be too hard to do, so i'll just write it myself then I know what it's doing". Then, you get partway done with it, enough to make it kind of work, and you realize that your code sucks and that you made too many compromises to get it done quickly, so you throw it away.
  4. Too cheap to buy it so you figure you can build it cheaper syndrome (TCTBISYFYCBICS). The name speaks for itself. The problem is that you get partway done, then you realize you've fallin into #3 above and think your time is worth more than whatever it is.

I have suffered from all of these, and more.. (Like the classic "Need to create an acroynm for everything syndrome (NTCAAFES)" ;)

Mystere Man
I often suffer from the second syndrome :)
Geo
"Not invented here" is probably the most prevalent. Unless you're job is writing tools you should be concentrating on stuff that's relevant for your business.
ChrisF
Add #5 to the list: Odorless Code Dreamer (OCD): http://moffdub.wordpress.com/2009/02/22/i-suffer-from-ocd-odorless-code-dreamer/
moffdub
+3  A: 

I commend you on this. You wouldn't be a good coder if you didn't obsess about the perfection of your tools, and also wonder how they were made, so:

  • Don't waste too much time,
  • make sure you release whatever you can open source,

but I look at it like a Padawan building his/her own light saber. It has to be done.

Ali A
Interesting analogy :)
Geo
+1  A: 

I think this is probably a good thing, if it's not getting in the way of getting things done.

But don't chuck it, even if it's rubbish, put it on the net somewhere, and when somebody else tries to do the same thing they can see yours and at the very least avoid making the same mistakes.

PimTerry
+2  A: 

We programmers are flow-junkies. We enjoy the mental states associated with problem-solving and progress toward solution. Sometimes, when the projects at work get bogged down -- for a variety of reasons -- its tempting to turn to side projects as a way to get the flow-fix.

This isn't necessarily bad, as long as you're sharpening your tools or learning something, and it doesn't take time away from other responsibilities (work or relational).

joel.neely