第26章
作者:林锐    更新:2021-12-03 17:32
  我们必须正视自身的不足与缺点,才会学到经验教训。可人们常有太多的虚荣,为了克服心理障碍,白白浪费了很多本该用于创造的精力。
  假设犯错误的人是诚实的并且是勤奋的。他愿意不带虚荣地改进自己。当这个人突然面对失败时,可能觉得自己一无是处,也许会不知所措,也许会病急乱投医。程序员都有一种共同的体会:在调试程序时,时常碰到只有十几行的程序竟会产生上百个编译错误;最后发现这么多的错误其实是由某一行程序错误引发的。当我们在工作中碰到挫折时,先要冷静地分析问题(事出有因哪),找出问题的内因与外因。内因是最主要的,应该予以最先解决。
  前几年,中国出现了一个叫“法轮功”的邪教,教徒达数百万之多,人民群众深受其害。不久前,全国的主要媒体对“法轮功”进行连续数月的声讨与揭露。目睹了很多受害人的哭诉后,相信人们能够明白“法轮功”是邪恶的、反动的。但在愤怒与心痛之余,我们不禁要反思:为什么那么多人轻信邪教?人们是否接受了教训?
  在电视上看到很多人的确作了深刻的检讨:“我真是后悔啊,跟错了李洪志(法轮功的头头)这个坏蛋,我对不起社会……。以后我一定要听党组织的话,党叫我干什么我就干什么,决不上坏人的当。”
  我觉得这些受害人一点都没有醒悟:他只知道法轮功是个邪教,并不知道自己为什么信了邪教。有些事情只要用脑袋去想一想就能分辨是非,可人们就是不去思考,却渴望能跟对“福星”,甘愿把自己的脑袋拴在别人的裤带上。难道这就是人民的纯朴与可爱吗?回顾一下历史,在“文革”时期,亿万人民跟着合法的党组织大干伤天害理的事,一干就是十多年哪!可见世界上哪个人哪个组织都不能确保绝对的英明。
  所以说“迷信”是傻子碰到骗子的结果。傻是内因,被骗是外因。傻子碰到好人未必能做出好事,傻子碰到另一个骗子就会做出另一件傻事。为了不让自己“傻”,善良的人们应该用脑子去多学一些知识,努力让自己来把握命运,不要急着把一生托给某个人或某个组织。
  软件人员在遭受项目失败并开始反省时,不要只是就事论事地仅把眼光锁在特定的项目上,吃一堑应该长好几个智才对。本书作者刚刚失败过,乐意乘热讲讲感受。
  我在读本科和硕士研究生时,一直信奉“创造性的事业要靠激情来推动”。我把这个口号贴在办公室里,并扔掉物理学专业天天编程。在读硕士研究生的第一年,我卖出了第一份软件。到我读博士研究生的第一年,我心想事成地获得了全国大学生电脑大赛软件展示第一名。那时候我自以为翅膀已经硬了,再回顾前些年的艰苦,不禁有“媳妇熬成婆”的悲壮感觉。于是我在杭州这个小地方略作宣传,在1997年10月份开了一家软件公司。
  我开始把“振兴民族软件产业”列入日程,并且提前担忧将来钱挣得太多用不完该怎么办。半年之后,我开始为软件产品作宣传,可并没有出现订单如潮、接应不暇的形势(事实上压根就没有反应)。我已经意识到市场没找对,但仍觉得软件中的技术很有价值,准备再开创“东方不亮西方亮”的新局面。于是我向只有一面之缘尚在北大方正工作的一位朋友求助。他是真真的软件高手,当我小心翼翼地展示约10万行C++代码的软件时,他竞在十几分钟内就指出多处重大的设计错误,使我目瞪口呆地意识到整个软件系统的价值为零。那种心痛啊,就象眼睁睁看着孩子被狼吃掉一样。
  1998年10月,这位朋友再一次从北京飞到杭州,三下五除二替我把只活了一年的公司给关闭掉。他放心不下,觉得我“恶病需用猛药补”,于是意尤未尽地把我捉到北大方正插在他管辖的部门,让我学习怎样做事情。北京寒冷的冬天可以营造一种凄凉的气氛,冲去一切可以自我原谅的借口。我并不是太爱虚荣的人,知道这次失败是我的毛病积累到一定水准忍不住喷发出来的结果。我绝不能以年纪尚轻不太懂市场与管理为理由轻率地敷衍过去。我把自己察觉到的数十个毛病列出来,日后一个一个克服掉。……本书的大部分内容取自我在一年前的教训录。
  改错之后,现在我不仅不难过而且挺快乐。觉得第一次失败很浪漫,值得怀念。刚开始写这本书时,我那位北京的朋友把脚伸到杭州来散步,顺手又给了我几帖药,可以用到我毕业。看来缺点是改不完的,补短和扬长要一起来。
  2.6 提高综合素责
  前面给软件开发人员加了过多的赞誉。一个技术出色的程序员可以自豪,但不可以目空一切。上天不可能赋于一个人太多的优点,以致于他没有表示谦虚的余地。
  我们在求学时可能太功利太挑剔,导致知识结构非常单薄,只怕到了晚年也成不了大器。当程序员擅长技术时,还要时刻留意弥补自己并不擅长的非技术才能。扬长补短才能提高综合素质。
  假如能回到中学时代,我希望能把文科学好。那时侯盛传“学好数理化,走遍天下都不怕”。我读中学时很无知,鄙视一切文科,现在后悔莫及。高考语文成绩54分(只比我的期望值低6分)。写作文的最高目标就是不逃题,考试前我总是反复祈祷:我没干过坏事,保佑我作文不逃题吧!上大学的第一天我竟然无法用普通话说出“去洗澡怎么走”,只好晃动澡票与辅导员打哑语。中学的历史、地理课也被我糟踏了,考试时只会填写任课老师某年某月某日在我家乡英勇就义,比谁的成绩更接近零分。更让我沮丧的是,这些行径都不是我发明的,我顶多是个跟屁虫而已,一点回忆的自豪感都没有。
  扔掉文科只学理科并不等同于“放下包袱,轻装前进”,倒象是摘掉了控制系统的机车,开不了多远就翻车了。我搞了八年的软件开发,没做出象样的软件来。倒是有同行意外发现我的文笔不错,是当作家的料。我发现自己在不该开花的地方结了一颗瘦涩的果子。曹操之子曹彰曾建议:“大丈夫当学卫青、霍去病,立功沙漠,长驱数十万众,纵横天下,何能为博士耶?”要后悔的事情太多了,只能现在做得勤快些。明知自己不成大器,但愿意亡羊补牢,力求学得更深更广。
  不要让人觉得程序员只管钻研技术,可以不懂世事并且应该自由散漫。程序员不该因为幼稚而显得单纯,应该是成熟了才变得单纯,才配得上这个充满活力的职业。
  2.7 小 结
  本章讲述做好程序员和程序经理的一些道理,为了剥去阻碍我们进步的那些虚伪,多唠叨了几个故事。
  中国经历了很多打斗、整人的革命,却没有一次赶上工业革命。在如今计算机横行的形势下,我们不能再掉队了。90年代初期,中国出现了一些程序员英雄,曾让我们激动过、崇拜过。但这些孤胆英雄们很快地几乎全消亡了,他们只留下故事,没留下更多的价值。再一次让我们意识到“振兴民族软件产业”不能依靠几个人一朝一夕的辉煌。软件人员勤奋学习和工作,不该只图将来能做成几件事情的快意,而应力求事业长盛不衰,才能推动整个民族软件产业持久稳健地发展。
  第三章 项目计划与质量管理
  在可行性分析之后,项目计划与质量管理将贯穿需求分析、系统设计、程序设计、测试、维护等软件工程环节。
  项目计划是要提供一份合理的进程表,让所有开发人员任务明确、步调一致,最终共同准时地完成项目。项目计划是要付诸实施的,不象用嘴巴喊政治口号,可以很夸张。软件的项目计划重在“准确”而非“快速”。
  提高质量是软件工程的主要目标。但由于软件开发是一种智力创作活动,很难象传统工业那样通过执行严格的操作规范来保证软件产品的质量。世上最小心翼翼、最老实巴脚的程序员未必就能开发出高质量的软件来。程序员必须了解软件质量的方方面面(称为质量因素),如正确性、性能、易用性、灵活性、可复用性、可理解性等等,才能在进行系统设计、程序设计时将高质量内建其中。软件的高质量并不是“管理”出来的,实质上是设计出来的,质量的管理只是一种预防和认证的手段而已。
  3.1 项 目 计 划
  做项目计划,如同给一个待出生的婴儿写传记那样困难。如果允许项目结束后再写计划,那就轻松多了,并且可以100% 地准确。
  历史教训让我们明白一个道理:如果一万年以后才会有一条阳光大道通向共产主义,那么现在就不要忙着砸锅炼钢赶英超美,免得在跑步奔向共产主义时把自己累死饿死。在做软件的项目计划时,应屏弃一切浮夸作风。只有“知已知彼”才能做出合理的项目计划。这里“知彼”是指要了解项目的规模、难度与时间限制。“知已”是指要了解有多少可用资源,如可调用的程序员有几个?他们的水平如何?软硬件设施如何?
  3.1.1 知己知彼
  首先要了解项目的规模、难度与时间限制,才可以确定应该投入多少人力、物力去做这个项目。在可行性分析阶段就要考虑这个问题。但不幸的是,人们在陷入项目不能自拨之前总难以准确地估计项目的规模与难度。这里经验起到了最重要的作用。