Habits I'm Glad I Have
- When starting a new project, I do nothing
Rather than begin either programming or designing, I initially do nothing, perhaps surf the web. After a while, maybe an hour, I've thought of something I need to ask about the nature of the project, or I've thought of an existing program that already performs the same task, and even if I've thought of neither of these then at the least I'm calmer and my initial ideas have had time to settle in my subconscious, begin sorting themselves out
- I don't like to re-invent the wheel unless I spend a lot of time thinking about wheels
I am generally in favor of re-inventing the wheel, but only if I know a lot about wheels and have spent weeks or years thinking about them. If I know little about them, or have no natural interest in the way they work, then I want an off-the-shelf solution. I don't passionately think about HTTP daemons, and know only enough about them to use them, so I'm not in a hurry to write my own the next time I need to develop a web service. However, I do think a lot about ETL, job processing, order management, and CMS systems, so I've built and re-built them many times in my life, even though there are hundreds of pre-existing wheels in each category
- I always look for an excuse to play with a new hammer
I'm afflicted with "To a man with a hammer"-itis, and I'm compulsively drawn to new tools and techniques. When something like SOA or LINQ or the grab-bag of toys included with each new release of .Net or iOS comes along I look for any opportunity to turn something into a new nail. I found I go through phases with any new technology: First I'm a zealot, then I disparage it, then I master it. Like a structured form of bipolar disorder with an end in sight. I might over-use a new tool in the beginning, then I'll get burned somehow and hate it, then a year later it's second nature
- I eschew pomp
Someone on Hacker News noted that many of my articles have no introductory paragraph and no conclusion either. It's simple: I hate writing them and I hate reading them. If you click to an article titled the "N ways to get laid tonight" you'd scroll past the fluff until you started seeing numbered, boldfaced headings with actionable advice. And others feel the same: on Reddit someone proposed a law where you can safely fast-forward past the first 30 seconds of any YouTube video and get to the interesting part right away. Now put your hand up if you never bother reading the introductions in Mad Magazine and go straight to the cartoon.
Likewise, I hate pomp and ceremony in programming. I resist introducing more than one layer of abstraction in my programs because it engenders an electronic bureaucracy. I cringe when the client asks for a splash-screen or a Flash intro. I write APIs that require the fewest ceremonial gyrations to start using. I like languages where you can write Hello World in 3 lines or less. I will never break out a large function by writing DoSetup(), DoWork(), DoCleanup() methods--they'll either take arguments and return values, or I won't write them; I'd rather have an oversized method than one that trolls the maintenance programmer with re-directions to "bucket" methods. I used to write XML schemas that were bloated with lots of little container elements, like a Eukaryotic cell with a dozen nuclei wrapped in their own specialized lipid bilayers. Now I create schemas with an almost prokaryotic dispersal of the DNA
- I'm a compulsive reader and researcher
I like to read articles about programming, hacking, business, math, science, history, psychology, writing, the topic-list goes on-and-on. I frequent Hacker News, Reddit, CNN, BBC News. I subscribe to Now I Know and Nature, I watch TED talks, I wake up in the middle of the night and fumble with an iPad to load Amazon and order The Making of a Fly because I just realized I can't explain how the maternal effect works, or Jared Diamond's Collapse because I want to know why the Norse Greenland colony failed. Now when I run into an interesting design problem I might find that I remember reading about Bloom Filters, or Spolsky's experiment with open-plan offices, or Fred Brooks's quest to build a beach house. Something always pops up, even if it has nothing to do with development, because it tends to give me a starting point
Habits I Wish I Had
- Programming for fun
I program at home, but it's usually for something I need, not something for fun. I'm not interested in Project Euler, I don't write Sudoku solvers for the thrill of it, I rarely pick up a new language just for the heck of it. Yet this habit is the leading indicator of a great programmer, and being without the same impulse makes me wonder if I'm missing the programming equivalent of a sex drive. The odd thing is that, as evidenced by my passion to try new tools, I should be interested in programming for fun, but when I try new tools I only do it to work on a problem I'm paid to solve. I love programming and solving problems at work, but at home I just want to read, chill, and solve problems in my head only
I give up too easily. Not always when debugging, but often when learning something complex. It's what's kept me from developing a truly deep understanding of mathematics, it's what leads me to abandon learning a new language if I don't need to know it, or can't use it right away. I know I'll only learn F# or Haskell or Erlang when I'm required to write or maintain a program written in one. Instead, I pick up what I know in spastic, serendipitous lurches. I have an abandoned Arduino project in my drawer, and $200 worth of parts in a Sparkfun box sitting in a closet. I only know as much about microbiology as I do because I volunteered to teach it (while drunk, usually), and thereby created a motivation and a deadline. I might never write that novel, or found that startup
I can drag myself to the gym twice a week, compel myself to go three times, and in short-lived spurts of enthusiasm start going four or more times a week. Running is a nootropic: it spurs neurogenesis, cleans out the pipes and makes the heart stronger, and you never realize how important those are until you've got the 2pm Slump and a task due by 4. Will knocking back 5-hour energy drinks substitute? Can I bump myself up to four fish-oil and garlic pills a day to stave off that impending heart-attack? And when will I start eating Cheerios for breakfast instead of stopping by the deli for an egg-and-bacon sandwich every morning?
Some of what I'm calling "habits" for simplicity are actually innate personality traits, of which introversion fit into along with the rest of my INTJ Myers-Briggs type. If you remember the plot line in the new Battlestar Galactica where there are only 13 models of Cylon, it's a subtle commentary on the pigeonholes that humans have fit into forever. There are only 3 basic physical models (endomorph, ectomorph, mesomorph), and 16 personality types on top of those. I'll bet fifty bucks that a statistical breakdown of humanity will give you 13 basic models of human being, with the rest members of an insignificant minority.
Being an introvert keeps me away from the gatherings that would expose me to new ideas and contacts, all of which would help me in my work. So I can speak in public (booze helps), and can mingle at a party (booze helps), and can chat up a girl (helps if she's had booze), and deliver a good interview on either side (booze would help, if I dared), yet I've no inclination.
Stereotype programmers are introverts, but the most successful programmers are extroverts, simply because programming is less about what you can do but how you sell it as a person
Habits I Managed To Control
- Passive aggression
One day, at my first full-time job, a friend and a manager pulled me aside and said that my problem was being too passive aggressive. I had to go and look that up (pre-Google/Wikipedia days), and I realized he was right and I had a real personality problem. If I didn't want to do something it was "too difficult" or I didn't have the right tools or resources, or I'm just too swamped with oh-so-much work, or look how badly it failed the last time. It led to some moments that I'm now ashamed of.
There's no magic cure for passive aggression, you just have to realize it's something you do and will require vigilance to keep a lid on. Fortunately, it's easy to hear the "I can't" answer getting ready to leave your lips and change it to "okay, lets give it a shot." Most of the time I can catch myself about to slip into old habits
Procrastination goes hand-in-hand with Passive aggression, and passive aggression is a normal way to deal with procrastination when you get caught on it. Not my fault the job's not done, it's because I'm still trying to figure out how to use WinDbg. Although I still procrastinate with the best of them at home (still gotta clean the cat litter box), at work I look for ways to trap myself into getting things done immediately. This can mean something as simple as standing up and saying, "lets go to the QA lab and reproduce this bug now."
Nothing is as hard as it seems