笔者认为,正是因为缺乏分工,制约了程序员的才华。如果把他们当作飞行员,那么他们不得不自己制定飞行方案,用简陋的工具建造和修理飞行器,最后还需要承担一切责任。
每个飞行员都是可以被替换的,任何一个飞行员都可以完成给定的任务。
但是,从某种角度上来看,每个飞行员都是独一无二的,是不可已被替代的。
空军对飞行员的重视远远超过了对飞行器的重视,因为他们很清楚,飞机可以按计划大批量地生产,但是飞行员不能。
严格的软件方法学希望把程序员变成流水线上的工人,认为只要有严格的管理手段和工作流程,程序员可以成为一些可以被替换的“零件”。正因为如此,软件工程中出现了所谓的软件架构师,无非是认为一个好的空军指挥官可以让蹩脚的飞行员使用高性能的飞机就能取得制空权。幸运的是,XP 一类的先进方法学把程序员重新推向了前台,并且提出了结对编程的概念——空军采用长机、僚机组合已经有几十年历史了。
飞行员总是可以享受新技术带来的便利,例如彩色的 HUD 和头盔瞄准仪等。
当然,他们永远可以信赖自己的操纵杆,无论它是电传控制、液压控制还是机械控制的。总的来说,虽然飞行员需要面对非常复杂的输入设备,但是它们都是被精心设计的。这些输入设备可以让飞行员在最短的时间内完成对突发事件的响应。决不会有一个飞行员依赖层次化的用户菜单或者用户手册。
程序员则要悲惨得多,他们至今还在使用原始的输入设备。程序员依赖一种为了减缓输入速度而发明的键盘布局,或者说臭名昭著的 QWERTY 键盘。从某种程
上说,键盘这种设备比驾驶舱中的按钮恶劣的得多,因为上面的每个键都是类似,没有任何特别的提示和保护装置。相当一部分程序员在纯文本编辑器中编写代码,而且其中一部分程序员可能是程序员中的精英。虽然现代的 emacs 和 vim 已经能根据文法分析用醒目的色彩提示不同的符号的含义,但是它们并不比七八十年代的文本编辑器先进多少。很多人认为一个程序员选择 emacs 这种原始的编辑器是因为其独立精神,但是笔者认为是因为所谓的集成开发环境通常还不如这些纯文本编辑器好用。现代的集成开发环境提供了很多优秀的特性,遗憾的是为了应用这些特性,程序员不得不经常在键盘和鼠标这两个截然不同的输入设备之间切换。至少目前为止,一个高级程序员使用简陋的 notebook 也比使用集成开发环境的初级程序员强很多。至少对笔者而言,使用集成开发环境并不能提高自己的开发效率。我见过很多优秀的程序员在开发时身边都放着许多厚厚的参考书,幕上也全都是各种形式的开发文档。程序员经常在锁定目标之后再去查询手册,了解如何才能将导弹发射出去。
正因为这样,笔者认为有必要改变现状。正因为此,笔者认为最重要的是程序员需要像飞行员一样进行思考,而像飞行员一样思考需要像飞行员一样工作,而这只能从人机界面入手。作为一个实践者,笔者已经买了由著名的 Logitech 生产的Extreme 3D Pro 飞行摇杆,琢磨如何使用它进行体面的编程工作。