最近泛读了一本书,书名为《代码精进之路:从码农到工匠》
对,就这本:
image.png
这本书我花了大概快两周的时间看完,我看此书的目的也很单纯——我想写出更精简更漂亮的代码。
书中大多关于一些后端的架构模式,以及COLA架构的设计原理等我作为前端也不是很懂,但是书中有几个触动我的点,我想记录一下:
1.函数是软件系统的核心要素,不解决函数的复杂性,就很难解决系统的复杂性
书中原话:
函数是软件系统中的核心要素,无论采用哪种编程范式和编程语言,程序逻辑都是写在函数中的,因此编写好函数是编写好代码的基础。一个系统容易腐化的部分正是函数,不解决函数的复杂性,就很难解决系统的复杂性。
虽然函数不像面向对象技术那么复杂,但要写好函数也不是一件容易的事。在本章中,我们从函数参数、函数职责、函数写法(短小、优化判空和优化缓存等)、函数抽象(组合模式、SLAP),到函数式的代码风格,介绍了如何写好一个函数,怎样让函数更易于理解、更加简洁。掌握了这些技艺,有助于我们写出更好的函数。
2.KISS原则
书中原话:
KISS(Keep It Simple and Stupid)最早由Robert S. Kaplan在著名的平衡计分卡理论中提出。他认为把事情变复杂很简单,把事情变简单很复杂。好的目标不是越复杂越好,反而是越简洁越好。
真正的简单,不是不思考,而是先发散、再收敛。在纷繁复杂中,把握问题的核心
3.事件命名
事件是表示发生在过去的事情,所以在命名上推荐使用Domain Name + 动词的过去式 + Event,这样可以更准确地表达业务语义
4.优雅的代码很少是一次成形的,大部分情况下要经过两次创造:第一遍实现功能,第二遍重构优化
书中原话:
写代码的两次创造:
本书一直在强调,我们不仅要写实现功能的代码,还要写容易理解的好代码。“写出好代码”除了需要好的技艺之外,还要有好的方法论。以我的实践经验来看,优雅的代码很少是一次成形的,大部分情况下要经过两次创造:第一遍实现功能,第二遍重构优
第一遍实现功能
不要试图一次就写出“完美的”代码,这样只会拖慢我们的节奏。就像写文章,第一遍可以写得粗糙一点,把大概意思写出来,然后再仔细打磨,斟酌推敲,直到达到理想的样子。
写代码也是如此,第一遍以实现功能为主,可以允许一定的冗长和复杂,比如有过多的缩进和嵌套循环,有过长的参数列表,名称可以随意取,还会有部分的重复代码。第一遍主要是为了理清逻辑,为第二遍的重构优化做好准备。
第二遍重构优化
如果只是止步于功能实现,那么代码最多只是一个半成品。而实际情况是我们的代码库中有太多这样的半成品,导致系统的复杂度不断攀升,越来越难维护。因此,我们需要有第二次创造——重构优化,即在第一遍实现功能的基础上,看一看是否可以做得更好:命名合理吗?职责单一吗?满足OCP吗?函数是否过长?抽象是否合理?
第二次创造通常要比第一次创造更费精力、更耗时间,所以很少有人愿意去做第二遍的事情。比如,要你回答2加2等于几,你凭直觉就知道是4,但是如果把问题换成37×189,你可能都懒得去算,在心里想没事费这劲干嘛。这也是康纳曼·丹尼尔在《快思慢想》一书中提出的重要理论:系统一(感性)和系统二(理性)。动用系统二会耗费能量,而人类是从贫瘠的远古时代进化而来的,为了保存能量,一般默认的是使用系统一思考,不到万不得已,是不会启动系统二的。
因此,最好的优化肯定不是等系统上线后再去做,因为这样往往就等于“再也不会去做”(later equals never)。优化工作本应该是我们编码工作的一部分,拆成两步,主要对编码效率上的考量。
5.成长型思维
书中原话:
成长的过程中不可能是一帆风顺的,肯定会有痛苦、有阻力、有挫折。面对逆境,我们应该怎么做?有些人也许不堪重负,就此沉沦了,而有些人可以越挫越勇,把每一次失败都当成学习的机会。研究发现,成长型思维(Growth Mindset)和固定型思维(Fixed Mindset)会极大地影响我们面对逆境的处理方式。我在最低迷的时候,正是成长型思维帮我渡过了难关。
斯坦福大学心理学教授卡罗尔·德韦克在经过数十年的研究后,发现了思维模式的力量。她在《终身成长》中提醒我们:我们获得的成功并不是能力和天赋决定的,更多受到我们在追求目标的过程中展现的思维模式的影响。
成长型思维和固定型思维体现了应对成功与失败、成绩与挑战时的两种基本心态。你认为才智和努力哪个更重要、能力能否通过努力改变,决定了你是会满足于既有成果,还是会积极探索新知。通过了解自己的思维模式并做出改变,人们能以最简单的方式培养对学习的热情,以及在任何领域内取得成功都需要的抗压力。
具有成长型思维的人相信自己可以通过学习来提升自我,相信学习和成长的力量,相信努力可以改变智力和能力。
我曾经就是一个典型的固定型思维的人,在遇到困难和挫折时很容易引发自我怀疑和自我否定。在了解了成长型思维之后,我开始逐渐转变思维模式,会用更加理性的态度看待一时的成败得失,内心坚定地相信成长和学习的力量。从某种意义上来说,你正在读的这本书也是我在习得了成长型思维之后,才得以写出来的。
技术人员的工作面临着很多的挑战,我们需要具备成长型思维才能应对工作和生活中的压力,这样在遇到问题时,我们才不会轻言放弃,而是会积极主动地去学习,去寻找解决方案。即使最终还是失败了,我们也不会一蹶不振,而是把失败当作学习的机会。
6.工具化思维
书中原话:
懒惰的对立面除了勤奋,也可能是“硬干”或“苦干”。“硬干”或“苦干”并没有带着光环,而是一种徒劳、低效、大可不必的努力,只会说明你做事情很急切,但并不是在完成工作。人们容易混淆行动与进展、混淆忙碌与多产的概念。
在有效的工作中,最重要的是思考,而人在思考时通常看上去不会很忙。如果和我共事的程序员总是忙个不停,我会认为他并非优秀的程序员,因为他没用最有价值的工具——自己的大脑。
7.选择的自由
书中原话:
自由并不是想做什么,就做什么。自由是一种价值观,是一种为自己过去、现在及未来的行为负责的价值观。自由是一种责任,是一种敢于做出选择,并愿意为自己的选择承担后果的责任。
责任感(Responsible),从构词法来说是“能够回应(Response—able)”的意思,即选择回应的能力。所有积极主动的人都深谙其道,因此不会把自己的行为归咎于环境、外界条件或他人的影响。他们根据价值观有意识地选择待人接物的方式,不会因为外界因素或一时情绪而冲动行事。
消极被动的人会受到“社会天气”的影响。别人以礼相待,他们就笑脸相迎,反之,则摆出一副自我守护的姿态。心情好坏全都取决于他人的言行,任由别人的弱点控制自己。但这并不意味着积极主动的人对外界刺激毫无感应,只不过他们会有意无意地根据自己的价值观来选择对外界物质、心理与社会刺激的回应方式。
积极主动的人有选择的自由,而消极被动的人往往是被动地接受影响,忘记了自己的主观能动性,忘记了在刺激和回应之间还有选择的自由。当外界的刺激到来时,我们总是可以用自我意识、想象力、良知和独立意志做出自己的选择。
但凡成大事者,都能够“处乱世而不惊,临虚空而不惧,喜迎阴晴圆缺,笑傲雨雪风霜”。正因为他们是自己思维的主人,而不是被思维所控制,他们知道不管身处什么样的境地,都有“选择的自由”。
8.作者的一些感慨
书中原话:
本章介绍了一些有用的思维模式、工作方法,以及我自己的一些人生感悟。写下这些,是因为我曾经迷茫过,不知道方向在哪里,不知道什么是正确的事,也不知道要怎么做正确的事。一路走来,回头望去,坑洼无数,伤痕累累。
好在,过去的磨难都是现在的财富。这些曾经的挫折帮我塑造了成长型思维;培养了我持续学习的习惯;磨炼了我的心智——知道如何放平心态,同时又积极热爱生活;最重要的是给了我自由,让我不再轻易受环境的影响,做了自己命运的主人。如果你也曾迷茫过,或者正在经历迷茫,希望这些文字可以带给你一些启发。
看到作者的感悟这里,好像看到了自己的影子,鼻子酸了,很有共鸣。回头望去,好像自己也栽过很多跟头,走过很多弯路,技术这条路线,唯恐自己落后,所以时刻保持学习的心态,时刻关注领域的各类技术的迭代更新,焦虑彷徨以及遇到挫折是常有的事情....
总而言之,这本书还是让我学到了一些东西...
网友评论