Fog Creek Software
Discussion Board




What makes a great programmer?

I'm a little confused as to what makes a great programmer.  Joel seems to think that they are "smart and get things done", but that seems a little generic and applies to numerous other fields as well.  What is it that really makes a great programmer?

Wess
Saturday, August 14, 2004

If you have to ask, you're not one.

muppet
Saturday, August 14, 2004

What makes a great programmer?

A gross lack of social skills.  Oh wait, that's just a common trait, which is not what you asked for.



But seriously, you might want to check this thread out:

What must the great programmer know?
http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=4771

Andrew
Saturday, August 14, 2004

A good programmer is one that can read, understand and modify another programmers code and not complain about it because he or she knows that their code is of the same legibility when viewed by others.

A good programmer is one who forcibly writes code to get the job done.


Saturday, August 14, 2004

That should read:

A good programmer is one that can read, understand and modify another programmers code and not complain about it because he or she knows that their code is of the same legibility when viewed by others and even themselves over a period of time.


Saturday, August 14, 2004

Maybe the bad programmers are "smart and get things done", and the good programmers prefer to vacillate over at the JOS forum.  :-DD

I really don't know, but I do recall that geek poster where the monitor is connected by a rail to the programmer's head.

Brian R.
Saturday, August 14, 2004

"A gross lack of social skills. "

muppet must be a great programmer.

Obviously
Saturday, August 14, 2004

When I have seen other programmers really crank away, they believe so much in what they are doing, it's like an altered state, they don't notice food, they lose a normal sense of everyday context about human needs.

I guess I lack that killer component because if a nude dancer suddenly walked in, I would not be trying to fix that last bug on my laptop, first?

Brian R.
Saturday, August 14, 2004

http://www.itconversations.com/shows/detail188.html

Undoubtedly someone will argue this link; he comes right out and says he's controversial. I really don't care about the issue, but I'm sure this makes some people feel not so out of place.

Tayssir John Gabbour
Saturday, August 14, 2004

muppet, do you consider yourself a great programmer?

arbitrary name
Saturday, August 14, 2004

Nope, I'm just a pretty good programmer.  When I have a bit more patience and a little more focus, I'll be a great programmer.  I think that finding a good project will go a long way to stimulating those qualities.

muppet
Saturday, August 14, 2004

Joel is half right.

A great programmer gets things done.

It really doesn't matter if he/she is smart as long as the product is what the customer wants. Being easy to work with is another attribute I consider important.

Tom H
Saturday, August 14, 2004

The "Smart" quality is what helps you to consistently "Get Things Done", especially after the first iteration of a software application.  Anybody can write an app to spec, it takes smarts to write an app to spec which is highly maintainable and extensible.

muppet
Saturday, August 14, 2004

>he or she knows that their code is of the same legibility
>when viewed by others and even themselves over a
>period of time.

I think that this is bunk.  A good programmer will think that a bad programmer's code is horrible to read.  Yes, they might also think that their old code is bad (that's a good sign -- it means they've improved), but it doesn't mean that there's no sense in evaluating code this way.

As an analogy, consider the difference between analyzing a dynamics problem with the tools of high school algebra versus differential equations.  To describe the flow of an incompressible fluid, you might have pages and pages of various functions for special cases that yield something that looks sort of like fluid, versus a very simple Navier-Stokes equation.  I think that when people talk about disparities between the quality of codebases, this is the sort of thing they're talking about.

Kalani
Saturday, August 14, 2004

Kalani -- That brings to mind the idea of simplicity.  A great programmer will find a simple, elegant, and generalized way to do things.  Lesser programs will flog away at the same problem and solve it with a mass of ugly, messy code that does the job, but not well.  Won't be readable, won't be easily maintainable, won't be easily extensible.

Martin Fowler in his "Refactoring" book discusses the idea of "code smells".  He has a great list of code problems that result in bad smells.  A great programmer's code will not "smell".  A poor programmer's code will stink.

Herbert Sitz
Saturday, August 14, 2004

"...he or she knows that their code is of the same legibility when viewed by others and even themselves over a period of time."

Bad code is not bad just because it's badly formatted.

Kyralessa
Saturday, August 14, 2004

I think without protein + carbohydrate nobody can be a great programmer. At least not for a long time.


