Should I go into management?

As a former developer turned manager turned developer again, a few suggestions: 

1. “Never” lose your developer mindset. Personally, I have great difficulty respecting a non-technical manager of technicians. I bet I’m not the only one. 

2. Manage things. Get good at project management. Very good. A good plan, agreed upon, well built and administered, will always be your friend. Something for everyone to fall back on when things get hairy. 

3. Don’t “manage” people, lead them. Preferably by example. 

4. “Everyone” has problems. Now that you understand that, don’t let people’s problems interfere with their work or nothing will ever get done. 

5. Learn the difference between issues and details. Focus on the issues. Don’t waste too much time on the 

details. And get your team to do the same.

6. When all else fails, communicate. When all else goes well, still communicate. Never underestimate the power of communication. You’d be surprised how much slack others will cut you if you’re simply open and honest with them. 

7. Treat everyone else the way you’d like to be treated. (This goes for everyone, not just managers.) 

8. Listen at least as much as you talk. (This also goes for everyone, not just managers.) 

9. Get stuff done. And have fun doing it. 

10. Lighten up. You’ll be fine. 

Is programming hard work?

“”He is dead, too much hard living!”. Too much hard coding would be more like it.”

Wow, those ones and zeros must have really been heavy!

Every time I see landscapers, construction workers, farmers, nurses aides, or anyone in one of my customers’ factories or warehouses, I thank my lucky stars that I was born when I was, I had an aptitude and interest in programming, and I found the perfect career for me.

Sure I work hard, but my hard work is hardly the same as “their” hard work.

I’ve spent a career on my ass, building applications that hopefully make the lives of those who do physical work just a little easier.

My last career was a cook. After a 6 hour shift in a 110 degree kitchen serving 2,000 meals, a 12 hour stint in an air conditioned office in my Aeron chair seems like a vacation. Oh, and did I mention I earn more in a month than I did in a year as a cook?

I never expect my boss to thank me for anything. My boss (me) gives me the best bonus I could ever ask for. I get to do it all over again tomorrow.


Living in Two Worlds

Sometimes I think I’m living in two worlds, the customer world, where everyone is scrambling to get stuff done, and the startup world, where everyone is talking about what the customer world should be like. 

Don’t misunderstand me, though. I love the startup world. There is an underlying current of optimism that I rarely see in the customer world, where people are just too busy to see the possibilities if they hit them in the nose. Sometimes I have to grab my customers and yell, “Let’s slow down for 5 minutes and think about a better way to do this!” 

In the startup world, it’s often too easy to lose sight of the definition of success. Success is not starting a business, getting into an incubator, or securing funding. Success is satisfying paying customers over and over again. 

In the past 6 months, I’ve had 5 different customers ask me for the same thing. I described my approach to satisfying them to a startup investor acquaintance. He told me that no one would ever pay for it. Now I know I’m on to something. 

I like living in 2 worlds. It helps me maintain perspective. Sounds like it works that way for you too.

Office Pet Peeves

1. Don’t sit on my desk. I’m a programmer. My desk is also my dining table. 

2. If I’m eating at my desk, don’t touch my food. I’m so busy that I usually bring what I think I’ll need for the day. I didn’t factor in your needs too. Go to the vending machine. 

3. If you come to my desk and see my typing furiously and I don’t look up, that means I’m busy writing code. If the building’s not on fire, go away and send me an email. 

4. If you get upset in a discussion with someone else, don’t raise your voice, don’t yell profanities, and most of all, don’t slam the door or throw anything. That’s when I leave for the day. Some of us have had enough of that for one lifetime. 

5. If we’re talking in my office, face me and take your hand off the doorknob. If it’s important, I’m not going to rush through it because you’re in a hurry to get somewhere else. If it’s not important, then leave me alone. 

6. If we’re meeting, turn off your cellphone. If it vibrates, don’t look at it to see who it is. If I’m not the most important person at that moment, then I don’t want to meet with you. 

7. I’m always happy to discuss important matters, but I don’t do status meetings. If you want to know status, email me and I’ll reply. Otherwise, my status report would read, Nothing accomplished. Spent all day in status meetings. 

8. If there’s cake in the breakroom, have a piece, but leave your Tupperware in your car. This isn’t Cheesecake Factory. 

9. Don’t lie to me. Ever. If you tell me that Joe agreed with these mods, I can easily confirm that with Joe. If he says you never talked to him, I will never listen to anything you ever say again. 

10. If you had Mexican for lunch, cut the rest of us a break and use the restroom at the Shell station. 


Any other advantages to working at home?

- I impose discipline upon others. Since you can’t just poke your head in with an “idea”, you have to think about it first (imagine that). If your email doesn’t include enough data for me, I say so and hit “reply”. Same for phone calls and voice mails. Signal to noise ratio increases dramatically.

- My performance metric is WorkCompleted / WorkPlanned because that’s all people can witness. Not 101 other meaningless metrics like number of sessions running, time spent on internet, time spent BSing, time spent on cell phone, time spent at lunch, shirt color, or droplets of sweat on forehead.

- Wake up at xx:34 a.m. Start work at xx:37 a.m. (if I want to).

