How To Become a Better Programmer by Not Programming

What makes anyone really good at what they do is how much they value what they do. If that value is greater than other values then skill will always increase, talent will develop and brilliance will emerge.

How much do you care about your job?

There is the question of what is a better programmer, for example in the following who is the better programmer.

Three Programmers A, B and C go for a job interview. They are all required at the same time. The first part of interview process is to write a program. All three programmers are given the same problem and time to complete it.

When the time is up programmers A and B have completed the program and when the company running the interview tests the results they find both A and B have produced programs that produce the correct results although programmer A’s programmer is three times faster that and uses half the memory of programmer B’s program. Programmer C said he simply could not work out how to solve the problem.

The company had never emplyed a programmer and had the bright idea of asking programmer C to look at the programs of A and C and give them his comments.

After looking at Programmer A’s program he said he could not follow the logic and still had no idea how the problem was solved.

After looking at Programmer B’s program he said now he understands how the problem was solved and he could now write the program.

So clearly A and B are both good programmers but which is the better programmer?

In some enviroments programmer A would be prefered but my feeling is that most companies would be much better of with programmer B.

Although it can be very satisfying to write a peace of very clever code I feel it is better code if it is clear and easy to understand by other programmers and even yourself in 2 years time.

So the first question is not how to become a better programmer but what is a better programmer.

I don’t think there are better or worse programmers, just more or less creative problem solvers. Programming languages are certainly more complex today with all of the different classes and methods available, but 99% of the time I still use the same commands I used in Microsoft BASIC 1.0. I still use GOSUB…RETURN, except that in today’s code the subroutine is tied to an event or object in a GUI. I still use FOR NEXT loops and instead of PEEKS and POKES into memory, I wread and write from/to a relational database. I still use algerbra and calculus to manipulate my data. The only thing that really changes is the business needs and how you go from wher you’re at to where you need to go. This is what Bill Gates was talking about. Are you a programmer or an architect?

To me programming is about being in a mental zone, much like an artist, a guitarist, a writer, etc. It’s about creating something useful and/or entertaining from nothing. One moment your editor screen is blank and the next moment it contains a function that transforms data into magic. Programming allows us to exercise the part of us that makes us superior to all other life forms.

I’ve been programming since 1980 (Z-80 assembler) but have been programming professionally for only 1.5 years. In college, I was continually tops in my computer courses–certainly not a result of my memory (it is poor) but rather because I “get it.” Learning new programming languages comes easily for me because it makes sense to my logical brain. It could be assembler, c/c++/c#, VB (ugh), Java, etc—it’s not the syntax that matters. What matters is the problem-solving ability that generates into code. Great programmers have great problem-solving ability, at least when it comes to code. But ask me to replace front disc brakes or replace a ceiling fan and I’ll struggle. Thus, I am great at programming (IMHO) but am challenged in other areas. No matter how much I practice, I’m never going to be a Liberace or Elton John on the piano. The piano is analog and my noggin doesn’t process that communication medium very well.

I find the “average” programmer is pretty good at his/her craft but lacks a perfectionist attitude. I am big on writing code that is well structured, well documented, and well executed. As I told my boss early in my career, I don’t know how to write crappy code quickly so if you want me to learn then you’re going to have to teach me.

Average programmers rely on debuggers and code analyzers to identify flaws but great programmers can write great code inherently. Not to say they don’t use debugger/analyzers (they ARE perfectionists) but those tools find much less to scream about in the latter case.

I also find that average programmers stop asking Why/How when they find a solution to a problem. I push further upstream to find answers to deeper questions. I want to know Why this works or How that black box is doing whatever it is doing.

Just as there are great leaders, great communicators, great poets, etc, there are great programmers. Not everyone agrees on what makes them great or what constitutes greatness but history will record their relative value.

troyS++;

“What is not documented is not done”

1 Like

find the “average” programmer is pretty good at his/her craft but lacks a perfectionist attitude. I am big on writing code that is well structured, well documented, and well executed. As I told my boss early in my career, I don’t know how to write crappy code quickly so if you want me to learn then you’re going to have to teach me.

“Learn about your users. Learn about the industry. Learn about your business.”

Very wise.

you scared the hell out of me with you introduction…

then talking about passion made my eyes shines …

i can recall, every time i felt enjoying programming, was in a field that i loved and understood ( mainly local graphical modeling application )

thanks for this post !

interesting, a lot of it is simply true…
some few facts can be questioned,
anyway, a very instersting point of view.

a ‘good developer’ … develops code that doesn’t
hog the system’s resources … minimum number of
lines of code and in minimum time.

This is the worst definition possible. It’s the exact opposite of the point Jeff was making. In order to be a good programmer, you have to stop obsessing soley about those programming-related metrics, and come up for air to observe what your users want, what your customers do, how your business works and how your customer’s businesses work, where your industry niche is heading.

How about defining a good programmer as someone who can reliably produce programs which are useful enough to more than offset the costs of the time spent creating it?

