来源:CSDN
对很多人来说,这个标题未免有些不靠谱。但是这两个职业并非没有可比性。早期的程序员也都是一些精英,通常是一些职业数学家,培养一个程序员的成本并不比飞行员低多少。早期电子计算机的成本也非常高,为昂贵的计算机配置优秀的程序员是情理之中的事情。
随着摩尔定律的不断应验,计算机的成本越来越低,界面也变得越来越好。似乎程序员地位的下降是理所当然的事情。但是笔者认为,这并非是程序员失势的根本原因,而是软件工业的功利性造成的。下文中提到的飞行员,都是指战斗机飞行员。
驾驭比空气重的飞行器,可能是最有挑战的工作之一。培养一个飞行员需要量的时间和金钱,而且需要飞行员本身具有非常高的反射神经和身体素质。而且,优秀飞行员和菜鸟飞行员的差距非常巨大??在二战中,一个优秀的飞行员可以击落数十架敌机,有的王牌飞行员的纪录甚至达到了三位数。
编程并不比驾驶飞机简单多少,也许一个小学生都能写出 hello world,但是一个优秀的程序员需要掌握许多专业技能。好的程序员需要非常好的逻辑思维能力和应用数学功底,同时还需要手指具有非常好的灵活性。一个优秀的程序员敲击键盘的速度并不会比文字录入员慢多少。高级程序员能完成的事情对于初级程序员很可能是不完成的,或者需要的时间超过了一两个数量级(或者需要初级程序员成长为高级程序员)。
市面上可以买到一打的模拟飞行软件和五花八门的飞行摇杆。此外,很多人都可以负担遥控飞机的价码,能够远程控制真正的飞行器。驾驶真实的飞机并不会比编程有趣,大多数时候仅仅是从一点到另一点,即便是战斗机驾驶员,也不过是在视距外用导弹锁定敌人。但是飞行员在大众眼中是一种非常有传奇色彩的职业,毕竟有无数的小说、诗歌和电影谱写了飞行员的传奇。
市面上充斥着各种编程指南,但是并没有什么类似于模拟编程软件这样的东西。在大众眼中的程序员几乎不存在,他们所熟知的无非是米特尼克这样的肥胖的黑客。而在中国,程序员几乎成了高科技民工的代名词。
飞行员从来不是孤身奋战的,维持一个飞行员需要很多地勤人员。飞行员需要了解自己的飞行器,但是他们并不需要自己维修飞行器。飞行器很可能是世界上最复杂的一些电子机械混合体,只有资深的工程师可以维修这样的东西。此外,为了实施飞行任务,飞行员在执行任务时需要地面的指挥,还需要地面雷达站等单位提供数据链支持。一架航空母舰上面有数千人,飞行员不过百数人。
程序员就没有那么幸运了。有人说程序员像一些孤独的骑士,但是笔者认为这个比喻并不恰当??骑士还有随从和一个所属的组织。程序员似乎是全知全能的,他们需要自己安装开发软件,学习各种奇怪的软件,撰写文档,编制和调试程序。
我很少看到程序员向他所在公司的信息专家(IT Specialist)寻求帮助,反过来的情况倒是很多。
笔者认为,正是因为缺乏分工,制约了程序员的才华。如果把他们当作飞行员,那么他们不得不自己制定飞行方案,用简陋的工具建造和修理飞行器,最后还需要承担一切责任。
每个飞行员都是可以被替换的,任何一个飞行员都可以完成给定的任务。但是,从某种角度上来看,每个飞行员都是独一无二的,是不可已被替代的。空军对飞行员的重视远远超过了对飞行器的重视,因为他们很清楚,飞机可以按计划大批量地生产,但是飞行员不能。
严格的软件方法学希望把程序员变成流水线上的工人,认为只要有严格的管理手段和工作流程,程序员可以成为一些可以被替换的“零件”。正因为如此,软件工程中出现了所谓的软件架构师,无非是认为一个好的空军指挥官可以让蹩脚的飞行员使用高性能的飞机就能取得制空权。幸运的是,XP 一类的先进方法学把程序员重新推向了前台,并且提出了结对编程的概念??空军采用长机、僚机组合已经有几十年历史了。
飞行员总是可以享受新技术带来的便利,例如彩色的 HUD 和头盔瞄准仪等。当然,他们永远可以信赖自己的操纵杆,无论它是电传控制、液压控制还是机械控制的。总的来说,虽然飞行员需要面对非常复杂的输入设备,但是它们都是被精心设计的。这些输入设备可以让飞行员在最短的时间内完成对突发事件的响应。决不会有一个飞行员依赖层次化的用户菜单或者用户手册。
程序员则要悲惨得多,他们至今还在使用原始的输入设备。程序员依赖一种为了减缓输入速度而发明的键盘布局,或者说臭名昭著的 QWERTY 键盘。从某种程上说,键盘这种设备比驾驶舱中的按钮恶劣的得多,因为上面的每个键都是类似,没有任何特别的提示和保护装置。相当一部分程序员在纯文本编辑器中编写代码,而且其中一部分程序员可能是程序员中的精英。虽然现代的 emacs 和 vim 已经能根据文法分析用醒目的色彩提示不同的符号的含义,但是它们并不比七八十年代的文本编辑器先进多少。很多人认为一个程序员选择 emacs 这种原始的编辑器是因为其独立精神,但是笔者认为是因为所谓的集成开发环境通常还不如这些纯文本编辑器好用。现代的集成开发环境提供了很多优秀的特性,遗憾的是为了应用这些特性,程序员不得不经常在键盘和鼠标这两个截然不同的输入设备之间切换。至少目前为止,一个高级程序员使用简陋的 notebook 也比使用集成开发环境的初级程序员强很多。至少对笔者而言,使用集成开发环境并不能提高自己的开发效率。我见过很多优秀的程序员在开发时身边都放着许多厚厚的参考书,幕上也全都是各种形式的开发文档。程序员经常在锁定目标之后再去查询手册,了解如何才能将导弹发射出去。
正因为这样,笔者认为有必要改变现状。正因为此,笔者认为最重要的是程序员需要像飞行员一样进行思考,而像飞行员一样思考需要像飞行员一样工作,而这只能从人机界面入手。作为一个实践者,笔者已经买了由著名的 Logitech 生产的Extreme 3D Pro 飞行摇杆,琢磨如何使用它进行体面的编程工作。