在传统的武术当中,有“内练一口气,外练筋骨皮”的说法,这“一口气”就指的是内功,“筋骨皮”就是外功。内功修炼远远比外功修炼重要,决定着一个人的武功的强弱。

编程同样如此。

我们所熟知的编程内功有算法、数据结构、设计模式、重构、面向对象编程等,是通用并且决定了一个人的编程能力上限。而外功,包括各种编程语言、编辑器、依赖管理器等,这些因每个人的选择不同而不一样。

如何修炼编程内功,提升自己的编程核心竞争力,在项目上大展拳脚获得升职加薪的机会呢?

今天小异带来前谷歌工程师小争哥《设计模式之美》,就是为了弥补经典类型图书缺乏实战项目的不足,通过2万多行代码200多个真实项目实战代码案例全方位地让你掌握设计模式,全面提升自己的编程内功,为升职加薪提供一份重要的筹码!

怎样在个人博客上分享电子书(拥有十万读者订阅后)(1)

▲ 从实战中真正认识设计模式之美

前2000名读者购书,获得作者签名书签!

01

谷歌出身的一线程序员,编程内功深厚

本书作者小争哥毕业于西安交通大学计算机专业,和大多数计算机专业学生一样,当时他的编程能力并不强,且不知如何提升。

因为关注编程内功,入职谷歌

直到进入研究生学习,受到了师兄的提点,开始关注算法、数据结构、设计模式、面向对象编程等编程内功,他才意识到原来编程是这么的有意思,还有这么多门道!

在研究生学习过程中,他不断地去学习和修炼自己的编程内功。后来发现自己会不由自主地去考虑性能、设计模式、代码规范,以前经常写出来的时间复杂度高和空间复杂度高的垃圾代码越来越少了。编程能力得到了质的飞跃!

得益于此,他在研究生毕业后,直接进入了大厂谷歌工作,参与谷歌翻译项目。因为编程内功基础打得不错,能进入谷歌工作让王争很是开心,有些沾沾自喜,但是接下来的一些事情又让他受到了很大的打击。

谷歌:小伙子,你的编程内功火候不够啊

进入谷歌工作第一次提交代码,就让王争吃了个大苦头。

当时提交的代码不过100多行,但是在给同事reciew的时候却发现了n多问题!来来回回改了十几个版本,最终才提交上去。当时心力交瘁的王争很是不服气,产生了极大的逆反心理,认为有必要浪费这么多时间在如此细节的编码上吗?只要代码能用、能解决问题不就够了吗?

这是很多程序员的普遍想法,王争当时也是如此。

不过谷歌公司最后用事实让王争明白了自己当时的想法是多么的幼稚,更用心地打磨起来自己的“一口气”,更注重设计模式、代码规范、重构等编程内容。

谷歌有着一套非常完善的代码审查系统,王争的同事们都非常重视代码质量,甚至到了“吹毛求疵”的程度,就连注释中一个小小的标点符号错误都会被指出来并要求改正。他从最开始的不理解,到最后的完全认同并践行,是因为他看到了在这样对代码质量的严格把控下,项目开发和维护成本变得更低,效率变得更高

认识到这些点之后,王争开始重新思考修炼编程内功的意义。他认为学习代码设计提升自己的编程内功:

在谷歌的工作这段经历让他学到了非常多的东西,见识到了高质量代码的优势,认识到了编程内功的重要性。离开谷歌后,他进入其他技术公司工作,发现越来越多的程序员不注重代码质量,不在意自己编程内功,最后写出来的代码没法看,项目整个都一团糟,堆砌着无数垃圾代码,难以甚至无法维护,整个团队效率极低

清楚地看到这些现状之后,他有了编写本书的打算,想要将自己多年积累的开发经验汇集成一本书,帮助那些想要提升自己编程能力、写出高质量代码、提升自己工作效率的程序员们。

在此之前,他受邀在极客时间在更新自己的付费专栏。

02

十万多读者验证的编程内功修炼专栏

在极客时间上,小争哥开设了“设计模式之美”的专栏,从面向对象编程范式、设计原则、代码规范、重构技巧和设计模式五个方向帮助程序员锻炼自己的编程内功,全面提升自己的编程能力,写出高质量的好代码,为自己的职场上升提供一股极大的助力。

怎样在个人博客上分享电子书(拥有十万读者订阅后)(2)

▲ 长居极客时间专栏TOP10的“设计模式之美”

因为王争以前出过一个“数据结构与算法之美”的专栏,获得了十多万的读者订阅,好评如潮。无数新人和初级程序员从中学到真正的东西,给自己带来了极大的收益,所以“设计模式之美”专栏一经开启立马收到了广泛关注,开篇词刚发出,就有读者直接订阅,询问什么时候开始更新,求知若渴!

