I’m a programmer. I don’t know many languages, I haven’t worked on any large-scale projects, and I don’t know any search algorithms. I don’t even understand big O notation. What I’m saying, is that I’m not the best out there. What I lack in knowledge, I make up for in ingenuity and problem solving skills.
A former math teacher of mine had a poster that said that smart people ask questions (or something similar). I’m ambivalent about this. Yes, if you’re asking questions it does mean that you are both engaging in the conversation and thinking about the topic (so long as the question isn’t “can I go to the bathroom?” or phrased as a statement: “I don’t get it”), but I think that the people who really know what they are doing are the ones who don’t immediately raise their hands, the silent ones (some of them at least). Ford Prefect, a character from The Hitchhiker’s Guide to the Galaxy, theorized that if humans didn’t keep moving their mouths, their heads would explode; he later modified it to, if they stopped talking, their brains might start working. They are the ones who figure problems out on their own and answer their own questions. These two traits, thinking things through and solving problems on my own, are what I think make me a “good” programmer.
I’ve always been a problem solver. I don’t mean the kind between people or anything important in the grand scheme of things, but logical problems; I’ve always had good reasoning skills. My mom likes to tell a story about one time when I was little. She was trying to boil a hot dog, but it didn’t fit in the pot, and I told her to cut it in half. It doesn’t seem all that amazing to me, but I guess small children aren’t always the best at figuring out that, no, you in fact cannot fit that toy in your mouth, at least not without choking. Before I learned the fine art of using a screwdriver, I enjoyed dismantling electronics and harvesting their innards; my tool of choice was a hammer. I have a stash of various electronic scrap that I keep in case I ever need it. If something is broken, I try my best to fix it, often in MacGyver fashion, with bits from my electronics bin. I’m drawn to these “puzzles” regardless of whether my assistance is requested or the problem even affects me. This creates a problem in terms of programming: once I start, I have trouble stopping until the program is complete. Sometimes I quit because I’m too jittery to focus, I have an English paper to write, or I realize that my plan isn’t going to work.
A good programming practice is to map out every task your program will perform and how it will accomplish it. Usually, I don’t write my ideas down on paper. Instead, I just think them through in my head, but sometimes sketching it out helps. Other times I don’t plan ahead at all; I get a basic idea in my head and then just go for it. This usually ends in failure when I realize that I don’t know the math that part of my idea requires. I’ve finished very few projects that I’ve started, either because I can’t figure out a bug, a project gets so complicated that it’s impossible to manage, or I just get bored with the project. Unfortunately, sometimes I don’t even start before I give up; I get an idea, but after thinking it through deem it too hard and discard it. However, I love the feeling when an idea pans out; when I’m working on part of a program, test it and it just works is a wonderful feeling.