Last week, I was just viewing this amazing interview by Kevin Rose of Phillip Rosedale, of Second Life.

And they had an amazing discussion about how to find, hire and identify good programmer's, and how hard it is to find good ones.

Which has lead me to really think about the way we programmer's learn, are taught. For a majority of us, myself included, we are self-taught. Which is great about being a programmer, anyone can learn and develop skills.

But this also means, that there is no real standards of what a good programmer is/are, and what kind of environment's encourage the growth of programming skills.

This isn't so much a question, but just a desire in me, to see how we can change the culture of programming, and the manager's of programming, so that education and self-improvement is encouraged.

There are a lot of avenue's for continued education, youtube videos, books, conferences, but because of the experiental nature of what we do, it isn't always clear what's important to learn and to master.

Let's look at the The Joel 12 Steps.

The Joel Test

Do you use source control?

Can you make a build in one step?

Do you make daily builds?

Do you have a bug database?

Do you fix bugs before writing new code?

Do you have an up-to-date schedule?

Do you have a spec?

Do programmers have quiet working conditions?

Do you use the best tools money can buy?

Do you have testers?

Do new candidates write code during their interview?

Do you do hallway usability testing?

I think all of these have important value, but because of something I call the Experiential Gap, if a programmer or manager has never experienced any of the negative consequences for not having done items on the list, they will never see the need to do any of them.

The Experiental Gap, is my basic theory, that each of us has different jobs and different experiences. So for some of us, that have always worked with dozens of programmer's, source control is a must have. But for people who have always been the only programmer, they can not imagine the need for source control.

And it's because of this major flaw in how we learn, that we evaluate people by what best practices they do or not do, and the reason for either can start a flame war.

We always evaluate people in our field by what they do, and think "Oh if this guy/gal isn't doing xyz best practice, he/she can't be a good programmer, so let's not waste time or energy talking to them."

This is exactly why we have so many programming flame wars, that it becomes, because of the Experiental Gap, we can't imagine people not having made the decisions that we have had to made.

So this has lead me to think, that we totally need to rethink how we train, educate and manage programmer's.

For example, what percentage of you have had encouragement by your manager's to go to conferences, and even have them pay for it?

For me, and a lot of people, this is extremely rare, a lot of us would love to go to conferences, to learn more, but the money ain't there to do that.

So the point of this question is really to spark a lot of how can we train, learn and manage better?

How can we create a new culture of learning that doesn't insult people for not having the same job experiences.

Yes we all have jobs and work to do, but our ability to do our jobs well, depends on our desire, interest and support in improving our mastery of our skills.

Right now, I see our culture being rather disorganized, we support the elite, but those tons of us that want to get better, just don't have enough support to learn and improve ourselves.

I mean, do we as an industry, want to be perceived as just replaceable cogs?

Thank you...

  • +1: I think it was Carl Franklin of .NET Rocks who once noted that the programming industry "sucks at apprenticeships". I hope I've correctly attributed this quote; but I, for one, totally agree with this sentiment. I don't really know how entry-level candidates work their way up the ranks these days.
    – Jim G.
    Commented Mar 20, 2011 at 18:33
  • Thanks for the great comments. But part of my goals, is to help waken the giants of our industry that we need better education mechanisms, and I just don't think conferences and colleges are enough. Not sure what the right answer is though.
    – crosenblum
    Commented Mar 20, 2011 at 20:45
  • My goal isn't to push specific framework or methodologies, my goal is to push more education and make sure programmer's get support.
    – crosenblum
    Commented Mar 20, 2011 at 20:48
  • Anyone can try to learn and develop the skills, most do not have the required attributes; but do it anyway, to our industries cost.
    – Orbling
    Commented Mar 20, 2011 at 23:41
  • Do you have a link to the interview? youtube.com/watch?v=irF-V9RUuXo this one? Commented Jun 1, 2011 at 17:33

3 Answers 3


Wow, great question to think about, hard to answer. Because we all have different experiences and desires it's hard to come up with a one size fits all solution. But I'll throw out some opinions I've had over the years on this same topic.

1) Stop seeing job hopping as bad and encourage it. Change companies every few years. The programmer gets exposed to a lot of different technologies, methodologies and businesses in the course of their career. Businesses get a steady flow of new ideas.

