Posted on 2014-07-09 21:20
魔のkyo 阅读(459)
评论(0) 编辑 收藏 引用
转载请保留原帖地址:http://www.cnitblog.com/luckydmz/archive/2014/07/09/89655.html
从工作之后我就逐渐意识到代码的可读性和可维护性是非常重要的,当然并不是说程序的运行效率不重要,这里也有个所谓的二八定律,20%的代码占用了80%的运行时间,其中20%的20%又占用了80%的80%的运行时间,也就是说大约4%的代码占用了大约64%的运行时间,如果我们针对这4%的代码进行优化将取得卓越的成效,而不需要对所有的代码都进行效率的苛求,为什么呢?因为很多时候高效性和其他特性是矛盾的,在不影响其他特性的情况下比如不降低可读性的情况下应该尽量写出高效的代码,但是当效率和可读性发生矛盾到时候呢?我的观点是在不确定瓶颈在哪里(谁是那4%的代码)的情况下优先考虑可读性,因为一个项目开发的过程是一个不断对代码进行阅读、添加和修改的过程,你今天写下的代码可能在几周之后就会被改动甚至删除,也许这个需求都cancel了,早期的优化就是在浪费时间,并且可能把代码搞乱变得难以修改,有一个格言“过早优化是一切罪恶的根源”,还有一条优化法则“第一条:不要优化”,我觉得在开发阶段首先要写出可读性和可维护性好的代码,在这个基础上不要写出明显低效的代码(比如使用了错误类型的容器),然后在开发完成时(模块或者整体)如果有必要,可以找到瓶颈,有针对性地做一下优化,如果你不会优化也没关系,可以把这个任务留给精通算法和数据结构的人,如果你就是那样的人当然最好。
总而言之,开发的过程中优先考虑可读性和可维护性,那么如何写出高可读性和可维护性的代码呢,除了积累经验,其实也是可以通过学习获得一部分技能的,包括编码的风格,设计模式,重构的技巧等等。
下面我再推荐的一些书籍:
《代码大全2》
这也是一本完整的软件构建手册,涵盖了软件构建过程中的所有细节。它从软件质量和编程思想等方面论述了软件构建的各个问题,并详细论述了紧跟潮流的新技术、高屋建瓴的观点、通用的概念,还含有丰富而典型的程序示例。这本书中所论述的技术不仅填补了初级与高级编程技术之间的空白,而且也为程序员们提供了一个有关编程技巧的信息来源。这本书对经验丰富的程序员、技术带头人、自学的程序员及几乎不懂太多编程技巧的学生们都是大有裨益的。可以说,无论是什么背景的读者,阅读这本书都有助于在更短的时间内、更容易地写出更好的程序。
注:这本书其实不止讲了编码和设计,但如果关于编码和设计方面你只想读一本书,那么就选他吧。
《设计模式——可复用面向对象软件的基础》
这本书结合设计实作例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。书中分类描述了一组设计良好、表达清楚的软件设计模式,这些模式在实用环境下特别有用。
注:事实上本书并不适合初学者,因为你无法理解他为什么这么干,当你有一定开发经验的时候再来读他可能更好,可能会有“哦,啊哈”的感悟。
《重构——改善既有代码的设计》
Martin Fowler和《重构:改善既有代码的设计》(中文版)另几位作者清楚揭示了重构过程,他们为面向对象软件开发所做的贡献,难以衡量。《重构:改善既有代码的设计》(中文版)解释重构的原理(principles)和最佳实践方式(best practices),并指出何时何地你应该开始挖掘你的代码以求改善。《重构:改善既有代码的设计》(中文版)的核心是一份完整的重构名录(catalog of refactoring),其中每一项都介绍一种经过实证的代码变换手法(code transformation)的动机和技术。某些项目如Extract Method和Move Field看起来可能很浅显,但不要掉以轻心,因为理解这类技术正是有条不紊地进行重构的关键。点击进入该书更多详细信息。
注:这本书可以和设计模式相辅相成,《设计模式》讲的是在写代码前如何设计模型,而《重构》会教你在写代码的过程中如何发现代码的“坏味道”并且如何step by step的以安全的方式把代码变的更好。
《代码整洁之道》
软件质量,不但依赖于架构及项目管理,而且与代码质量紧密相关。这一点,无论是敏捷开发流派还是传统开发流派,都不得不承认。《代码整洁之道》提出一种观念:代码质量与其整洁度成正比。干净的代码,既在质量上较为可靠,也为后期维护、升级奠定了良好基础。作为编程领域的佼佼者,《代码整洁之道》作者给出了一系列行之有效的整洁代码操作实践。这些实践在《代码整洁之道》中体现为一条条规则(或称“启示”),并辅以来自现实项目的正、反两面的范例。只要遵循这些规则,就能编写出干净的代码,从而有效提升代码质量。
注:这本书更偏向于讲述编码风格,如果你读了前面3本,这本书可以略过不读。
如何成为一名优秀的程序员(目录)