(This is a snapshot of my old weblog. New posts and selected republished essays can be found at raganwald.com.)

Sunday, April 27, 2008
  The single most important thing you must do to improve your programming career

Yes, I said improve your programming career, not your programming prowess. And by career, I mean all of it in any form, whether your career is working for BigCo, launching a start up, consulting, whatever.

Let’s assume you’re already as smart as Steve Wozniak, the über-engineer. Do you want to hack part-time for the rest of your life or do you want to change the world? To change the world, you must create the new, but you must also show people why it matters. And that’s why…

The single most important thing you must do to improve your programming career is improve your ability to communicate.

To program, you must elicit ideas from other people and share your ideas with them. Sharing ideas comes in many forms: explaining how you did something. Suggesting a new practice for the team. Demonstrating how something works. Convincing everyone to switch programming languages. Persuading a brilliant engineer to join your team. Persuading your manager to get out of the way and let you do your thing.

Advancing your career is entirely about communicating. Getting a job. Turning down a job. Asking for a promotion. Turning down a promotion. Getting onto a good team. Politely extricating yourself from a good team. Persuading a brilliant engineer to co-found a company. Helping a brilliant engineer understand why co-founding a company isn’t the right thing to do. Asking for funding. Turning down funding. Getting clients. Turning down clients.

It’s all communication. Now you know, I have a background in Sales and Marketing. So I worry that I am holding a Golden Hammer and suggesting to you that your career is all about nailing things. But here is the short and obvious truth: Human beings are all about physical communication. It’s a huge, huge part of what makes us human, this talking and listening jibber-jabbering thing.

Frankly, there is no substitute for actual speech with visible body language. We do not react to the written word the same way that we react to a speech where we can see the speaker. So let’s skip right past learning to write well. It’s phenomenally important, but learning to speak well trumps everything. At Mobile Commons we talk about technical things all the time, and the remote members of the team switch out of Campfire into iChat or Skype to hear each other’s voices and see each other’s faces at least once a day.

If you take just one thing from this post, let it be this: To improve your programming career, the single most important thing you must do is improve your ability to communicate your ideas face to face.

What to do right now

Would you like to improve? I have deliberately avoided suggesting what specifically you might want to improve: My Latin teacher said we crave the three Ps: Power, Prestige, and Pecuniam. But the nuänces of aspiration are many. You have ideas you want us to understand. You have people you want to associate with. You have things you want to build and you need to harness other people’s efforts to build them.

Here is what to do today to shorten the line between where you are and where you need to be: Volunteer to give a presentation that you can entirely control, and invest the time and effort to do the best possible job.

Improving your ability to present takes practice. But it also takes study. Start with Presentation Zen. Presentation Zen is not about how to make slides. It’s about how to think deeply about your ideas and how to transform them into a presentation.

And that’s why it matters: Thinking deeply about your ideas from a new perspective engages your brain and makes you smarter.

Now, you may already be giving presentations. Maybe it’s part of your job already. But I am still recommending you add one to your workload, one that you entirely control. This is crucial: if you don’t control the subject, the content, the audience, everything, it may not be the very best way for you to improve.

I recommend you find a venue that is begging for presentations—local programming users groups are ideal—and sign up to give a talk. Pick a topic. If you don’t have a burning desire to shout something across the roof tops, you can always fall back on giving an “Experience Report.” That’s where you discuss something you did or tried to do and how it worked out.

Or go with one of the ideas I suggested for blog posts: “What I learned from Language X that makes me a better programmer when I use Language Y,” “Something surprising that you probably wouldn’t guess about Language X from reading blog posts,” or “My personal transformation about Idea X.”

By the way: If you already have a certain degree of comfort with presenting to an audience and you really want to ignite your career, try doing a “Fish out of Water” presentation: Present to a group with whom you have very little in common. For example, give a presentation about how to work with programmers to a business networking breakfast club. Learning to present ideas to people who are not just like you will make you a superstar.

Here is what to do today to shorten the line between where you are and where you need to be: Volunteer to give a presentation that you can entirely control, and invest the time and effort to do the best possible job.

Now put together a presentation deck1 for your talk. Do not give a talk without a deck, you will lose valuable experience giving presentations and this is about your experience. Furthermore, presentations are tougher than speeches because the presentation medium gives you many, many opportunities to screw it up (like having what you say and what’s on the screen be the same thing).

Then give the talk. And then give another one. And keep going. And never stop, because presenting well is a skill that helps you from where you are now right up to when you are presenting the numbers to the Board of Directors or presenting a new product to a hall full of cheering customers or, or, or anything and everything.

