译自Quora:What distinguishes a great software engineer from a good one?
我没法全面的说明优秀和伟大间的区别,但是我知道有一些伟大程序员才有的特质:
能够在实用主义与完美主义间保持平衡
伟大的程序员能够写出够用/快速/脏(masterful/quick/dirty)代码也能够写出优雅/精炼/茁壮(elegant/refined/robust)的代码,然后能够明智的选择适合当前要解决问题的编程方式。有些程序员缺乏对细节的重视,有些常常陷入对细节过度重视的完美主义中。
不会讨厌调试和修复bug
普通的程序员总是畏惧厌恶调试,即使是他们自己写的代码。伟大的程序员却有着高涨的热情和不屈不饶的态度。虽然如果最后发现bug的不是他们自己的代码引起的他们会不开心,但是他们会解决这个bug,找到出错的代码。
合理的怀疑态度
一个优秀的程序员会对相应的问题给出一个似乎能够有效的解决方案,然后就可以安心下班了。一个伟大的程序员不会相信自己的代码直到这些代码已经被全面的测试过。这个在数据分析和系统管理中也有很多的体现。一个普通的程序员可能看到一个微小的不符(a small innocuous-looking discrepancy)然后忽略它。如果一个伟大的程序员看到这些异样他们会怀疑这后面是不是隐藏着更大的问题并且进一步的跟进调查。伟大程序员倾向于做很多角度的检查,这样可以发现一些细微的bugs。
纪律
最近很流行讨论效率、工作流等等。伟大的程序员能够把大部分的时间都投入到有效的工作中,没有时间刷朋友圈。每个人都有起伏波动,但是大部分人忽略了纪律对生产效率的影响。有很多有才华的人没有出人头地只是因为他们懒。
经验
只有聪明才智是不够的,软件开发中存在着非常多潜在问题,即使是最聪明的人也不可能把这些全部解决。但是足够多的经验可以让你有一种直觉,可以让你的代码减少很多的错误,因为你之前已经犯过这些错误。
产品意识
很多工程师花了很大的精力去改进一些事情然而这对整个产品而言并不重要。伟大的程序员能够明白当前公司的使命:他们能判断出什么事情是重要的,什么事情是次要的。他们会权衡当前的优先级,即使几个月里没有给他们安排具体的工作,他们依然能够做出有效的工作,因为他们知道对公司而言什么事情是重要的。
社交意识
伟大的人能够习惯和他人合作、领导他人、指导他人或者被领导,被指导。他们不是书呆子,和他们相处很愉快。他们明白证明某人错误和说服他们认为你是对的是两码事。
欢迎关注我的微博:@没故事的卓同学