How To Become a Better Programmer by Not Programming

I agree with Bill. I am just amazed to find out how many people disagree with Bill.

From a midocre programmer who will never be a “good” programmer and who is quite happy to be a “mediocre” programmer, but a good human being, which I think is better than being a good programmer and suck at being a decent human.

Thanks

Thanks for the wonderful words of encouragement. However, I know pretty well that I am a mediocre programmer, mostly because I am lazy enough to avoid complex problems, but also because I am unable to resolve certain complex problems.

Having said that, I have the impression that for a lot of good programmers, the whole idea of being a good programmer is to tell everyone how bad or “mediocre” everyone else is, and they make a point that being mediocre is like having a disease of some sort.

All I am suggesting that it is not. Mediocre programmers fulfill their roles in the organization in a lot of ways and they are just a great bunch of people to hang around with.

Cheers.

Programming is immaterial.

The entire group of development related professions is problem solving and abstraction with different scopes and different focus.

If you are a good problem solver, the language doesn’t matter. A new language is just a different API and rule set (with the implied limitations and pit falls). If you are a good problem solver and good at abstract thinking, the scope doesn’t matter either. Programmer, architect, analyst, CTO - solve some set of problems, different scope, different focus, different tools.

I think that what is happening is that those who are good at problem solving and abstraction rise quickly, many others are content where their abilities are (some because they think that they are much higher up the food chain than they are), and never strive to become better at these base skills. There are some that recognize that they are lacking, and directly or indirectly improve their abstraction and problem solving abilities and therefor get better. This is an uphill climb, I am sure - looking at and interpreting the world in a different way is not easy, but can be done.

Jeff- if you think that someone is immediately “better than mediocre” because they read a tech blog, you are sorely mistaken. Ability to read != ability to solve problems.

Agreed with Andy:

You can be anything you want to be. Whatever you set out to achieve you can do if you really decide to and really work at it. You’ve heard this pep talk before, I know, but it happens to be true.

The guys who try to tell you that you can’t cut it simply have their own ax to grind. Either they tried and failed, or they have some vested interest in your failure. Don’t believe any of it.
andy on January 30, 2007 1:29 AM

Hey, I don’t know if this posts are still up and running seeming that the last message was 2009. But I’m a graduate and much interested in programming, been reading mostly all comments and agree to some more than others. The common saying practise makes perfect is prob the best way to describe progression as many people have stated within this article.
I’ve been studying C through Uni and now have started learning C# and find this language ever so interesting, but having said that although I’m still learning C# and cant program like a proper programmer would I be classed as a “not a good programmer”, and should give up noW? or given time through learning the concepts and techniques of OO C# language will I learn to adapt through practise of writing coding?

I hate to read that someone may say your either a programmer or not, because its like saying I should spoke english fluently when I was 2 years old…

Anyway hope someone could get back to me, give a new programmer some “programmer to programmer” advise :wink:

Anks

