the blog for developers

You’re a Bad Programmer, Really?

Jared Richardson wrote a post titled You’re a Bad Programmer. Embrace It.

How many developers think they’re good programmers? We’re not. We’re all fairly bad at what we do. We can’t remember all the methods our code needs to call, so we use autocompleting IDEs to remind us. And the languages we’ve spent years, in some cases decades, learning? We can’t even type the syntax properly, so we have compilers that check and correct it for us.

He argues in the post that we are all bad programmers, should embrace it and use tools to get things barely work this way. But is this really the case? Are we all bad programmers? From my experience there are good and bad programmers, and fewer good than bad ones. To claim all programmers are bad is stretching reality a lot though. There are good programmers everywhere. And they are not good because they use tools – I’d argue they are good and therefor use the right tools. I wrote more about good programmers in “As a Manager: What I value in developers”.

Beside the bold claim, the post is really thin on facts. One cited fact is the failure rate of software projects:

Don’t even get me started on the correctness of the logic in the code… I’m looking at a chart that shows failure rates for software projects. “Small” projects (about a year for 8 people) have a 46% success rate. That’s almost half. Any longer project just plummets down to a 2% rate for projects costing 10 million or more. In other words, our projects nearly always fail.

Following the logic, projects fail and therefor programmers are bad. Having worked in software development for over 15 years and developing software for nearly 30 years, my point of view is different. It’s not the fault of developers that projects fail. So this is not an argument for bad programmers. It’s the context and environment that make projects fail. Mostly project management in software development is done in a way no success can happen. Projects in our industry fail …

  1. Mostly due to wrong estimation – estimation done not by the person who does the work package but by the project manager. Work packages are too large so no proper estimation can happen. I’d argue any work package (WP) larger than 1 to 3 days can not be easily estimated.
  2. Mostly due to wrong status updates, like work packages which are 80% or 90% complete. This leads to a false sense of accomplishment and makes the project manager think he’s on track for a long time, until suddenly the project fails. Good project management only knows three states for work packages: Todo, In Progress, Done. Then project status is easily calculated: Number of done WP / Number of all WP.
  3. Mostly due to wrong way of change management. Features are added all the time leading to scope creep. What works: Replacing WPs that are no longer needed with ones that are hot.

You’ve guessed it, Scrum adresses all of these resulting in 99% – 100% on target delivery. So it’s not due to bad programmers if an agile process can fix this.

The claims in the post get bolder and broader:

In short, as an industry, we all stink.

When we stink as an industry, programmers are the smallest part in it. The only part where programmers constantly fail is with maintanence, writing code that can be read an rewritten months or years from now.

The only solution according to Jared is using tools:

Once you’ve embraced this bitter reality, you can start to move forward. Once you’ve admitted to yourself that you’re a bad programmer, you can stop all the silly posturing and pretending that you’re great, and you can look around and find the best possible tools to help you look smarter than you are.

There is no bitter reality. There are good programmers, not all are bad. Embracing that you’re a bad programmer is the wrong direction. I wasn’t a good programmer when I’ve started 30 years ago. I could copy what I’ve seen others type into machines, making them print “Hello World” and flashing colors with POKEing numbers into memory cells. Constant struggle and the acceptance of programming as a craft made me better. You should not embrace that you’re bad, you should strive to always become a better programmer and embrace becoming the best. Good programmers use tools, from my experience, unit testsm static analysis, continous integration, bad ones don’t – they do not see the need and benefits of tool usage. Good programmers demand the introduction of tools. The basic assumption that bad programmers should use tools to become better is the wrong way around, good programmers use tools.

Final Point

There are good and bad programmers. The good one are those who want to become better, are interested in their craft, the bad ones are those who do 9 to 5 jobs without any interest in their profession.

You can leave a Reply here. Of course, you should follow me on twitter here.

You can share this post!
Do you want to tell others about this article? Use the social bookmark icons to submit this artice to the service of your choice. Thanks.

About the author: Stephan Schmidt has more than 15 years of internet technology experience and 10 years experience in agile. He was head of development, consultant and CTO and is a speaker, author and blog writer. He specializes in organizing and optimizing software development helping companies by increasing productivity with lean software development and agile methodologies. Want to know more? All views are only his own.
Leave a reply.

Comments

“I’d argue any work package (WP) larger than 1 to 3 days can not be easily estimated.”

Well said, and your coverage of the management issues is to the point. Nice post.

@Shantanu: Thanks.

Couldn’t agree more with this post. Those 9-5 “day coders” are the ones who do not see programming as a craft that has to be mastered, but as a job that simply pays bills. The claims by the other post that you quote are simply outlandish.

Emerson

I think you got a bit too serious about his post.

Yours sound a bit like a whining child trying to defend itself :-)

I saw his post as a ironic thread to face the fact that programmers should not be to confident of their daily work and therefore it is required to have tools work side by side with them.

So more a post to “wachrüttlen” than to show the pure funless facts.

Det

