Channels ▼
RSS

Design

What Makes Great Programmers Different?


A recent meme running on programming sites across the Web is a generally humorous discussion of the attributes of bad programmers. If we put aside the humor — everyone has a war story here — in my experience, bad programmers fall into two main categories: the dim and the reckless. The dim ones generally have a small skill and are unaware of its limitations. They generally avoid deep technical conversations, but when they do speak, they often greatly overreach in the estimation of what they're capable of doing or what they know. Curiously, I regularly receive article manuscripts from these folks ("Want an article on building your own DBMS in less than 100 lines of JavaScript?") and it's difficult to respond courteously to the proposals, so I often beg off by simply citing that the pieces are not what we're looking for.

The other group, the reckless, consists of those who have the skills but don't have the discipline. They are the cowboy programmers of yore. They code according to their own desires, do nothing to integrate their work with that of others, scrimp on basic discipline, and cause work for other team members. Fortunately, this model is dying out (somewhat too slowly) as IT becomes aware that their cost is rarely ever offset by their benefits.

I guess you could add a third grouping of folks, the jerks, who wield their roles so poorly that they drag down the entire team. They often come from one of the other two previous groups, but have been given enough responsibility that they can make life miserable for others. The only solution when faced with them is to hope that they eventually are let go or to leave yourself.

The Good Guys

To happier topics: Good programmers are, I believe, the core of the profession. They are competent, desire the right outcomes, and strive to contribute to the team. They frequently have well-defined skills, a good understanding of development disciplines, and are open to new approaches as long as the material can be integrated with what they already know. They write solid code, although only occasionally does it show a truly imaginative solution. More commonly, when faced with a difficult problem, they will lapse into quick and dirty hacking. They block themselves from greatness by not having the curiosity or know-how at their command to be more than they are. That is, they refine their skills principally by continued application, not by learning new technologies — unless required to do so by job demands. Such programmers are at risk of slipping into the lower grouping by letting their skills atrophy. I discussed several examples of this in my previous editorial on coding from within the echo chamber.

Really good programmers have another dimension to them: They carry an abiding passion for programming. They like to solve challenging problems and they like to solve them well. They are not satisfied with writing one more CRUD app. They want the magical work that is hard and requires extended effort to bring to fruition. If they can't find this satisfaction in the workplace, they find it in personal projects or by contributing to open-source projects. They frequently test new technologies, try out new languages, explore new tools, and read about programming. Dr. Dobb's readers are found in great numbers in this group, I believe. Dr. Dobb's has no exclusive franchise here. These developers are interested, consume programming books, and hide out in developer forums as well. They revel in challenge and have a constant sense of searching. They're looking for the best answer to a problem, or the most elegant.

The Greats

The next tier up — the final tier — consists of great programmers who have supernormal gifts that enable them to do easily what good programmers find difficult. Due to my work in the press, I've met more than my share of these talents, although I've not had the opportunity to work with many of them. To my eye, the traits that most stand out are three in number: an excellent memory, a conspicuously wide knowledge of programming techniques and the judgment to know when to apply which, and a deep ability to relate details to the larger picture. The last trait — being capable of quickly shifting registers from the large picture to small details and back again — relies on the strong memory and operates on an almost automatic basis. There is an effortlessness to it, which makes them particularly good architects.

There's one discipline they all share as well, which appears only in varying degrees in the earlier levels: Without exception, they possess a very deep and intimate knowledge of their tools. Be it the editor, the compiler, or the framework, they know the ins and outs of its features and they navigate efficiently. They use a much wider array of features because they know exactly how the tools work.

Knowledge of tools, coupled with an extensive, tested palette of programming techniques, and the ability to remember large amounts of the code base, while relating low-level details to the whole with unconscious ease — these are the traits I see most often in great programmers. And they're the skills I continue to aspire to in my work.

— Andrew Binstock
Editor in Chief
alb@drdobbs.com
Twitter: platypusguy



Related Reading


More Insights






Currently we allow the following HTML tags in comments:

Single tags

These tags can be used alone and don't need an ending tag.

<br> Defines a single line break

<hr> Defines a horizontal line

Matching tags

These require an ending tag - e.g. <i>italic text</i>

<a> Defines an anchor

<b> Defines bold text

<big> Defines big text

<blockquote> Defines a long quotation

<caption> Defines a table caption

<cite> Defines a citation

<code> Defines computer code text

<em> Defines emphasized text

<fieldset> Defines a border around elements in a form

<h1> This is heading 1

