What Makes a Good Programmer Good?

I’ve worked with a lot of programmers over the years — some of them super
amazing, and some distinctly lackluster. As I’ve had the pleasure of working
with some very skilled individuals recently, I spent some time thinking about
what I admire in them. What makes a good programmer so good, and a bad
programmer so bad? Or, to mangle English a little bit, what makes a good
programmer good?

Based on my experiences, being a great programmer has nothing to do with age,
education, or how much money you make. It’s all in how you act and, more deeply,
how you think. I’ve noticed a consistent set of habits in the programmers I
admire. More than knowledge of their chosen language, deep understanding of data
structures and algorithms, or even more than years of on-the-job experience —
the way they communicate, the way they conduct themselves, and the way they
approach programming speak volumes as to their amazing level of skill.

Certainly there’s more to being a good programmer than anyone can enumerate,
and I wouldn’t judge any programmer solely based on the presence (or lack) of
these practices. But I do know wisdom when I see it, and when I see a programmer
expressing these traits, I think, “This person really knows what they’re
doing.”

They do their research

Or “measure twice, cut once.” Or “Google it.”

Whatever you call it, most programming problems you’re likely to encounter
have been solved in some form already — Ecclesiastes had it right in observing
there was nothing new under the sun. In the form of libraries on GitHub, blog
posts on the Internet, or just getting in touch with experienced individuals,
good programmers know to do the research before they try to solve a problem.

I’ve seen even great programmers rush to solutions: but the worst programmers
I’ve worked with never consult others, and as a result do huge amounts of
duplicate work or tackle issues in precisely the wrong way. And unfortunately,
they end up paying for their mistakes later.

They read error messages (and act on them)

This includes desymbolicating stack traces. Yes, it’s ugly and unfortunate —
but if you’re not willing to do it how are you going to know what’s wrong? The
most effective programmers I know aren’t afraid to dig deep into problems. The
least effective see there was an error but don’t even bother reading the error
message. (This sounds ridiculous but you’d be surprised how frequently I run
into it.)

To take this a step further, great programmers see a problem and hunger to
solve it. Reading error messages are for them just the beginning: they’re
anxious to dive deep into the issue that it represents and figure out what’s
going wrong. They’re not interested in passing responsibility, they’re
interested in finding a solution. The buck really does stop with them.

They go to the source

Documentation, tests, people: these things lie. Not intentionally, but if you
want to know exactly how something works, then you must view the source
yourself.

Don’t be afraid if it’s not a language you’re super familiar with — if you’re
primarily a Ruby programmer and you suspect there’s an error in one of Ruby’s C
libraries, go crack it open and have a look. Yes, you might not get it. But who
knows? You just might, and you stand a way better chance than if you didn’t try
at all!

If you’re in a closed-source environment then this becomes a lot harder,
unfortunately, but the principle still applies. Poor programmers have little
interest in viewing source, and as a result problems flummox them much longer
than those who are willing to do some research.

They just do it

Good programmers are driven to act. There’s a compulsion in them that can be
difficult to control: they’re implementing a solution as soon as they identify a
problem or see a new feature request, sometimes too early and sometimes too
aggressively. But their instinctive response to a problem is to tackle it
head-on.

This can be troublesome at times — but their enthusiasm is a crucial part of
being good at what they do. While some might stonewall or wait for the problem
to go away on its own, good programmers start solving.

To put it more simply (and, perhaps, too obviously): if you see someone
excitedly grabbing problems and acting on them, chances are you have a good
programmer on your hands.

They avoid crises

This is mostly a bad programmer trait: they tend to bounce from artificial
crisis to artificial crisis, never really understanding one before they move to
the next. They’ll assign blame to the wrong parts of their program and then
spend hours debugging something that works perfectly well. They let their
emotions get the better of them, trusting gut feelings rather than careful,
explicit analysis.

If you hurry through a problem — or even view each problem as a
world-shattering catastrophe — you’re more likely to make errors or not address
the underlying issues. Great programmers take the time to understand what’s
going wrong, even when there really is a catastrophe: but more than that, they
treat regular problems as issues to be solved. Thus they solve more of them more
accurately, and do so without raising the tension level of your
organization.

They communicate well

Ultimately, programming is a form of communication. Being able to succinctly
and eloquently express your thoughts is as crucial in writing code as it is in
writing prose — and I’ve always found that those who can write a pithy email,
elegant status report, or even just an effective memo will also be better
programmers than those who cannot.

This applies to code in addition to English. It’s certainly possible to make
a one-liner filled with parenthesis, brackets, and single-letter functions: but
if no one understands it, what’s the point? Good programmers take the time to
communicate their ideas properly in whatever medium they’re using.

They are passionate

I think this might be the most important aspect of a good programmer (and
perhaps the part of this list most generally applicable to fields other than
computer science).

If you truly care about what you’re doing — if it’s not just a job, but a
hobby, an interest, even a fascination — then you have a major advantage over
anyone else in your field. Great programmers are always programming. Their peers
will clock out at eight hours a day: not out their job, but of their field in
general. They don’t have programming side projects or much interest in
contributing back to the community. They’re not constantly trying neat new
methods and crazy programming languages just to see how they work.

