按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
乎是够快了,同样的程序实在没道理在Word 里面就跑得
特别慢。
猜猜错虫在哪里?
很多程序设计师并未下功夫研究如何清除错虫。很多
人都是直接去看原始码,随便修改某个地方,再执行一次
看看错虫是否还在,如果还在,就回来改另一个地方,猜
猜看是不是这儿错了,如此猜了一回又一回。。直到错虫
消失。
80
微软研发
致胜策略下载
我之所以知道程序设计师用猜的方式找错,是因为当
他们实在找不出错虫在哪里时,就过来问我,“接下来该
怎么办?”这种心态好像是在游戏结束前“不玩了”,并
不是真正在寻找错虫出现的原因。
以我的经验,最有效的除错方式是用debugger (除错
工具) 设定一个暂停点,当程序执行到暂停点时,一一检
视变量的值是否正确,如果不对,针对这个变量往前找它
的变化,如果变量全对,就往下再设一个暂停点,继续执
行到那里再来看变量对不对。即使程序极复杂,要在庞大
的数据结构中转来转去,用这种方法总可以找到错虫,比
起用猜的方法要有效多了,如果靠猜测来找错,即使猜中
也不过是运气好,未必能找出错虫出现的真正原因。
我同时要提醒那些用看程序的方式来找错的人,应该
去读一下安德鲁·科恩尼(Andrew Koenig) 的《C 语言陷
阱》(C Traps and Pitfalls) 一书,里面有很多C程序的范例,
看起来都完美无瑕,但都有微妙的错误。要不然,有些杂
志定期会介绍一些附范例的C程序除错的技巧,也不妨看
看。
用看程序的方式找错,是既懒惰又无效率的方法,用
d e b u g g e r来找错虫是最快又最方便的,观察各变量在程序
81
微软研发·致胜策略
保持进度下载
执行过程中的变化,是非常有效的方法,绝对不要用猜或
用看的办法来找错。
在这个案例中,Word 小组为了对话窗的速度问题抱
怨了好几个月,使得做对话窗函数库的小组花了好多时间,
辛辛苦苦地把程序最佳化,希望这是最后一次修改,可以
满足Word 小组的需求。其实,只要有人去看一下Wo r d
是怎么处理对话窗函数呼叫的,那问题早就迎刃而解了。
当然,不应该要求函数库的制作小组来测试应用程序,
因为调用这个函数库的应用程序总有数十上百种。然而,
函数库小组自己也该积极点,应该做一个专门测试本函数
库的假应用软件,对函数库单独测试,就能为函数库本身
的质量建立信心指导。在本例中,Word 小组已经大声地抱
怨了很久,而且函数库小组也找不出Word 在调用时有没
有弄错,我相信在我之前一定有人发现了只有第一次特别
慢的现象,却没有认真研究这一点,而把问题的焦点放在
把函数库最佳化上面,使得函数库小组无形中背了个黑锅。
身为主管的您,得随时睁大雪亮的眼睛,看看是不是
有个悬而未决的问题,一定要有个人(或是由主管自己)
来负责研究到底哪里出错,也许这种研究既花时间又无聊,
82
微软研发
致胜策略下载
但总比灾难发生之后再来花好几个星期收拾残局要好得
多。
不要浪费时间在错误的问题上,一定要先确定真
正的问题在哪里,然后才去改正它。
荒谬的菜单
有一次,Windows 使用者界面的技术经理惊慌失措
地跑来找我,告诉我麻烦来了,应用软件的小组提出了一
项需求,需要好几个星期才能做出来,可是目前离期限却
相当短,真不知道如何来满足这个需求。于是我问他,到
底是什么样的需求。
“他们希望我修改下拉式列表框(drop…down list boxes)
的格式,因为他们要能够在对话框外面使用列表框,而且
可以去掉滚动条(scroll bars),还要能够把列表框中的某些
项目弄成暗色以表示不可选取,他们还希望在鼠标移到列
表框的某些选项上时,自动弹出一个新的列表框,而在鼠
标移开时自动消失。”天哪!
83
微软研发·致胜策略
保持进度下载
听完他的陈述后,我必须承认,如果真的要把这些需
求全部完成,我们自己的进程就完蛋了;但我并不太担心,
因为根据我们的原则,不是每个小组都用到的程序是不应该
放在函数库中的。我最初的想法是为他们提供标准化的列表
框,然后要什么花俏的玩艺儿就让他们自己去写,但我同时
也很好奇,应用软件的小组为什么要这些奇奇怪怪的东西?
我想一定是个前所未见的、很特别的用户界面吧,所以,在
我答复他们做还是不做以前,我请技术经理去了解一下这个
大需求的原因。不一会儿,他们笑嘻嘻地回来了。
“他们要用列表框来仿真级连式菜单( h i e r a r c h i c a l
menu),就像在Windows 和Macintosh一样。”
现在我知道他在笑什么了:因为我们其实已经有新的
函数库,可以支持阶梯式菜单,而其他的小组还不知道这
件事。
我写出这个故事,因为大部分的小组在提出需求时,
都不解释原因,这种情形太普遍了,即使在工作以外也很
常见。住旅馆时,我有时候会去餐厅吃早午餐,偶尔会有
客人跑进来,看到大家都在吃早餐,就对服务生说:“你
们的早餐时间到几点才结束啊?”我看到这位饿慌了的客
人急着向后转,喃喃自语:“我真想吃午餐。”然后在服务
84
微软研发
致胜策略下载
生有机会向他解释现在也可以点午餐之前,已经飘然离去。
午餐的菜单明明已经摆在钟旁。
这位仁兄明明想要吃午餐,却问着早餐的结束时间,
他该问的是“现在供应午餐吗?”也许是思绪偏离了主题,
因而问错了问题。这种事经常发生的。即使是我,多年的
职业训练已经使我懂得问正确的问题,我还是会问我太太
贝丝,她什么时候看完足球赛回来,而我真正想要知道的
是今晚几点开饭。
问了错的问题,而导致错的答案,这种事情似乎已经
屡见不鲜。现在您知道了,每个人都有这种倾向,您可以
试着让自己养成习惯,先找出对方的目的,再来了解他的
问题。如果从他的请求中无法看出他的目的,您可以反问
他,在还没弄清楚他究竟想要做什么之前,不要贸然答应
他,宁可拒绝他的要求也不要浪费这种时间。
人们开口要求的东西未必是他真正想要的。
处理他的要求之前,请务必确定他究竟想要做什
么。
85
微软研发·致胜策略
保持进度下载
明确定义需求的范围
如果您能够先明确定义自己的需求,再向别人提出,
这是个避免在沟通上发生误会的好方法。假定应用软件的
小组用这样的e…mail提出需求:
在这次的新版本中我们需要阶梯式菜单。因为与下拉
式列表窗很类似,我们认为应该可以利用列表框来仿真级
连式菜单,所以想拜托您修改列表框,好让我们。。
如果我们的技术经理收到的e … m a i l是这样,他就不会
吓得跑来找我,而能立刻告诉他们我们已经有了阶梯式菜
单,不需要用列表框来仿真。更重要的是,我差点就直截
了当地拒绝了他们,若真如此,他们得多花上好几个星期
去做我们已经完成的东西。
如果您能很清楚告诉别人,您想要的究竟是什么,这
样别人才能给您真正需要的帮助,而不是做一些似是而非
的虚工。
就是说不
倘若我懒得追问为什么需要那怪异的列表框,而是一
口回绝了他们的需求,您想他们会不会说:“好吧,我们
了解。但是无论如何还是谢谢你们。”也许会。但更可能
86
微软研发
致胜策略下载
的是一场争辩,他们会说,函数库就是为了应用程序的需
求而设计的,我们有责任维护函数库,不断添加新的功能,
让它随时满足应用程序的需求。
当然,平息这场争论最简单的办法是忍气吞声地同意
他们的需求,这也就是函数库开发主管们最常碰到的烦恼。
负责函数库的主管们宁可息事宁人,也不愿为整个产品或
自己的工作团队坚持最佳的选择。
有时候,对方的请求其实是非常合理的,您也很想同
意,但因为您的日程排满了,实在爱莫能助,您也只好对
他们说“不”;然而,在我的经验中,很多主管为了避免
冲突,仍然会同意这样的请求,只是不知道该如何如期完
成这些过多的工作,只想到时候再说,也许船到桥头自然
直。事实上事情很少这么容易—船上若是载了太多货,
就是船身直了也过不了桥啊。
这些主管不了解,勉强自己接下不可能完成的任务,
实在是以长痛代替短痛的做法,而且长痛的是整个团队。
此外,到时候无法如期完成,倒是害得需求小组因此而做
了错误的日程安排,所以,最好的做法还是老老实实地拿
着您的日程表,对需求小组说明自己心有余而力不足的情
况,设法安排一个折衷的日程或工作内容。
87
微软研发·致胜策略
保持进度下载
请想一想其中的差异。当别的小组向您提出他们的需
求内容时,大概都会把期限排在未来一段时间之后,如果
您没办法满足对方的需求,至少在这一段时间内您可以和
对方商量出其他的解决方法。只有两种情况会让您成为坏
人,一是直接拒绝而不试着想别的办法,二是无条件答应
请求而最后食言。与其现在心存侥幸,到了时限却实在做
不出来,以致连累需求小组一起延误,倒不如现在想个折
衷的解决之道。
我们这样想吧:如果您想向银行申请房屋贷款,其中
一家银行马上拒绝您的申请,另一家则是一口答应,但等
到您已经签约成交时却又反悔。您觉得哪一家比较可恨?
我并不鼓励您在进程排不出来的情况下立即回绝,我
只是强调绝对不要答应别人自己做不到的事情。也许您很
想说自己做得到,但那只是希望。通常主管是眼看日程表
排得满满的,或是已发生延误,就够紧张了,如果再加接
下一件工作,就等于确定会延误,其焦虑可想而知。
对身处前线的主管而言,协调好这些彼此矛盾的工作
与日程,实在很不容易。但若是只顾一时的面子,几个月
后公司的大老板就会满脸怒容坐在您的桌子上质问,为什
么广告都上了书报摊了,你才承认进度落后。
88
微软研发
致胜策略下载
别放弃任何可行的方法
要协调原本就对立的双方,有一个要诀,就是寻求真
正的解决之道。如果您对需求小组说“不”是因为您很确
定您的小组人员实在无法在他们的期限之内完成所要求
的,您务必得协助他们寻求真正的解决之道。也许需求小
组自己也可以做这些工作,也许有一部分您的小组可以帮
忙,也许他们可以请求公司里其他的部门支持,说不定已
经有类似的程序代码已经完成,稍加修改就可以运用。不
试试看的话,谁知道呢?
说“不”也许令人不快,但这才是勇敢面对问题的态
度。说完“不”之后,就是设法解决问题的开始;明知不
可行而答应,就是问题发生的开始。
绝对不要答应别人自己做不到的事情,这样对双
方都有益无害。
我无法说“不”
有一回,Word 小组请求我的使用者界面函数库小组
89
微软研发·致胜策略
保持进度下载
做一些成本很高的工作,当时我们的日程排得满满的,如
果决定满足他们的需求,势必使我们进行中的工作发生延
误,这样就会影响到20 个以上的小组。我向Word 小组
解释我们无法做到的理由,以及我们能够做的,但就是没
有办法符合他们对期限的要求。我向他们建议,如果一定
要有这些功能,其实他们也可以自己做,然后由我们帮忙
写文件、测试以及日后的维护。Word 小组不太高兴,认
为我们本来就应该做使用者界面,况且这些功能是大家都
会需要的,这一点并没有错,但这并不能改变我们无法在
期限内完成的事实。我们为了这个问题僵持了两个月,我
终于屈服了,答应他们完成这些功能,并且从我带的另一
个项目中抽调一位程序设计师来帮忙。
很不幸,我实在无法找到合适而足够的人手,后果真
是不堪设想。Word 小组的期限过了几个星期,我才完成
工作,他们都气得要杀人了。我也延误了正常的进度,有
20 个左右的小组受到波及,到处都怨声载道。我非常后悔
当初没有坚持说“不”,现在搞得每个人都不高兴,唉!
你无法让每个人都满意
身为主管,您一定会面临各种要求,为了工作的效能,
90
微软研发
致胜策略下载
您得学会在适当的时机,适当地说“不