See you there!

  1. That would be a “deck of slides.” Nowadays it’s a keynote, open office, or that-other-thing file, but once upon a time it was a set of 35mm transparencies you would load into a carousel.

    Stacked up, they looked a little like a deck of cards, thus the nickname “deck.” You can probably find one (and someone old enough to remember when they were called decks) in a museum somewhere.


Comments on “The single most important thing you must do to improve your programming career:
I could not agree more.
Communicating to Who?

I know some coders who over the years have nearly perfected the art of explaining complex things so that others can understand. Some of these coders aren't doing very well.

I know some managers who absolutely make a hash of asking their subordinates to get something done and some of these managers do very well.

I know some hardware and software engineers who cooperate in an ideal fashion with their peers, but some of these people get passed over time and time again.

The communication that gets you where you want to go is communication with your superiors. Your boss, potential investors, and so on.

That's why PRESENTING is so important. If I'd known this earlier I'd be a rich man.

If you've got the kind of personality that gets tongue-tied whenever your near somebody who has the power to fire you, you've got a problem. No matter how well you communicate with others. No matter how literate your blog and no matter how strong your coding chops are.
"For example, give a presentation about how to work with programmers to a business networking breakfast club."

I /really/ like that. I'm going to add that to my list of things to do later in the year. Something I haven't thought about but probably should have. =)

Thanks for the excellent idea.
That's annoying. I didn't realize using my open ID would not put my name. Sorry for that.

Sammy Larbi

PS: These captchas from blogger are really hard. This is my 5th attempt.
What is a "presentation deck"? I give a lot of talks and have had some success with selling people on ideas. But I generally just go up with a page of outlined points I want to hit.
Following up with your "Woz" mention, I believe sometimes you just have to admit that you can't communicate. I'm not disagreeing with the premise of your post - I think you are spot on from a career perspective. However, not every engineer is going to be put in the position where they will be required (determining success or failure of the project) to "translate" the lingo or "express" the ideas. Think Jobs supporting Wozniak.

Again, I agree with you "communication" is more oft than not a discriminator. But, don't you think sometimes it is best that this happen?

You make a good point, however I am reminded of an excellent scene from the movie All That Jazz:

Victoria: Well, you're right. I'm terrible. I know I'm terrible. I look at the mirror and I'm ashamed. Maybe I should quit. I just can't seem to do anything right.

Joe Gideon: Listen. I can't make you a great dancer. I don't even know if I can make you a good dancer. But, if you keep trying and don't quit, I know I can make you a better dancer. I'd like very much to do that. Stay?

Victoria: Are you going to keep yelling at me?

Joe Gideon: Probably.
I love the concept of a 'Lunch and Learn' at the workplace

It's a *fantastic* head-fake: under the guise of teaching other people at your company (which no manager is going to object to), you are doing three very important things for yourself

1. Showing yourself to be a self-starter, smart person, etc in your organization

2. Put yourself onto a speaker list. Most people don't get invited to speak at events conferences, so you can create your own! Easy!

3. Most importantly, you get to practice writing, speaking, presenting, controlling a room, fielding questions, etc.

I recommend doing both technical talks for other programmers ("How I Got our Rails App Running on the JVM Over the Weeekend") and for business people ("What is an API and Why We Should Have One?" or "We Just *Give* Away Our Code? How is that OK?!")

You will learn a tremendous amount from each type of talk.
Are people really supposed to take you seriously when you tell people that they need to communicate better and then you throw out a word like "Pecuniarum" without further explanation?

Are people really supposed to take you seriously when you tell people that they need to communicate better and then you throw out a word like "Pecuniarum" without further explanation?

That reminds me of a joke. A fellow applies for a job as a policeman in the capital of a despotic country. The interview goes well and the Police Chief tells our man he can start on Monday. Does he have any questions?

The applicant wonders about the pay. The chief laughs: “We give you a Car, a Uniform, and a Gun. Any more questions?”

Now yes, I threw out the word “Pecuniarum.” Presumably you are reading this in a web browser on a computer with almost instant access to web search, dictionaries, thesauri, and all manner of tools for figuring out what a word means. Any questions?

The post doesn't go quite far enough. In order to really improve as a communicator, you don't just need to practise presenting - you also need a supportive audience (or a subset of your audience) who can coach you on what to do and how to improve. For example, a developer who works for me has been requesting coaching comments from everyone who reads his emails and listens to his presentations for several years. As a result he has significantly improved his spelling, grammar, and public speaking skills, and he is now managing a team.

The Lunch and Learn suggested above (at youDevise we call them "brown bags") is a good place to get free coaching, especially if you ask a friendly colleague to comment on your presentation afterwards.

