Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

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...

share|improve this question

closed as too broad by gnat, MichaelT, Robert Harvey, GlenH7, Kilian Foth Dec 4 '13 at 15:40

There are either too many possible answers, or good answers would be too long for this format. Please add details to narrow the answer set or to isolate an issue that can be answered in a few paragraphs.If this question can be reworded to fit the rules in the help center, please edit the question.

    
+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. Mar 20 '11 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 Mar 20 '11 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 Mar 20 '11 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 Mar 20 '11 at 23:41
    
Do you have a link to the interview? youtube.com/watch?v=irF-V9RUuXo this one? –  lukas Jun 1 '11 at 17:33

3 Answers 3

up vote 11 down vote accepted

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.

share|improve this answer
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 Mar 20 '11 at 18:23
    
@Carl, that truly is a great feeling. –  msvb60 Mar 20 '11 at 19:02
    
+1 for the great question remarks. Totally agree. I also agree totally with points 2 and 3. –  KeesDijk Mar 20 '11 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). –  bit-twiddler Mar 20 '11 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 Mar 20 '11 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).

share|improve this answer

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.

share|improve this answer

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