《代码大全》读书报告

《代码大全》读书报告
2006年11月
【摘要】
本文主要讲述作者作为初学者,在学习《代码大全》时结合自身的一些体会和反思,特别是对代码大全所推崇的编程规范性和创建高质量代码的理解。
【关键词】
代码大全,编码,规范性,高质量,构建
一 问题提出从拿到《代码大全》时的那种困惑 ---- 感觉如此大块头的一本经典著作,我能看懂吗?后来,开始象“圣经”一样从开头阅读起来,发现讲的都是些特别经典和规范性的相关知识,确实很适合我这样的缺乏规范性标准的初学者学习。
在阅读的过程中,结合自己以前写程序的状况,时刻能从书中发现自己程序的缺陷,在作者运用例程的对比中找出改善的途径,这个时候真的有点激动人心。特别是对于以前自认为很成熟的写法,从书中才真正了解到它的缺陷,这时真的可以说是心服口服。本书教给我们一种思想,不拘泥于一种编程语言,最有效的编程技术其实是那些不受实现环境及语言限制的技术。无论你用的是Pascal、C、C++、Ada、Basic、Fotran还是COBOL语言,都可以从书中所论述的概念、方法和技巧中获得教益。因此看过以后感觉这本书的通用性极强。
二 系统分析《代码大全》全书围绕“构建”活动。特别推崇人的主观能力和人的思维活动,在“构建”决策的时候提出应该“深入一种语言去编程”也就是说我们应该首先决定要表达的思想是什么,然后决定如何使用特定的语言提供的工具来表达这些思想;而不是把程序员思想局限于“在一种语言上编程”,这样如果语言工具是初级的,则程序员的思想也是初级的。我们真正要掌握的是解决问题的能力,就算你使用的语言缺乏你所希望用到的构件,你也应该自己去弥补的它,建立自己的编码约定、标准、类库以及其他改进措施。我想这就是相信人主观能力的体现。我也了解到“软件设计其实是一个了无章法的过程,在设计过程中你必然要犯错误,但犯错误正是关键所在”,以前也许曾想设计出完美的程序,但从中才找到答案,心里舒服多了;正像书中交代的“你在应用某种设计方法时越是教条化,你所能解决的现实问题就会越少,请把设计看成是一个险恶的、杂乱的和启发式的过程”,我想构建和编码的活动本该就是这样的吧。
《代码大全》给我解决问题的不同方法,并有多种不同方法的比较。像从开发步骤来看,序列式开发法是仅仅依赖测试发现错误的,但可以提高开发速度。而截然相反的是迭代式开发法则是随着项目的进展不断测试找错,在项目开发过程中不断的一点点吸收消化再测试再返工。一般而言,书中给出的建议“花费在问题定义、需求分析、软件架构上的时间,依据项目的需要而变化,一般在投入10%到20%的工作量和20%到30%的时间为宜”,也就是说应该把两种方法结合起来,根据现在的实际进行:一般而言,在大型项目开发过程中使用迭代式开发法,主要为了减少返工的代价;而小型项目则采用序列式开发法;当然我极为赞成根据实际的把两种方法结合起来,以收获两种方法共同的优势。
三 实践情况《代码大全》教给我一种无可奈何下解决常见问题的思维 ---- 间接思维法。当你直面困难产生困惑的时候,你就需要寻找一种非直接面对问题的方法;这个时候我们需要像隐喻、表驱动法和反向解决等间接解决方法,可以帮助我们在无可奈何的时看到“柳岸花明又一村”的前景。就拿隐喻来说吧,使用隐喻的目的并不是找到答案,而是告诉你该如何才能找到答案,是一种带有启发式的思维,这个过程就像是建立自己的智慧工具箱,这样才有利于以后快速的解决问题。可以说这种启发式思维是一种近似万能的解决方法,只要有问题的存在,就一定存在寻找答案的有效途径,进而找到解决方法,有意的使用启发式方法常常会收到“激动人心”的结果。在解决一些自己无法达到的问题时也可以使用启发式思维方法 ---- “如果你尝试了一些设计方案,但没有很好的解决方法的时候,更自然的方式是让那些问题留在未解决的状态,等到你拥有更多信息之后再去解决”。
四 效果评价《代码大全》既然讲的是规范性的开发工作,那么从前期的软件创建的先决条件到后期的调试优化等肯定都有标准的流程:指出开发过程就像自然界的事物链:架构师吃掉需求,设计师吃掉架构,程序员则消化设计。要达到规范性,从目前我的理解来看,需要做一些工作:
1.              对于变量的作用域:需要我们在“读程序”的时候缩小作用域,为的是考虑范围小;而“写程序”的时候则扩大作用域,为的是编程起来容易。
2.              关于软件设计的层次:需要把软件系统被分解为子系统和包,再分解类中的数据和子程序,最后进行子程序内部的设计。
3.              关于简单性:有两种方法可以达到(1)减少同一时间所关注的本质性复杂度的量;(2)避免生成不必要的偶然性的复杂性。
4.              关于两种极端的设计方法:(1)设计所有的细节;(2)不做任何设计。这两种方法我们都应该避免。
5.              对于那些未能预料的错误和异常,则需要采取“防御式编程”的方法。
6.              关于其他:像变量名、不常见的数据类型、代码的易懂性和易读性、代码的执行效率、由内向外创建循环、结对编程、正式检查、走查、代码调整技术、蜜糖和哥斯拉问题、调试技术、单元测试、组件测试、集成测试。我们都需要学习按照规范化的方法进行构建和设计。这样才会真正使我们达到整个过程的高质量。
……
特别对于伪代码的编程过程深有体会,“如果你发现自己曾经在写一段程序时陷入僵局或者思维偏长并不得不重新来过的话;如果你坐在电脑前面却无从下手,那么伪代码编程肯定会让你的程序生涯变的轻松。”我曾经就是很多时候出现不知道如何下手的状况,也很少有写伪代码的习惯,因此我曾经常不知道如何办,现在似乎有种抓住“救命稻草”的感觉,总算有了解决办法。
我们做规范性的目的都是为了获得高质量的程序代码。那如何获得高质量的代码呢?从书中我有了些许体会:
1.              增加子程序的内聚性,最好取9到15个字符的子程序名字,而200行左右的子程序可以将成本和出错率降到最低;
2.              子程序最好不然超过7个参数;需要对子程序适时优化。
3.              对于宏子程序能不用就不用;
4.              避免使用怪异的循环,减少嵌套层数,让入口和出口一目了然;
5.              使用内联函数,把内务操作代码放在一处等。
6.              重构。
……
都会促使我们代码具有无一伦比的高质量。
开发高质量代码最终并没有要求你付出更多,只是你需要对资源进行重新分配,以低廉的成本来防止缺陷的出现,从而避免高代价的修正工作。“创建活动和高质量子程序直接相关,但在一段时期内未受到应有的重视,在小规模项目中,创建活动约占工作量的80%,在中型项目中也要占50%的工作量,而发生在创建活动中的错误则占总错误的50%到75%,一项会产生50%到75%错误的工作是有许多待改进之处的”。因此创建活动阶段是获得提高项目质量的关键,开发阶段的重构是提升程序质量的最佳时机,因为你可以立刻让刚刚产生的梦想变成现实,这会让人热血沸腾的。
五 推广建议就像书中所交代的“从长远来看,改善测试过程的最好办法就是将其规范化,并对其进行评价。然后用评价中获得的经验教训来改善这个过程”,使用规范化的编程技术将是一个很好的获得高质量代码的办法。而对于像我这样的理论基础一般但几乎不懂得什么编程诀窍的程序员,《代码大全》无疑为我提供了规范化指导,使得我有机会写出高质量代码,并使我在短时期内获得大量的经验和技巧,真的可以说是受益非浅。
目前只是对《代码大全》的一些自己的感性认识而已,希望在以后的工作实践中能够有意的应用,进而慢慢的融会贯通。
参考资料1.《代码大全》

——完——
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值