I was recently explaining to some interviewers, who, after reviewing my resume, remarked upon all my computer related endeavors. They kept asking me about several trivial aspects of the position and whether I thought that ‘with my background’, I could accomplish the task. It may have seemed obvious to them that I was holding back a chortle or snicker because I realized that they were already pigeon-holing me like many people I know often do. They don’t understand that I’m not interested in the actual computer but its versatility. The computer is a tool, that when well honed allows anyone in any field to become more productive. Being a programmer allows me to go through many different fields, sort of like an actor, for as long as the project is in development. Afterwards, I use the talent to explore some other interest. I have not been contacted as yet. :frowning:

I think some very good points have been made. But lets be clear about one thing though. There is no such thing as a professional programmer/developer working in the industry; they’re actually software engineers.

A software engineer working in the industry doesn’t just spend his/her time coding all day: documentation must be written, creating test strategies for the code, communicating with colleages clients, understanding the client’s actual issue/requirements, dealing with incompetent management, resolving disagreements etc. Improving all of these areas helps you become engineer.

Having said that though, I do believe that you can improve your coding skills. As others have pointed out the most important factor is dedication. I don’t think it’s a coincidence that the best programmers out there also tend to view programming as a hobby. No matter what field you work in you can’t improve unless you are willing to learn and work hard. As as long as you keep finding challenges for yourself, you’ll keep improving.

Keep learning new material that changes the way you think about programming. This will actually change the way you think about problems and the way you come up with solutions for them.

Brett Collins on April 19, 2007 06:24 AM:

“In some enviroments programmer A would be prefered but my feeling is that most companies would be much better of with programmer B.”

Right, and that’s how we get platforms implementing Shellsort instead of Quicksort. Thank you for your insight, now I understand better why our industry really suffers.

Jeff Atwood on January 30, 2007 10:41 AM:

“Nobody can tell a 99.5th percentile coder from a 98th percentile coder.”

Wrong. I can tell the difference, and so can they. But Brett Collins has kindly pointed out why they and I are both unemployable.

but thing is that every time i felt enjoying programming, was in a field that i loved.
wat i suggest to new bees that Keep learning new material that changes the way you think about programming. This will actually change the way you think about problems and the way you come up with solutions for them.

I think being a good programmer is about writing good code, but being a great programmer is not, its mostly about the other aspects.

@Brett Collins - a better programmer is the one who can write both the readable solution and the hack-jack resource-efficient one - and will ask you which you want.

Yes, but the world is changing. I agree, it only takes a couple of months to become a good programmer if you’re fit for it. I mean, getting the grips of things like syntax, OOP, pointers/references, reflection etc. But that’s the easy part!
I just started to work as a consultant and what’s really important nowadays is to be able to see the whole perspective and understand things like interoperability, design patterns and architecture. You need to master several languages, frameworks, and technologies to be able to choose the right one for the application (like ORM, MVC, AoP, IoC/DI, etc. etc). Programming is the easy part! It’s an continuing process because the world is always changing. Today, you need to be more than just a good programmer, you need to be able to adapt to change and contribute. IMHO, also excuse my bad engrish =)

The concept of a ‘versatilist’ which sounds similar to the kind of developer you’ve described in this post.

http://www.gartner.com/press_releases/asset_139314_11.html

I got the impression from reading this blog entry that if you are a mediocre programmer who tries hard, then you will always be mediocre regardless of any incresed effort to improve your performance. I’ve also read other blogs where people rant about mediocre programmers ruining the profession. Usually I find those complainers are know-it-all programming snobs who think they are God’s gift to humanity. Performance is subjective - we are evaluated by other humans - and some of the best programmers also happen to make the worst managers.

There are lots of actors out there in the world, yet a very small percentage will win an Oscar. Many actors may never have the opportunity to appear in a feature film or Broadway play. Yet they are dedicated to their craft and have passion for what they do. They may not be famous, and critics may pan their peformance if they do get a worthy gig. Does that make them mediocre?

I’ve worked in the software and I.T. business for over 20 years and held many programming jobs. Some bosses thought I was incompentent (not worthy of Senior Level Developer title said one) while other bosses thought I was a godsend. How can the same programmer be both? What I’ve learned over the years is:

  1. Don’t take manager appraisals too seriously because they are subjective. I worked at one company where my first manager liked me but her successor - who was a pompus know it all - hated me and had me fired after three months using poor performance as an excuse.

  2. If you love what you are doing, you will do it well. I had one job where I did nothing but fix bugs in other people’s code (no comments in code) for four years, and I grew to hate that job. That’s like the actor playing bit parts over and over and never getting to shine in the lead role. How can you win an Oscar doing that? If you get mediocre assignments that you hate, you will do mediocre work - even when you TRY HARDER. The jobs where I did well had assignments where I could learn and grow. If the passion isn’t there, time to move on (change jobs or even change careers).

  3. Believe in yourself. If others think you are a mediocre programmer, their opinion means nothing. If they convince you that you’re a mediocre programmer, then you will become a mediocre programmer. And don’t compare yourself with others. These things will destroy your confidence. Just do the best you can, and if you feel you are doing a good job, that is all that matters. Everyone’s career path is different. As Shakespeare wrote:

Some are born great, some achieve greatness, and some have greatness thrust upon ’em. Twelfth Night Quote, Act ii. Scene 5.

To sum it up: the article implies that one should THINK out of the box.
Don’t stay stuck in programming. Rather, you should try to look outside the programming realm and try to understand the things/factors that shapes how you program.

this is rubbish…