软件开发简单还是复杂?
2011-07-03 00:00
393 查看
软件开发是个奇妙的行业。你可以说它复杂,但与此同时,随便有个人,只要接受点培训就可以做软件开发。你也可以说它简单,但据统计世界上一半以上的软件项目会以失败收场。
强调软件复杂的最有代表性的观点来自《人月神话》:Brooks认为复杂性是软件的根本特质,而非偶然特质。强调软件简单性的观点则时见于国内某些MIS开发公司以及外包公司:他们大多时候会把需求分析(业务分析)的权重抬的很高,而把设计编码的位置压的很低。
这种迷思其实不难打破,但在此之前要对软件的特质做一点考察。
软件自身是一种固化的思维,其必同时具有思维的特质以及思维承载之物的特质。
这话有点搞,但并不难理解:
思维由概念和逻辑组成,所以软件必然由概念和逻辑组成---这是思维的特质。
当思维同数学结合时,思维具有数学的特质;当思维与商业逻辑结合时,思维具有商业逻辑的特质---这就是思维承载之物的特质。
任何人都可以思维,所以只要不是神经病患者,都可以做软件(好坏暂且不论),当然你要跨过编程语言这关。
思维的复杂度主要取决于多少和深浅两个维度。对应到软件,深浅取决于思维承载的是什么;而多少则取决于规模。比如:图形算法在深度上会比工作流要深;100万行的项目管理软件和10万行的项目管理软件的差异则主要是多少。
很多时候,很多人谈及简单或复杂的时候过度关注“深浅”这一维度,而忽略“多少”这一维度。
比如说:图形算法,TTS算法,优化性能,优化可靠性这类东西,很少有人认为其简单。但即使是很大规模的项目管理软件,很多人仍然认为它比较简单---因为这可以通过简单拼凑刚入行的程序员的工作而获得。
从结果上看,这种认识是灾难性的。
典型表现是:一群人对这一堆垃圾代码没人敢动,非修不可的时候,只能祈祷不要出问题。就像城墙如果足够坚固,古代时攻城只能用人命来填一样。搞定牵涉商业利益的垃圾代码也只能用人月去填。这时候垃圾代码就像黑洞,吞噬人力的同时,也吞噬利润空间。
结局可以形容为:程序员没希望,公司没未来。
这是把业务分析抬得过高,把设计编码压得过低的必然结果。所以,“认为上了规模的软件(暂定20万行吧)是简单的”是好像有道理,但其实十分危险的想法。
本文地址:http://www.nowamagic.net/librarys/veda/detail/812,欢迎访问原出处。
强调软件复杂的最有代表性的观点来自《人月神话》:Brooks认为复杂性是软件的根本特质,而非偶然特质。强调软件简单性的观点则时见于国内某些MIS开发公司以及外包公司:他们大多时候会把需求分析(业务分析)的权重抬的很高,而把设计编码的位置压的很低。
这种迷思其实不难打破,但在此之前要对软件的特质做一点考察。
软件自身是一种固化的思维,其必同时具有思维的特质以及思维承载之物的特质。
这话有点搞,但并不难理解:
思维由概念和逻辑组成,所以软件必然由概念和逻辑组成---这是思维的特质。
当思维同数学结合时,思维具有数学的特质;当思维与商业逻辑结合时,思维具有商业逻辑的特质---这就是思维承载之物的特质。
任何人都可以思维,所以只要不是神经病患者,都可以做软件(好坏暂且不论),当然你要跨过编程语言这关。
思维的复杂度主要取决于多少和深浅两个维度。对应到软件,深浅取决于思维承载的是什么;而多少则取决于规模。比如:图形算法在深度上会比工作流要深;100万行的项目管理软件和10万行的项目管理软件的差异则主要是多少。
很多时候,很多人谈及简单或复杂的时候过度关注“深浅”这一维度,而忽略“多少”这一维度。
比如说:图形算法,TTS算法,优化性能,优化可靠性这类东西,很少有人认为其简单。但即使是很大规模的项目管理软件,很多人仍然认为它比较简单---因为这可以通过简单拼凑刚入行的程序员的工作而获得。
从结果上看,这种认识是灾难性的。
典型表现是:一群人对这一堆垃圾代码没人敢动,非修不可的时候,只能祈祷不要出问题。就像城墙如果足够坚固,古代时攻城只能用人命来填一样。搞定牵涉商业利益的垃圾代码也只能用人月去填。这时候垃圾代码就像黑洞,吞噬人力的同时,也吞噬利润空间。
结局可以形容为:程序员没希望,公司没未来。
这是把业务分析抬得过高,把设计编码压得过低的必然结果。所以,“认为上了规模的软件(暂定20万行吧)是简单的”是好像有道理,但其实十分危险的想法。
本文地址:http://www.nowamagic.net/librarys/veda/detail/812,欢迎访问原出处。
相关文章推荐
- 【理想流】软件开发究竟是简单的还是复杂的
- 软件开发究竟是简单的还是复杂的
- 软件开发究竟是“难”还是“复杂”?
- 软件开发究竟是“难”还是“复杂”?
- 大规模复杂的软件开发还是深蓝深蓝的海洋
- [软件开发过程]反模式:简单的部分留在需求人员的脑海中,只描述最复杂的部分给我们听
- 简单区分软件开发中几个概念:C/S结构和B/S结构、三层结构和两层结构、MVC和三层架构
- 简单、直观的实现优于复杂、难懂的实现,最近开发扑克识别过程的总结
- Delphi越来越多自动释放的类型,到底是简单还是复杂了?
- 手机软件开发还是要以人为本
- Microsoft的软件开发简单流程
- 利用简单的一元线性回归分析估计软件项目开发时间
- 关于软件防止破解的思考,如何避免简单的跳转指令型的验证方法,如何设置更复杂的验证方式。
- 华为软件开发云的简单使用
- 记windows下简单的监控软件开发流程
- APP软件开发流程并不复杂
- 简单之美-软件开发实践者的思考 01
- 学软件开发.Net专业是考研好呢还是直接工作呢?
- 简单之美—软件开发实践者的思考—故事场景1
- 做软件开发是先学前端还是先学后台呢?根据目前的IT发展,做出了很好的解释