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

news/2024/11/17 5:40:58/文章来源: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,一经查实,立即删除!

相关文章

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

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

2024-9-9

file类简单学习

微信支付开发避坑指南

1 微信支付的坑 1.1 不能用前端传递过来的金额 订单的商品金额要从数据库获取,前端只传商品 id。 1.2 交易类型trade type字段不要传错 v2版API,不同交易类型,要调用的支付方式也不同。 1.3 二次签名 下单时,在拿到预支付交易会话标识时,要进行二次签名操作。二次签名后的…

[MySQL]一次死锁排查

字节面试题在可重复隔离级别下,这种情况会发生什么? 答案:死锁 下面我们用一个具体的例子来展示: 首先我们有一张这样的表下面我们来执行一些语句,可以看到结果输出了,检测到发生了死锁 Deadlock found when trying to get lock; try restarting transaction下面具体分析…

微信小程序开发系列6----页面配置--WXML模板快捷传参

源码获取方式(免费):(1)登录-注册:http://resources.kittytiger.cn/(2)签到获取积分(3)搜索:4-wxmltemplate-WXML模板快捷传参

微信小程序开发系列5----页面配置--WXML列表渲染-wxkey详解

下图本来选中Switch1 更新后选中的是Switch5了使用下图红色部分就能解决,id是data里定义的换name也可以,红色部分不能写item.Id 注:不给wx:key会给一个警告,给了性能会更高 源码获取方式(免费):(1)登录-注册:http://resources.kittytiger.cn/(2)签到获取积分(3)搜…

学习日历-2024/9/9

今天数据结构和马原第一次上课,感觉老师都还不错,作为学委,我也主动找老师加了联系方式 今天Java开学考试,14分,还行,在运行中报了一下错,我感觉是我输入的问题, Java关于List的一些知识和数据结构的知识 List List集合特有方法List集合的遍历方式数据结构 栈 数据进入栈模型的…

一文梳理RAG(检索增强生成)的现状与挑战

一 RAG简介 大模型相较于过去的语言模型具备更加强大的能力,但在实际应用中,例如在准确性、知识更新速度和答案透明度方面,仍存在不少问题,比如典型的幻觉现象。因此,检索增强生成 (Retrieval-Augmented Generation, RAG) 被当作于大模型应用开发的一种新范式。RAG是指在利…

我的博客搬家啦!!!

大家好! 感谢大家一直以来的支持和关注!经过深思熟虑,我决定将我的博客迁移至博客园的新账号。未来,我将在这个新的平台上持续分享技术文章、项目经验以及个人见解,而原有的博客将不再更新。 为什么选择搬家? 随着时间的推移,我发现自己对内容创作有了新的想法和方向,而…

Codeforces Round 942 (Div. 1) VP 记录

Codeforces Round 942 (Div. 1) VP 记录 我没实力打 Div1 /kk 事实上我唯一 rated 的那场 Div1 切三题是不是运气好啊 /kk /kk A 考虑 \(k = 0\) 的时候怎么做。设最小值为 \(x\),答案显然是 \(\sum [a_i = x \vee a_i = x + 1] a_i\)。 都与最小值相关了,都最小值最大了,直…

【工具使用】【OpenFeign 】OpenFeign 下未开启重试,服务却被调用了两次

1 前言 上节我们看了下 OpenFeign 里的重试,后来我从源码的角度看了下它的原理,发现一个诡异的情况,就是我没开启重试的情况下,我的服务却被调用了两次,这是为什么呢?本节我们来看看这个问题。 2 环境准备 首先准备一下,我这里有两个服务,一个是 demo 一个是 virtuou…

CSP模拟 取模

最近开始写 CSP 模拟的题,实际上考的题一点也不 CSP 题意 有一个长度为 \(n\) 的序列 \(A\),\(0\leq A_i<k\),你可以每次选取一个区间,将区间内所有元素 \(+1\),然后将区间内所有元素对 \(k\) 取模。问最少几次操作可以把序列中所有元素都变为 \(0\)。 思路 假设现在有…