Saturday, August 14, 2004

Kalani:

The opposite is also true.  A bad programmer will think that a good programmers code is poor and unreadable.  What you end up with is a viscious cycle where everyone thinks that everyone elses code is bad (they could do something different etc..).  So in reality there are no good or bad or great programmers there are only people with opinions on what is good and bad when it comes to coding.

Therefore those programmers who can read, understand and modify any code no matter who it's written by are the good ones.  They will also recognize that even their own code will be criticized the same.

Coding is very intimately connected with the person writing the code therefore I believe my statement holds some weight.

Simplicity is simply a generic view of a better way of doing things.  In the real world though, it doesn't work that way.


Saturday, August 14, 2004

The eternal question, but I could say something:

1. A programmer, Software Engineer, must work in peace, not in those offices full of islands.
2. The software is not to be done "for yesterday", some "bosses" try to treat people lilke that, just imagine if Einstein would have had a boss telling him all the time that the Theory of Relativity was "for yesterday".
3, Even in the same programmers have many misbelieves of what a great programmer would be, the most productive in a company?, maybe yes, maybe not, it's very subjective to say what is good and bad.

Well that's all I have to say about that.

Regards

Marco

Totopo loco
Saturday, August 14, 2004


I'd say a great programmer is someone who knows how to figure out the simplest questions in Windows XP.

Of course, that leave the Great Muppet out. But hey...most of us already knew that.

Muppet's Mom
Saturday, August 14, 2004

Blank,

>The opposite is also true.  A bad programmer will think
>that a good programmers code is poor and unreadable.
>What you end up with is a viscious cycle where everyone
>thinks that everyone elses code is bad (they could do
>something different etc..).  So in reality there are no good
>or bad or great programmers there are only people with
>opinions on what is good and bad when it comes to
>coding.

I completely disagree with your conclusion.  As I understand your argument, it goes something like this:

assumption: Good programmers complain about the quality of code produced by bad programmers.
assumption: Bad programmers complain about the quality of code produced by good programmers.
assumption: There exists no objective metric for code quality.
conclusion: There are no good or bad programmers.

If you have two programmers who have to write a sorting algorithm, and one produces quicksort while the other produces bubble-sort, and your quality metric only looks at speed with arbitrary datasets, then the first programmer's code is better.

What's missing from this discussion is some explanations of systems by which we can rate code produced by programmers.  Obviously there's the traditional space/time complexity analysis for algorithms, but we develop other kinds of aesthetic senses too.  The drive for simplicity of implementation (or specification of the problem) is just one such example.

But when you equate "bad programmers" with "good programmers" you just ignore this.  A hidden assumption here is that one system of evaluation is as good as another.  "Because I feel like it" is just as good as "because it's not O(log n)."  I disagree with that.  I think that some sets of criteria for evaluation are more important than others.

PS: Though somebody might say, "there are no bad programmers, only bad code" (with which I would agree), people generally mean "programmers who produce more bad code than good code, on the average."

Kalani
Saturday, August 14, 2004

>> If you have two programmers who have to write a sorting algorithm, and one produces quicksort while the other produces bubble-sort, and your quality metric only looks at speed with arbitrary datasets, then the first programmer's code is better.

========

I would have to disagree my friend.  A programmer does not necessarily write these types of algorithms they simply choose or select one and then code it according to their applications needs.  Whether it is a bubblesort or a quicksort is not the question we want to answer here.  Why they chose the algorithm they chose would be a better question.

The fact would still remain that their code would be subjective in nature according to how they implemented the algorithm.


Saturday, August 14, 2004

This is great, discussions of code quality and algorithm selections is not the answer to what makes a great programmer... it is about the person who recognizes the fact that programming and development is a craft, like cooking. Anyone can stand att McD and flip burgers, but not anyone is a gourme chef. It is the same thing about programming, anyone can learn syntax, development methods and algoritm selection. The only mark of great programmer is the love and care he puts in the smallest details to make a really great result that he/she produces.

Not going to tell my name!
Saturday, August 14, 2004

"A bad programmer will think that a good programmers code is poor and unreadable. "