王争没有辜负读者的期待,他使用了足足八个月的时间,写下了洋洋洒洒超过五十万字的文字内容,让这篇专栏最终完成。

截至目前(2022年5月27日),专栏页面上显示已经有超过十万的读者购买阅读了该专栏。多数读者表示该专栏内容考虑到了各层次的受众情况,写得通俗易懂,又由浅入深地把那些设计模式、重构原理讲得清晰明了,既保证了知识面的广度,又保证了其深度。

很多读者在学完一次之后意犹未尽,一刷、二刷,甚至三刷,纷纷表示专栏激励了他们学习编程的信心,让他们的编程内功得到了明显的增长。

为了能够让更多的读者接触到这部分内容,获得修炼自己编程内功的方法,王争整理了专栏,重写了部分结构,在基础上增加了30%的内容,编写成了这本《设计模式之美》。

怎样在个人博客上分享电子书(拥有十万读者订阅后)(3)

▲ 助力编程内功的修炼

03

理论与实践组合拳全方位修炼编程内功

自编程出现以来,就有无数的领域专家与大师关注到编程内功对于编程能力的重要性,写出了很多用以提升程序员编程内功的经典图书。

但是它们有一个共同的特点,就是比较偏重理论讲解,喜欢拿猫、狗之类生活中的例子来举例。这种形式存在一个比较严重的问题,就是过于脱离真实的软件开发。虽然例子本身没有难度,一看就懂,但是在看完之后还是不理解如何将理论落实到实际项目当中去。

本书就取经典之所长,用浅显易懂的语言讲述理论,再采用实际项目的代码实例作为讲解剖析的例子。从真实的开发场景入手,理论实践两手抓,同时并进,获得理论落地的效果。

编程内功外化:超2万行真实代码

设计模式、代码规范、重构等编程内功同样是看不见摸不着的东西,需要使用代码作为载体将它们外化出来,读者才能真实看到并理解:噢,原来重构是这样做!遵循代码规范的好代码原来长这样!

作者编写了超过2万行Java或C的代码,来向读者展现面向对象编程范式、设计原则、代码规范、重构技巧和设计模式五份编程内功。

例如作者在解释面向过程编程与面向对象编程的区别时,就展现了不同的代码:

struct User { char name[64]; int age; char gender[16]; }; struct User parse_to_user(char *text) { //将文本("小王&28&男")解析成结构体User } char *format_to_text(struct User user) { //将结构体User格式化为文本("小王\t28\t男") } void sort_users_by_age(struct User users[]) { //按照年龄从小到大排序users } void format_user_fifile(char *origin_fifile_path, char *new_fifile_path) { //此处省略打开文件的代码 struct User users[1024]; //假设最多有1024个用户 int count = 0; while (1) { struct User user = parse_to_user(line); users[count ] = user; } sort_users_by_age(users); for (int i = 0; i < count; i) { char *formatted_user_text = format_to_text(users[i]); //此处省略写入新文件的代码 } //此处省略关闭文件的代码 } int main(char **args, int argv) { format_user_fifile("/home/zheng/users.txt", "/home/zheng/formatted_users.txt"); }

▲ 面向过程的C代码结构

public class User { private String name; private int age; private String gender; public User(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } public static User praseFrom(String userInfoText) { //将文本("小王&28&男")解析成类User } public String formatToText() { //将类User格式化为文本("小王\t28\t男") } } public class UserFileFormatter { public void format(String userFile, String formattedUserFile) { //此处省略打开文件的代码 List users = new ArrayList<>(); while (1) { //将文件中的数据读取到userText User user = User.parseFrom(userText); users.add(user); } //此处省略按照年龄从小到大排序users的代码 for (int i = 0; i < users.size(); i) { String formattedUserText = user.formatToText(); //此处省略写入新文件的代码 } //此处省略关闭文件的代码 } } public class MainApplication { public static void main(Sring[] args) { UserFileFormatter userFileFormatter = new UserFileFormatter(); userFileFormatter.format("/home/zheng/users.txt", "/home/zheng/formatted_users.txt"); } }

▲ 使用面向对象的Java代码结构

如果只是单纯地讲理论解释,面向过程编程“是以过程作为组织代码的基本单元,以数据与方法相分离作为主要特点的一种编程范式。”然后没有真实的代码展示给人看它的具体表现,初学者完全是一脸懵逼,不知所云。

当这种不同风格的代码出现在理论后面,读者就能很快从中看出它们的不同:面向过程编程和面向对象编程的基本区别就是代码的组织方式不同。面向过程编程风格的代码被组织成一组方法的集合及其数据结构(如 struct User),并且方法和数据结构的定义是分开的。面向对象编程风格的代码被组织成一组类,方法和数据结构被绑定在一起,定义在类中。

以代码的形式外化编程内功,让它们变成可以看得到、理解得了内容,就能很好地被读者所接受吸纳。

虽然本书大部分代码都是Java所写,但是作者考虑到了不同读者的编程语言使用不同,通过精心的设计,本书做到了内容的讲解不与具体的编程语言挂钩;所采用的代码只使用最简单、最基本的Java语法,。

也就是说,只要读者有一点点编程基础,不管熟悉的是哪种编程语言,都可以看到代码,并且理解代码背后的设计思想。

同时,本书使用超过200个真实项目实战代码案例来进行剖析,全方位讲解如何将理论知识扩充到实际运用当中去。

编程内功应用:200多个实战项目案例

无论如何,理论最终都是要变成能够跑得动的代码。

世界上大部分设计原则、设计思想、设计模式理解起来并不难,难的是如何将这些理论灵活恰当地应用到实际的开发中,而不是教条主义和盲目滥用。

修炼内功最终都是为了让自己的武艺可以发挥出来效果,而不是单纯地告诉别人:我习得神功在身!尔等速速就擒!

编程内功也是一样,光嘴皮子厉害,一旦把代码写起来依然是一团糟,所有理论知识在脑中徘徊不知道具体要落到哪儿去,就毫无用处。想要融会贯通,就要去实战中亲身感受和体会,从实战中真正理解理论是如何应用带实际代码中、是如何发挥作用、是如何改善代码质量的。

只有在实战中,才能知道自己的编程内功习得了几成。

正是这样,作者结合自己过去十多年工作中积累的项目经验,为整本书设计了200多个真实的项目实战代码案例,几乎覆盖了每一个知识点!通过结合一个完整的开发案例,打通理论与实践之间的隔阂,让编程内功真实地在实际编程中发挥作用。

也许有的读者没有开发经验,也许有的读者在工作中没有那么多足够复杂、足够有难度的开发场景,或者都是基于已有框架照着别人的流程扩展,这些都没有关系。跟上作者的思路和脚步,把这200多个真实的项目实战代码案例练下来,完全可以真正地掌握编程内功的正确使用方法,大大提升自己的代码能力。

面试?接手新项目?重构代码?通通不在话下!

当然,为了巩固这些编程内功,需要更多的自我思考。

编程内功巩固:100多道有深度的章节题

编程内功并没有完全标准的正确答案,本书和大多数经典、大师一样,只是提供了一个经过验证的有效方法。

修炼编程内功的目的,并不是为了修炼编程内功,而是为了提高自己的代码能力、提升自己在职场中的竞争力、全方位为往编程之路更进一步提供坚实的基础。所以主动思考、积极思考,与他人讨论,比单纯地被动接受和学习效果要好很多。

作者针对每一章都设计了非常巧妙的思考题,他希望读者在学习完一章的内容后可以花一点时间对那些问题进行思考,解答,给出自己的答案。

通过对这些问题的思考,在锻炼自己独立思考能力的同时,更可以巩固所学编程内功。

编程内功秘籍:章节内容概要

如前文所说,本书主要是围绕面向对象编程范式、设计原则、代码规范、重构技巧和设计模式五个方面的编程内功来组织内容的。

经过作者精心的安排,从易到难、从简到繁,这些内容被分为了八个章节,循序渐进地帮助读者修炼自己的编程内功。

在第1章中,作者简单介绍了本书涉及的各个模块,以及各个模块之间的联系。本章作为全书的开篇,可以帮助读者构建系统的知识体系。

然后,第2章的内容主要是介绍面向对象编程范式。面向对象编程范式是目前流行的一种编程范式,是设计原则、设计模式编码实现的基础。

第3章是用来介绍设计原则,包括SOLID原则、KISS原则、YAGNI原则、DRY原则和LoD原则。这些都是现在流行并且大家都遵循的设计原则,经过时间与实践的验证。

第4章的内容是介绍代码规范,主要包括命名与注释,代码风格,以及编程技巧。这些技巧在实际工作中用处很大,使用得当能够让自己的代码从可读性等方面提高几个档次。

第5章介绍重构技巧,包括重构四要素、代码的可测试性、单元测试和解耦等。重构放在这讲,是因为前面的步骤做好了,重构工作就不会那么难了。

第6章介绍创建型设计模式,包括单例模式、工厂模式、建造者模式和原型模式。

第7章介绍结构型设计模式,包括代理模式、装饰器模式、适配器模式、桥接模式、门面 模式、组合模式和享元模式。

第8章介绍行为型设计模式,包括观察者模式、模板方法模式、策略模式、职责链模式、状态模式、迭代器模式、访问者模式、备忘录模式、命令模式、解释器模式和中介模式。

最后三章是本书的重点内容,每一个设计模式都有专门的代码案例,读者可以通过代码看和体会到这些设计模式的巧妙之处。

整体章节安排有着内在的逻辑,前后有着一定的传承,读者通过阅读本书,能够全面、系统地掌握这些编程内功,真正达到融会贯通,编程神功大成!

编程内功额外助力:丰富配套资源

当然,一本秘籍可能有些读者觉得不够,还想要更多!

完全没问题!

随本书还附赠精美专业的配套PPT课件,完全跟着作者思路修炼编程内功!

还送大厂编码规范,高质量代码先从规范开始!大厂标准,你也可以。

针对每章节末的思考题,也提供了参考答案,帮助读者从不同角度思考编程内功修炼之法。

还送思维导图!全书脉络清晰可见,一图搞定。

刚毕业?准备换工作?程序员面试宝典随书送!当你编程内功大成,这份宝典更能助你轻松应对所有面试!

不满足于这些编程内功?想要学算法却愁于不了解怎么学?算法学习路线给你!更多的编程内功等你来学。

怎样在个人博客上分享电子书(拥有十万读者订阅后)(4)

▲ 全方位为内功修炼提供资源

前2000人购书获得小争哥亲签书签!

怎样在个人博客上分享电子书(拥有十万读者订阅后)(5)

04

业内人士与读者的双重认证

这本书真的能帮你修炼编程内功

这本编程内功修炼秘籍得到了广大的使用者,与领域内专家的双重认可,他们从自身的体验与专业的角度给出了极高的评价。

无论是平时工作还是业余时间研究源代码,研发工程师都会接触各种设计模式,设计模式涉及的知识较多,学习者想要系统掌握设计模式,并非易事,本书可以帮助学习者实现这一目标。本书的讲解更加贴近实战,可以帮助学习者将设计模式应用到项目中。本书是研发工程师的学习教程。

—— 袁杰 百度工程师

本书内容通俗易懂,语言生动。本书不但讲解了设计模式知识,而且提供了设计模式应用示例。本书是作者多年研发心得总结,值得读者阅读。

—— 李佳霖 阿里巴巴工程师

本书讲解了编写高质量代码所需的知识,包括面向对象编程范式、设计原则、代码规范、重构技巧、设计模式,是一本帮助读者提高代码质量的很好的参考书!

—— 李志刚 腾讯工程师

代码质量决定项目的开发和维护成本,因此,在编写代码时,研发工程师要时刻关注代码质量。本书从设计模式知识到实战应用,详细阐述了如何编写高质量代码的技术。强烈推荐大家阅读本书。

—— 张阳 字节跳动工程师

本书理论和实践相结合,既利用通俗易懂的语言讲解了理论知识,又提供了生动有趣的应用示例。无论你是准备求职的新手,还是正在从事项目开发的工程师,本书都可以给你有益的指导。

—— 郑汉卿 哔哩哔哩工程师

学到这一课有种渐入佳境的感觉。突然理解了设计模式的美。这样先给个简单的实现,再给个运用开闭原则的实现非常贴合我的思维模式,就是在我的现有基础上实现了拔高。而且这个例子确实是在工作中会遇到的实例,有助于遇到类似问题时的思维迁移。

——读者 蛀*

当时买设计模式这门课的时候,没想到还有跟这么多与设计原则和编程规范相关的内容,看到现在感触还是很深的,在许多内容上有很强烈的共鸣。我个人是个强迫症,对于代码风格十分的挑剔,很庆幸的是自己在工作过程养成的许多习惯都与课程中提到的设计原则和编程规范不谋而合。然而在实际工作中,大多数的同事还是属于那种不注重细节只管实现功能的类型,不仅有工作了几年的熟练工,还有工作了10年以上的老员工,团队内也几乎不进行CodeReview,只有偶尔的线上代码审核。希望自己在今后能够在团队中多做些设计模式方面内容的分享,起到带头作用,把优秀的编程思想传播给更多的同事。

——Viv*9

争哥把我平时容易犯的毛病全点出来了,受益匪浅

——橙*皮

可以看出来,这本书的内容的确是帮助到了很多人强化自己的编程内功,提升编程能力,书中的例子也能够与读者产生共鸣,让他们获得更多的思考。

不管是在实际的项目工作,还是面试,程序员的编程内功一直是被重视的内容。想要在面试中脱颖而出,想要在工作中获得升职先机,想要在编程路上更进一步,编程内功必定要基础牢靠、并在实际使用中游刃有余。

《设计模式之美》这本书可以从面向对象编程范式、设计原则、代码规范、重构技巧和设计模式帮助你打通编程任督二脉,将编程内功与技巧融会贯通,大大提升你的编程功力!

怎样在个人博客上分享电子书(拥有十万读者订阅后)(6)

文章编辑:沙鱼 审校:张涛 桐希

参考来源:

[1] 王争.《设计模式之美》.[M].北京:人民邮电出版社:2022.

,