写出能够解决问题的程序代码,或是能够运用数据结构或算法,还不足以成为一位顶尖的程序设计师!
知名顾问公司Conigent的架构师 Justin James 在美国科技网站 TechRepublic 上发表了“Seven Traits of Effective Programmers” 这篇文章,列出了能够成为编程领域中的大师们所具备的七项特质。有趣的是,从 James 的清单看来,想成为杰出的程序设计师,非技术性的特质反而比起技术性特质更重要。
如果你自认在技术方面已经具备了一定的程度与能力,想要迈向「神」级大师的等级,甚至有一天可以像某些硅谷工程师一样,帅气的跟客户说,「想找我写程序?请找我的经纪人谈!」本文或许可以提供你一些不同的启发,来看看 James 的清单,你是否也觉得这是杰出程序设计师的重要特质?
- 乐在学习,除了关注新的技术发展,也了解非技术知识的重要性
普通的程序设计师,通常是在需要某项技能时才会开始进行学习;杰出的程序设计师,对于各种知识都保持开放的学习心态,他们了解,技术能力只能在初期让你保持领先,若想成就卓越的能力就必须用实验、练习与阅读来灌溉知识的花园。
举例来说,普通的程序设计师只有在参与 WPF 项目时,才开始学习 XAML,而杰出的程序设计师则老早就开始进行学习 XAML,因为他们觉得这很有趣,而且除了 WPF 的应用之外,还会进一步涉猎相关的延伸知识,因此,他们总是能够实作出最佳的解决方案。
- 务实但不固执
遵守「编程规范 (Rules of Programming)」是一件奢侈的事,也很少有开发人员能够做到这一点,尤其当「编程规范」不是由专业的程序开发人员所撰写的,或不是由专业的程序开发人员所指导而产出的规范,因为「不专业的规则」是很难让人接受的。
我也常常遇到一些无法 / 拒绝执行项目任务的程序设计师,往往只是因为他的想法 / 建议并没有被接受成为最好的实践清单上。
程序设计师应该要注意的是:你的任务,是要实作出一个可以解决问题的方案,而不是产出一个呈现完美技术的艺术品。
- 真正了解问题之后,再思考解决方案
找问题的答案,可不只是在搜索引擎上输入几个关键词,或是到 Stack Overflow/MSDN forums 这些论坛上发布问题帖子询问其他网友这么简单而已。
像我就曾经有过几次在搜索引擎上搜寻不到想要的答案,或是在Stack Overflow/MSDN forums 上发布问题帖子却没有人响应我的状况。
但是,我还是必须设法解决问题,结果也顺利都处理完成了。
我并不是魔术师 —— 我只是知道如何寻找答案,以及如何找出问题的根源如此而已。
实务中,有许多的问题是属于情境式的(Situational),你必须像剥洋葱一样一层一层的往核心探究下去,如果仅仅只是依赖搜索引擎或者论坛,只是浪费时间而已。
所以,你应该学习如何找出问题根源的分析方法,以及学会对问题有了全面性的认识之后,才进行深入的分析与探讨,才能寻得相关的线索与解决方案。
- 拥有热情
如果你不喜欢撰写程序这份工作,就无法成为这个领域里的顶尖高手,但也有一些「把撰写程序的工作就当成是工作」的开发人员表现得还不错。如果你也具有这样的心态,那么,这可能会成为你自我突破上的一项障碍。
杰出的开发人员,不会只对撰写程序拥有热情,他们对老板、对项目与对自己所使用的技术都具有同等的喜爱,并且会将这些热情透过互动感染其他的项目成员。
我在实务经验中曾经遇过一些能力很好的开发人员,只是因为不喜欢所参与的项目,或是不喜欢项目中所使用的技术,而导致表现平平,甚至我自己也曾经历过这个阶段。
无论从哪一个角度来看,这样的开发人员都是不受欢迎的。如果你发现你正处于这样的状况,就应该试着去发掘出所参与的项目或所负责的工作中,对你别具意义之处,如果都找不到或是仍无法调整心境,或许可以考虑离开这个项目,因为继续下去对个人对企业而言都是一件非常不值得的事。
- 把谦虚与目标相结合,才能有更大的影响力
有些开发人员仅仅是比某些人聪明,或是比某些人多一点经验,就显得自命不凡。你可以当小庙里的大和尚 / 小池塘里的大鱼,但,不要因此而忽略了还有更大的庙 / 池塘。
你应该对人保持谦逊,要懂得尊重别人,能够听取并包容别人的观点与想法,在必要时懂得向他人求助,但是,绝对不要小看他人。
另外,你还必须重视与关心团队的表现,而不是只关心自己在工作中的得失。
- 具备冒险的精神
杰出的程序开发人员不会是得过且过的人。对他们而言,实践一个成功的解决方案的意义,远远胜过只是视本身的职务为一张长期饭票。主因为,他们将每次的任务都当成是一趟探险,他们期望从中学得不同以往的知识或体验,也为能让项目顺利进行而勇往直前。
- 先思考再行动是对的,但,不要忘记「过犹不及」
大多数的开发人员常犯的错误之一,是在还没做好系统分析时就一头栽入程序语法的规划中。
然而,杰出的开发人员往往是在他们确定规格书中的要求,与自己过去某段实作系统的经验相类似,在胸有成竹的情况下才会着手撰写程序。也就是杰出的开发人员在面临新的问题时,会先进行思考、计划和研究,再行动。
而且,杰出的开发人员不会让自己陷入「分析瘫痪(Analysis Paralysis)」的陷阱中,这是指程序在开发初期,进行系统分析时,常会因为执着于想掌控所有可能的变化与意外,而造成大量时间的浪费,反而因此让项目停在原地,陷入无止尽的假设中。
他们知道在项目中应该对某些事件要小心谨慎,比如,个人的隐私或是金钱等,但是,若过于谨慎,就是浪费时间了,除非你评估的是像核子反应炉 (Nuclear Reactors)、或对冲基金帐务系统 (Hedge FundAccounting Systems) 这类具有危及众人性命或是个人生存条件的系统。
在项目中设计里程碑可以用来检视进度的状况是否在规划的行程中进行,或是有需要做调整的地方,这一点是非常重要的,甚至在必要的时候,宁可放弃或终止整个项目。