That's not always true!  I was a bad (almost terrible) programmer when I first started, and tended to write convoluted 200-300 line functions with lots of temp hold variables. Then I got onto a team with a lot of very good people, and was amazed at how small their functions were and how easy everything was to follow. I think everyone can appreciate small, clean and elegant, which is a key characteristic of a "good" programmer.

Rob
Saturday, August 14, 2004

Depends on the setting but in general,

A great programmer is:

1.  Someone who can work with their client/PM to establish exactly what needs to be done to create the finished solution.

2.  Set benchmarks by which time portions of the work will be available for review by the client/PM and meet those benchmarks.

3.  Ask questions if anything comes up that is not clear or requires additional information.

4.  Communicate any delays that may occur before the benchmark is met.

5.  Quiet his/her own ego long enough to accept constructive criticism.

6.  Keep track of hours worked and invoice client (if not employed).

7.  Collect on invoices (if not employed).

Anon
Saturday, August 14, 2004


A Bad programmer is working in a Redmond based building
for MS

A Great programmer works on Linux Open Source Software from his dark bedroom

Xevious
Saturday, August 14, 2004

You might as well ask, "What makes a great artist?"

In the future, everything will be free
Saturday, August 14, 2004

That's easy.  It's poop.

muppet
Saturday, August 14, 2004

Muppet -- Nope.  All great artists poop.  But not everyone who poops is a great artist.  ;)

Herbert Sitz
Saturday, August 14, 2004

Well muppet is unbelievable ain't he?  Oh yeah baby.  Give it to me.  Give it to me baby.

muppet
Sunday, August 15, 2004

He's a superfreak, he's super freaky.

muppet
Sunday, August 15, 2004

I sit and I shit. 

Herbert Sitz
Sunday, August 15, 2004

If I could just manage #7 above I'd be in clover.

Simon Lucy
Sunday, August 15, 2004

I can't believe it. A whole topic devoted to what makes a programmer good or bad and the word 'bug' was mentioned just once.

Colm O'Connor
Sunday, August 15, 2004

The reason 'bug' was only mentioned once is because most here have no idea what it takes to become a great programmer.  There are way too many posts on VB for any significant number of great programmers to spend time here.

muppet
Sunday, August 15, 2004

One reason that "bug" might have only been mentioned once is that good programmers and bad programmers probably have similar bug counts, but that the bugs that good programmers produce are at a higher level of abstraction than bad programmers.

Kalani
Sunday, August 15, 2004

All programmers have bugs.  Good programmers fix them.

muppet
Sunday, August 15, 2004

I eat bugs.

muppet
Sunday, August 15, 2004

I have fleas.

muppet
Sunday, August 15, 2004

good post by Anon above

Patrick
Monday, August 16, 2004

Programmers tend to have bigger egos than practitioners of other professions so I suppose it is hard to be objective.

I like to think I am better than the average programmer. I think what makes me better at it is the foundation from which I practice my craft.

I am gifted with a very adept ability to solve problems by breaking them down into smaller, logical components and while still envisioning the overall big picture, solve them.

I am also more of a breadth than depth person. I know a good bit about many different things. "Wide" knowledge seems better to me than "deep" knowledge, because I can draw on related concepts if I grapple with something that is foreign to me. A better understood, related concept gives me a basis for learning through deductive reasoning.

It's not as good an example as what I wish it were but take a web.config file... I messed around with win3.1 .ini's a lot. That experience helped make altering a web.config to do what I want a piece of cake.

The same as anything else though, what makes a good one is the drive to be a good one. If you are truly driven to be a programmer by your enjoyment of the discipline then you will be better than those who simply see coding as a job with decent financial prospects.

good programmer?
Monday, August 16, 2004

I've been teaching programming (a side gig) for a few years, and I tend to say that IMO a good programmer is one who can do without a computer a day every now and then. The idea is to observe the life around the computer screen, most importantly the lifes of those who get to use the program you are writing. See how they manage with, what things they are missing, what can they not get done - and what do they do with Excel instead of your app because you never realised something, and so on.

Plus, it's good for the soul to not only stare at images of beautiful girsl all your life, there are real, living, walking and talking beautiful girls out there if you just lift your head and look around ;-)

Antti Kurenniemi
Wednesday, August 18, 2004

*  Recent Topics

*  Fog Creek Home