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

大褂还是内裤

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

闲话表过,再表闲话。

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

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

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

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

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

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

对方:三个月。

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

对方:……

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

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

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

相关文章:

  • wpf datagrid 如何获取当前点击行_「Spire.PDF教程」如何复制 PDF 文档
  • 网络术语还在困扰你吗?
  • python做视觉识别机械手_DIY一个基于树莓派和Python的无人机视觉跟踪系统(转)...
  • 网管之路在何方
  • 判断两个list集合里的对象某个属性值是否一样_BAT面试题——22个集合框架(完)...
  • 在Linux上使用Qt编译WebKit
  • python 进度条_Python 如何实时显示进度条?
  • Massive Customization
  • python 批量下载财务数据_Python+Wind 批量下载上市公司年报 - Part 1/2
  • 使用qmake 单独生成Qt程序
  • 检测同心圆_负氧离子检测仪的工作原理与选择
  • oracle wrost practics
  • 物联网专科专业必修课程_河南专升本专科专业热度统计
  • FreeXploiT 成立三年感言!
  • springboot如何保证几个insert语句在同一个事务里_dele锁te amp; insert 死
  • 2017 前端面试准备 - 收藏集 - 掘金
  • css布局,左右固定中间自适应实现
  • Elasticsearch 参考指南(升级前重新索引)
  • gcc介绍及安装
  • Golang-长连接-状态推送
  • Idea+maven+scala构建包并在spark on yarn 运行
  • Js基础——数据类型之Null和Undefined
  • leetcode386. Lexicographical Numbers
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • TCP拥塞控制
  • Vue2.0 实现互斥
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 使用putty远程连接linux
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • postgresql行列转换函数
  • Spring Batch JSON 支持
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • ​【已解决】npm install​卡主不动的情况
  • !!java web学习笔记(一到五)
  • # C++之functional库用法整理
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • (3)llvm ir转换过程
  • (70min)字节暑假实习二面(已挂)
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • *2 echo、printf、mkdir命令的应用
  • .Net Remoting(分离服务程序实现) - Part.3
  • .net中生成excel后调整宽度
  • ::before和::after 常见的用法
  • ??eclipse的安装配置问题!??
  • @selector(..)警告提示
  • @SuppressWarnings(unchecked)代码的作用
  • [ Linux Audio 篇 ] 音频开发入门基础知识
  • [ 常用工具篇 ] AntSword 蚁剑安装及使用详解
  • [ 攻防演练演示篇 ] 利用通达OA 文件上传漏洞上传webshell获取主机权限
  • [20170728]oracle保留字.txt
  • [android]-如何在向服务器发送request时附加已保存的cookie数据
  • [HDU 3555] Bomb [数位DP]