软件开发简单还是复杂?

复杂性是软件的根本特质
服务器君一共花费了580.239 ms进行了4次数据库查询,努力地为您提供了这个页面。
试试阅读模式?希望听取您的建议

软件开发是个奇妙的行业。你可以说它复杂,但与此同时,随便有个人,只要接受点培训就可以做软件开发。你也可以说它简单,但据统计世界上一半以上的软件项目会以失败收场。

强调软件复杂的最有代表性的观点来自《人月神话》:Brooks认为复杂性是软件的根本特质,而非偶然特质。强调软件简单性的观点则时见于国内某些MIS开发公司以及外包公司:他们大多时候会把需求分析(业务分析)的权重抬的很高,而把设计编码的位置压的很低。

这种迷思其实不难打破,但在此之前要对软件的特质做一点考察。

软件自身是一种固化的思维,其必同时具有思维的特质以及思维承载之物的特质。

这话有点搞,但并不难理解:

  • 思维由概念和逻辑组成,所以软件必然由概念和逻辑组成---这是思维的特质。
  • 当思维同数学结合时,思维具有数学的特质;当思维与商业逻辑结合时,思维具有商业逻辑的特质---这就是思维承载之物的特质。
  • 任何人都可以思维,所以只要不是神经病患者,都可以做软件(好坏暂且不论),当然你要跨过编程语言这关。
  • 思维的复杂度主要取决于多少和深浅两个维度。对应到软件,深浅取决于思维承载的是什么;而多少则取决于规模。比如:图形算法在深度上会比工作流要深;100万行的项目管理软件和10万行的项目管理软件的差异则主要是多少。

很多时候,很多人谈及简单或复杂的时候过度关注“深浅”这一维度,而忽略“多少”这一维度。

比如说:图形算法,TTS算法,优化性能,优化可靠性这类东西,很少有人认为其简单。但即使是很大规模的项目管理软件,很多人仍然认为它比较简单---因为这可以通过简单拼凑刚入行的程序员的工作而获得。

从结果上看,这种认识是灾难性的。

典型表现是:一群人对这一堆垃圾代码没人敢动,非修不可的时候,只能祈祷不要出问题。就像城墙如果足够坚固,古代时攻城只能用人命来填一样。搞定牵涉商业利益的垃圾代码也只能用人月去填。这时候垃圾代码就像黑洞,吞噬人力的同时,也吞噬利润空间。

结局可以形容为:程序员没希望,公司没未来。

这是把业务分析抬得过高,把设计编码压得过低的必然结果。所以,“认为上了规模的软件(暂定20万行吧)是简单的”是好像有道理,但其实十分危险的想法。

本文地址:http://www.nowamagic.net/librarys/veda/detail/812,欢迎访问原出处。

不打个分吗? 还木有人打分噢!

转载随意,但请带上本文地址:

http://www.nowamagic.net/librarys/veda/detail/812

如果你认为这篇文章值得更多人阅读,欢迎使用下面的分享功能。
小提示:您可以按快捷键 Ctrl + D,或点此 加入收藏

大家都在看

阅读一百本计算机著作吧,少年

很多人觉得自己技术进步很慢,学习效率低,我觉得一个重要原因是看的书少了。多少是多呢?起码得看3、4、5、6米吧。给个具体的数量,那就100本书吧。很多人知识结构不好而且不系统,因为在特定领域有一个足够量的知识量+足够良好的知识结构,系统化以后就足以应对大量未曾遇到过的问题。

奉劝自学者:构建特定领域的知识结构体系的路径中再也没有比学习该专业的专业课程更好的了。如果我的知识结构体系足以囊括面试官的大部分甚至吞并他的知识结构体系的话,读到他言语中的一个词我们就已经知道他要表达什么,我们可以让他坐“上位”毕竟他是面试官,但是在知识结构体系以及心理上我们就居高临下。

所以,阅读一百本计算机著作吧,少年!

《深入理解计算机系统(原书第2版)》 布莱恩特(Randal E.Bryant) (作者), 奥哈拉伦(David R.O'Hallaron) (作者), 龚奕利 (译者), 雷迎春 (译者)

《深入理解计算机系统》从程序员的视角详细阐述计算机系统的本质概念,并展示这些概念如何实实在在地影响应用程序的正确性、性能和实用性。全书共12章,主要内容包括信息的表示和处理、程序的机器级表示、处理器体系结构、优化程序性能、存储器层次结构、链接、异常控制流、虚拟存储器、系统级I/O、网络编程、并发编程等。书中提供子大量的例子和练习题,并给出部分答案,有助于读者加深对正文所述概念和知识的理解。

更多计算机宝库...