在一个有效的组织中,一定拥有杰出的一线人才。软件设计也是同样的,一线人才的素质决定了软件的质量。从敏捷的观点来看,代码是检验软件过程是否有效的最终标准。目前为止,以及在短期的将来,咱们都不太可能彻底脱离代码进行软件设计。因此,软件过程当中的任何一个活动都是为了可以产出优秀的代码。因此,代码才是核心。文章出自惠集返利网http://www.huiji123.com
1. 代码是软件开发的基础
编码是软件开发过程当中最基本、最底层的技艺,然而也是最重要的技艺。任何一个领域的专家都须要花费大量的时间来进行基本技艺的锻炼,木匠须要花费大量的时间来锻炼他们对各类工具的掌握,厨师则须要练习刀工和火候。程序员也是同样的,对咱们来讲,语言的各类特性必需要了然于胸。而对软件的管理也须要从代码作起。
从2000年到如今,国内兴起了一股软件工程热,需求管理、配置管理、甚至CMM。面对纷至沓来的各类方法学、UML、OOA,你们彷佛已经热衷于这些概念自己了,却每每忽略了软件开发中最基本的元素:代码。在和不少软件组织的接触过程当中,咱们认为大多数组织急切须要的并非这些工程理论,不是说这些理论不重要,而是这些组织的症结不在于此。不少的组织连代码的质量都管理很差,又何谈其它呢?代码管理是基础的基础,从管理的角度上来看,任何一个组织的管理都须要一个从上至下的管理过程,有基层的管理人员,也有高层的管理人员。对代码的管理就是软件开发中的基层管理,它起到的做用就是可以把需求、设计的思路贯彻到最终的代码中。
“管理无大事”。对软件的管理也是同样,大部分的问题都是因为很小的缘由引发的。例如,一个产品若是后期在debug上花费了大量的时间,那么,这种现象是因为什么缘由引发的?一种可能的缘由是前期的代码设计中对代码质量的把握不严。每一次代码功能的演化并不会产生太多的问题,可是当代码累积愈来愈多的时候,问题也就慢慢出现了。那么如何解决呢?能够增强QA的力量,也能够引入复审,还能够引入单元测试。总之,要有一种方法对代码进行控制。
软件的开发过程就象是一部精密的机器,任何一个环节的变化,都会对其它的环节产生影响。把软件过程按照瀑布的形式进行划分是一种分解的处理思路,但同时咱们还应该看到不一样活动之间的相互影响。软件开发中的生命周期模型也是一个层次模型,从业务建模一直到软件实现,须要跨越数个层次,一样会出现执行不力的状况,例如,代码设计偏离需求、偏离设计的状况比比皆是。
如何避免这种状况呢?这就须要咱们从源代码的角度,反思其上游的实践活动,是否足以约束代码设计?就拿XP来讲,他解决这个问题的方式是尽快的进入代码开发阶段,从代码开发中发现问题,并在下一轮的开发中解决。这种思路是正确的,但XP毕竟是方法论,他不会告诉你过于细节的东西,尽管XP已经提供了大量面向代码的实践。由于方法论的抽象级别比较高,使得他必须舍弃部分的细节。而这篇文章告诉你的,就是这些细节。就像咱们在下一节中讨论的例子,须要在代码中加入对异常的处理,那么,异常的源头在哪里呢?是需求,在需求中,咱们发现了一些业务的非正常的处理序列,发现了一些业务实体的限制性的要求,因此在代码实现中,就须要有相应的异常处理。在例如,一个优秀的异常处理,还须要让客户端程序员了解可能发生的异常,以保证不一样代码间正确的集成。
2. 面向对象的代码
面向对象的代码已经在如今的软件开发中占据了主流的位置,面向对象的思路也有其优点所在,就像后文所讨论的,面向对象代码有着非面向对象代码的不少优点,而软件业中不少新的思潮的产生,也都是基于面向对象语言的,因此咱们关注的代码将是面向对象代码。
面向对象的思想来自于抽象数据类型。对于面向对象来讲,它最重要的改进就是把世间万物都描述为对象,而类则描述了同一种对象的特征,而不是像传统的开发方法那样,按照机器指令的执行顺序来进行设计。固然,面向对象代码最终仍然是要按照时序来执行的,可是从程序员的角度看来,面向对象代码更侧重于对象之间的交互,多个对象各司其职,相互协做以完成目标。而面向对象技术的发展,也是朝着更加贴近咱们世界观的方向发展。从这点来看,有人说彻底没有程序设计经验的人学习面向对象可能会更加的容易,由于他不须要从原先的时序程序的桎梏中摆脱出来,但这未必是事实。面向对象决不是一种简单的程序设计思路。这是咱们的观点,也会在下文中反复的论证。
和全部的职业同样,程序员,或者是面向对象程序员,始终坚持的一点就是严谨。你会看到各类各样优秀的代码,但那决不是一次可以写成的,要不断的尝试,不断的改进。为何重构和测试优先是敏捷方法中很重要的一项实践?由于程序员不是神,他们须要慢慢改进他们的代码。虽然罗马不是一天可以建成的,可是在编写面向对象代码的过程当中,有一些实践是须要坚持的,它体现了咱们所说的严谨。
3. 编写并管理面向对象的代码
编写优秀的面向对象代码并非一件容易的事情,优秀的OO代码如行云流水,糟糕的OO代码让人以为浑身起鸡皮疙瘩。编写优秀的OO代码要求程序员有必定的自我修养,可以以抽象的思路看待问题,找到问题的核心并对问题域进行分解。它强调的是一种解题的思路,但这个解不是惟一的。
典型的例子是设计模式,设计模式确实给了咱们以很大的启发,经过它,咱们可以了解到优秀的代码是如何用于解决实际问题的。可是是否是你必须在软件中照搬设计模式呢?若是你这么作,那么你对设计模式的理解仍然不够。我曾和在建筑行业的朋友聊起Christopher Alexander的建筑的永恒之道。他很兴奋的告诉我,那确实是一本很好的书,可以引起人很深的思考,可是如今也有另外的一种观点,认为美仍然是无形的,应该发自建筑师的心里。对这句话我思考了好久,其实建筑是给人使用的,所以最重要的是它能都给人带来的价值,隐含在其中的那种活生生的气质,这是建筑师文化底蕴的外在表露。因此,Christopher Alexander在那本书中的目的,也是为了找到一种总结本身观点的方法,来总结本身对人文的认识。至于如今你们对他的思路提出了质疑,那也是一件好事,这说明你们对建筑之道的认识到了新的高度。建筑是这样,软件中的模式也是同样的,我也曾热衷于研究模式的使用,直到某一天我猛然惊醒,与其沉迷于模式的表面形式,为何不去研究隐藏在它背后的文化底蕴呢?武侠小说中常说无招胜有招,模式的应用也应当到达这个境界,你若是能够在不经意间应用模式的思想,那又何须拘泥于模式的形式呢?
编写优秀OO代码虽难,但还有更难的事情,就是让整个开发团队都产出优秀的OO代码。咱们刚才说了,OO对问题的解不是惟一的,但各个不一样的优秀解聚集到一块儿,可能就是一个糟糕的解,这是风格和架构的问题。你如何在团队中制定制度,营造氛围,让优秀OO代码成为团队最终的成果?这些问题,在我看来,要比CMM可贵多,这个问题并非靠花钱就可以解决的。若是可以解决这个问题,这个团队的创造力必定是惊人的。
4. 面向对象软件开发过程
普通的软件开发过程和面向对象开发过程有着很大的不一样。回想咱们在非面向对象中开发过程当中,最常常采用的任务分配方法就是以软件模块为单位,这样的好处是分配简单,不一样任务之间耦合程度低,容易操做。坏处是几乎没法作到重用,也缺少总体性的设计。而面向对象软件开发则不一样,它是以类、类集合做为基本单位的。类之间关系错综复杂(虽然咱们提倡低耦合的设计,但类之间的关系仍然是相对复杂的)。这种状况下程序员之间相互协做的要求就很是之高,这种关系若是处理恰当,则可以彻底体现出面向对象的威力,不然,那将会是一场大灾难,面向对象的软件开发过程要养成一些好的习惯:
4. 1 尽可能简化和稳定客户端。
我的编程能够是一种享受,但团队开发始终是一项严谨的职业活动,所以多考虑别人,不要设计复杂的接口,虽然你省事了,但这会给理解和使用你的接口和人形成障碍。
4.2 准备一份简洁的文档,并保持更新。
随便一种形式的稳定,能够是代码,能够是UML图,也能够是纯粹的文字(估计没几个程序员喜欢这种形式)。只要它可以传达你的代码的目的,那就足够。记住,更新代码后,同时更新你的文档。过时的文档不只是废纸这么简单,它会给其它人形成麻烦。切记!
4. 3 尽量多的考虑异常和错误的状况。
写出一个功能并无什么,可是要把这个功能写的很是的完善那就很难了,由于你须要考虑各类各样的状况,正常的、非正常的。因此,写完一个类的定义应该是,完成编码和稳定,并经过原定的测试。本文摘自惠集网http://www.huiji123.com 程序员