When I see a programmer who’s doing their own hobby projects on the weekends,
who’s involved in the creation of the tools that they use every day, who’s
fascinated by the new and the interesting: that’s when I really know I’m looking
at an amazing person. Ultimately great programmers view their profession not
just as a means to make money, but as a means to make a difference. I think
that’s what makes the best programmers who they are. Coding, to them, is a way
of shaping the world. And that’s what I truly respect and admire.

Josh Symonds performs devops and server wrangling on cloud-scale
infrastructures, deploys amazing web applications with Ruby on Rails, and
creates awesome iOS apps with Objective-C and RubyMotion. He is founder and CTO
of Symonds & Son, a development shop
focused on quality and excellence.


时间: 2024-11-16 16:23:38

What Makes a Good Programmer Good?的相关文章

转摘<<On becoming an expert C programmer>>

The following is from an EMail message that I sent to to an individual on 12-Apr-2001. You may find this EMail message useful. The Writer asked: ``I just recently visited your website ... Just wanted to say greetings and ask a simple question: Do you

SmartRF Flash Programmer突然打不开显示界面的办法【亲测有效】

在尝试打开任务管理器结束任务之后重新打开依然无果,在尝试了SmartRF Flash Programmer卸载重装无数次之后依然无果的况状,我被SmartRF Flash Programmer存在界面无法显示的bug折服了. 不过最终还是解决了,今天就来总结一下: 1.首先打开SmartRF Flash Programmer: 2.打开任务管理器,在任务管理器里右键点击,将其最大化: 3.关闭SmartRF Flash Programmer 4.重新打开SmartRF Flash Program

computer systems work from a programmer's perspective

2. typedef unsigned char *byte_pointer; void show_bytes(byte_pointer start, size_t len) { int i; for (i=0;i<len;i++) printf(" %.2x",start[i]; printf("\n"); } void inplace_swap(int *x,int *y) { *y = *x^*y; *x = *x^*y; *y = *x^*y; } c

程序员能力矩阵Programmer Competency Matrix

注意:每个层次的知识都是渐增的,位于层次n,也蕴涵了你需了解所有低于层次n的知识. 计算机科学 Computer Science 软件工程 Software Engineering     程序设计 Programming         经验 Experience 学识 Knowledge 软件界一个无可争议的事实是,不同程序员的效率有差别,而且差别很大.许多专家将优秀程序员和一般程序员区分地很清楚. 大多数研究得出结论认为,一般程序员跟优秀程序员之间在工作效率和质量上存在10:1的关系:优秀

What technical details should a programmer of a web application consider before making the site public?

What things should a programmer implementing the technical details of a web application consider before making the site public? If Jeff Atwood can forget about HttpOnly cookies, sitemaps, and cross-site request forgeries all in the same site, what im

SmartRF Flash Programmer 弹不出那个界面--转载http://blog.chinaunix.net/uid-24343357-id-3594874.html

SmartRF Flash Programmer 在我烧写几次HEX文件以后,老是缩在任务栏,你怎么点击,它都弹不出那个界面了,如下图,很郁闷的.我卸载一下,然后重装也不行.没有办法了,换了一台计算机,开始是好的,烧写几个hex以后,又出现同样的问题了,看来不是我计算机的问题了.怎么解决呢,打开任务管理器,按照下图操作. 点击最大化以后,界面是全屏,关闭,然后出现打开SmartRF Flash Programmer 就好了啊.莫名其妙的,软件有这样的问题,实在无话可说了.

Lynda.com学习体验之Become a Python Programmer

本人最近正好在学习http://Lynda.com的Python课程.Lynda上面确实有Python系列课程的,以我的学习经验,Lynda的课程质量惊艳,对于刚入门或者工作一段时间的同学来说,绝对是绝佳的材料.但是http://lynda.com是收费的,每月34.99美金的,本人在淘宝上买了一个lynda永久会员 (网址:Lynda会员账号 永久免费 离线下载观看 永久有效 一人一号) ,目前来看用着很爽,下面就Lynda上面针对Python的Learning Path做个简单介绍. Pyt

GameLoft笔试题目 [Online Network Programmer Test]

gameloft 笔试题目是英文的,前面全部是理论的,最后两道是编程题目. 1 2 3 4 5 最后两道编程题目 其实还算简单: #include <stdio.h> #include <string.h> #include <iostream> std::string itoa(int number){ char nstr[15]; sprintf(nstr,"%d",number); return std::string(nstr); } usi

The Pragmatic Programmer 读书笔记之一 DRY-Don’t Repeat Youself

 The Pragmatic Programmer读书笔记之一 DRY-Don't Repeat Youself 虽然自己买了很多软件工程方面的书,但是因为时间的问题,一直没有静下心来充充电.最近因为感觉自己在编程方面迫切需要有进一步的提高,于是打算好好的研读一下Andrew Hunt和David Thomas合著的<The Pragmatic Programmer:From Journeyman toMaster>.本来我是比较偏好原版的,买的书不是原版就是影印版,但是由于该书原版价格有

Articles Every Programmer Must Read

http://javarevisited.blogspot.sg/2014/05/10-articles-every-programmer-must-read.html Being a Java programmer and Software developer, I have learned a lot from articles titled as What Every Programmer Should Know about ..... , they tend to give a lot