

What Makes A Great Programmer? - commondream
http://thinkvitamin.com/code/what-makes-a-great-programmer/

======
gaius
One more characteristic: fearlessness. You have to be able to not only start,
but commit to completing, a project even tho' you've no idea how to do it. You
have to have that faith that you _are_ smart enough to learn on the hoof, and
you have to have the courage when you realize that you've written a ton of
code already, when you realize you're heading down a dead end, to just delete
it all.

~~~
neduma
fearlessness - come to think of it, Git makes developer fearless while
deleting current version code and put some new twist to it. cause you can go
back to it whenever you want it.

and git is a tool like vim.

~~~
gaius
With Git you can branch, try something, then abandon the whole branch if you
want to, it's pretty sweet.

------
stcredzero
It seems as though the programming field is in a bit of a bind because, odd
though it might seem, it has been difficult to be _empirical_ in our approach
to our field. The programming domain is very complex, so there are
considerable difficulties in implementing empirical approaches. Proprietary
development often entails a degree of secrecy, so a lot of data is not
available to be shared. There is even debate along the lines of what is
valuable to measure, or what can even be measured. One is reminded of many
social sciences and psychology, or even medicine prior to the scientific
revolution.

What is holding programming back from the degree of empiricism found in a
field like mechanical engineering? Is it that it's hard to fund or even
structure meaningful experiments? Should someone be developing non-
ferromagnetic monitor/keyboard sets so that we can study programmers of
different levels of demonstrated ability with their heads stuck inside MRI
machines? (Such research has been done with piano virtuosos playing on
electronic keyboards and rappers.)

[http://www.ted.com/talks/charles_limb_your_brain_on_improv.h...](http://www.ted.com/talks/charles_limb_your_brain_on_improv.html)

Another thing I'd note, is that a lot of debate about programming is word
salad full of reasons why you can't say X or Y. There seems to be a lot of the
_Epistemic Viciousness_ that exists in martial arts schools.

<http://lesswrong.com/lw/2i/epistemic_viciousness/>

~~~
j_baker
_Not everything that counts can be counted and not everything that can be
counted counts._ \- Albert Einstein

I don't think programming is necessarily unique in this regard. As with any
other profession, there are things that can be measured, and things that you
just have to trust your gut on.

~~~
gruseom
This does not sound like something Einstein would have said. For one thing,
it's a play on words in English. Let's see what the google has to say...

Edit: yep. It comes from _Informal Sociology_ (1963) by William Bruce Cameron.
Never heard of him? Me either.

By the way, this the first time I've seen quoteinvestigator.com come up in the
search results. That's welcome; it's a great site. If you like this kind of
thing, check it out. [http://quoteinvestigator.com/2010/05/26/everything-
counts-ei...](http://quoteinvestigator.com/2010/05/26/everything-counts-
einstein/)

p.s. fully agree about the barriers to empirical study of programming.

------
mcrittenden
Assuming a "great programmer" is one that writes good quality code, then I
don't think tools are necessarily about making you a great programmer, I think
they're more about making you a faster and happier programmer. I would
probably write the exact same code in nodepad as I would in vim, but I could
probably write it in significantly less time in vim, and I would be much
happier and less frustrated along the way.

~~~
pspeter3
I agree but I think people confuse happier programmer and better programmer a
lot of the time.

~~~
analyst74
happy programmer and better programmer do have high correlation though -- as
better programmers tend to have more leverage on their environment to make
themselves happier.

~~~
pspeter3
True, but the issue is that what defines happy is up to the individual
programmer and articles that try to define it just lead to generating debate,
ex. vi vs. emacs.

------
j_baker
_The best programmers that I’ve known put people first. They’ve realized that
the software that they’re writing is for people, even if it’s just the back
end of a complicated system or a protocol that no one but other developers
will ever use. They write documentation because it’s important. They help
people use their code. They’re willing to work extra and deal with a bit more
complexity to give the people using their software the right solution._

I always get a bit irritated when people make the "people first" argument.
It's not that I disagree with putting people first. It's just that "putting
people first" always seems to mean "being a good cog in the machine".

There's more to putting people first than writing documentation and explaining
your code to other people. Those are important, but they mean putting the task
first, not the people. To put people first, you have to do things like: listen
to others, empathize with them, use tact, compromise, and occasionally do
something impractical for no other reason than to help work suck a bit less.

~~~
gaius
On the other hand, you can always tell software that was written (and/or
bought) by someone who knew they'd never have to use it themselves. It's why
most corporate software is so bad: it's written by someone who _really
couldn't care less_ about General Ledgers, and it's bought by the CFO who has
staff to actually operate it.

------
Aga
While I agree with the main points of the post, I'd like to defend learning
proper tools.

Even if a good text editor like vi won't make you a great programmer, it most
definately will make you a better programmer!

First, you'll be more effective and thus achieve more. You can squeeze more
refactoring and trying out different things when you are more efficient. This
could lead you becoming great at some point.

Second, it's about your mindset. Programming is about automatizing and a great
programmer should aim for the highest achievable level of automation. Why
should your tooling be left out of the equation? With proper tools you can
automate more.

If a developer has more then 1 year active developing to do, learning e.g. a
good editor will pay off.

~~~
sn
Having used xemacs for quite a while now, I'm finding visual studio to be more
effective for following convoluted code. But maybe that's how the code got
convoluted in the first place. Perhaps there's something to be said for less
capable editors.

------
lpolovets
There's a great Quora page about this topic: [http://www.quora.com/What-
distinguishes-a-good-software-engi...](http://www.quora.com/What-
distinguishes-a-good-software-engineer-from-a-great-one)

