代码整洁之道--读书笔记(6)

news/2025/5/16 2:08:38/文章来源:https://www.cnblogs.com/TonyCode/p/18405547

代码整洁之道

image-20240904225436374

简介:

本书是编程大师“Bob 大叔”40余年编程生涯的心得体会的总结,讲解要成为真正专业的程序员需要具备什么样的态度,需要遵循什么样的原则,需要采取什么样的行动。作者以自己以及身边的同事走过的弯路、犯过的错误为例,意在为后来者引路,助其职业生涯迈上更高台阶。

本书适合所有程序员阅读,也可供所有想成为具备职业素养的职场人士参考。

第六章:练习

image-20240909224659172

专业人士都需要通过专门训练提升自己的技能,无一例外。乐手练习音阶,球员练习绕桩,医生练习开刀和缝针,律师练习论辩,士兵练习执行任务。要想表现优异,专业人士就会选择练习。本章要讲的是程序员如何提升专业技能。

转变

任何事情,只要想做得快,都离不开练习。要想尽可能快地重复编码/测试过程,就必须能迅速做出决定。这需要识别各种各样的环境和问题,并懂得应付。

如果有两个习武者在搏斗,每个人都必须能够迅速识别出对方的意图,并且在百分之一秒内正确应对。在搏斗时,你不可能有充足的时间来研究架势,思考如何应对。这时候,你只能依靠身体的反应。

实际上,真正做出反应的是你的身体,大脑是在更高级的层面上思考。在每分钟进行许多次编码/测试的状态下,你身上的肌肉记忆了要敲哪个键。意识中较基础的部分识别情景,在百分之一秒的时间内做出合适的反应,大脑则可以放心思考更高层次的问题。

6.2 编程柔道场:

卡塔:

在武术里,卡塔是一套设计好的、用来模拟搏斗一方的招式。目标则是要逐步把整套招式练习到纯熟。习武者努力训练自己的身体来熟悉每一招,把它们连贯成流畅的套路。训练有素的卡塔看起来相当漂亮。

与之类似,编程卡塔也是一整套敲击键盘和鼠标的动作,用来模拟编程问题的解决过程。练习者不是在解决真正的问题,因为你已经知道了解决方案。相反,你是在练习解决这个问题所需要的动作和决策。

要学习热键和导航操作,以及测试驱动开发、持续集成之类的方法,找整套的卡塔来练习都是相当有效的。更重要的是,它特别有利于在潜意识中构筑通用的问题与解决方案间的联系,以后在实际编程中遇到这类问题,你马上就知道要如何解决。和习武者一样,程序员应该懂得多种不同的卡塔,并定期练习,确保不会淡化或遗忘。

真正的挑战是把一个卡塔练习到炉火纯青,你可以窥见其中的韵律。要做到这一点可不容易。

瓦萨:

两个人的练习。

瓦萨基本可以说是两个人的卡塔。其中的招式需要精确地记忆,反复演练。一个人负责攻,另一个人负责守。攻守双方互换时,各种动作要一而再、再而三地重复。

程序员可以用一种叫“乒乓”的游戏来进行类似的练习:两个人选择一个卡塔,或者一个简单问题,一个人写单元测试,另一个人写程序通过单元测试,然后交换角色。

写单元测试的程序员会极力控制解决问题的方式,他也有足够的空间来施加限制:如果程序员选择实现一个排序算法,写测试的人可以很容易地限制速度和内存,给同伴施压。这样整个游戏就非常考验人……也可以说是非常有趣。

自由练习:

多人练习。

很多编程练习场中都会玩一种叫“自由练习”的游戏。它很像由两个参与者解决问题的瓦萨,只是自由练习是有很多人参与的,而且规则是可以延续的。在自由练习中,屏幕被投影到墙上,一个人写测试,然后坐下来,另一个人写程序通过测试,再写下一个测试。桌子边的人一个个轮流接下去,或者有兴趣的人可以自己排队参加。无论怎么安排,都是非常有趣的。

6.3 自身经验的拓展

