本文是一位工作多年的软件工程师分享的经验和看法。他提到的一些现象有很多槽,从业者应该会遇到。不知道你能不能和他们产生共鸣。

01

我们公司的Windows软件已经有十几年的历史了,内容经过各个年龄段的工程师的整改已经很乱了。

这三个月,我自己抽空重写了整个主程序。本来几万行的程序被我重写了,只剩下几千行,功能一样,性能更好,架构也就那样。

前几天看完Alpha版,忍不住笑了,惊动了整个办公室。

02

重写这个节目期间,前两个月每周花在这个节目上的时间应该不超过四个小时。

后来趁着过年没事干。去公司加班几天,但是写程序的时间不会超过一天四个小时。

平时白天写两三个小时的程序。遇到瓶颈的时候,我就去做别的事情,或者干脆回家吃饭。晚上睡觉前,我躺在床上,用手机查看信息。第二天上班,自然会想到好的解决办法。

写程序是一种创造,不是辛苦。每天坐在电脑前不能超过十个小时。否则,加班只会让你的大脑更加混乱。

我认识的很多程序编写者,每天写程序的时间都不多。那么,我的职业经历是怎样的呢?

03

1995年,在美国盐湖城的一天,我陪着趋势科技创始人张明正帮他父亲过马路。

他突然对我说:“易经,我真的不懂。在软件行业,一个优秀的工程师的产出很容易就能等于一二十个平庸的工程师,而公司最多只需要付给他两三倍的工资。那为什么还有公司愿意为那些平庸的工程师买单呢?”

当时我刚博士毕业,当然不知道怎么回答他的问题;现在过了这么多年,还是不知道该怎么回答那个问题。

当时张明正问我那个问题,可能是因为我介绍了几个同学朋友在趋势科技工作。那些家伙都是以一为十,以一为百的高手。

当时趋势科技没有给他们十倍或者百倍的工资,但是也没有给他们太多的钱,给了他们很多股票。

后来潮流在日本上市,我的朋友都成了亿万富翁。他们的财富应该超过普通工程师的十倍和百倍吗?

04

写一个大程序,不是“很多人都能轻松搞定”。

如果是土木工程或者制造业,人越多产出越大。如果一个项目延期了,多带些人来帮忙。

但是在软件工程中,人越多越难协调,写出来的程序质量和效率越差。

那就是著名的“神话中的人月:给后期的软件项目增加人力,使其后期化”。

IBM在20世纪60年代开发OS/360操作系统软件时发现了这一奇特现象。

所以我不明白为什么大型软件公司会雇佣这么多软件工程师。

05

我当兵的时候,在台中第十军信息中心做过一段时间的信息员。

当时我有两个信息科学系毕业的大专兵,但是我觉得他们写程序太慢,跟他们解释就更麻烦了,不如我自己写快一点。

所以我告诉他们冷静下来,我会写所有的程序。他们两个觉得不好意思,就给我做了好吃的奶茶。

后来,我们成了好朋友。

06

写程序不代表写的越久越好,越厉害。

我年轻时在台大信息工程系,会向朋友炫耀说:“我的编程语言有一万多行编译程序。」

后来去布朗大学读计算机专业博士。毕业的时候喜欢向朋友炫耀:“我的博士论文的程序好强大,但是我只用了七八千行程序就搞定了。」

07

二流的软件工程师喜欢把简单的问题复杂化,写出别人看不懂的程序。

一流的软件工程师喜欢简化复杂的问题,写出结构清晰的程序。看完之后,人们觉得问题似乎很简单。

三流软件工程师崇拜二流软件工程师,因为他们觉得二流工程师写的程序看不懂,一定超级厉害。

三流的软件工程师不崇拜一流的软件工程师,因为他们觉得自己做的每件事都很好理解,看起来很简单。

只有一流的软件工程师才会佩服一流的软件工程师,因为只有他们才能看到其他一流的软件工程师有什么那么厉害。

中国软件业是这样,美国软件业也是这样。

08

直到20世纪80年代末,IBM一直是世界上最大的计算机公司。当时IBM找了一些以前做硬件制造的高管来负责软件部门。

那些高管根据自己管理制造部门的经验,决定用KLOC,也就是每个软件工程师每年写多少行程序来计算软件部门的效率。

结果软件工程师都是“长话短说”,写一堆又长又低效的软件程序。

09

要成为一流的软件工程师,必须熟悉计算机科学的各种基础理论,积累长期的实践经验。

我在布朗大学计算机系读博士的时候,作业很重。在操作系统课上,教授要求我们每个人独立编写一个包含文件系统和进程系统的迷你Unix操作系统。

编译器课上,教授要求我们每个人独立写一个编译器,每个模块一定要用两种以上的方式写,然后互相比较。

而安迪·范·达姆教授的计算机图形学简直就是人间炼狱。当时助教发了一份问卷调查,发现每个学生平均每周花40多个小时写那个班的节目,学生们几乎群起而攻之。

而修过以上三门课,没有被典当,拿高分的,就成了既懂理论又懂编程的大师和高大师。

10

我在布朗大学读博士的时候,估计大概有十几个我这个水平的作家。

但我们是我们系公认的最厉害的程序员,我们还是我的指导教授,Steve Reiss教授。他一个人抵得上我们这种级别的五到十个工程师。

关于他有很多传说。有一次我去他办公室找他,看到他在玩接龙。

他被我发现了,有点不好意思,赶紧告诉我他觉得Windows上的接龙游戏很好玩,但是他没有Windows电脑。

于是他花了四五天时间在自己的Sun工作站上写了一个类似的接龙游戏,包括彩色图像界面等等。

想玩电子游戏自己写一个?我想笑,却差点在主人面前跪下。

11

我在布朗大学认识的软件大师中,真正以写程序为职业,然后写出伟大且广泛使用的程序的应该不多。

因为有些人后来成为大学教授,教授通常不会自己写程序。时间久了,不知道他们还剩下多少本事。

后来有人为了拿高薪,去一些大公司写一些没营养没意思的节目。时间久了,不知道他们还剩下多少本事。

有的人去了行业工作,很快就升到了管理岗位,管理者一般不写自己的程序。时间久了,不知道他们还剩下多少本事。

所以程序员不多,继续写程序的就更少了。

12

美国软件业有个老笑话:如果同一个团队里有两个工程师,一个擅长写程序,一个不擅长写程序,那么后来被提拔为经理的人,一定是不会写程序的人。

因为团队需要能写程序的人留下来写程序。

13

在我最擅长写程序的时候,二十多年前应该刚拿到博士。当时了解了理论,积累了很多写程序的经验。我不敢说我能把一个算作一百个,但是把一个算作十个应该绰绰有余了。

可惜没多久我就升到了管理岗位,成为经理、副经理、总经理后,如果自己写程序,会被别人嘲笑。

于是我就不写程序了,我也学会了把更多的工程师放在自己的部门,不然战斗不够大,我会被其他部门和老板看不起。

二十年后,我的技能只有20%到30%左右。

14

我现在终于成了自己的老板。成为老板后,最大的好处之一就是开心的时候可以写程序。即使有人想嘲笑我,我也可以不理他们。

15

过年的时候我重写了我们公司的Windows主程序。完成后才知道自己的能力已经恢复到当年的三四成了,忍不住笑了。

但是,我还是觉得软件工程真的是一个很难理解的行业。虽然我自己是软件工程师,虽然我的博士论文是研究编程环境的,但是主题是我这里提到的问题。

本文转载自

1.《万行 几千行代码就能搞定,你为什么要写几万行?》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《万行 几千行代码就能搞定,你为什么要写几万行?》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/caijing/1684143.html