本篇文章是《程序员修炼之道》第二章的笔记,总结了高效程序员须要遵照的一些原则和经常使用的开发模式,对咱们有很是重要的指导意义。建议每一个程序员都应该学习并掌握这些原则。若是你们以为这个系列文章有价值,咱们能够组织一次抽书的活动,鼓励你们从原文学习。前端
软件开发过程无时无刻都伴随着维护,若是项目中有大量的重复代码会对咱们的维护工做形成很大的麻烦。好比:一段代码在多个地方出现, 一旦要修改就须要咱们同时修改多个地方,若是某个地方忘记修改就可能致使一些没必要要的错误。所以做者提出 DRY原则 - Don't repeat yourself(不要重复你本身)。程序员
咱们平时有很多重复的场景, 同时也有避免重复的解决方法,下面举几个例子。sql
正交性就是不相互依赖性或者解耦性。若是两个或多个事物中的一个发生变化,不会影响其余事物,那么这些事物就是正交的。对应到编程,就是咱们常说的高内聚、低耦合。正交的系统好处很是多,正交的系统能够下降风险,当系统中某个组件修改时,只要对外的接口保持不变,该组件就能够任意修改而整个系统不会受到影响。正交的系统能提升生产率,由于系统组件是解耦的,所以各个组件能够独立地、并行地进行开发。好比最近几年比较火的先后端分离技术就是很好的表明,之前后端的同窗常常须要写一些套页面的前端代码,先后端同窗的代码交织在一块儿相互依赖。但先后端分离后,只须要把协议肯定好,先后端技术就能够解耦,开发同窗就能够并行开发,提升生产率。下面列举几种维持正交性的方法数据库
可撤销原则是说,当系统中某个部分须要改变时,咱们能不能很好的撤销已有的代码,灵活的适应新变化。由于需求无时无刻都在变化,所以可撤销性就一直存在。举个栗子:假设咱们开发一个数据库可视化软件,最开始的需求是基于 Mysql 的,若是咱们不作分层设计,凡是须要增删改查的地方咱们直接写 JDBC 代码。可是某一天咱们底层数据要支持 MongoDB 怎么办,由于咱们的 JDBC 代码分布在项目的各个模块的代码中,几乎没法撤销,这时候系统只能重写。若是咱们设计之初将数据访问层做为一个组件抽象出来,那么上层只须要调用抽象出来的接口来操做数据库。这样作的好处是当须要支持其余数据库时,只须要为该数据库编写支持咱们抽象接口的数据库访问代码便可,所以系统就具有可撤销性的。其实,咱们在 Web 项目中常用 ORM 框架也是基于可撤销原则的,ORM 能够将数据库表映射成对象,底层的增删改查对上层透明,因此能够灵活地调整底层数据库。编程
在黑暗中须要打击军事目标时一般会使用曳光弹,它在枪与击中的地方之间留下一条烟火般的踪影,用来指示弹道和目标,从而协助射手修正弹道。其实,黑暗中的目标就像咱们开发中面对的未知系统。面对未知系统,若是咱们制做大量文档,逐一列出每项需求,尝试肯定全部未知因素,就犹如在黑夜中对目标未知预先进行大量计算而后射击,很显然这种状况须要消耗大量计算力而且不必定能击中目标。而注重实效的程序员每每更喜欢使用曳光弹。曳光弹的核心优点就是反馈是及时的。好比:咱们要开发一个支持多种序列化格式的 RPC 框架,最开始咱们是否是能够先用简单的系统默认的序列化方式先将整个系统框架搭建起来,先让系统可以运行起来。运行后咱们能够及时地获得使用方的反馈,修复已有问题、增长多种序列化框架、不断迭代完善。后端
介绍完了曳光弹再来讲说原型,记得在大学学习《软件工程》时就接触了原型开发。原型更像是一个 Demo,不注重代码的实现,而是可以快速出一个可以与产品肯定需求的东西。好比:咱们须要肯定某个系统的 UI 需求,咱们能够用最快的开发语言,开发出一个 Demo,它的代码不须要规范,交互界面也不须要太美观,由于原型大几率不会在后续实际的项目实现中使用。架构
接下来简单总结一下这两种开发模式的区别。曳光弹强调的是明确需求后,咱们能不能开发出一个麻雀虽小、但五脏俱全的系统来快速得到反馈,从而指导咱们进一步迭代。在曳光弹开发模式下,后续代码是依赖于初版的代码。而原型开发更侧重明确需求这个阶段,快速开发一个 Demo ,目的是为了可以基于原型肯定系统的需求。这个阶段不在意用什么代码、不在意系统的完整性、健壮性以及正确性,由于原型代码基本不会用在真实的系统开发中。框架
这节内容我以为平时应用很少,理解的不深入,所以就简单总结。领域语言个人理解就是使用(创造)一门规范的伪代码,为何是伪代码呢?假设咱们与产品沟通需求,咱们可使用文字,但咱们都知道中华文字博大精深,别人表达的意思跟咱们的理解可能不一致,不然的话咱们也不须要这么苦逼的加班,固然直接用编程语言沟通更不可行。那么就须要一个中间层的伪代码,既能清晰的表达出需求,又能让产品或者使用不一样编程语言的程序员都能看懂。前后端分离
对于估算这一节,做者介绍了一些常见的预估问题(估算项目时间、流量)的一些指导性意见,但感受比较偏理论,实操性不强。但给我印象最深的一句话是:编程语言
本章主要介绍了三个原则中,这三个原则若是在开发中加以总结和利用将对咱们高效地开发很是有帮助。DRY 原则避免重复劳动,正交原则避免改动一个组件时牵扯整个系统的维护,可撤销原则避免更换系统某个组件时致使系统崩溃。最后,介绍了曳光弹和原型开发两种快速开发模式,尤为是曳光弹,我比较喜欢用,先小规模、小成本搭建骨架并跑起来,后续再不断地丰富骨肉,但愿以上介绍的内容对你往后开发有帮助。
欢迎关注公众号「渡码」,我将分享更多优秀书籍的内容,组织按期抽书活动