What Makes a Good Programmer Good?

转载 2013年12月04日 17:56:59


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.

What Makes a Good Teacher?

What Makes a Good Teacher? 2004年05月26日10:42:39 解放日报--上海学生英文报     这是一群美国三年级学生发表的观点。充满童趣。   A teacher ...
  • fenglibing
  • fenglibing
  • 2007年02月11日 09:32
  • 8384

What makes a good programmer

Introduction We all want to be good programmers. To become a good programmer you have to know what ...
  • hnpylwp
  • hnpylwp
  • 2009年05月06日 22:34
  • 416

论文笔记 |What makes for effective detection proposals?

在faster rcnn中提到的proposal的综述:J. Hosang, R. Benenson, and B. Schiele, “How good are detection proposa...
  • bea_tree
  • bea_tree
  • 2016年07月08日 12:48
  • 1640

论文笔记 《What makes for effective detection proposals?》

论文笔记 《What makes for effective detection proposals?》 发表于 2015-05-19   |   7条评论 最近开始准备回到de...
  • baobei0112
  • baobei0112
  • 2015年08月24日 14:46
  • 3055

What makes a good lead programmer

原文地址:https://zhuanlan.zhihu.com/gu-yu/20232566 声明1:本文不影射任何行业产品、从业人员,请勿对号入座,保留删除评论权利。 声明2:本文侧...
  • MessiGodLike
  • MessiGodLike
  • 2017年11月25日 20:42
  • 53

My new style

Many days ago I used the same structure to describe my life style, and I wonna want to change some w...
  • frontgoggle
  • frontgoggle
  • 2006年04月21日 22:10
  • 572

All-round development

1、大型互联网公司需要经过网监局 网监局要求用单向加密的方式对密码进行加密,比如:MD5 2、公司通过每个人的百度账号,有一个连接池 公司所有的员工都可以看到,每一个用百度的人的各种行为...
  • kl1106
  • kl1106
  • 2017年12月04日 20:43
  • 59

What Makes a Good Teacher?

What Makes a Good Teacher?2004年05月26日10:42:39 解放日报--上海学生英文报    这是一群美国三年级学生发表的观点。充满童趣。   A teacher he...
  • samara
  • samara
  • 2005年01月10日 13:28
  • 1583

What Makes a Good Utility?

怎样生成一个好的Utility? 一个好的Excel utility当然最终应该使工作变得更加容易和高效。但如果是为别人开发utility,如何使一个Excel有价值呢?我把好的utility所具备...
  • u012033027
  • u012033027
  • 2013年11月28日 23:03
  • 577

What makes a good leader

What makes a good leader --- from employees' standpoint of view.  1. Control anger. Anger cause more...
  • hitlion2008
  • hitlion2008
  • 2011年07月13日 09:02
  • 1880
您举报文章:What Makes a Good Programmer Good?