- Wake up in the middle of the night with an idea. Log in and work on it immediately.

- No meaningless team building, HR, or mandatory meetings.

- I eat what I want, when I want, where I want. No more vending machine or carryout crap.

- Headphones or speakers? Oh wait, never mind.

- Casual dress, gym shorts, or warmups. Again, never mind.

- Cats often make better companions than cubicle mates.

- I hate shaving.


Programming FAQ

What editor do you use? 

Textpad. 

How can I learn to program? 

Find a customer with unreasonable deadlines. Hit them. Repeat. It won’t be pretty, but you’ll be the kind of programmer I’d go into battle with: great at the things that really matter and mediocre at the things that don’t. 

Why do you advise plunging right into a programming project instead of carefully planning it first? 

It’s incredibly difficult for anyone to define what they want when they start with nothing. It’s human nature (incredibly easy) to criticize what you have and how to make it better. Plunging right in and producing anything raises you from LevelIncrediblyDifficlut to LevelHumanNature. 

Why do you keep going on about PICK? 

I have a very small back pocket that holds everything you need to program in PICK. Whatever you can do in technology , I can probably do in PICK, often quicker and easier. 

Isn’t object-oriented programming naturally suited to some problems? 

Sure, but that doesn’t necessarily mean you have to use formal object-oriented technology. You can mimic the concepts with almost any technology. 


Is becoming a lazy programmer evolving?

Show me any tool and I’ll show you a horrible use of that tool. That doesn’t make the tool horrible. 

ELSE statements don’t kill. Drunk programmers kill. 

This reminds me of something I once ran into: 


Junior Programmer:

if (m==1){Month="January")} 

if (m==2){Month="February")} 

if (m==3){Month="March")} 

if (m==4){Month="April")} 

if (m==5){Month="May")} 

if (m==6){Month="June")} 

if (m==7){Month="July")} 

if (m==8){Month="August")} 

if (m==9){Month="September")} 

if (m==10){Month="October")} 

if (m==11){Month="November")} 

if (m==12){Month="December")} 


Senior Programmer:

 switch(m) 

case 1:

Month = "January" 

break;

case 2: 

Month = "February" 

break; 

case 3: 

Month = "March" 

break;

case 4: 

Month = "April" 

break;

case 5: 

Month = "May" 

break;

case 6: 

Month = "June" 

break;

case 7: 

Month = "July" 

break;

case 8: 

Month = "August" 

break;

case 9: 

Month = "September" 

break;

case 10: 

Month = "October" 

break;

case 11: 

Month = "November" 

break;

case 12: 

Month = "December" 

break;

default: 

Month = "unknown" 


Lazy Programmer:

 MonthNames == ["","January","February","March",...] 

 Month = MonthNames[m] 


Taking an On-Line Aptitude Test

The entire test was about a fictitious language, I forget what they named it. Every question built upon the previous. 

The first question was something like, “These are the definitions of variables: A string is… An integer is… A date is…” Then the question would be something like, “What can ‘15232’ be? a. an integer b. a string c. a date d. any of the above e. a and c”. 

Another question might be “Here are the rules of precedence… What is (1 + 2) * (3 + 4) / 3 a. 4 b. 2 c. 7 d. 12 e. Can’t tell for sure.” 

It got more and more complex, all in their own pseudocode. They covered branching, iteration, arithmetic operations, Boolean algebra, etc. Things most people here have seen a million times. Kinda like SATs for programmers. 

How good are most job applicants?

I was recently contacted by a head hunter for a job I thought was worth investigating. I wanted to talk to the company directly, but the head hunter made it clear that Step 1 was always a web-based programming aptitude test, no matter who you were. 20 questions. 18 correct was considered passing. They would only talk to candidates who got 19 or 20 correct. 

So I took the test and got 20 correct (as I imagine many would as well). I thought it was very easy. The headhunter later told me that in 9 months, she had sent 52 people to the test, only 2 of us got 19, and I was the only one who got 20. 

I’m not really sure what this means. That there are a lot of posers out there? That she wasn’t very good at screening talent? That the companies seeking the best talent gladly pay $100 50 times to save their time? 

I guess my biggest feeling is one of disappointment. It’s just not that hard to become a good enough programmer to get 20 right every time. All it takes is study, passion, a lot of dedication, and a lot of hard work. I wish more people would do that. There aren’t enough of us. 

What have you learned from mentors?

The most important lesson my mentor ever taught me: 

We went to a client to work on Problem X. He quickly determined that solving Problem X would achieve nothing. Problem Y was the real problem, but was way outside our areas of expertise. 

So what did he do? He slept 4 hours a night for the next 2 weeks studying everything he could find about Problem Y. He reviewed reports, industry literature, called experts, and talked to as many people in the company who knew anything about that subject area. Within 2 weeks, he presented a brilliant solution that no one had ever considered but was instantly understandable by their experts. (That solution included work done by us and we had a great client relationship for years.)

Later, I asked him why he tried to accomplish something so difficult with such a seemingly tiny possibility of success. I’ll never forget his reply… 

“I didn’t know that I couldn’t do it, so I did it.”