<h2> This is heading 2

<h3> This is heading 3

<h4> This is heading 4

<h5> This is heading 5

<h6> This is heading 6

<i> Defines italic text

<p> Defines a paragraph

<pre> Defines preformatted text

<q> Defines a short quotation

<samp> Defines sample computer code text

<small> Defines small text

<span> Defines a section in a document

<s> Defines strikethrough text

<strike> Defines strikethrough text

<strong> Defines strong text

<sub> Defines subscripted text

<sup> Defines superscripted text

<u> Defines underlined text

Dr. Dobb's encourages readers to engage in spirited, healthy debate, including taking us to task. However, Dr. Dobb's moderates all comments posted to our site, and reserves the right to modify or remove any content that it determines to be derogatory, offensive, inflammatory, vulgar, irrelevant/off-topic, racist or obvious marketing or spam. Dr. Dobb's further reserves the right to disable the profile of any commenter participating in said activities.

 
Disqus Tips To upload an avatar photo, first complete your Disqus profile. | View the list of supported HTML tags you can use to style comments. | Please read our commenting policy.
 

Comments:

ubm_techweb_disqus_sso_-5b0a5585c750cc6b7388a04dec41753a
2014-06-05T12:55:38

I want to know how to become a good programmer


Permalink
ubm_techweb_disqus_sso_-2aaa3459915ad937ba4461eb052df378
2012-06-21T20:41:30

Contrary to what many believe, "greatness" is not something you are born with, rather it is something that can be acquired by anyone willing to work hard. One must also have the curiosity to explore new ideas. Great programmers reflect on their handiwork, and always strive to improve their skills. The road to greatness is long and hard, but it is open to anyone with a willingness to learn.


Permalink
ubm_techweb_disqus_sso_-c5190256de9e08017f0e1a56fe3d0b95
2012-06-15T01:04:11

Whoever programmed this page was not a great programmer, not a really good one, and probably not even a good one :)

After logging in, pretty much all of the page showed me as logged in -- except one little warning in the middle of the page that said: "Warning: A browser setting is preventing you from logging in. Fix this setting to log in".

And both the font size and the line spacing of the comments are so not user-friendly...

Maybe you guys put one of your good programmers to have a look at this page? :)


Permalink
ubm_techweb_disqus_sso_-41e3a1996a764660c5eda9c53e7ceedb
2012-06-13T20:25:59

I think great programmers are becoming extinct. There are few places left that will provide a good environment for them to do their best work and to mentor the good programmers who want to be great. It takes a place that values what Pete McBreen called "software craftsmanship", Marketing has replaced engineering as the primary driver in most software companies and "good enough software", requiring only "good enough" programmers is the management imperative.


Permalink
ubm_techweb_disqus_sso_-43e165b47cf5d0edfff7378e69ef5220
2012-06-11T06:05:22

Interesting read. But is greatness something you're born with or can an "average" programmer become "great"? What if you don't have a particularly good memory? Are you SOL?


Permalink
ubm_techweb_disqus_sso_-93331a0f768b3e355cf1536a4efe1787
2012-06-07T22:56:25

"Good programmers are, I believe, the core of the profession.", a natural follow-up question is, how to become great for good?


Permalink
ubm_techweb_disqus_sso_-2655b1d85a8c712fd2dedfb9ff956430
2012-06-07T14:50:39

I strongly recommend reading Peter Seibel's "Coder's at Work: Reflections on the Craft of Programming" for anyone who consider themselves "good" (and better) programmers. It was an eye opener for me. My favorite coders: Joe Armstrong, Ken Thompson and Donald Knuth.


Permalink
psepheroth
2012-06-06T09:44:28

I read the whole article. The "Good Guys" are which I could relate more, but I kinda like the "Greats" part. Something which I want to achieve.


Permalink
ubm_techweb_disqus_sso_-7e1b981af9591582eb835400b9c7baa2
2012-06-05T21:05:38

I agree with your requirements for greatness of programmers; but I'd add one more: a deep caring for the user interface -- that it serve the interests and convenience of the users, not the organization per se or the programmer's ease of programming.
Without the user's support, we're dead.


Permalink
ubm_techweb_disqus_sso_-c105197a07a6d943a43ed9b0cea04c7e
2012-06-05T19:59:33

The greats also have the ability to apply random bits of data to solve the problems. Sometimes you have to think "outside the box" to come up with a solution. Some problems don't lend themselves nicely to the standard constructs and coming up with the solution is always FUN!


Permalink

Video