当前位置: 首页 > news >正文

从要大褂还是内裤看软件设计与开发过程

从要大褂还是内裤看软件设计与开发过程

有个相声说,某人买了一丈布,要找裁缝做大褂。其妻自告奋勇,称自己也会做,就接手做了。两个月后问她,说做是做,只是把布剪坏啦,改做小褂吧。如此循环,从大褂变成小褂,小褂变成肚兜,肚兜变成内裤,内裤变成口罩,最后只好扎了墩布。

闲话表过,再表闲话。

话说Mitch Kapor以数十亿美金高价把一手创建的Lotus公司卖给IBM后,做了一段投资人,又回归技术界,创立一家开源基金会。为了实现心目中“最好的PIM软件(个人信息管理,类似Outlook那样的)”,投入百万美元,聘请了一群最NB的程序员(包括Netscape元老级程序员、Macintosh操作系统核心程序员、微软资深开发工程师……),动手开干。有近乎奢侈的资源(财力、人力、时间),照说项目应该顺利进行吧。其实不然。这个名为Chandler的项目,从2000年开始立项,开发过程中软件功能列表一再缩减,直至今日尚未推出1.0正式版本。测试版本在我的Windows 2003操作系统上,仍然无法运行。

看过上面两桩闲话,读者大概知道我想说什么了。雄伟的愿景往往流于空想,做软件难,第一难就在于蓝图太宏大。常有朋友找我帮他们做顾问,看看他们的软件/网站项目。通常的过程会是这样——

(演示、讲解项目目标、功能等等)

我:请问,这是你们真正想要的东西吗?

对方:是,我们想做最好的xxx。

我:请问,你们打算花多长时间来做这个项目呢?

对方:三个月。

我:坦率地说,你们不可能做得到。我的建议是,把刚才说的功能先砍掉一半,再砍掉三分之二,剩下的部分,大概就是三个月之内你们能完成的部分了。

对方:……

产品设计者往往会想得太多,把所有可能路径都设想在内。而开发者则往往会低估项目难度,做出太过乐观的判断。这样的结果就是,以为可以在过短时间内完成过于庞杂的功能。危害有二:其一,项目无限期延误;其二,功能不断缩减。六个月甚至一年之后,大褂没做成,千疮百孔内裤倒是有一条。与其如此,不如一开始就以内裤为目标好了。

昨天有人问我,为什么是“先砍一半再砍三分之二”而不是“砍掉六分之五”。我说的“砍”,不是简单按字母顺序嚓嚓嚓,而是一个讨论、思考的过程。第一步去除一半,第二步去除一半的三分之二。起初设想出那么多功能,肯定花了不少心血。现在要砍,每一项都显得那么宝贵而舍不得丢弃。反复斟酌、流泪放弃,最后剩下的,是软件/网站项目最最核心和关键的功能,也是以目前资源所能完成的工作。以后,再视运营情况加以增补。

我想,做其它事,或许也可以采用类似的方法吧。大褂还是内裤,这是一个难题。以我之愚鲁,大褂不敢妄想,甚至没准内裤也做不出来,那就踏踏实实、裁剪缝制一个真有用的口罩吧。

注:本文转自:http://blog.csdn.net/grhunter/archive/2008/01/10/2033220.aspx

相关文章:

  • python高维数据存储_使用python实现多维数据降维操作
  • 代码,梦
  • python求两个时间相差的天数_Python计算两个日期相差天数的方法示例
  • python 序列化压缩成字符串_python 序列化模块之 json 和 pickle
  • 2005年10月--至今,开发过的项目
  • 红黑树的原理_Linux内核-红黑树的实现原理及应用
  • python整型数据源码分析_Python 源码剖析(二)【整数对象】
  • 如何选择适合自己的 Linux 发行版
  • ttc格式安装到手机_水电安装维修学习资料免费赠送
  • 服务器选购前的考虑
  • python bool函数应用_Python如何在bool函数中取值
  • 如何在网上选购一本好书
  • python中numbers什么意思_Python 基础知识全篇-数字(Numbers)
  • 控件Repeater的嵌套使用
  • python中迭代器机制_浅谈Python中的可迭代对象、迭代器、For循环工作机制、生成器...
  • 【391天】每日项目总结系列128(2018.03.03)
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • css的样式优先级
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • JavaScript类型识别
  • java小心机(3)| 浅析finalize()
  • Linux CTF 逆向入门
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • Spring Cloud Feign的两种使用姿势
  • underscore源码剖析之整体架构
  • Yii源码解读-服务定位器(Service Locator)
  • 测试开发系类之接口自动化测试
  • 服务器从安装到部署全过程(二)
  • 解析带emoji和链接的聊天系统消息
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 跨域
  • 两列自适应布局方案整理
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 用mpvue开发微信小程序
  • 用Visual Studio开发以太坊智能合约
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (LeetCode C++)盛最多水的容器
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (未解决)macOS matplotlib 中文是方框
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • .net core Swagger 过滤部分Api
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .net core 控制台应用程序读取配置文件app.config
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET处理HTTP请求
  • @ModelAttribute使用详解
  • [ C++ ] STL---仿函数与priority_queue
  • [1204 寻找子串位置] 解题报告
  • [20160807][系统设计的三次迭代]
  • [ACL2022] Text Smoothing: 一种在文本分类任务上的数据增强方法
  • [BUUCTF 2018]Online Tool(特详解)