几千行代码就能搞定,你为什么要写几万行?
直到 1980 年代末期,IBM 一直是世界上最大的电脑公司。而当时 IBM 找了一些原来是做硬体制造的高阶主管来管软体部门。 那些高阶主管依照他们管理制造部门的经验,决定用 KLOC (thousands linesof code),也就是每位软体工程师每年写出多少行程序来计算软体部门的效率。 结果软体工程师们都「短话长说」,写出一堆长又没有效率的软体程序。 09 要成为一流的软体工程师,必须熟悉了解电脑科学的各种基础理论,也必须累积长时间的实务经验。 我在布朗大学电脑科学系读博士修课的时候,程序作业的份量非常重。上作业系统(Operating System)课的时候,教授要我们每个人独立写一个包含 File System 与 Process System 的迷你 Unix 作业系统。 上编译程序(Compiler)课的时候,教授要我们每个人独立写一个 Compiler,而且每一个模组还必须用两个以上的方法写,然后互相比较。 而上 Andy Van Dam 教授的电脑图学,那简直就是人间炼狱。当时助教发问卷调查,发现每位学生每周花在写那堂课的程序的平均时间超过四十个小时,学生们几乎要群起造反。 但是修过上述那三门课而没有被当掉、又拿高分的,就成了懂理论又懂写程序的高手、高高手。 10 当年我在布朗大学读博士的时候,我估计我们系上像我这种等级的写程序高手,大概有十来个吧? 但是我们系上公认最厉害的写程序高手,还是我的指导教授 Prof. Steve Reiss。他一个人大概抵得上五到十个我们这种等级的工程师。 关于他的传说很多。有一次我去他的办公室找他,看到他正在玩接龙游戏。 他被我发现了,有点不好意思,赶紧跟我说,他觉得 Windows 上的接龙游戏很好玩,但是他没有 Windows 电脑。 所以他就花了四、五天,利用零散的时间在他自己的 Sun Work Station 上面写了一个类似的接龙游戏,包含彩色的图像接口等等。 想玩电玩就自己写一个?我很想笑,但又差点在我师父面前跪了下来。 11 我在布朗大学认识的那些软体高手,后来真正以写程序为志业,然后写出伟大又广泛被使用的程序的,应该不多。 因为有些人后来去当大学教授,教授通常是不会自己写程序的。久了之后,我不知道他们的功力剩下多少? 有些人后来为了拿高薪,去一些大公司写一些很没营养又很无趣的程序。久了之后,我不知道他们的功力剩下多少? 有些人后来进入产业界工作,没多久就升上了管理职,而管理职人员通常是不会自己写程序的。久了之后,我不知道他们的功力剩下多少? 所以程序高手原本就不多,而一直继续在写程序的程序高手就更是稀有了。 12 美国的软体业有一个老笑话:假如有两个工程师在同一个团队,一个很会写程序,另一个很不会写程序,那后来升上经理的,一定是那个不会写程序的。 因为团队需要那个会写程序的留下来写程序。 13 我写程序的功力最高的时候,应该是二十多年前我刚拿到博士的时候,那时候我又懂理论、又累积了大量的写程序经验。我不敢说自己能以一当百,但是以一当十应该是绰绰有余的。 只可惜,没多久之后我就升上了管理职,而当上了经理、协理、总经理之后,假如还自己写程序的话,那是会被别人笑的。 所以我就不再写程序了,而且我也学会,要在自己的部门多摆一些工程师,否则阵仗不够大,会被别的部门瞧不起,也会被我的上司瞧不起。 二十年下来,我的功力大概只剩下两三成。 14 我现在终于自己当了老板。而当上了老板之后,最大好处之一,就是我高兴写程序就可以写程序。就算有人要笑我,我也可以不理他们。 15 我趁过年期间重写了我们公司的 Windows 主程序,完成之后,自觉功力已经恢复到当年的三、四成,不禁大乐。 不过我还是觉得,软体工程还真是一门很难以理解的行业。虽然我本身就是一个软体工程师,虽然我的博士论文研究的就是程序开发环境(Programming Environment),主题就是我在这边所说的这些问题。 |
Powered by Discuz! X3.4
© 2001-2023 Discuz! Team.