“本文为 RustFriday 飞书群线上沙龙 第十三期 (2021.7.3) 同名主题的文字版,并不是视频的简单记录,只是为了再次完善对这个主题的思考和表达。 视频回放地址:https://www.bilibili.com/video/BV1ZV411p7Y3/
在我的读者微信群里,有朋友提出了这个问题:《如何在面试中 确定 Rust 程序员水平?》。我认为这是一个好问题,但是在微信群里三言两语没有办法回答这个问题,至少没有办法把我对这个问题的想法表达出来。于是,就在今天组织了这次线上沙龙来讨论这个问题。
希望这次讨论,可以帮助引入 Rust 的公司一些参考。
在讨论之前,我用思维导图,画出了我对这个问题的思维框架。如视频内所示。。
今天的讨论就是围绕这个思维框架来展开。
要组织一次比较合格的面试活动,既对企业负责,也对应聘者尊重,需要遵循一些原则,或者说是一些出发点。
我认为基本原则包括但不限于下面两条:
所以,问题就来了,怎么样才算是一名合格的程序员?
一名合格的程序员,至少可以从两个方面考察:
工作态度
一名合格的程序员,至少是靠谱的。
靠谱,即做事认真负责,让同事领导信任。
有人问了,难道就给什么活都干吗?这不是让人接受压榨吗?
靠谱不等于逆来顺受,或者是做一个老好人。
靠谱是对自己承诺的事,做到有头有尾,至少让自己满意,不欺骗自己。
靠谱是你懂得拒绝,不随便承诺你自己很可能办不到的事情。
一名合格的程序员,至少是上进的。
他希望工作应该充满挑战,并且乐于接受挑战,喜欢在挑战中成长。
工作技能
一名合格的程序员,应该是掌握了元技能的人。
所谓元技能,包括学习能力、解决问题的能力、沟通能力和基础知识牢固。
学习能力,包括信息收集、信息提取和整理、信息输出的能力。
解决问题的能力,代表能够自己独立思考和定位问题,能够主动面对问题拿出解决方案,哪怕并不是最佳方案。而不是被动等待别人帮他解决。
沟通能力,包括可以安静和耐心地倾听别人和准确表达自己想法的能力。这其实是一种能够融入团队的基本素养。
基础知识,包括计算机组成、操作系统、网络、算法等基本技能。不一定是精通的,但至少形成了一定的知识体系结构。当然,不同岗位对这个知识体系结构的粒度是不同的。比如实习生和社招,要求就不一样。
一名合格的程序员,应该有一定的从业经验。
至少有一门已经掌握的语言,对软件工程和架构有一定的了解,并且拥有一定的领域知识。
结论
所以,能在工作态度和工作技能上匹配当前应聘岗位,就算是一名合格的程序员。
拿我自己来说。在我学习并努力掌握 Rust 的过程中,我发现了自己很多基础知识不足的地方。
学习和掌握 Rust 的过程,就是我提升自己的过程。
上述感受,并不是我一个人的。
这是Rust 社区很多人的共同感受:Rust 让我成为一名更好的程序员。
从工作态度来说,每个学习 Rust 的人并入门的人,是否靠谱,不敢说,但至少是上进的。
从工作技能来说,每个学习 Rust 的人并入门的人,学习能力都不会太差,元技能至少是及格的。Rust 语言又是一门系统级混合范式通用编程语言,能入门并进一步掌握 Rust ,是需要比较充足的基础知识才行的。
最关键的是,Rust 编译器能够帮助团队在短时间内检验这一切。但是其他语言就不敢说了。
这个问题意味着,如何在面试中判断一名 Rust 程序员水平是否合格。
或者说,如何通过只考察 Rust 相关问题而判断应聘者是一名(准)合格的 程序员,并且还是一名(准)合格的 Rust 程序员?
因为实际招聘是分为校招和社招,应聘者是新手和老司机 两类,所以面试的要求还是不同的。
如果是招 Rust 实习生,就变成了考察他有成为一名 Rust 程序员的潜力。
可以着重于以下几个问题:
通过以上五个问题(仅作参考),基本可以定位一个应聘者的潜力。当然如果应聘者已经在一定程度上掌握了 Rust ,则可以按下面的再继续考核。
面向老司机,可以从三个方面来考核。
我总结了一些问题(仅作参考),来考察应聘者的基本认知能力。
考察完基本认知能力之后,就可以进入代码实操阶段。
代码实操可以是上机测试,也可以说给定一段设计好的代码,让应聘者发现并解决问题。
以下推荐四个考察方向(仅供参考):
T
和 &T
的区别,生命周期 early bound
和 late bound
的区别,等等。Rust Quiz 并不是为了为难大家。以上供大家参考,抛砖引玉。
结合应聘的岗位职责和应聘者擅长领域,去问一些问题。
还有,是否阅读或贡献过哪些 Rust 的开源项目?有什么收获?
甚至可以布置一些开放性题目和要求,比如给定一周时间,让应聘者自己抽时间来完成一个指定的 Rust 项目。
以上是我对如何考察 Rust 程序员的一些思考,仅供参考。大家有不同的看法也可以交流。
社区的朋友 @huangjj 也分享了他的两次 Rust 应聘经验,记录在此:https://huangjj27.github.io/interview.html
另外,有朋友建议,是否可以整理一份面试题的checklist,类似于心理测验?比如,第一题选 A 就跳到第三题,选B就跳到第二题,最终有几种测试结果。我觉得这种方案是可行的,对于面试是比较省时间的,可以尝试做一份。但也不应该作为唯一参考。
[1]
Rust Quiz: https://github.com/dtolnay/rust-quiz
[2]
https://rustsec.org/: https://rustsec.org/