回想起来就像是在昨天。那是2000年,在数据结构课程的课堂上,Pargas博士站在前面给我们讲一些关于数据结构的话题,一个SSH的画面投影在我们前面的墙上。有人问了一个问题,他说了一些东西,差不多是这样的话“是这样,如果你想成为一个真正的计算机科学家,你需要从现在开始就使用vi编辑器”。我想他是在笑谈,课后感觉他说的话并不是完全的正确,但作为年轻且容易被感染的我,回到寝室立刻就开始学习如何使用vi。学习过程不容易,花费了不少时间,但一旦掌握了其中的窍门,我发现,使用vi的确可以更快的做事情。
I remember it like it was yesterday. It was the year 2000, Dr. Pargas was standing at the front of our data structures class talking about some data structure-y topic while an SSH session was projected on the wall in front of us. Someone asked a question, and he said something along the lines of “Well, if you want to be a real computer scientist you need to start using vi”. I think he was smiling as he said it, and in hindsight his statement wasn’t even slightly true, but being young and easily influenced like I was I went back to my dorm room and immediately took up training myself how to use vi. It was rough going for quite a while, but once I started to get the hang of things I realized that I could work really quickly in vi.
时间推到6年前,那时我对TextMate十分的着迷。我的工作是做Java开发,但同时我学习Rails,在业余时间开发一些Rails项目。那时几乎所有我读的文章和观看的视频都是说明和演示如何使用TextMate来完成文本编辑工作的方法技巧的。事实上,我每天都在使用的Eclipse想要把我变成一头蠢猪。于是,我买了一台Mac电脑,开机后十分钟内我就买了一套TextMate装了上去。
Flash forward 6 years, and I was enamored with TextMate. I was working a job doing Java development, but at the same time learning Rails and working on Rails projects in my spare time. It felt like every article I read and screencast I watched was demonstrating how to accomplish text editing zen with TextMate. The fact that I was using Eclipse every day was filling me with nerd rage. So I bought a Mac and within 10 minutes of turning it on had purchased TextMate.
说老实话,这两种编辑器没有一种使我成为一个更好的程序员。
I can honestly say that neither text editor change made me a much better programmer.
优秀的工具并不会把你变得更优秀。你使用的工具确实很重要。事实上,它们非常棒。但老虎伍兹即使用几根树枝也能把我们全部打败,梅西即使不穿鞋也能把我们踢的很惨,拉斐尔-纳达尔即使使用一个60年代产的老式木质网球拍也能把我们任何一个人打败。该死,他即使用乒乓球拍也能打败我们。技术,知识,以及锻炼出来的经验是你在与人对比中最重要的部分。
Great tools just don’t make you that much better. Your tools are really important. They’re wonderful, in fact. But Tiger Woods would beat all of us with a junky set of clubs, Messi would outplay us without any boots on, and Rafael Nadal could probably beat any of us on a tennis court with a classic wooden racket from the 60’s. Heck, he could probably beat me with a ping pong paddle. The skills, knowledge, and experience that you’ve built up are the most important part of the equation.
所以,工具造就不出程序员。那什么可以呢?我想,造就一个伟大的程序员的诸多因素都依赖于你所从事的事和与你共事的人,但从很多在软件开发领域取得了巨大成功的人身上,我看到了很多共同的特征,我觉得值得与你们分享一下。我并不确定这些特征你是否能学得到,或者你天生就有,但我强烈的感觉到,如果我能花更多了时间去追求这些特征,而不是钟情于更换编辑器,我一定能取得更大的进步。
So tools don’t make the programmer. What does? I think many aspects of what makes for a great programmer depend on what you’re working on and the people that you’re working with, but I’ve seen some common traits in people who have had a lot of success in software development that I felt were worth sharing. I’m not sure if these are skills that you can pick up or if they’re things that you’re born with, but I feel pretty strongly that I’d be in a great position if I worked a bit more on these traits and a bit less at switching text editors.
以人为本/People First
我知道的最好的程序员总是把人放在第一位。他们明白他们是在为人写软件,即使那只是一些复杂系统的后台程序或协议,除了程序员没有人会用到它们。他们写文档,因为这很重要。他们帮助其它人如何使用自己的程序代码。他们愿意付出更多的努力去解决更复杂的问题来让人们以正确的方式使用他们的软件。
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.
对学习有很大的胃口/Appetite for Learning
神奇的程序员对知识有一种可笑的饥渴感。他们总是对你说一些新的、有趣的东西。他们习惯于大量的阅读(不论在线的还是线下的),他们喜欢尝试,从中学到经验。他们对新出现的语言和平台毫不担忧恐惧。
Amazing programmers are ridiculously hungry for knowledge. They’re always telling you about something new or interesting. They tend to read a ton (whether online or offline) and they tend to love to try things out and learn from experiences as well. They’re not afraid of trying out new languages or new platforms.
掌握问题规律的本领/Skillful at Problem Pattern Matching
当你做开发有了一段时间后,你会发现有时出现的问题和你曾经处理过的问题看起来惊人的相似。能够识别这些问题,把过往的解决方案应用到你当前的问题上,这是一个很有用处的本领。如果每次都能改进这个方案,那是更好了。
Once you’ve been writing software for a while you start to see problems arise that look awfully similar to other problems you’ve dealt with. Being able to recognize those and transform past solutions to work in your current situation is a really valuable skill. Being able to improve on the solution each time is even better.
注意,这并不意味这你可以盲目的认为过去这个方案可行,现在它就一定可行。这种过往问题和现在出现的问题的类型匹配是很有技巧性的。你需要认真判断何时使用一个历史方案是可行的,什么时候是不行的。
Note, though, that this doesn’t mean you blindly say that because a past solution could work it must work. That’s where skillfully applying problems pattern matching comes into play. You’ve got to have an eye for knowing when it’s right to apply a past solution and when it’s not.
有一点神经质/A Little Bit Insane
我弟弟在高中时上了一次Python课,当我问他是否喜欢这课时,他说我脑袋一定出问题了才去愿意当一名程序员,他说编程是他这辈子子做过的最无聊的一件事。从某种程度上讲,他是对的。大多数的日子里我是对着计算机说话,而不是人。想到这些要把一行一行的基本的长长短短的语句拼成一个软件,我不由的打了大大一个冷战。并不是所有的人都喜欢做这种事情,但是我知道的最优秀的程序员绝对是热爱制作软件的。
My brother took a Python class his Senior year of high school, and when I asked him how he liked it, he told me I was insane to be a programmer and that it was the one of the most boring things he had ever done. To some extent, I think he’s right. I talk to computers way more than I talk to people most days. I get a huge thrill from the fact that I get to turn line after line of basically jibber jabber into working software. Not every person out there loves doing these things, but the best programmers that I’ve met absolutely love making software.
执着/Persistent
软件开发是一个实际上比任何人的想像都要缓慢的开发过程。它很费时间。有时候你必须要有最够的耐心去精雕细琢出你需要的代码。有时,作为程序员,我们会写出非常有趣的代码,但也有时候,我们不得不哭丧着脸去写一大堆过去曾经写过的代码。想想伟大的程序员之所以能坚持下来,是因为他们能看到他们所从事的事业的大蓝景,他们喜欢这一点一点走向目标的开发过程。
Software development is pretty much always slower than anyone wants it to be. It takes time. Sometimes you have to just be patient enough to crank out the code you need to write. Sometimes as developers we get to write really fun code, but sometimes we get the displeasure of writing a lot of code that we’ve basically written a hundred times before. I think the best developers keep going because they can see the big picture of what they’re working on and they love the process of building that end result piece by piece.
这就是我想到的构成一个优秀程序员的一些特征,但这并不是全部,所以我想听听你的观点。你认为是什么使一个程序员变的优秀?
These are a few traits that I think make for a really good programmer, but it is by no means an exhaustive list, so I’d love to hear your take. What do you think makes for a great programmer?