Yea, you made some good points. This could really be applied in a lot of areas in life. I think what most programmers need is some confidence around women. It sounds kinda trivial and unrelated, but it really isn’t. There’s a clean little blog ( http://blog.instantinfatution.com ) that I own. Solid advice- no ads, no scams, no sales. Check it out- you might learn something, and even further your talents and grow your skills.

-Tristen Ryan Royal

I don’t believe in talent in the “handy wavy” way that people sometimes talk about it. Really it comes down to some basic and fundamental skills that give people a disposition for doing that task really well.

For example when I was a child I spent a lot of my time improving my spacial recognition skills by playing certain children games. This allowed me to develop my ability draw very rapidly and allowed me to pick up guitar later in my life.

These fundamental skills that are the building blocks to higher order thinking are what make people great at what they do. You can stop and analyze the fundamental cognitive skills make people great a programming. These are the fundamentals you want to practice. It’s not an all or nothing thing. It’s not “you got it” or “you don’t.”

You just don’t understand what “it” is and so you extrapolate your theory over some empirical evidence and call it fact. But you’re wrong.

And your right.

When Bill Gates says that four years shows the extent of what a programmer can do he is following a rule of thumb that proves correct for finding good talent. But he’s not in the business of improving people’s programming skills to make everyone rock stars. It’s obvious by his method of selection.

So yes people can predictably show what level of skill they will peak at without guidance and working on the right things but that doesn’t mean it will stay that way. The human mind is an amazing thing and not easily corralled.

Well, this showed up on HN again… can you become a better X by not doing X? IME, rest is as vital as practice. When first learning some skill, you make huge gains by not doing it. Playing Dance Dance Revolution obsessively your first day will get you some advancement, but it’s not until coming back to it the next day that you discover you’ve leveled up somehow. Likewise with weight lifting: you can’t lift at your limit every day and expect to improve. It’s more like 2-3x a week that’s the maximum effective rate. Same with running: the couch to 5K program is designed to be run thrice weekly, with a resting day between each run.

Taking a step out of the work of “coding” to look at the philosophy and consider the decisions you’re making–and those that were made for you by your language–are definitely something that will help more than cranking out more lines of your everyday language. As will stepping away from the computer and organizing the requirements and design on paper. Jumping straight to the keyboard tends to thread a half-broken implementation through previously-working code, which then takes extra work to half-revert and fix.

I think Gates’ comment is quite invalid. In general, “you either have it or you don’t” things do not quite exist. As much as i can empathize with developing an interest in programming instantaneously (you having it in you), I think acquiring the skill (say on the lines of optimization) is something that happens over time(and can only happen that way).
How do i know what is optimized code, how to optimize code and why it must be optimized in the first place? These are questions that will be answered only as you accumulate knowledge which is a function over time.
So developing an interest in programming can be you got it or you don’t thing but certainly not the skill itself. And the fact that you developed the interest is really because of a sequence of events in your life that resulted in you being able to appreciate programming and accept the knowledge when it came your way. Call it coincidence or chaos theory.

Jeff,

When you boil it down your argument is the age-old one about the value of a universal education. What Bill Gates seemed to be talking about in 1986, and more so in 2005, is the total creative potential of a coder when they look beyond the logical challenges presented by coding. I think the truth in Gates’ remarks is that you can be highly skilled technically – all the way up from language syntax, to design patterns and algorithms – but lack a richer creative perspective that comes from seeing the need for a piece of software, before anyone has seen it, or even dreamed of it before. I think his remarks get bogged down a bit in managerese about vision, product, customer satisfaction, etc., but the principle is basically one of paradigm shift.

The debate between the value of universal education versus specific education has raged since universities, but I think universal education wins the day if your priority is ‘paradigm shift’. Experience in both the arts and the sciences shows the real benefits of learning another completely different discipline, and I suspect it boils down to the fact that really valuable creative work doesn’t happen in one part of the brain, but emerges when various mental faculties are developed in parallel. I don’t think it’s frivolous to improve your coding by taking up the brush or the piano because our monkey brains think logically and sensually.

Iian

I’ve found that a wonderful way of doing this is teaching others how to program. So you spend time just programming small snippets… and thinking/reflecting…

Your link to http://www.designobserver.com/archives/011848.html seems to be broken, which is as shame as I really wanted to follow that up.

I’ve said for years that one of the interesting things about programming is you rarely just program, you normally program about something so you always learn new stuff.

I’ve certainly seen situations where otherwise decent programmers proposed stuff that just wouldn’t work, and if they had a better knowledge of the field in question they would have know that.

Jeff, yes I too believe I’m still passionate about graphic design. But the great thing about graphic design is that it is almost always about something else. There are no semicolons but just pixels and colors.

This is what happen in the industry especially in the service oriented organization.If a person enter in the organization as a newbie after 5 years he will not remember any development work except excel sheet and managing the people and project.

I agree with the article and disagree with those that say anyone can become a great programmer. I do believe everyone can improve their programming skills but not everyone will become a great programmer. Even with 10,000 hours of practice, it’s not practice itself that makes you better it’s perfect practice that makes the difference. I work with a guy that “wants” (or says he wants) to be a great programmer but after four years of working with him he still lacks basic good coding habits.

Complete bs =) congratulations on making one of those blog posts that rile people - sadly I fell for it. This post is idiotic and promotes a very dangerous notion - if you don’t master something in a short time give up…

