软件构建的核心就是管理复杂度

转载 2006年06月11日 15:23:00
首先,软件构建的核心就是管理复杂度。虽然书中有不少的篇幅来讨论变量、语句等等这些编程的基本要素,还包括代码改善和调整的策略和方法,可谓不无巨细。不过深入理解一下,这些内容都是围绕着上面这句话展开的,也就是软件构建的核心就是管理复杂度。而这一目标产生的根源就在于人脑智力同软件项目复杂程度之间的矛盾。书中常常会提到几个数字,差不多在6、7左右变化,因为这是人脑智力管理的极限,多了,就管不过来了,呵呵。所以,书中会有一些结论性的建议。比如构建可工作的类,内部成员应该控制在7(+-)2,也就是5个或者9个左右,如果都是Native Type的话,9个成员变量能管的过来,如果都是对象成员的话,5个也能保证你的头脑始终清晰。还有,比如程序中的嵌套结构,类似于If,循环啊什么的,要保持嵌套层次不能多于6层,而据实际调查,一般3层以上的嵌套就会使程序员非常的困惑和抓狂了;还有比如子程序的参数个数尽量保持在7个以下,要不然也记不住,别说7个了,没有现代IDE的帮助,我连4个以上的参数我都记不住,呵呵。
 
我想满足这些指标并不是很难的事情,而这些东西也给出了对于代码进行改善时候可以依据的标准。不过想要管理这种复杂度,从作者的书中总结一下,具体可能是以下几点:第一,分割,既然大脑管不过来,那就把系统进行分割,也就是从设计角度上抽象出若干部分,每次让大脑focus在一个部分上,这点我是有深刻体会,虽然我现在完全自己做的东西超不过15000行,不过也不能妄想自己把所有的部分都记住,如果抽象的不好的话,我就特别头疼,每天在代码中翻来翻去的,效率非常低;第二,清晰理解,其实这点跟上面一点是差不多的,只有清晰理解了抽象的含义,才能做好每个封装每个接口,这样在关注别的抽象部分的时候,其他部分需要记住和管理的更清晰也更简洁,因为不需要关注其他部分是如何实现的,只要按照接口和抽象来做就好了;第三,清晰表达,在程序中应该清晰表达逻辑和抽象含义,也就是增加程序的可读性,唉,这点太重要了,书上也围绕着这个不断的论述,上面提到那些事无巨细的部分反复的说着这一点,甚至连命名都有专门的一章来讨论。
 
第二点我觉得记忆深刻的就是:以程序员为本。可惜国内的我见过的企业做不到这些。其实以程序员为本不是说一个公司的文化,也不是说单纯就是项目管理人员的事情,其实,最底层的程序员也应当遵从这一条。代码首先是为了人而写的,不是为了机器。机器只会对机器码感兴趣,高级语言自然是留给人来看的。所以说,即便是最底层的程序员也应当奉行这一条,合作中更讲究这个。呵呵,话题又回到了上面提过的可读性的问题。当然,以程序员为本也可以延伸到企业文化或者项目组文化,毕竟在这个过程中,程序员追求的技术满足程度外行可能无法理解,不过理解起来也很容易,就像画家对于自己的油画,建筑师对于自己的建筑那种感觉。
 
“Programming is neither fully an art nor fully a science. As it’s typically practiced, it’s a “craft” that’s somewhere between art and science. At its best, it’s an engineering discipline that arises from the synergistic fusion of art and science.”现在我的理解,恰恰是这种艺术与科学相互融合的产物带给程序员无比的满足感。

程序的核心--复杂度

在《the art of unix programming》中,复杂度的控制被看的非常的重,里面一句话提到编程项目的核心就是对于复杂度的控制,以及simple原则其实也在讲这个事情。 我自己在08年...
  • ccanan
  • ccanan
  • 2015年10月05日 21:57
  • 3085

管理不到核心,就是瞎折腾

第一个故事:合格率的检查制度 二战期间,美国空军降落伞的合格率为99.9%,这就意味着从概率上来说,每一千个跳伞的士兵中会有一个因为降落伞不合格而丧命。军方要求厂家必须让合格率达到100%才行。厂家...
  • qq_34635109
  • qq_34635109
  • 2017年12月05日 12:51
  • 59

对敏捷管理模式核心价值的解读

敏捷核心价值的解读;敏捷与瀑布的优劣比较
  • baichuanzhong123
  • baichuanzhong123
  • 2016年07月31日 17:33
  • 673

读代码大全2——第五章 软件构建中的设计

设计是一个险恶的问题 你必须首先把问题“解决”一遍以便能够明确地定义它,然后再次解决该问题,从而形成一个可行的方案。这一过程已经如影随形地在软件开发中存在数十年了。 关键的设计概念 软件的首要技...
  • linjf2009
  • linjf2009
  • 2016年02月02日 20:19
  • 417

技术管理的核心内容——提高团队技能

最近与同事聊天,从软件质量保证的方法论谈论到了技术管理。技术管理的内涵到底是什么?在此通过这篇文章做一个小小的总结和适当的外延。 技术管理给人的感觉更多是工作量评估、项目计划、项目进度跟踪等,但这只是...
  • hzliyun
  • hzliyun
  • 2014年07月15日 11:11
  • 4408

Android高级 所有简单框架的主要核心代码

GreeDao 表的生成: @Entity(nameInDb = "student") //表名 public class Student implements Parcelable { ...
  • zz510661141
  • zz510661141
  • 2017年09月06日 08:51
  • 158

代码大全2-软件构建中的设计

当没人知道对一处代码的改动会对其他代码带来什么影响时,项目也就快停止进展了。...
  • sandyfish
  • sandyfish
  • 2015年07月28日 16:56
  • 237

树叶1:欢迎进入软件构建的世界

因为有树叶,才有了大地的绿荫,因为每天学习一点点,让知识在人们的血液中流淌,慢慢吸收,成为一种习惯! 今天需要分享几个知识点: 一、什么是构建? 首先如何定义什么是软件构建,在软件开发的过程中,...
  • fendouzhe_wupeng
  • fendouzhe_wupeng
  • 2012年07月24日 20:58
  • 260

过程管理的核心价值

制度化在过程改进中是很重要的观念。制度化意指过程已根深蒂固在工作的执行,以及执行过程的承诺与一致性。当压力来时,制度化过程仍被维持。然而,当需求及目标因过程而改变,过程的执行也需要改变以确保仍然有效。...
  • tomfshao
  • tomfshao
  • 2011年07月19日 11:06
  • 570

Ant系统构建工具的使用

nt是Apache旗下基于Java的开源系统构建工具(类似make、gunmake、nmake、jam),可以帮助程序员完成编译、打包、上传等功能。使用ant的大体步骤如下:1.下载程序2.配置ANT...
  • jiangteddt
  • jiangteddt
  • 2013年12月10日 09:19
  • 242
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:软件构建的核心就是管理复杂度
举报原因:
原因补充:

(最多只允许输入30个字)