他提出的解决方案非常初步。虽然从大面上看似能走通,但是关键点和细节点都无法体现。我紧接着围绕方案提出了一些问题,他都能不紧不慢地一一解答。
为了了解他技术的深度,我开始围绕方案问技术的实现细节。比如,模块间的通信机制、事件队列的处理方法、数据共享的方式以及网络交互的实现细节等等。
这些技术细节非常考验局部架构能力,但他都能说出自己的见解。
我们最终讨论出了一套方案,并整理出了技术的难点。整个面试过程就像是一个方案讨论会,非常地自然。
在最后,我问他对这件事情有信心做吗?他的回答大致如下:
这件事情会很难,而且很多东西都没接触过。但是事情是可以的,也有价值。在具体实现上会遇到很多技术难点,需要花时间,但一定能做。
他虽然没有正面回答问题,但是我很满意。主要因为两点:第一,他能正确认识到事情的难度;第二,他不惧怕挑战。
至于信心这东西,和决策者的坚定目标有强烈的关系,团队的管理者有足够强的目标,同学们就会有足够的信心。他既然不惧怕挑战,在后续工作中我要不断为他输入信心。
面试结束后,我录取了这位同学。基于以下理由:
1. 理解力强。他能非常快速地理解我的问题并作出回答。
2. 想问题全面。他能由大面到小点,循序渐进改进解决方案。
3. 勇于承认不足。虽然他面对没接触过的技术会主动承认不会,但还能提出个人观点。
4. 善于发现细节。他非常善于捕捉设计方案的细节,提出的某些细节都直接关系到方案的成败。
在平时编程工作中,一个工程师是否厉害,并不能简简单单从代码能力一个点上来衡量,而是要结合场景。
这些场景包括:对所做事情的理解、对未来的把控、对异常的避免以及细节的处理。
◆聪明和优秀程序员之间并无太密切的联系 ◆
前面提到过人类发明编程是为了弥补人类的大脑缺陷。人脑的使用度是有限的,学习久了要休息,工作久了要休息,想多了要休息。休息大脑无关于你的智商是高还是低。
为了减轻程序员大脑的负担,编程从机器语言发展到高级语言做了大量的改善,而且很多改善都是为了弥补人的智力缺陷。不信你看:
1. 将系统 “分解”,易于人脑理解。