优秀程序员的首要特性:判断力
公司在招聘程序员时,可能更注重开发者是否聪明,是否有深厚的开发技能等,但 Tammer Saleh 在 EngineYard 中发表文章《The Number One Trait of a Great Developer》中表示,判断力才是一名出色开发者所应具有的首要特征。下面是对该文的译文:
我发现很多公司在招聘 Ruby on Rails 程序员时,往往注重开发者的三个主要特征:足够聪明、大技术社区中的知名度、深厚的 Ruby 开发技能。其实这些考察点并不正确。虽然这三大特性很重要,但他们却忽略了一名出色开发者所应具有的首要特征:判断力。
关于 Jack 和 Dianne 的故事
Jack 是一个摇滚巨星。Jack 喜欢谈论世界上最酷会议中提到的最新发展趋势。他很重视在一个新项目中使用三种以上的新技术。当请他做一个基于互联网的控制后台,用于将烹饪方法与厨具进 行匹配。他投入很大的精力开始做此事。最终该后台中用到了 Google Protocol Buffers、node.js,具有可扩展性,却很难维护。
Dianne 是一个优秀的程序员。最初 Dianne 是一个 Unix 管理员,两年前才开始做 Ruby 开发。当被要求开发一个同样的系统时,她首先问了以下几个问题:
“预期会有多少厨具?”
“我们希望12个月内卖出500套厨具。”
“需要多长时间出一份报告?”
“大概一小时一次。”
“这网络的可靠性如何?”
“使用 WiFi,它很稳定。”
Dianne 使用 MySQL 数据库写了一个 RESTful API 结点。PostgreSQL 可能更适合,但她只懂 MySQL。
Dianne 采用的这个解决方案可以扩展到1万个用户吗?不能,但这个系统并不需要这样做。Dianne 的解决方案很简单、容易理解,具有更好的维护性。Dianne 知道它并不是最简洁的解决方案,但她却知道任何更复杂的事都会超出她现在的能力。
判断力很重要
当给定一个很有趣的“问题”时,没有判断力的开发者就会陷入精心设计最简洁解决方案的陷阱中。他们总会有一种很自然的欲望而导致过度设计该解决 方案,要么追求复杂度、速度和功能性,要么很简单地找机会演练一下他们所掌握的新技术。他们需要时常被检查,以确保不会在半路掉进“兔子洞”里。
更遭的是,他们并不知道什么时候才超出他们的能力,所以他们总会在整个项目中留下代码炸弹。
雇佣有判断力的员工
我会让我的团队判断应聘者是否聪明,是否适合我们的文化。而我负责判断他是不是有很好的判断能力。为了做到这一点,我会带他出去喝啤酒,并两个主要的问题:
1. 对于 Ruby 和 Ruby on Rails 框架,你最不喜欢哪一部分?为什么?
2. 请告诉我你最后一次使用的很有趣的技术?你从中学到了什么?
这些问题可以很好地帮助你,让一个开发者充满热情地谈论他们在什么时候充满激情,在什么地方情绪低落。从中你可以了解到很多,他们是怎样的人, 他们来自哪里。他们是否喜欢 NoSQL 这种数据库?他们是否了解什么时候不能使用它们?他们是否了解多线程编程中最难点?他们是否喜欢使用函数式编程、哈希函数,原因是什么?