The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:
我不是在说那些有名气、高薪或是大型热门产品的作者。尽管他们的成果出色,但他们并不一定有才华。才华是上天赐予我们的礼物,我们中很少有人拥有它…否则就不能称之为才华了。我们都知道音乐、运动、诗歌或表演艺术中的才华是什么样子。无论他们如何努力,我们一眼就能看出谁有才华,谁在假装。我们能在与程序员进行短暂面试后做到同样的事情吗?我相信我们可以。
我决定阅读别人对面试艺术的看法,以及他们如何建议我们从所有普通软件编写者中挑选出有才华的人。Jeff Attwood建议我们注意一个人的热情、沟通能力、个人态度和团队合作能力。Joel Spolsky建议雇佣那些聪明、能做成事情的人。Haoyi给面试官提供了非常详细的指导,重点是候选人的编码能力、问题讨论能力、对约束条件的推理能力以及成为我们愿意与之合作的人。
所有这些都说得通,但这与才华无关。这是要找一个能有效地编写和维护意大利面式代码,并对此感到开心的人(也许只需适量的抗抑郁药)。
想象一下,你正在为一个由没有音乐天赋的人组成的合唱团招募另一个歌手。你需要才华吗?我怀疑有才华的人能够在那个合唱团中唱歌。嗯,也许如果你付得足够多,可以短暂地做到。就像任何其他行业的团队一样,大多数软件团队由普通的代码编写者组成,而不是有才华的程序员。现代编程,特别是在大型项目中,不是关于有才华的个体,而是关于平庸程序员的团队合作。这就是为什么所有面试大师都教我们如何找到另一个程序员:受过良好教育、训练有素、熟练,并且愿意编写另一个Spring控制器的人。当然,还要享受这个过程。
所以,什么是才能呢?
它是对事物进行结构化的内在需求。
就像音乐家一样,有才能的程序员实质上无法容忍听起来错误的东西:模糊、不一致、混乱、非理性和缺乏逻辑。有才能的程序员感受到这些东西,而平庸的程序员则会说“随便能用!”然后就继续工作了。
让我通过例子来解释。在过去的五年里,我一直在使用同一个简单的Java代码来面试每一个对我感兴趣的人。我要求他们审查它并找出问题。现在你试试看。你有五分钟的时间。
你找到了多少问题?这里是答案。我期望候选人能找到一个优先级排序的错误列表。其中最重要的问题在前面——它们涉及代码的结构性问题。平庸的开发者习惯于使用糟糕的代码,并且可以轻易忍受它。类名是Parser
,但它有get
和save
方法?谁在乎呢,只要能用就行!这对方法不是get
和set
,而是get
和…突然出现了save
?谁在乎呢,反正它也能用!等等。平庸的程序员在遇到不一致时不会感到烦恼。就像对音乐没有感觉的人一样,他们听不到任何错误!
当我面试程序员时,我不关注他们对Java的了解程度,他们对面向对象编程的理解有多好,或者他们已经完成了多少项目。当然,我也不关心他们有多么有可能讨人喜欢。相反,我关注他们对不正常的事物有多么憎恨。我检查他们对混乱的无法容忍程度。这就是我进行Java测试的目的。
老实说,他们中很少有人表现出这些品质。
这是因为很少有项目(和项目经理)需要这些品质。大多数流程和代码库都结构不佳。对这种结构的任何不容忍的迹象,或者诚实地试图引入一些纪律,只会惹恼平庸的程序员,而他们往往占据多数。一个有才能的程序员不断要求纪律和一致性,看起来像个疯狂的强迫症患者。没人知道出了什么问题,最多只是忽视他/她。此外,来自流行框架和糟糕管理原则的糟糕编码实践得到了敏捷开发及其教练的鼓励。他们训练我们对编程质量没有感觉。
目前市场需求的是平庸,而不是才能。
因此,如果你感觉自己没有多少才能,不用担心——在大多数项目中,没有才能的你会过得更好。
Do you think you have a #talent for programming?
— Yegor Bugayenko (@yegor256) January 5, 2020
Translated by ChatGPT gpt-3.5-turbo/42 on 2023-11-22 at 09:41