Why are some programmers so condescending?

Condescending feedback says more about the speaker than the listener. It is almost invariably about their own insecurity. This is true is almost all fields of endeavor, not just programming.
Just a few examples of my own:

Insecure bridge player: The queen of spades was a stupid play. What’s wrong with you?

Excellent bridge player: The queen of spades would have been a great play against a 4/2 split. But since you had a 3/3 split, what do you think would have happened if you had played the ace instead?

Insecure public speaker: You look like an idiot playing with your hands like that.

Excellent public speaker: You talked about a lot of cool things. I bet I would have been even more interested if I wasn’t distracted so much by your hand gestures.

Insecure parent: If you can’t keep that baby quiet, you should just stay at home!

Excellent parent: Here’s something that has really worked well for me when my kids cried in public…

Insecure programmer: How lame. I can’t believe you .

Excellent programmer: I see that works. I have found a few ways to make it work even better.
Let me know what you think.

Do you need to “sprint” to get things done?

Whenever I read a post about the sprint to launch, I think 3 things:

1. Great determination, great work ethic, great job.
2. It doesn't have to be this way.
3. It shouldn't be this way.

I feel fortunate that my DNA is blessed with some sort of internal “governor”. I don’t know where it came from, but I’ve always had it. Here’s how it works: It stays out of the way when I am enthusiastic about something, allowing me work ridiculous hours and pursue almost anything that looks promising, whether it makes sense or not. But when I reach a certain point, it turns me off, completely. I don’t seem to have conscious judgement of what that point is or when I reach it, but when it happens, I know.

A few examples:

- I have worked many times without sleep, preparing for a launch. Sometimes, I know my judgement is failing and continuing would cause more problems in the long run. So I stopped and apologize to everyone. I went to sleep and informed everyone that the project would resume at x. I’m not really sure exactly what happened, but I know I had little control over the governor.

- I had 2,500 invoices spread across the carpet, looking for a clue about a bug. After 8 hours, everything was fuzzy. So I just gathered up the invoices, filed them away, and went to sleep. Three days later a lightbulb went off, I spread out 100 of the invoices, and found the problem in 15 minutes. I know that if I had continued that
night, I never would have found it.

- I worked 90 hours per week for 2 months for a big deployment. Without telling me, my co-founder spent all of our reserves travelling to a customer site to oversee the install. He emailed me every 20 minutes with a problem. Between being pissed off at him and exhausted from working on the wrong things, I realized the project was going nowhere and would never succeed. So I just stopped working completely. I went to bed and didn’t answer email for 4 days. I’m not proud of this, just one more story about my internal governor. I’m a little frustrated that I don’t have much control over my governor, but also a little relieved that it does it’s thing. After all, I’ve never really been burnt out, and I’m still going strong.

Thank you, governor.

The Introvert Factor

There’s one huge factor at work, for many programmers. I’m tempted to call it the “wimp factor”, but that’s too negative, so I’ll just call it the “introvert factor”. I’m a perfect example…

I was always small for my age and looked nerdy with my glasses and attraction to books, etc. I was always picked last for sports teams, drew little attention from girls, and was usually the first one to be bullied. It even happened in my own family, subconsciously I hope. It was always easier to pick on the little guy to get what
you want.

Fast forward to adulthood, and not much has changed, especially with bosses. It seems like my boss was always a sales/business guy, extroverted, and bigger than me. His/her natural reaction was to bully, probably because they knew they could get away with it. This was for almost everything: project management, discussions about work, and of course, money.

No more. I don’t know exactly when it happened, but I decided not to take it any more. The more anyone picked on me, the harder I shot back, right between the eyes. Nothing pisses me off more than being bullied, especially about money.

Are young programmers better?

I’ve been programming commercially for 32 years and in all that time, I have found very little correlation between age and ability to deliver quality software.

I have worked with younger, inexperienced, and uneducated programmers who were willing to learn, with minds like sponges and who were a pleasure to work with. They often found or thought of things the rest of us overlooked.

I have worked with younger, inexperienced, and well educated programmers who thought they knew better and were obstacles to progress.

