How To Become a Better Programmer by Not Programming

I think this post points in the wrong direction.
Programming, the art of abstraction, logic, reduction, and rewriting is independent of ‘the real world’. A great programmer can look at a program and see it’s beauty irrespective of it’s real world significance. Finding new minimal ways to represent patterns and mechanisms to verify the correctness of those patterns is more important to me than how it can be used in real life.
I agree with the need to raise your head, but for a different reason. Other great programmers are exploring important ideas regarding syntax and semantics that can drastically improve your expressivity, correctness, and productivity. A significant amount of any programmer’s time is well spent measuring him/herself and his/her productivity, and looking for ways to optimize that. The payback of exploring different architectures, computing paradigms, languages, and algorithms is enormous.
Ben

Jeff, nice post about needing some breadth to go with your programming depth. But, I was a littel disappointed with the content vs the title: I’d hoped that you’d be writing about the programmer’s failure mode of approaching every problem with the solution “write more code” already in mind.

Really great programmers go to the heart of the problem, find what aspect of it adds most value to the user then write a very small amount of code to address that, and that alone. Programmers have a tendency to think that the thing that they do that adds value (and justifies their paycheck) above all else is write more code. And so they write code. What they don’t take into account is that code is a liability for the customer, not an asset, so the less of it they produce (while adding value through solving the problem), the better.

Best of all, delete some. The very best programmers can take a new problem, find the essence of it, find the commonality with the essence of the problems already solved, incorporate the new solution and end up with less code than they started with. http://www.folklore.org/StoryView.py?story=Negative_2000_Lines_Of_Code.txt for example

Ivan Moore will even tell you that deleting code is a refactoring http://ivan.truemesh.com/archives/000393.html In fact, he sometimes says that even if that isn’t your goal a good non-delete refactoring should allow you to delete some code, or else you are just pushing code around for the sake of it.

“But if you accept that premise, it also presents us with a paradox: if experience doesn’t make you a better programmer, what does? Are our skill levels written in stone? Is it impossible to become a better programmer?”

Um, that’s not what Bill said. He said you’ll know within a couple years what type of programmer you are, not that experience can’t make you a better programmer.

Really good programmers spend a lot of time THINKING.
Not madly typing in code. Typing should be the last
act, not the first.

This reminds me of the old and so true quote from Larry Wall

“The three chief virtues of a programmer are: Laziness, Impatience and Hubris”

Where I think that order also is important…

Your ability to think creatively is proportional to your programming talent. Great problem solvers make great programmers.

Some of the best code I’ve ever written was actually done on a legal pad with a pen. I’ve written code across the spectrum, from memory management on early Linux kernels up to massively parallel supercomputers over satellites. Code that I look back at and say “Damn! That was good.” I did when I back away from the computer, say down with pen and paper, and write the algorithm/design out. Sometimes it was before coding and sometimes in the middle of slogging through digital sewage.

My point is that good code is developed in your head, not your compiler. You don’t need a computer immediately to write good code.

Here you go again, Jeff, beating that poor dead horse again. We’ve already familiar with your opinion on this. But I would like to ask you a few things. Will not running make you a better runner? Will not playing tennis make you a better tennis player? Will not thinking make you a better thinker? You’re preaching this approach because you, in the natural progression of your career, are programming less and managing more. I mean, come on, if you have this much time to blog then you’re not pumping out a thousand lines a day.

You see, you are trying to convince yourself as much as you are trying to convince us that programming less is the way to go. It’s ok, I’m not faulting you for that. We all evolve in our careers (we have no choice, eh?) It’s just that I don’t think you’re main argument is valid. You might become a better manager, a better architect, etc. by programming less, but you won’t become a better programmer that way.

@ken

I think you’re completely missing the point.

Programming more will give you a better understanding of syntax, control structures and other techincal elements of programming, but there is more to being a good programmer than just writing code.

An example of the difference is the word verification on this page. A bad programmer who knows lots of syntax would probably write a bulky code base that randomly generates and scrambles a series of random characters. However, that’s like hammering a finishing nail with a sledgehammer. The simple phrase ‘ORANGE’ is probably just as effective at blocking comment spam as some over complicated captcha system, but it required far less code and is much easier for users to deal with.