Go back to your learn code in 24 hours =) getting that off my chest was worth the next ten minutes it’ll take me to unregistered from the site and blocking it from ever showing up In my searches again.

While normally I do agree with most of your work, observations, suggestions… this is one place I simply can’t both as a career software dev, instructor, and student.

It’s my belief anyone can be anything if they have sufficient drive. That said, not everyone can be anything as they simply lack the drive to accomplish that goal.

The first four years

I believe you can say in the first four years of any career path you can determine if it’s a good fit or not. Not that it’s impossible for someone who is less than a good programmer can’t become one after four years, rather you can usually determine if a person has sufficient drive to become one after four years.

Improvement over time (or regression)

That said typically after the four year mark you can tell if someone will advance in their career in that role or if they’re doomed to regress if they don’t expand. If a person has the drive and the passion they’ll perpetually learn and expand their understanding as a developer (both in technical ability, as well as being better at understanding when technical approaches are perhaps not the right solution) if a person lacks this drive they tend not to expand their knowledge meaningfully and ultimately their knowledge becomes less valuable as the world transitions to newer approaches. Typically there is no pacing change, you’re either getting ahead, or falling behind.

The bad to good and good to bad

In any career path you’ll have people who spend their first years as a bad developer then have that wake up moment where suddenly their work is more meaningful and become a much better developer. Just the same you’ll have an excellent developer who finds their work less meaningful and the quality of their work regresses rapidly.

It’s all about motivation. If your motivated enough you can accomplish what seems super human, but motivation is one of those fickle things that comes and goes. We all have passions we’re motivated about and things that suck the motivation right out of us.

Reality

That said, most people don’t change drastically. If someone becomes a developer because it pays realistically the motivation just won’t be enough to drive them to be great. Sadly more Great developers regress than other developers become great. Simply because to few have the drive to be great, and in the wake of ambitious projects failed the great can become disheartened and demotivated.

1 Like

I think as long as one is driven to improve one’s shortcomings (algorithms, data structures, design, code style etc) one can get better at programming and everything it entails. The biggest mistake one can make is to get comfy and not strive for improvement anymore. I agree, that some people are better suited to be programmers than others and may have a natural aptitude for it, but a lot of that can be made up for with hard work and a constant drive to improve.

People without a strong natural talent may never become as proficient as those with talent (talent in the sense that some people are just great at Math for instance, while others struggle with it), but they can certainly surpass those who are not willing to continiously work on their skills.

Do you love coding? Then keep working on it! Don’t just give up, because someone tells you, that you will never be in the top 5%.

I think there’s something subtly wrong about the assumed causal connection here between people having a natural talent for programming, and not having a natural talent. I find that like anything in life, the best determiner of someone’s greatness at a particular discipline is all in their attitude. I’ve seen it in programming, I’ve seen it in music, and I’ve seen it in sports.

Attitude usually determines the vast majority of a given programmer’s long term ability to learn how to code. I think Bill is probably right, but I think he’s skipped something in his description. I think what has skipped is that even if someone is capable of understanding how to code, a poor attitude will still guarantee that the person never becomes a truly great developer. It’s unfortunate and frustrating because I know truly amazing people that are stubborn and refuse to change their programming habits because of their mistaken belief that they know best, and that others are merely talking nonsense.

I think that people’s attitudes can change! And I think that this is the secret to becoming a great programmer. You need to read, listen, discuss, be ready to put yourself out of your comfort zone, and so on. But, the reason that most people don’t keep improving after a few years is because they are not willing to change their attitude, and they are not willing to keep pushing themselves further and further.

It doesn’t apply just to programming, but to EVERY skill out there!

Sure you’ll be a better runner if you keep running, or a better soccer player if you keep playing soccer.

BUT a professional soccer player doesn’t just play soccer every single day, they DELIBERATE practice, learn bunch of tactic plays, improving their body and mental strength, etc. Doing this certain things gives you more GROWTH.

As one said, “perfect practice makes perfect”. It’s not only about working hard, but also working smart.

1 Like