程序员面试:面试者如何评价代码程序
这是我遇到的问题。
和你从不认识的人坐在一起,试图弄清楚他是个程序员还是个小丑。
我没有想侮辱任何人的意思,而且,我是第一个要感谢这么多年的教育和努力终于把我变成一个专业小丑的人。
但是,有些程序员,我的天。
就像最近,我面试了一位毕业生。我把他叫做Ada。对于程序员新手,我充满怜悯,为了和缓的帮他热热身,我给了他一道温和的问题来消解我们之间的陌生。
我让Ada写一段程序,在纸上,打印出“hello“这个词10次。用什么语言都行,我说。
下面就是Ada写出的。
不管怎么说,拼写是完全没有错误的。
我差点就被这些化妆成程序员的小丑给骗了。我本以为他会使用一些基本的循环句法。你说这种东西还要去告诉他吗?
是的,我觉得也没必要。
有些人喜欢集邮。我喜欢收集诡异的代码。我在代码审查的过程中收集它们,这些年已经有了丰富的收获。我收集它们主要是好玩,但在面试中它们却能派上大用场。
我会在一次面试中挑出10个代码例子,大多少是C#和TSQL代码,然后问面试者如何评价它们。
事实上,由于经常做这个,我已经记住了一段解说词,就像这样:
我会向你展示一些代码,这些代码都是在正式的代码审查中发现的,它们都是已经准备好要发布给客户的代码。你可以认为它们是经过编译,测试,能符合需求要求运行工作的代码。你需要指出的是这些代码中存在的一些涉及到日后维护工作的问题。
语法型小丑
这样,就比如我会展示一段像这样的代码
- if(long.TryParse(x, out number))
- number = long.Parse(x);
对于这段代码,你可能会惊讶,我希望程序员能发现这第二行代码完全是多余的。但语法型小丑会立即指出你没有声明x 和 number 变量。
“提醒一下”,我说,“这是从一大段程序中摘录出来的,它是编译通过的,而且经过测试。“然后我满怀希望的看着他。
语法型小丑执着的回复说“可是你确实没有声明这些变量!“
“你再说一次这些变量没有定义,你TM的再说一次,我看你敢。”
万事通女孩罗西型小丑
语法型小丑归罪于没有好好听,万事通女孩罗西型小丑问题更大了。
罗西女孩拒绝相信代码里有任何的错误,即使在我明确的说“这里有一些问题,你要找出它们!“很显然,在罗西女孩生活的魔幻世界里没有任何不好的代码。
“不会有写的不好的代码的,而且,你看我这可爱的头发!”
“我一眼就看出来了,我只是不知道如何向你解释“型小丑
用力的一弹纸,确信的一点头,很显然,这种小丑清楚的知道问题出在哪里。
但是就是在这关口,他们无法找到正确的词来解释清楚。
即使你给他几分钟让他想想,他们还是想不出来。你等他一整天,还是如此。
即使你等到海枯石烂、对面只剩下一堆骨架,你也等不到他们能找到正确的词语来答复你。
尽管他们有发现问题的锐智和本能,这类小丑不能表达出来,这不能不让人惋惜。
“等等!我知道怎么回事!可是,我怎么用简洁的话把它说清楚呢…"
小题大做型小丑
这种小丑很神奇。当能用迭代器时他们绝对不愿意使用简单的循环。当能用递归时,他们绝对不愿意使用简单的迭代。如果你想派人参加代码混淆技术大赛,这些小丑正是你要找的人。
“这代码很明显缺少抽象—代理—façade模式…”
愤怒型小丑
很多次我都会被礼貌的问候,与他们愉快的谈论天气,倒杯茶,安排妥当,开始一场关于编程的对话。
接下来的事情会让你无法招架。
愤怒型小丑很酷,沉着,镇定—在你问他第一个问题前。
“我怎么TM的会知道,这是TM的什么破问题”
并不是都这样糟糕
公平的说,如果某个人在面试我,他也许会认为我是个小丑,也许认为我是这些类型小丑的混合体。这是面试官的特权。
不仅如此,一些程序员会认为给他们面试的人正是马戏团团长,这是他们的特权。
不管情形是怎样,亲爱的程序员们,你要明白,我只是想在我们之间建立一种融洽的关系。但有时候,我发现这很难。
还是很有趣的。