I have worked with older programmers with the same one year’s experience 22 times. Oy.

I have worked with older programmers with excellent domain knowledge and limited technical range. Their personality and willingness to succeed were often the key to progress.

I have worked with older programmers with excellent technical range and limited domain knowledge. Sometimes it’s hard to teach an old dog new tricks, but when you can, results can be golden.

I have worked with brilliant older programmers with extensive experience and open minds. The best of all worlds.

(By the way, I have also worked with programmers of many ethnicities, female, handicapped, gay, Republican, religious, even left-handed, and have found little or no correlation between their “description” and their “performance”. One of the beauties of programming is that the easiest way to evaluate your performance is through your work itself and not much else.)

How much easier is it for an expert?

Layperson who’s never seen it: “Impossible”

Practitioner who’s becoming better: “Extremely difficult”

Expert: “We do this all the time. What’s the big deal?”

I have reviewed or maintained the code of thousands of other programmers, and I’ve encountered maybe a couple dozen I’d actually hire and about 5 I’d consider as technical co-founders. What’s the biggest difference? Until today, I wasn’t sure how to verbalize, but now, I think a good description would be those who think there’s a tradeoff between design and usability and those who know better…

As far as I’m concerned, there’s is a close correlation between good code and user experience. There’s a close correlation between readable code and maintainable code. There’s a close correlation between expertise and precision to detail “throughout”. And perhaps most of all, there’s a close correlation between something built properly to stand the test of time and “long term” user satisfaction.

If you want to learn a hobby, develop a passion, or really dig deep, by all means, just code it. Sometimes that’s simply the best way to understand what goes on under the hood and learn what’s possible once you learn the right way to build things. “Once you learn the right way to build things.”

But please leave your experiments on your own hard disk where they belong. You may have thought that those bleeding pixels were cool, but your name will be cursed by the poor souls who forever have to maintain your mess.

How does age affect programming?

Things I am worse at at 55 vs. 25: the 50 yard dash.

Things I am better at at 55 vs. 25: everything else.


Magic Johnson (great American basketball player) once described the difference of being a world class athlete at 30 vs. 20: you have to be a whole lot smarter about how you use your body and recover when competing with younger people.

We programmers on the other hand get the best of both worlds: the ability to work smarter against a physical and mental landscape that doesn’t degrade nearly as fast as a world class athlete.

Frankly, when it comes to work, I can’t think of a single thing I “used to do better”, not creativity, not work habits, not personal habits, not physical or mental toughness. 

I believe that programming, like running, is one of those things where the performance curve can remain flat until retirement, providing you take care of yourself. I’ll let you know if it does.

What do your parents think you do?

Dear Dad,

My customers are small business people (retailers, wholesales, doctors, lawyers, etc.) who own computers that have replaced their file cabinets and some of their clerical employees. Those computers came with lots of stuff in them but need more as their business changes or they discover stuff they forgot. I upgrade their computers with the stuff they need. We call that stuff “software”. They pay me. Well enough for me to buy you dinner Sunday night and take you to the Steeler’s game. What do you say?

Love, Eddie

Dear Mom,

I sit in an office writing all day long. I have a fridge and a microwave and occasionally go out to lunch with people down the hall. When it gets cold I wear the sweater you bought me last month. I love what I do. I write stuff, kinda like Stephen King or Danielle Steele, but business stuff, not fiction. My customers love what I write for them and they pay me well, so you never have to worry about me again. I showed Uncle Lenny what I was working on and he thought it was great. I’ll pick you up for lunch and a trip to the mall at noon on Saturday. See you then.

Love, Eddie

What got you “hooked”?

Nothing interesting about my first story: I got a boring cubicle job in a large enterprise that needed 12 programmers to do anything, blah, blah, blah. But I did do some good work for a vice president who remembered me when he moved to another company, which leads to my second story, my real story:

He brought me in to his new company to do a consulting job to answer 2 questions, “What do we have to do to get Order Entry, Shop Floor Control, and Standard Costing written and running?” and “How many programmers do I need to hire?”

