I was thinking of a few things that are essential to be a good programmer. These are not in any order as I think they are all equally valid.
1. Source Control.
I don't care if it is vss, svn, or burning a disk everyday (ok well I would fight the disk one but at least it is something. Source control is the only real way to maintain code and if you screw something up it is easy to go back in time. Since I have implemented source control at home for my small projects it has saved me countless times
2. Unit Testing Framework.
How many times has an xUnit framework saved me? Well lets just say its more than the number of bullets Justice has jumped in front of for me. Seriously unit testing is the crack cocaine of developers. Once you start you do not stop. If you have stopped I am not proud of you. Rehab is for quitters!
3. Refactoring
Constant refactoring of code is essential to every good developer I know. Seeing ways to simplify your code, make it more reusable, and most importantly; make it clearer to understand is essential. Martin Fowlers refactoring book was one of the first books that really changed the way I developed code. Its such a simple concept with such great results.
4. Admitting You Don't Know
For some reason a lot of people seem to feel that if they admit they don't know something. I don't know if it is the fear of being fired or just not looking like the hot shot programmer you always aspired to be. I have seen so so so much code (and written it too) that is terrible and obvious that the developer just threw code at a problem until it worked.
I equate programming to medicine a fair bit. As developers we know a lot of things about our craft, just like doctors. And just like doctors we get stumped by a problem. I talked to a doctor about this phenomena and he said that the medical community is very open and all about sharing*. Doctors consult each other all the time informally or formally (as is the case when referring you to a specialist). So doctors are not afraid to admit they don't know and they deal with peoples health. Why do we care if we don't know?
I wonder why we don't do share in our industry. Is it that we are a bunch of introverts that climbed out of the basements to become programmers? The relative youth of our industry? Fear of being wrong? Or some other factor? I will probably never know but interesting to ponder.
5. Life Long Learning
I have been programming for almost 20 years now (yes, I was a dork baby) and I still don't know anything it feels like. Maybe that is because I am always trying to learn new and better ways to do things.
There are many ways to perpetuate learning. I learn something new almost everyday still just by working. I read when I can. I go to courses, user groups, code camps, and the bar as much as I can. I have stupid little home projects that are just for the fun of coding. I take time off of working just to play around with code.
So many devs program the same way they always have from 9 to 5. Just because you have a family, second job, or really don't want to eat/sleep/breath code is fine! Just make an effort to try new things, or read an article here or there. Its easy and does not have to consume your life.
*Special thanks to Dr. Yake for his time (It also helps I am a step-grandchild)