The top answers on Quora offer a lot of food for though.

------
run4yourlives
_My brother took a Python class his Senior year of high school_

The best I got out of high school back in the early 90's was an "Intro to
Computer Programming" using Turing[1], of all things on a Macintosh Classic.
Of course we didn't have the internet either back then, but I digress.

You guys are so lucky to be growing up post internet. :)

[1]: <http://en.wikipedia.org/wiki/Turing_(programming_language)>

~~~
commondream
He took it at a college as part of a program where kids got to take a few
college courses while still in high school. We didn't have any computer
science while I was in high school, and my family didn't own a computer until
halfway through my sophomore year, so a big chunk of my high school
programming was BASIC and assembly on TI calculators.

~~~
wccrawford
When I was in high school, the local college didn't have any programming
classes at all. The closest was how to use Excel.

I have to agree that you guys are lucky to be growing up post-internet.

(For fun, I just checked and they now teach C++, VB, Java, PHP and SQL.)

------
apalmblad
While tools may not make a great programmer, tools do make a great programmer
more effective. In fact, I'd say passion (I'd prefer a different word, but
need something stronger than strong preference) for tools is a trait of great
programmers. And sure, the desire to optimize one's toolset comes from deeper
motivations, but I think a better programmer is, among many other things, one
who never passes up on chances to improve productivity through better tools.

I kind of like Rand's take on the subject:

 _As an engineer, there is a short list of tools that you must be rabid about.
Rabid. Foaming at the mouth crazy._
[[http://www.randsinrepose.com/archives/2009/11/02/the_foamy_r...](http://www.randsinrepose.com/archives/2009/11/02/the_foamy_rules_for_rabid_tools.html)]

And sure, there isn't going to be a single set of tools for every programmer
and every workflow, but good tools and a thorough understanding of them are
something I would expect from a great programmer. I agree with most of the
author's points, and don't want to at all suggest that becoming a vim wizard
will on its own make you a great developer, I guess I'd hate to discourage
anyone from seeking "text editor zen".

------
pgroves
I'll throw in my favorite under-rated characteristic of good programmers: the
ability to throw away code you've worked hard on. Sometimes code that is well
written, tested, and documented just isn't needed anymore or doesn't fit with
new changes to an architecture. The pros throw it out without a second
thought. Many programmers find it hard to let go and it causes serious bloat
to a code base.

~~~
sn
This is why we use version control.

------
njharman
Communication - if you can't talk* about solutions and translate them into
code that others can work with, learn from, maintain, etc. then whatever else
you have doesn't matter. Your impact will be limited to that you can directly
touch. You will never be great.

* "talk" most of the time means "listen and understand".

------
vegai
I would like to add something that everyone seems to have forgotten. A great
programmer has a significant life outside the field.

Additionally, and I don't know if it's just a coincidence, but the best
programmers I know are fluent at least in one musical instrument.

------
neduma
" It's not really enough to solve the problem. We have to have the pleasure "
- DHH, 2011 Railsconf, Keynote

Should this trait has anything to do with it?

~~~
commondream
The way pleasure factors into great software development is super interesting
to me. I don't think you can be a great programmer (and I have to say I have
no clue where I'll fit on the scales of developer skills) without loving what
you do, but I have known programmers who love it and weren't necessarily all
that great at it when I knew them, because of how early things were in their
career. Who knows if they'll be amazing at 30 or 45 or 80, though?

------
jleyank
Somebody who delivers sh*t that works, on time and under budget. The code is
robust and can be maintained, with extra points and gratitude if it's well-
documented. Oh, and said code both scratches an itch and solves an important
customer problem.

As Joel said: Smart, and Gets Things Done.

------
known
As per statistics, many of the great programmers are introverts.

------
jwdunne
As I said in the comments on the blog, I don't think it's the tools, it's how
you use them. This extends to languages too.