They had 400 employees, were missing all of these mission critical apps, and had only one programmer. But he was all they ever needed. I worked with him for 3 months and he wrote all of the software needed using tools and techniques none of us had ever seen before.

He did instant analysis and design, wrote disposable apps, did rapid prototyping, stepwise refinement, and extreme programming years before anyone ever heard of these things. He never wrote the same line of code twice, writing standard functions and reusable components. If he knew he needed something twice, he wrote a parameter-driven code generator on the fly and had me collect the parameters for him. He even coded in Boolean algebra and had an engine that converted it into production source code. He threw things into production long before anyone else would, figuring it was easier to just keep reworking them instead of waiting until it was perfect.

He was a one man shop in a $150 million company. He was smart, he worked hard, he loved what he did, but most of all, he didn’t know that “it couldn’t be done”, so he just did it.

Three months watching Dick build stuff, and I was hooked for life. I had to do it, too. And I’ve been doing pretty much the same thing ever since, pausing only long enough to add a few new technologies to my tool box along the way.

Sometimes I wonder what horrible cubicle I’d be wasting away in if I hadn’t met Dick and saw what was really possible.

Why do we lose our passion?

“So why is it that as we grow up we lose all the passion, the energy, the will and the strength to keep our dreams alive.”

Because we lose so much energy in general.

Because we don’t take care of ourselves.

Anyone who has ever been to any Tony Robbins event knows that he always starts with health (eating right, exercising, and mental attitude) before addressing anything else. Because he already knows what many don’t: if you’re not feeling right, nothing else matters.

Almost all of us have ample energy in our teens and twenties. But as we get older, we have to make a conscious effort to maintain energy and vitality. Most people I know in their 30s, 40s, and 50s don’t do nearly enough. We slow down, put on weight, and lose energy. It happens so gradually that we barely notice. And we blame everything else: family, finances, lifestyle, etc. And we avoid acknowledging the elephant in the room: it’s awfully hard to get passionate about anything when we only have enough energy to plop down in front of
the TV with a bag of chips.

Most people I know with the energy to accomplish a lot, regardless of age, take care of themselves, especially those working 2 jobs or running a side business.

All of the other reasons (fear of failure, responsibilities, etc.) make sense, but I wonder how many people don’t follow their dreams simply because they’ve run out of energy by not taking good enough care of themselves.

How do I become addicted to programming?

I think that your first step in becoming “addicted to programming” is understanding what building stuff really is: intense sprints of orgasmic discovery separated by long periods of building the prerequisites. Once you understand which phase you’re in, you can better understand why you feel the way you do.

A perfect example was my project last week. I had to make 14 changes (including 3 major structural reworks) to an existing application to produce one additional output. This output was key for a fundamental shift in thinking about the use of the app.

My week was actually fairly predictable:

Monday was fun for a while, thinking about how it would work, what needed to be different, how the data has to be restructured, and how cool the new results would be. But things became drudgery when I had to lay everything out build my work plan.

Tuesday sucked, tearing apart code while trying to maintain an audit trail and balancing the new functionality with keep everything old still working.

By Wednesday, I didn’t even want to work on it and spent a lot on time on-line, playing games, and surfing the internet. I struggled getting the final pieces in place.

On Thursday, my interest piqued when regression testing went almost flawlessly. But no matter, even if it didn’t, being in “getting it to work now” mode always captures my attention.

Friday was bliss. I was cranking code, unit testing, regression testing, reworking, getting the results I foresaw on Monday, and doing a happy dance every 20 minutes or so. Time flew as I worked into the night getting all this cool stuff working. I wish every day could be like Friday, but I needed to pay my dues earlier in the week just to get to that point.

I wish I had an easy answer for collapsing the long hours of building the prerequisites and expanding the time spent “in the zone”. The only suggestion I can make is get to the point of having “something” for output as early as possible. That’s when the fun usually begins. Until you reach that point, just understand you’re in “courting” mode. Just keep on working and the digital orgasms will arrive. Once they do, it’ll be worth it. Don’t worry, you’ll be “addicted”.