2) Stop seeing yourself as a programmer at company X and see yourself as a professional providing a service to company X. If you think like a professional you'll be treated like a professional. If we're seen as replaceable cogs, it's because we act like replaceable cogs.

3) Universities need to change. They should have an initial 2 year period of basic education in computers followed by a choice. Computer Science or Computer Engineering. And the engineering track needs professionals who work in the field every day, not someone who just writes papers. And what's taught needs to be practical, so you can hit the ground running the day after graduation. Maybe have an apprenticeship program for those who don't go through a degree program.

4) Edit: This was a little rant-ish. What I meant was that all of us have a lot to learn from each other regardless of age and experience.

5) Somewhat related to point 2. Stop seeing your employer as responsible for your career. You are. And only you. If you want to go to a conference pay for it yourself if your company won't. Put money aside each year specifically for books and training and professional development. If you wait on your employer to send you to training, you'll be waiting a long time. Time spent watching your skills become irrelevant. Not making enough to afford that? Change jobs.

6) We need to be honest with ourselves and with our fellow programmers. Programming is hard. Very hard. I still see advertising for computer training with riches guaranteed upon graduation. That brings a lot of people into the field who are simply not qualified or worse have no real interest beyond the money. We need to find a way to encourage them to rethink their career plans.

At this point I think my head is about to explode, so I'll conclude.

Great question! I'm very much looking forward to reading more responses.

  • 3
    +1 for points 2 and most of 5. It's a revelatory moment when you realize that your employer needs you more than you need them.
    – Carl Norum
    Commented Mar 20, 2011 at 18:23
  • @Carl, that truly is a great feeling.
    – msvb60
    Commented Mar 20, 2011 at 19:02
  • +1 for the great question remarks. Totally agree. I also agree totally with points 2 and 3.
    – KeesDijk
    Commented Mar 20, 2011 at 19:14
  • I do not see the trend toward commoditization reversing any time in the near future. The trend in most corporate software shops is toward hyperspecialization of roles (a.k.a. pigeonholing). Commented Mar 20, 2011 at 19:55
  • 1
    But the economy can push us to be in jobs, where we don't have as much freedom or choice.
    – crosenblum
    Commented Mar 20, 2011 at 20:49

I don't think it's disorganized solely as a result of lack of teaching. I think it's actually reflective that "best practices" will differ from job to job. The "best practices" are always going to be based within particular context.

There does happen to be alot of cross over for some of the most common areas of work ie. web development. However, I think is a fallacy to believe that just because it's good to engage in a particular practice in most jobs it should be used in all jobs.

The practices you engage should stem from an analysis and experimentation of what makes you work better. They should not be chosen through blind belief. Just because something is echoed often on the net does not make it a truth in your situation, nor a Truth (for all situations).


Great question to exercise the mind, I agree something needs to be done, but I think impossible to answer. My try:

First Don't kill creativity in general I have to say that I agree with Sir Ken Robinson, watch this great TED talk. Our educational system is killing creativity and that has to be amended. Especially for programmers.

Second Teach like patterns our professional field isn't mature enough. We have a lot of different things that we think are the way to go but we can't really agree on them. (think TDD,BDD, Agile vs Waterfall, the amount of documentation needed, Java or .Net) In my mind this is due to discussing without context and to much specialisation. You can't make the right choice without knowing in what context the question is asked and you can't make the right choice if you only know one option. When you bring this back to education it seems impossible to solve. You can't expect somebody to know all possible contexts and all possible solutions. But with patterns they now some general solutions and the contexts the apply and contexts when the solutions breaks down. IMHO this is the way we need to teach, general solutions within a context and descriptions of when the solution doesn't work.

Third put disclaimers on examples I think there is a problem with the examples we show on MSDN, on Blogs, in books etc. Examples are often dumbed down to get the point across that the writer is trying to make. But in the most basic examples there are already decisions on many levels. These examples teach all these other decisions wrong. I think every example needs to come with a disclaimer telling what the point is and what you shouldn't do in general. A great example of this was blogged today here.

Last Do Do Do I think there needs to be more doing. I have learned to most just doing, failing, fixing and discussing.

Not the answer you're looking for? Browse other questions tagged or ask your own question.