`

<<More Joel on Software>> 看起来简单, 实际上复杂

 
阅读更多

作者: 周思博 (Joel Spolsky) 译: Bo Yang 翻译 编辑: Billy Chen 编校 2002年3月4日


我们在CityDesk里有一个使用性上的小问题。

 

 

问题是这样的:你可以用菜单上“导入网页”的命令,从因特网上导入一个文件。你也可以用鼠标拖放的方法,从磁盘上导入一个文件。但是菜单上 没有“导入磁盘文件”这个命令,所以有些用户没有发现CityDesk 有这个功能,或者他们试图用“导入网页”这个命令去导入磁盘上的文件,结果造成无法成功导入。

 

 

我一开始想这个问题很好解决,大概的方法就是用一个两个页面的文件导入向导。第一页问你:“你要从哪里导入?”。如果你选择“磁盘”,第二页就会提示你选一个文件;你要是选择“因特网”,第二页就会提示你输入一个URL.

 

 

我差点就开始动手去实现我这个想法了,但是有些事情使得我并没有这样做。我决定先写一个小的规约再说。写出来的规约如下:

 

第一页

你要从哪里导入?

磁盘/因特网

 

第二页(磁盘)

标准的打开文件对话框

 

第二页(因特网)

用小浏览器让你输入一个URL

 

突然间我想到一个问题。Windows的打开文件的对话框,通常是由操作系统提供的。能不能把这个对话框放到我的文件导入向导里面呢?

 


嗯…

 

我查了一下。是可以这样做的,但这不是一件好玩的事,而且要花好几个小时的时间。我能不能不使用导入向导的方式呢?我重写了一下我的规约:

 

两个菜单项:

1)从网上导入网页 -> 显示URL输入对话框

2)从磁盘上导入网页–> 显示打开文件对话框

 

这就好多了。三分钟的设计时间,省了我几个小时的编程序时间。

 

如果你这辈子花了二十分钟以上的时间去编软件代码的话,你就可能发现了一条规则:事情没有看起来那么简单。

 

就像拷贝文件这样简单的事,都充满了危险。如果第一个参数是个目录会如何?如果第二个参数是个文件会如何?如果同名的文件已经存在于目的子目录会如何?如果你没有写的权限又会如何?

 


如果在拷贝文件的过程中失败了怎么办?如果目的地是在一个远程计算机上,但是需要身份验证怎么办?如果文件很大但网络连接又慢,所以你需要显示一个进度条怎么办?如果文件传输速度降到几乎是零了,你什么时候放弃拷贝而给用户一个错误信息呢?

 

 


一个面试测试员的好办法,就是给他们一个简单的操作过程,然后让他们列出可能出现的错误情况。一个在Microsoft面试时典型的问题就是:你怎样去测 试打开文件对话框呢?一个好的测试员,可以轻而易举地列出几十个令人难以想到的情况去测试(比如“一个文件显示在对话框里,然后你去打开它,但是在你按打 开的按钮之前,这个文件被另一个用户删除了”)。

 


好,我们得到这样一个公理:事情没有看起来那么简单。

 

软件工程里还有一个指导思想,那就是你要永远想方设法去减低风险性。一个要特别小心去避免的风险,就是项目进度延期的风险。项目延期很不 好,因为老板会训你,闹得你挺不高兴的。除此之外,这也存在经济方面的原因,那就是当初你决定给你的软件加某个功能的时候,你觉得这个功能只需要一个星期 就能完成。现在你认识到该功能需要二十个星期才能完成,那么你当初的决定当然就是错的。如果你当初就知道需要花掉二十个星期的话,你可能就作出不同的决定 了。你作出的错误决定越多,你公司的财产被一次性冲销处理的可能性就越大(甚至你们公司的标志会被收入债权人的仓库)。到时候你的前老板抱怨道:“我们公 司关门倒闭了不说,气人的是连上fuckedcompany的资格都没有。”

 

 

 

 

事情没有看起来那么简单,再加上减低风险性的指导思想,只能让你得出如下的结论:

 


先设计再编程序,先思而后行。

 


让你失望了,很抱歉。我知道你读过Kent Beck的书,所以你以为动手之前不做设计是可以的。对不起,那是不可以的。你修改程序不可能像修改设计文件那样“容易”。有些人总是发表这样的谬论: “我们现在用高级工具了,像Java和XML。 我们在几分钟之内,就可以改动程序里的很多东西。为什么不在程序里直接设计呢?”哥们儿,你可以在你自行车上加个发动机,但你不能把它变成汽车。如果你以 为把你拷贝文件的程序,由线程式改为抢占式,而且改得比我写这句话还快,那你就大错特错了。

 

 


不管怎么说,我不认为Extreme Programming是在鼓吹零设计的理念。他们只是说:“不要作任何无必要的设计”,这没有什么错嘛。但人们听到的并不是这样。大多数程序员是在找不 用设计的借口,所以他们像飞蛾扑火般投向“不用设计” 这个馊主意。这是一种奇怪的,让你事倍功半的懒惰方式。我懒得先在纸上把这个功能给设计好了,所以我就先写程序,然后发现不对,我就去改,结果反倒花更多 的时间。或者,更经常发生的是,我先写些程序,发现它不对,但是没时间改了,结果我的产品质量低劣,而且我还是要找出些借口,说明它为什么“一定要那样 “。那只不过是马虎潦草,缺乏职业精神。

 

Linus Torvalds攻击设计的时候,他是在讲那些规模庞大的系统。大规模的系统必须慢慢进化,要不然它们就变成Multics了。他不是在说你那个拷贝文件 的程序。你再想想,Linus Torvalds脑子里有一个很清楚的路线图,知道他要到哪去,所以他觉得设计没什么用,也不足为奇。但不要上当,基本上说那对你不适用。Linus Torvalds比我们聪明多了,所以他能干的事,不等于我们一般人也能干。渐增式设计及实现是好事。频繁地发布版本是可以的(但针对在大众市场上的软件 来说,频繁发布版本会使用户不高兴,绝不是个好主意——可以多搞些内部的里程碑取而代之)。设计上不要拘泥于形式,那只是浪费时间。我从来没有见过某个项 目得益于不动脑筋的流程图、UML、CRC,或者其他什么时髦的,花里呼哨的设计方法。至于那些Linus Torvalds说的系统,那些有一千万行代码程序的庞然大物,它们应该慢慢进化,因为人类还不知道怎样设计那种规模的软件。

 

但是当你坐下来写你的拷贝文件的程序,或者计划给你的软件下个版本增添功能的时候,你一定要先作设计。不要让报急的号角使你草草动手。

分享到:
评论

相关推荐

    More Joel on software

    美国著名程序员Joel Spolsky关于软件管理和技术公司管理精辟论述,读来受益匪浅,特别是其中给大学计算机系学生的建议。

    More Joel on Software

    Further Thoughts on Diverse and Occasionally Related Matters That Will Prove of Interest to Software Developers, Designers, and Managers, and to Those Who, Whether by Good Fortune or Ill Luck, Work ...

    Apress.More.Joel.on.Software.Jun.2008.pdf

    《More Joel on Software》是Joel Spolsky的著作,由Apress出版社于2008年出版。这本书深入探讨了软件开发、设计与管理领域的多样性和相关问题,旨在为软件开发者、设计师、经理以及与他们合作的人士提供有价值的...

    Joel on Software

    对于那些喜欢在不同设备上阅读或者有特殊阅读需求的读者来说,epub版的《Joel on Software》是一个不错的选择。 pdf(Portable Document Format)文件则是一种通用的文档格式,能够精确保留原文档的布局和格式。在...

    Joel on Software[English Version] .rar

    在《Joel on Software》中,Spolsky分享了他的许多核心观点,这些观点对于理解软件开发的本质及其背后的商业逻辑至关重要。以下是一些关键知识点的详细说明: 1. **软件质量**:Joel强调软件质量的重要性,主张开发...

    Joel On Software

    Joel On Software 大家都知道这个东西哈。挺不错的

    软件随想录 - More Joel on Software

    《软件随想录 - More Joel on Software》是乔尔·斯波斯基(Joel Spolsky)的一本经典著作,他是一位知名的软件开发者、企业家和博客作者。这本书汇集了他在软件开发、团队管理、产品设计等多个领域的深入思考和经验...

    软件随想录(英文版) - More Joel on Software

    根据提供的文件信息,我们可以推断出这是一本关于软件开发、设计与管理的书籍,作者是Joel Spolsky。本书包含了对各种与软件开发者、设计师及管理者相关的议题的深入探讨,同时也为那些与这些专业人士合作的人提供了...

    Joel说软件

    根据提供的文件内容,可以看出这是一篇关于Joel Spolsky和他的网站Joel on Software的文章,但文本中包含了大量的乱码和非中文字符,这可能是由于编码错误或原文本的特殊处理造成的。尽管如此,我们仍然可以从有限的...

    Joel_Spolsky对计算机学生的七大建议

    ### Joel_Spolsky对计算机学生的七大建议 #### 第一大建议:毕业前练好写作技巧 Joel Spolsky强调,对于计算机专业的学生而言,掌握优秀的写作技能是至关重要的。他通过举例说明了这一观点: - **Linus Torvalds*...

    软件随想录:程序员部落酋长Joel谈软件

    ### 软件随想录:程序员部落酋长Joel谈软件 #### 一、书籍简介与背景 《软件随想录》是一本由Joel Spolsky所著的著作,该书以其深刻的见解和独特的视角在全球范围内影响了无数程序员。Joel Spolsky是一位在软件...

    The Best Software Writing I

    根据提供的文件信息,我们可以推断出这是一本关于软件写作的书籍,名为《The Best Software Writing I》,由Joel Spolsky编辑选择并作序。虽然我们没有完整的书籍内容,但可以通过标题、描述以及部分版权页的信息来...

    js > swfobject.js 使用

    SWFObject.js不仅适用于简单的Flash内容嵌入,还可以配合其他JavaScript库和框架,如jQuery,实现更复杂的功能,例如动态加载和控制Flash内容。同时,它在在线教育、媒体分享网站以及互动广告等领域都有广泛应用。 ...

    joel 软件随想录

    软件大牛再出新书。相信第一本joel说软件 你也看了 想必收获不少 这本也不能错过

    概率方法十讲(英文版-by_JOEL_SPENCER)

    这些主题不仅仅是理论上的探讨,还包括了许多实际问题的建模和解决方法。 概率论的知识点非常广泛,它不仅仅包含一些基础概念,如随机变量、概率分布、期望和方差等,还包括了如大数定律、中心极限定理等重要的极限...

    软件随想录—— 程序员部落酋长 Joel 谈软件

    本书是一部关于软件技术、人才、创业和企业管理的随想文集,作者以诙谐幽默的笔触将自己在软件行业的亲身感悟娓娓道来,观点新颖独特,内容简洁实用。全书分为 36 讲,每一讲都是一个独立的专题。...

Global site tag (gtag.js) - Google Analytics