很多面试者希望能够在 IDE 中(而不是白板上)编写代码,因为:
>[info] 1. 主流 IDE 均带有智能提示,从而大大提升了编码速度
> 2. IDE 可以保证程序能够编译通过
> 3. 可以通过 IDE 运行/调试代码,找到程序的 Bug
我承认第 1 点,白板编程要比 IDE 编程慢很多,但这并不能做为否认白板编程的理由——因为白板编程往往是 API 无关(因此并不需要你去背诵 API)的一小段(一般不超过 30 行)代码,而且面试官也会允许面试者进行适当的缩写(比如把`Iterable`类型缩写为`Iter`),因此它并不能成为否认白板编程的理由。
至于第 2 点和第 3 点,它们更不能成为否认白板编程的借口——如果你使用 IDE 只是为了在其帮助下写出能过编译的代码,或是为了调试改 Bug,那么我不认为你是一名合格的程序员——我认为程序员可以被分为两种:
>[info] 1. 先确认前条件/不变式/终止条件/边界条件,然后写出正确的代码
> 2. 先编写代码,然后通过各种用例/测试/调试对程序进行调整,最后得到似乎正确的代码
我个人保守估计前者开发效率至少是后者的** 10 倍**,因为前者不需要浪费大量时间在 **编码-调试-编码** 这个极其耗时的循环上。通过白板编程,面试官可以有效的判定出面试者属于前者还是后者,从而招进合适的人才,并把老油条或是嘴遁者排除在外。
除了判定面试者的开发效率,白板编程还有助于展示面试者的编程思路,并便于面试者和面试官进行交流:
![白板编程](https://box.kancloud.cn/2015-09-15_55f81e3247184.jpg)
白板编程的目标并不是要求面试者一下子写出完美无缺的代码,而是:
* 让面试者在解题的过程中将他/他的思维过程和编码习惯展现在面试官面前,以便面试官判定面试者是否具备清晰的逻辑思维和良好的编程素养
* 如果面试者陷入困境或是陷阱,面试官也可以为其提供适当的辅助,以免面试陷入无人发言的尴尬境地