“Good programmers use tools, [...] bad ones don’t – they do not see the need and benefits of tool usage. Good programmers demand the introduction of tools.”

+1 !

And then again there are companies who do not get that, and unwittingly restrict the introduction of tools, thus blocking even their good developers for some obscure reasons instead of bringing them to their highest productivity.

Great points Stephan. The referring post seems to have been written by someone with a very thin view of what programming is. Mike Cohn’s Agile Estimating and Planning, Software Craftmanship Manifesto, Extreme Programming Explained by Kent Beck, Lean Startup techniques and RethinkDB’s infamous “Will the real programmers please stand up?” (http://www.rethinkdb.com/blog/2010/06/will-the-real-programmers-please-stand-up/) are recommended reads for anyone who even dare to say or agree with such a bold statement.

@Daniel: I know the books but didn’t know the link, thanks.

zefi

Heh. That’s like saying all writers are bad because they need editors (human), proof-readers and spelling-checker.

[...] I’m picking on this guy, but he brings up two things that really irritates the living hell out of me about our industry. [...]

@Emerson: There is a difference between the Zen habit of being a beginner and the “Embrace you’re a bad programmer and there is no hope except some tools”.

This send the wrong signal to programmers.

The signal should be: Programming is a craft and you need to work to become better, but you can become a better programmer.

Oh Stephan, the “refering post” I mentioned was Jared Richardson’s. I am sorry it was unclear. I expected you to know/have read/twitted about the books/links. I just mentioned as added bonus arguments to the point you made.

@Daniel: :-)

just ignore the first 5 paragraphs of the mentioned article and also take a look at how it’s been tagged. these initial paragraphs are just to justify the screaming title.

i agree with both of you :) strive to be a better programmer and make sure to use the mentioned tools because we’re only human …

@Stefan: But the first 5 paragraphs and essentially the rest too send the wrong signal.

Joe

Really, you are pulling out Agile as an argument here? I think all the “good” programmers realized years ago that Agile was a scam.

@Joe: Sure? Which “all the good” programmers have you in mind?

dagarfol

That’s been a nice post. But I think you’ve missed the point. I understand that you want to “send a signal” saying we all can be better developers, but no one can become better if he is already thinking that he is really good at what he does. So, the point is (IMHO) that we all should assume (and embrace) that we make mistakes, forget things, and break designs, no matter who we are or what our experience is, and so, we have to be constantly looking for the best tools and the best practices to help us to do our work right, and trying to become a better developer.
Of course there are good and bad programmers. But the the difference is that good ones think they have to become better, and bad ones are not interested or think that the already are good.

@dagarfol: Yes, but the article did not – from my understanding – argue that you need to get better – as a developer – but to make your’re results better by using tool and embracing – and fixing -that you’re a bad developer.

Emerson

I still believe you misunderstand the intension of the article, for me its basically what dagarfol said.

The article should open ones eyes (and this is done in a provocative way), dont be too sure about your skills and experiences, think outside the box. Dont try to be smart and reuse proven good stuff.

at least this is what i read from that article (together with a little smile on the face) :)

keiou

Well that article only points to newer programming languages. Old school mainframe developer like me doesn’t have the luxury of auto-completing IDE or even an IDE. He!

If you will be judging a developer it should not be as a group because there are other factors that needs to be considered. Most group projects are led by team leads or managers.

Unlike a developer who does end-to-end, he/she shoulders everything from the analysis of the business need/requirements, planning, coding, testing and implementation.

Actually there are a lot of things you could do to improve your skills. And from experience people who rely too much to code re-usage is what makes them dull. practice and be creative with your programs.

Ryan

Well as a programmer I believe that the tools help you get everyday work completed faster. In my particular case this free’s me up to explore the new concepts and new idea’s, which is how we become better.

Dependence on tools for code completion and compilers for syntax checking isn’t a bad thing, it means you don’t get caught up in the particulars of a language and lets you focus on the “actual” problem you’re trying to solve. In my humble opinion a good programmer transcends language and deals in only the problem domain. This lets him choose his tools to complete his job in the best, and fastest way.

After all we’re all problem solvers at the end of the day, so if you’re a bad programmer, you’re probably just a poor problem solver.

Andrew

I take issue with the very first blurb from the “bad programmers” article that is quoted.

The idea of using an IDE meaning that you are a bad programmer is the wrong measurement. IDEs deal with code specifically. Good programmers not only work with code, but they work with logic and data organization (and more). A great programmer might miss 6 semicolons on the way to an awesome finished program (well, not as often with the newer IDEs, but it was a pretty common error in the old Borland C++). A bad programmer can write a buggy program that inadvertently destroys your data and compile it successfully on the first try.

Honestly, I think that it’s not necessarily true that relying on technology instead of memorization means people are failures.

I use calendar software because it’s better at remembering and reminding me of activities; does that mean I’m dumb? No, it means I use my brain for CPU, not RAM — that is, I think, not memorize.

Ryan

