伯乐在线|初级开发者面试中的不合理问题( 二 )


我们使用了 listIterator 方法 , 它必须返回一个 ListIterator <T> 对象并声明注销时间 , 但是当你几乎快要完成一个复杂接口时 , 不知道又从哪冒出另外一个 。
我们所有的基本操作都已完成 , 并具有良好的测试覆盖率 。 我可以指出实现 List <T> 所必须的但 Java 类型系统无法支持的部分 , 这些部分留给实施者去实现就好 。 我们没有做范围检查的接入 , 当你查询任意位置的元素时会报空指针异常 , 而不是提示范围错误 。 我们跳过这部分是因为这不是必要的而且我们时间有限 。
我想象不出那些初级开发人员在遇到这样的问题时脑袋里会想什么 。 这是一个 Ruby 的开发岗位 , 我搞不懂为什么让一个新人去实现如此复杂的接口 。 当然 , 很多面向对象的想法可以从 Java 移植到 Ruby , 也许这才是面试的侧重点 。 我和 Stephen 能够承担这项任务的唯一原因是我很熟悉如何构建 Java 通用系统 。 当你写出如下代码时:
private <A> A reduceNodes(A accumulator, NodeCallback<A, T> callback) {
其中涉及一个类类型参数、一个方法类型参数和一个匿名回调接口 , 好像并没有用到 Java 语言 。 这个命令可以让后面的实现更简单直接 , 在面试中这样做的话 , 我很确定面试官一定会很困惑 。 如果 Stephen 和我这样解答的话 , 可能无法通过这次面试 , 这是个危险信号 。
继续上面的话题 , 这究竟说明了什么 。 这是一个压力面试 , 面试官给出一个问题 , 而很显然求职者无法在规定的时间内解决 。 再次重申一下 , 我很肯定没人能在 30 分钟内实现 List <T> 链表 。 这很不公平 , 那些擅长某种思维的人才会被过滤掉 , 因为平常很少有程序员会遇到这样的测试 。 更糟的是 , 这会打击很多人的信心 。 下一节中 , 我们将探讨一下这样给初级开发人员带来的影响 。
常春藤 CS Shibboleth
如果一个面试题无法筛选出合适的应聘者 , 那它还有什么意义 , 难道是要看应聘者面对无法解答的问题时的反应么?与其这样 , 还不如选一些合适的面试题 , 可以让面试官判断出应聘者是否成功解决了问题 。
人类很奇怪 , 喜欢建立部落群居生活 。 部落是史前最接近现代社会(在地理意义上)的人类群体 。 这意味着他们是很接近我们的人 , 我们都喜欢进行筛选 。 给面试官主观决定的权利意味着他们会选择最接近他们的人 。 这就是为什么很多公司用白板编程的方式筛选应聘者 , 那些从名校毕业有 CS 学位的求职者在白板面试环节表现出色 , 这应该是好学历的特权吧 。
有个问题不得不提 。 在过去几年中 , 非 CS 专业(考虑到我们这个行业兴起的年头 , 称之为非传统似乎有点可笑)的技术人员大幅增加 。 这些初级程序员大部分来自训练营 。 训练营不会教你如何构建红黑树或如何用 C 语言实现哈希表 , 他们没必要教这些 , 因为很少有学员毕业后会用到这些 。 这并不稀奇 , 因为当我开发 Rails 应用时 , 我的 CS 学位根本没有任何帮助 。
白板编程面试在大多数情况下是很令人苦恼的事 。 我自己也经历过很多次 , 而且从来没收到过回信 。 我是一个拥有 CS 硕士学位的顺性男 , 所以 , 至少在这件事上「选择像我们这样的人」的准则似乎没有奏效 。 我认为白板编程面试与大多数人的实际工作内容是相背离的 。
我发现一些问题 , 因为人们认为从事这个行业要有 CS 学历才可以 , 所以很多初级技术岗位并没有考虑训练营的学员 。 这样做有害无益 , 特别是在行业多样性方面 。 据我观察 , 训练营的学员比拥有 CS 学历的人涵盖更广泛的社会阶层 , 而且训练营的费用肯定比美国的「常春藤联盟」大学少得多 , 当然还有英国类似的大学(抱歉 , 英格兰中心论的读者) 。 合理的学费也有助于实现(但不完全)民主化和权利平等 。


推荐阅读