我们天天在开发软件产品,有必要思考一下软件产品的特点,我大致查阅了有关材料,做点总结:
-
知识密集
-
创造性
-
虚拟性(不可见性)
-
实现不具有唯一性
-
复杂
-
高附加值
-
逻辑性强(*)
由于软件所具有的这5个特性,导致了软件开发工作的复杂性。软件开发知识密集,意味着我们需要高智商的群体来完成,具有创造性也对人提出了很高的要求。虚拟的,看不见,就验不着,验不着的事就会有点悬,因此软件开发就必须千方百计的要让它看得见,文档、模型都是在设计阶段的要求。
看不见的问题,也导致客户在表述有关需求的难度,这个难度也正好是软件开发最不好解决的问题之一。
实现不具有唯一性,这个就麻烦了,每个人都可以有自己的做法,都能实现软件产品外部看起来的行为,但是里面怎么样,只有专业人士可以明白,这也导致了很多投机取巧的行为出现。
复杂,这个Dijistra在几十年做过一个总结,大意是说只有软件系统从底层到顶层的复杂性为9级。
高附加值,这个不知道是好是坏,好在于这个特性说明了软件的重要性,坏,也就说明了一旦出事的严重性。一旦软件投入使用,可能影响到一个企业的各个方面。
总的来说,软件产品是纯脑力劳动的结果,它不同于我们以往的产品。我们不能要求梵高一定要每天画出一副画,但社会确要求我们的工程师按照这个速度生产软件。
我们是脑力劳动者,却被像工人一样要求,我们是知识工人。