Andrew, Sheeri, totally agree, it’s not the tools that help you get to your solution but “how” you get to that solution that makes you good. Spend more time understanding the problem, and if tools help give you more time to do so than they can only be a good thing right.

@Ryan: Totally agree, as a teacher I’ve seen many programmers which where excellent at using tools, but weren’t able to write programms. Far from writing good programms.

Many of them learned “programming” by using Visual C++, what they could do was building GUIs and write simple event handlers, not programms. When I’ve switched to Python/Java/… they were all lost.

Good programmers demand tools, bad programmers are not getting better by using tools.

I’m just quibbling here, but I’ve found estimation accuracy tends to peak around about 6 weeks. Tasks that are just a few days long are too subject to wide variability because they tend to be either much easier or much harder than estimated. The differences start washing out when the one day tasks that turned out to be an hour and the ones that turned out to be a week are all lumped together. Also, I find it helpful to look at the tasks as a bunch and say “I think it should take this much” and compare it to a bottoms-up estimate. If the two are widely different, then there’s a probably a problem with both estimates.

@Erik: In the Scrum implementations I’ve seen that worked very well, the size is around up to 3 days.

“The differences start washing out when the one day tasks that turned out to be an hour and the ones that turned out to be a week are all lumped together.”

Agreed, this is what I assumed in the post, either you group tasks that size together to increase accurancy of the estimation and make communication easier (lower number) or business/product owners need to live with some variability.

But from my experience 1 day tasks work fine.

[...] You’re a Bad Programmer, Really? [...]

Jan de Vos

I think the argument you make about using tools — good programmers use tools, bad programmers just don’t see the point and don’t — also apply to things like Agile and scrum. Good programmers realize that when doing projects, the process matters.

Now, that applies both to the good programmers I know that like Agile stuff, and those that are very much against it. In any case, they’ll have thought about it, and have chosen to work in the way that fits them best.

The bad programmers? They just don’t care. Or they just care enough to want to put a buzz-work on their CV’s, say they’re doing Agile, and in reality just do things like they’ve always done.

I have been a professional software developer for 15 years, add some 6 years more of unpaid exploration before that.

Usage of tools or the decision to use tools have never made a bad programmer a good programmer. My theory is that some people are just born with the right traits for the job and then there are those who were told it was a good career.

I led teams ranging from 2 to 30 people, which involved supervising deliverables and thought processes ranging from “this is how it is done” to “why are you here?”. I have never seen a bad programmer raise to a passable and stable level, no matter how much effort and coaching was put into his/her development.

1, “I’d argue any work package (WP) larger than 1 to 3 days can not be easily estimated.”
If you can’t envisage a scale of work over 3 days, that is codemonkey, not programming. A major project can take months – even years, and stay within the original estimates.

I do not understand your second tenet.

“3. Features are added all the time leading to scope creep.” Agreed. This is dealt with by getting agreement from all parties before design and development starts. Any changes mean that the whole design/review/approve process starts again.

@Steve: It seems you’re confused by WP versus project. I suggest reading PMBOK.

Leave a Reply

What people wrote somewhere else:

Additional comments powered by BackType

Guide to CodeMonkeyism

Over the last 4 years I wrote many articles on this blog. To make it easier for you to find the relevant ones, I've organized them into topics.

Top 10

6 reasons why my VC funded startup did fail

Go Ahead: Next Generation Java Programming Style

Java Interview questions: Write a String Reverser

The dark side of NoSQL

7 Bad Signs not to Work for a Software Company or Startup

Is Java dead?

Scala vs. Clojure

Never, never, never use String in Java

No future for functional programming in 2008 – Scala, F# and Nu

Clojure vs Scala, Part 2

Java Developer

Is Java Dead?

Go Ahead: Next Generation Java Programming Style

Be careful with magical code

All variables in Java must be final

Never, never, never use String in Java

Bending Java: More readable code with methods that do nothing?

NoSQL Guy

NoSQL: The Dawn of Polyglot Persistence

The dark side of NoSQL

Essential storage tradeoff: Simple Reads vs. Simple Writes

Sharding destroys the goals of your relational database

The unholy legacy of databases

Startup/CTO

Development Dream Teams

6 reasons why my VC funded startup did fail

American vs. European style of Software Development

12 Things to Reduce Your Lead Time and Time to Market

The high cost of overhead when working in parallel

Essential storage tradeoff: Simple Reads vs. Simple Writes

Job Seeker

Another Good (Java) Interview Question

7 Bad Signs not to Work for a Software Company or Startup

Java Interview questions: Write a String Reverser (and use Recursion!)

Java Interview questions: Multiple Inheritance

As a Manager: What I value in developers

Top 10 Tips (+1) to Get a Pay Raise

Agilist

What Developers Need to Know About Agile

5 Practices Better to Change in Your Scrum Implementation

Scrum is not about engineering practices

ScrumMaster and ZenMaster: The joke of certification

What is Trans-Scrum?