加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 综合聚焦 > 移动互联 > 应用 > 正文

分析:几千行代码能搞定的为什么要写几万行?

发布时间:2021-07-10 16:41:24 所属栏目:应用 来源:互联网
导读:副标题#e# 前几天完成 Alpha 版之后,我不禁开怀大笑,笑声惊动整个办公室。 二 在重写这个程序的这段期间,前两个月,我每周花在这个程序上的时间应该不会超过四个小时。后来我趁着农历新年没事干,跑到公司加班数天,但是一天写程序的时间也不会超过四个
副标题[/!--empirenews.page--]

  前几天完成 Alpha 版之后,我不禁开怀大笑,笑声惊动整个办公室。

 

  二

 

  在重写这个程序的这段期间,前两个月,我每周花在这个程序上的时间应该不会超过四个小时。后来我趁着农历新年没事干,跑到公司加班数天,但是一天写程序的时间也不会超过四个小时。

 

  通常我白天写两、三个小时的程序,遇到瓶颈就去忙别的事,或者干脆回家吃晚饭,晚上睡觉前,躺在床上用手机查一下资料,第二天上班走在路上,就会很自然的想到不错的解法。

 

  写程序是一种创作,不是做苦工,不能每天在电脑前面枯坐十几个小时,否则超时工作,只会让自己的脑筋变得更糊涂。

 

  我所认识的许多写程序高手,每天写程序的时间都不会太长。

 

  三

 

  1995 年的时候,有一天在美国盐湖城,我陪着趋势科技的创办人张明正扶着他爸爸过马路,他突然跟我说:「宜敬,我实在搞不懂,在软体这个行业,一个优秀的工程师的产出可以轻易抵得上一、二十个平庸的工程师,但是公司最多只要付他两、三倍的薪水。那为什么还有公司愿意付钱雇用那些很平庸的工程师呢?」

 

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

 

  而当时张明正会问我那个问题,应该是因为我介绍了几位同学跟朋友到趋势科技工作。那几位都是以一当十、以一当百的高手。趋势科技当时没有给他们十倍、百倍的薪水,但是对他们也不薄,给了他们不少的股票。

 

  后来趋势在日本上市,我那几位朋友都成了亿万富翁,财富应该超过一般工程师的十倍、百倍吧?

 

  四

 

  写一个大型程序,并不是「人多好办事」。

 

  如果是土木工程或是制造业,人越多、产出就越大。如果一个计划延误了,就多调一些人手过来帮忙。

 

  但是在软体工程里,人越多,就越是难以协调,写出来的程序也往往品质越差、效能越糟糕。

 

  这就是有名的”The Mythical Man-Month: Addingmanpower to a late software project makes it later”。

 

  IBM在1960年代开发OS/360作业系统软体时,就发现了这个奇特的现象。

 

  所以我也搞不懂,大型软体公司雇用了那么多的软体工程师干嘛?

 

  五

 

  我在当兵的时候,有一阵子在台中十军团的资讯中心担任资讯官。那时候我手下有两名资讯科系毕业的大专兵,但是我嫌他们两人写程序写的太慢,而解释给他们听更是费事,还不如我自己动手写比较快。

 

  所以我就叫他们到一边凉快,所有的程序都由我来写就好。而他们两人觉得很不好意思,就泡了很好喝的奶茶给我喝。

 

  后来我们成了很好的朋友。

 

  六

 

  写程序并不是写的越长越好、越厉害。

 

  我年轻在台大资讯工程系的时候,会跟朋友炫耀说:「我写的程序语言编译程序,总共有一万多行耶。」

 

  后来我去美国布朗大学读电脑科学博士,毕业的时候喜欢跟朋友炫耀:「我的博士论文那个程序,功能那么强大,但是我只用了七、八千行程序就搞定了耶。」

 

  七

 

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

 

  一流的软体工程师,喜欢把复杂的问题简单化,写出架构清楚明白的程序,让人看了之后,觉得问题好像很简单。

 

  三流的软体工程师会去崇拜二流的软体工程师,因为他们会觉得二流工程师写的程序都看不懂,一定是超级厉害;

 

  三流的软体工程师不会去崇拜一流的软体工程师,因为他们会觉得一流工程师所做的事情都很好懂,好像都很简单。

 

  只有一流的的软体工程师才会佩服一流的软体工程师,因为只有他们才能看的出来,其他的一流软体工程师厉害在哪里?

 

  台湾的软体业如此,美国的软体业也大致如此。

 

  八

 

  直到1980年代末期,IBM一直是世界上最大的电脑公司。而当时 IBM 找了一些原来是做硬体制造的高阶主管来管软体部门。

 

  那些高阶主管依照他们管理制造部门的经验,决定用KLOC (thousands linesof code),也就是每位软体工程师每年写出多少行程序来计算软体部门的效率。

 

  结果软体工程师们都「短话长说」,写出一堆落落长又没有效率的软体程序。

 

  九

 

  要成为一流的软体工程师,必须熟悉了解电脑科学的各种基础理论,也必须累积长时间的实务经验。

 

  我在布朗大学电脑科学系读博士修课的时候,程序作业的份量非常重。上作业系统(OperatingSystem)课的时候,教授要我们每个人独立写一个包含File System与 Process System的迷你Unix作业系统;

 

  上编译程序(Compiler)课的时候,教授要我们每个人独立写一个 Compiler,而且每一个模组还必须用两个以上的方法写,然后互相比较;

 

  而上 Andy Van Dam 教授的电脑图学,那简直就是人间炼狱。当时助教发问卷调查,发现每位学生每周花在写那堂课的程序的平均时间超过四十个小时,学生们几乎要群起造反。

 

  但是修过上述那三门课而没有被当掉、又拿高分的,就成了懂理论又懂写程序的高手、高高手。

 

  十

 

  当年我在布朗大学读博士的时候,我估计我们系上像我这种等级的写程序高手,大概有十来个吧?

 

  但是我们系上公认最厉害的写程序高手,还是我的指导教授 Prof. SteveReiss。他一个人大概抵得上五到十个我们这种等级的工程师。

 

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读