职业程序员通常会受到一种限制,即所解决问题的种类比较单一。老板通常只强调一种语言、一种平台,以及程序员的专门领域。经验不够丰富的程序员,履历和思维中都存在某种贻害无穷的盲区。经常可以看到这样的情景:程序员发现,面对行业的周期性变化造成的新局面,自己并没有做好准备。

开源:

保持不落伍的一种方法是为开源项目贡献代码,就像律师和医生参加公益活动一样。开源项目有很多,为其他人真正关心的开源项目做一点贡献,应该可以算是提升技能的最好办法了。

关于练习的职业道德:

职业程序员用自己的时间来练习。老板的职责不包括避免你的技术落伍,也不包括为你打造一份好看的履历。医生练习手术不需要病人付钱,球员练习绕桩(通常)不需要球迷付钱,乐手练习音阶也不需要乐迷付钱。所以老板没有义务为程序员的练习来买单。既然你用自己的时间练习,就不必限制在老板规定的语言和平台。可以选择你喜欢的语言,练习你喜欢的技术。

结论:无论如何,专业人士都需要练习。他们这么做,是因为他们关心自己能做到的最好结果。更重要的是,他们用自己的时间练习,因为他们知道保持自己的技能不落伍是自己的责任,而不是雇主的责任。练习的时候你是赚不到钱的,但是练习之后,你会获得回报,而且是丰厚的回报。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/794718.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CF 1579 G

题目描述 在一根数轴上,你将依次放入 \(N\) 根长度为 \(d_i\) 的线段。 每次,你可以将线段放置于数轴上并使得其中一段等于上一段的末尾。假设上一次的末尾为 \(x\),则这次你可以将线段置于 \([x-d,x]\) 或 \([x,x+d]\),并将 \(x\) 设为 \(x-d\) 或 \(x+d\)。 求最终摆出的…

9.9人工智能课堂小计

通过今天的课程,我学到了如果在搜索内容后+空格可以去除掉乱七八糟的广告,真是拯救人类的一大壮举!同样的还有“intitle+关键词”这样可以将搜索范围固定在你的关键词中。也学习了只查找一个内容的文档形式,就是“关键词+空格+filetype+文件格式”,感觉很有助于写论文🤔…

练习 day2

name = input(输入姓名) if name == kk: print(hello kk) if name == k: print(hi k) name = input(输入姓名) if name == kk: print(hello kk) else: print(fxxk) gift={0:football,1:tv,2:computer,3:flower,4:money} while 1: kk_age=10 age = input(输入年龄>>>) …

2024.09.07米哈游

1. 给定两个正整数n,m,米小游想要求出n-m中的所有整数的哪个数字中4的数量加上 6 的数量最多。 如果有多个这样的数字,请输出最大的。例如某一个数字是 44624,则它有3个4,1个6,所以4和6的数量之和为 4。打卡题 int main(int argc, char *argv[]) {int n,m;cin>>n>…

例2.56 画出三维表面图

点击查看代码 import pylab as plt import numpy as np x=np.linspace(-4,4,100); x,y=np.meshgrid(x,x) z=50*np.sin(x+y); ax=plt.axes(projection=3d) ax.plot_surface(x, y, z, color=y) plt.show()print("学号:2023310143004")

东方符斗祭,一款类三国杀游戏

介绍 题外话不客气的说,当初三国杀的模仿者有一大堆,光是我买过的实体卡就有两种,一个叫做杜甫很忙,另一个是校园题材的,有一张锦囊是爸是x刚,效果记不太清了,估计是无懈可击。东方符斗祭官网 https://www.thbattle.net/github 这个地址其实没什么意义,因为使用了闭源插…

例2.57 画出三维表面图

点击查看代码 import pylab as plt import numpy as np ax=plt.axes(projection=3d) X = np.arange(-6, 6, 0.25) Y = np.arange(-6, 6, 0.25) X, Y = np.meshgrid(X, Y) Z = np.sin(np.sqrt(X**2 + Y**2)) surf = ax.plot_surface(X, Y, Z, cmap=coolwarm) plt.colorbar(surf)…

九月九日日报

今天早上上了数据结构和马原,让我意识到数据结构的重要,马原也不是一门水课,我们应当好好学习:D 今天下午进行了java开学考,让我感受到了知识的力量,我成功的红温了。