软件开发之: 做“工程”还是做“艺术品”
序:
最近经常脑子里会闪过一些想法, 但是很快就忘记了, 有些想法个人认为还是挺有价值的, 就这么忘了挺可惜的, 于是就决定记录在博客中,以便日后翻阅。
以下均为个人看法, 不对之处,欢迎指出, 我就不在下文重复说明这是“个人看法”了。
欢迎转载, 转载请注明出处。
正文:
软件开发,是在做“工程”还是“艺术品”?
我对工程的定义是: 在有限资源内, 实现一个预期目标, 且尽量接近(若达不到) 或超越(若达到了)这个目标。
我对艺术品的定义式: 在无限的资源内, 把一个东西不断趋近于想象中的完美。
做一个软件时, 如果是做开源项目、探索型项目或因兴趣等开发的项目, 大可以以艺术品为目标,不断挑战自己想象力与技术的极限;
但如果是做商业项目, 大部分情况不该以艺术品为目标。 因为那会忽视资源的限制(时间、人力、金钱、知识等),
而应以做工程为目标, 也就是在有限资源内, 尽量实现甚至超越需求的预期,需求可能来自客户或自己公司的产品经理。 而且在资源限制(以下简称限制)下,应该要允许缺陷存在, 不必吹毛求疵。
在限制下, 如果能实现需求的预期当然最好, 但实现不了也是很常见的现象,这也是软件工程几十年来致力于解决的问题。
有限制的软件开发, 是一个在不断抉择的过程。
在限制下, 无法完全实现需求预期的情况下, 我们经常要在以下两个结果中进行抉择:
1. 尽量实现功能需求, 但是质量暂不保证
2. 舍弃部分功能, 保质情况下实现部分需求
做哪种抉择,其实没有绝对的对错, 主要看这次工程的目的。
如果目的是演示, 如原型系统, 只要保证演示过程不会有bug出现影响演示效果, 背后的坑坑洼洼也许就不那么重要。
如果目的是放到生产环境真正运维, 而且面对的客户量并不小, 那么如果质量无法保证, 很可能会导致客户流失。
(但是我个人来说,一般倾向于第二种,仅个人偏好,不具参考价值)
软件开发是不断抉择的过程(上面好像已经说过), 当我们没有能力”兼得“的时候, 如果不下决心进行抉择, 例如明明资源不够, 还想完整实现需求的预期, 其结果未必是真的实现不了, 但是其过程很可能是大量的加班。
或者做了错误的抉择, 例如一个公司项目, 有明确交付日期, 却无限制的追求完美, 追求到每个微小的细节, 这么做最可能的结果是让项目严重延期甚至以失败告终。
这种追求完美也有不同的程度之分, 如只在主要部分追求完美的,又要比在次要部分追求完美的好一点。 如果在主要部分(如主要业务流程)不完美的情况下还不断追求次要部分(如某个按钮的圆角是否够圆)的完美, 那就更糟糕了。
都说完美是优秀的大敌,不是没有道理的。
(当然, 也有一些成功的商业艺术品项目, 如iphone, 再次膜拜乔帮主, 在大神面前, 我上面说的都是苍白无力的。 但是要做成一个iphone这样的”艺术品“级别的项目, 需要的东西太多,又有几个公司或几个人能做到呢?)
好了,我的话说完了。 欢迎指正。
最后,祝愿各位程序员或产品经理都不用加班。