developer.*上看到一篇文章What Is A Professional Programmer?讨论了作为专业的程序员所应该具有的一些素质。文章的第一部分讲了作者的经历,我把这部分略去了。我没有作逐字句的翻译,删减了一些内容,添加了一些自己的理解。撇开技术不谈,作为一个“专业”的程序员,在coding之外,还有许多方面需要磨练。

“专业”一词的含义
     成为一名“专业”的程序员意味着什么?“专业”地作任何事又意味这什么?对“专业”一词的定义可以是这样:通过技术挣到钱。但是真正的“专业”还有许多含义。从我的观点来看,还应该有以下几点:可信赖,团队精神,领导能力,沟通,不断提升的技术能力,对风险最小化的关注等。

可信赖
    
可信赖表现在多个方面,你是否可以完成一个任务,而不需要有任何人监督或检查,当别人请求你的帮助时你是否是可以信赖的。你是否可以保证客户的数据不被泄漏。在使用其他库或者工具是你是否遵守了协议等。

团队精神
    
你是否能够真诚的和团队成员协作,你工作是为了团队的利益,你是否能够信赖团队的其他成员,大家的目标是否一致。

领导能力
    
领导能力可以为你赢得尊重。了解团队中的每个人的这项技能的情况,确信你所分配的任务没有超出他的能力所及的范围。
    
领导能力不仅仅包括你去作项目中你最感兴趣的部分,还包括能够独立完成你所不喜欢的任务,而且不需要他人的帮助。你应当能够在需要的时候表现出你的领导能力,承担起责任。任何一个专业的程序员,他们会清楚的知道后续要作什么,而不仅仅是手头的任务。

沟通
    
尊重你的客户和合作者,尽可能的倾听他们的声音,这是沟通的关键,没有沟通项目根本就无法开始。
    
沟通是帮助客户解释,明晰他们的需求和获取反馈的最有效,最关键的途径。专业的沟通是有效的,在点子上的,不管你采取什么方式,电话,email,面对面的交谈或者书写文档。
    
对文档你最初可能认为只有程序员会用到,但是你会发现在一个严肃的项目中文档会关系到很多人,其他的程序员需要高阶层的API或者代码内嵌入的文档,管理者需要计划,进度,bug报告,而律师需要知道软件作了什么,什么时候完成的,用户则需要文档来知道怎样使用软件。

不断提升的技术能力
    
关注当前业界的趋向,最新的方法学,也许可以在你的项目中使用的库和工具。标准,文件格式和协议,你的潜在客户在关心什么。在保持对自己所在领域兴趣之外,尽可能拓宽知识面。要知道好的程序员从来都在不断学习。

最小化风险
    
记录下软件进行的改动,所有的bug,最好有一个软件来保存,管理。
    
只要对代码改动就有可能会引发错误,我们需要有版本管理工具和版本管理过程。
     
“专业”的程序员十分关心是否有足够的测试,程序员应当能够从测试人员所提供的信息发现更多的问题,因为程序员最了解自己的代码。同时保证回归测试的时候,所有的改动都已检查,确认过。
    
保持代码的简单和良好的风格也是管理风险的一种手段,如果你的代码容易理解,别人就很有可能发现其中的错误,同时,新手也更容易理解,学习。
    
客户经常会改变他们的想法和需求,因为他们认识到之前的需求不是他们真正想要的。你必须使自己的代码模块化,可复用,这样你可以更容易的应对这些变化。