Writing blog entries regularly and getting feedback (even just from a few friends) can also be very helpful.
Nice post. I've found Toastmasters very helpful for developing presentation skills -- there's many things to watch for (Speak too fast? Say um/ah/err too much? Forget to use anecdotes to keep people's attention?).

Blogging helps improve your writing. A nice tip is to look at the comments for your posts on delicious/stumbleupon and see what people have said (to themselves) about what you wrote. You get a feel for what's working and interesting for people (examples, diagrams, sample code, etc.).
It's true what you say about communication being important, but your description of communication is entirely one-sided. You mention up front that it involves eliciting ideas, but then every single example you list is about expressing rather than listening.

Even many of the comments reflect this one-sided idea. ("Communicating *to* Who?" - emph mine).

*Communication* is not a one-way street, people.

What programmers (and most human beings, in general) need to learn is how to really listen and understand people. Close your mouth. Put your big ideas away for a moment. Stop "explaining" things for long enough to register that there's a human being on the other end.

Listen and understand first, and that will teach you not only how to say things, but what to say.

You can be a textbook perfect *presenter* and still flop because you don't understand what people want to see, hear, or learn about. You can have flawless delivery and still not win with a proposal that hits a wrong note.

Understand humans will teach you what to build, too. And how to treat people, patch your own (and others' suck), and more.

The best way to succeed in life is to become a student of human nature.

I'm really torn about responding to your comment. Yes, it's true that communication is not about pushing ideas. In fact, were I to write a blog post about "The single most important thing you must do to improve your communication" it would be about listening.

So, kudos for pointing out the importance of listening and learning.

That being said, no blog post can ever touch all of any subject, so each must either try to provide a 50,000 foot overview of something or provide more detail at the expense of being an incomplete treatment.

In this cae, I chose to discuss presentation with a deck, a very, very tiny subset of all communication. True, I left listening out. I also omitted writing blog posts, gathering requirements, asking critical questions, managing meetings, and many other topics that can safely be lumped under communication.

I trust readers like you to understand that you cannot just go through your career giving presentations and expect to be happy. I also continue to stress that my style of writing is to state P if Q and trust that everyone grasps that I am not claiming P iff Q or Q if P.
The best advice I got about how to improve presentation skill is practice all the time you can.
You don't need even a "formal" setting: get together with some friends and present your ideas to them... if you can keep them interested and engaged in your talk, you will succeed in other environments. Is easier to hide behind a PowerPoint presentation in a semi dark room full of anonymous faces than convey your ideas to a small group that are actually listening... forget the formalisms, speak your mind, tell us WHY we should listen!
In my case, I found Carnegie's "The Quick and Easy Way to Effective Speaking." very useful... a true timeless classic on public speaking.
Hmmm... I wonder how similar are the techniques used in public speaking to blogging?
Hi Reginald,

Trust me, I understand the problem of limited scope :)

I was just sad because I know how many people are coming here from reddit/digg (people who, as evinced by the comments on those sites, really do not have a good communication ethic) and coming away with the idea that "communication" - your first topic - equates to presenting.

I know lots of nerds who go through life that way. (Lots of people, period, but especially seems to be a geek/ego thing.) After a certain point of social evolution, they care about how they come off... but it's "me-centric" as Seth Godin's blog post of today points out.

But your article didn't start off with "the most important thing to learn is presenting," it said *communicating*, which is why I felt the need to chime in about listening.

And when I say "listening" I mean more than just going "This is my idea" and then hearing what people have to say.

Nevertheless, as a frequent conf attendee, I would love for programmers to become better presenters... (please!!!). :)

This very morning, I was thinking about future a post titled "How much do you pour?" which is/will be provoked by your comment.

Thanks for taking the time to suggest a fruitful place to take "improving our communication skills."
I'm sad to see Raganwald going down this stupid route - many other bloggers did but I always thought Rag is smarter than most.

Rag, see, we don't want to improve our careers, exactly because an improved career would mean more communication and less code. And we became programmers exactly because we wanted to be spared of that "Hey, how are you, is everything fine?" kind noise most biped animals call "communication", and rather talk to a computer which does not expect any more information than it actually needs to do it's job.

If anything, it's the other way around. Talk as little as possible, reply to requests as "yes" and "done" and nothing more, and people will leave you alone. Now that's a good advice to a programmer.

I didn’t say you must improve your career. if you are happy doing what you do the way you do it, I say don’t mess with a winning formula.

I believe you could be speaking for yourself and some other people when you say you would rather talk to a computer which does not expect any more information than it actually needs to do it’s job.

But I do not believe this characterizes everyone. For example, I am not interested in computers for themselves, I am interested in them because understanding the interface between computers and humans is a very interesting way to understand humans.