The point is that there are 2 ways to solve most programming problems. Either keeping writing code until it works or take time to address the goals and develop a concise elegant solution. Anybody can memorize syntax, it takes a good programmer/developer to really understand the bigger picture.

You may want to read Steve Yegge’s counterpoint to this post:
http://steve.yegge.googlepages.com/practicing-programming

How do you know you are even a ‘good’ programmer?

If I thought 4 years ago “This is the best I’ll ever be.” then I would probably be a worse programmer today. Well-roundedness is an issue and being a good programmer is about solving the right problems.

Perhaps Bill meant your personality as a programmer is set in stone, but you’d never convince me that I haven’t been increasing my skills and knowledge.

To be fair, I still approach problems the same way. I also still like writing good clean code and I still like to read books on all sorts of topics (dev and otherwise).

I would however hope the code I write now isn’t as bad as what I wrote back then.

Couldn’t agree with you more Jeff, programmers must keep their head above the water for other things beside coding. Computer programs will be useless without any users using it right? It’s just like your previous post, coding is fun, but shipping is the real job.

Good stuff. However, the term ‘programming’ perhaps needs to be better defined: Optimizing a routine (pointlessly) so it is impossible for someone else to read but is 1% faster? Writing code that can easily be extended and modified? Building an app that can (relatively) easily be changed due to the whims of the customer? Seeing the big design picture and organizing the development strategy?

Another curious thought is why are some people really, really productive in one language but not in another? Why does a certain language ‘get in the way’ of a person’s mind as they try to turn a problem into a solution?

I read both articles (which includes the one in the comments above). They both approach programming from two different perspectives. Yes, you have to practice and study to become a better programmer. You also have to get away from it from time to time to gain the perspective of those who are going to use, sell, or market the code you’re working with.

The way I see it, the articles are not opposing each other but complementing each other.

I agree to a point. I would strongly argue against the notion that we can’t get any better ever. I’ve been coding professionally for about 7 years now and I think I’m MUCH better now than I was even 2 or 3 years ago.

That said, I do think that there are some people who hit that wall and can’t proceed any further. People for whom this article is more true. I’ve seen it in school, in my work, etc.

So I think you can’t generalize this to all programmers. I continually study and read to improve my skills. Not all my studying is on actual coding but a good portion of it is. And I feel like I’ve gained more skill in the past 2-3 years than I did in the 4-5 years before that.

Kathy Sierra’s “How to be an expert” essay

http://headrush.typepad.com/creating_passionate_users/2006/03/how_to_be_an_ex.html

takes the opposite point of view to your suggestion that “A mediocre developer can program his or her heart out for four years, but that won’t magically transform them into a good developer…You’ve either got it, or you don’t. No amount of putting your nose to the grindstone will change that.”

Her view is that “The only thing standing between you-as-amateur and you-as-expert is dedication. All that talk about prodigies? We could all be prodigies (or nearly so) if we just put in the time and focused. At least that’s what the brain guys are saying. Best of all–it’s almost never too late.”

Peter Norvig’s “teach yourself programming in ten years”

http://norvig.com/21-days.html

would seem to agree with Ms Sierra’s ‘dedication’ theory.

Ben wrote:

I think this post points in the wrong direction.
Programming, the art of abstraction, logic, reduction,
and rewriting is independent of ‘the real world’.
A great programmer can look at a program and see it’s
beauty irrespective of it’s real world significance.

Ben, there’s a hell of a difference between a skilled developer and a skilled programmer. That’s the whole point of the story.

JensG

Well said, JensG. The point is that you must look beyond yourself to improve – not simply sharpen what you already know.

If you know a programming language, it becomes a means - a tool - not an end in and of itself. It’s just part of your skills that can’t get much better.

Overrated blog post! Nothing intriguing. Actually its difficult to describe a good programmer and I know a few folks who have gotten much better at programming after years of programming. IMHO, good programming is a function of your intelligence and I think great programming requires not only intelligence but also creativity. The best programmers I know are artists not engineers!

Very interesting post! IMO, the “da Vinci route” should be efficient to excel in just about anything: Study anything even remotely related to your field. You can get completely different insights from doing a bit of 3D modeling, OS tweaking, web accessibility, iPod hacking, gaming, system administration, etc… Any of these can make you a better programmer, by giving you a view of how different types of systems behave - Or maybe more important, give you ideas of how they /should/ behave.