The study of communciation between humans has a similar effect, in that learning how to listen and ask questions and structure your thoughts into a presentation all require learning what makes the human brain tick.

Which is incredibly interesting to some people, even if it doesn’t float your boat right now.

But you know… it’s still important to acknowledge that we are all different, and some of us loathe the idea of standing up in front of a crowd (I practically wet my pants before speaking in public).

So thank you for taking a moment to share your view.
OK. I agree. To be honest, I was a bit careless in reading your post: I missed that "if", because I've read too many other blogs where that "if" is a "should".

The human mind is indeed interesting whenever information about it condensed into high signal-to-noise ratio packages: your blog, or articles on Wikipedia about psychology etc. It's the low signal-to-noise ratio of most day to day verbal communication is what's tiresome.

Actually communication skills come in different kinds and perhaps it's again my mistake that I thought you mean the skill or willingness to chat, to network, to go to pubs with people etc. - this is what I think is unbearable for many prorammers.

The more professional kind, presentations etc. are OK I think but I wonder why does it worth a post as these things are easy to do, aren't they? I've always found them easy. I mean long as the slides itself are interesting you can say whatever you want, and creating interesting slides isn't hard.
Never give a presentation without Powerpoint (or similar) slides???

That strikes me as very bad advice. Take a look at this, and note the links at the end (copy and paste the URL into your browser):

I take a lot away from your article and the comments.

The foremost value in this, seems to not have as much to do with talking->presenting->listening->networking as it does to initiating communication. And doing so at a higher level than a casual conversation or SCRUM meeting.

Take it upon yourself (initiate) to deliver your ideas to a significant audience (present) to gain feedback and personal growth.

I might add that this is a good way to improve a career, whether it is goal oriented as to financial gain OR intrinsic satisfaction of improved production and accomplishment.

Thanks for the thoughts. I will be looking for opportunities to speak at our local .Net SQL talks and other geek and greets.

Verbal (& especially non-verbal) communication is probably the craziest programming language there is, because the interpreter programs you right back. Also one of the more rewarding ones to learn. You know the "learning language Y exploded my mind when I went back to language X" effect? That's especially true when language Y is "Human."
(An addendum)

It just occurred to me this blog is (was) largely about metaprogramming:

Consider human communication to be an infinitely self-recursive metaprogramming language. (If you don't see how this is, ask someone ;)

How could you NOT want to get good at it?

<< Home
Reg Braithwaite

Recent Writing
Homoiconic Technical Writing / raganwald.posterous.com

What I‘ve Learned From Failure / Kestrels, Quirky Birds, and Hopeless Egocentricity

rewrite_rails / andand / unfold.rb / string_to_proc.rb / dsl_and_let.rb / comprehension.rb / lazy_lists.rb

IS-STRICTLY-EQUIVALENT-TO-A / Spaghetti-Western Coding / Golf is a good program spoiled / Programming conventions as signals / Not all functions should be object methods

The Not So Big Software Design / Writing programs for people to read / Why Why Functional Programming Matters Matters / But Y would I want to do a thing like this?

The single most important thing you must do to improve your programming career / The Naïve Approach to Hiring People / No Disrespect / Take control of your interview / Three tips for getting a job through a recruiter / My favourite interview question

Exception Handling in Software Development / What if powerful languages and idioms only work for small teams? / Bricks / Which theory fits the evidence? / Still failing, still learning / What I’ve learned from failure

The unary ampersand in Ruby / (1..100).inject(&:+) / The challenge of teaching yourself a programming language / The significance of the meta-circular interpreter / Block-Structured Javascript / Haskell, Ruby and Infinity / Closures and Higher-Order Functions

Why Apple is more expensive than Amazon / Why we are the biggest obstacles to our own growth / Is software the documentation of business process mistakes? / We have lost control of the apparatus / What I’ve Learned From Sales I, II, III

The Narcissism of Small Code Differences / Billy Martin’s Technique for Managing his Manager / Three stories about The Tao / Programming Language Stories / Why You Need a Degree to Work For BigCo

06/04 / 07/04 / 08/04 / 09/04 / 10/04 / 11/04 / 12/04 / 01/05 / 02/05 / 03/05 / 04/05 / 06/05 / 07/05 / 08/05 / 09/05 / 10/05 / 11/05 / 01/06 / 02/06 / 03/06 / 04/06 / 05/06 / 06/06 / 07/06 / 08/06 / 09/06 / 10/06 / 11/06 / 12/06 / 01/07 / 02/07 / 03/07 / 04/07 / 05/07 / 06/07 / 07/07 / 08/07 / 09/07 / 10/07 / 11/07 / 12/07 / 01/08 / 02/08 / 03/08 / 04/08 / 05/08 / 06/08 / 07/08 /