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

news/2024/11/15 15:28:58/文章来源:https://www.cnblogs.com/TonyCode/p/18402017

代码整洁之道

image-20240904225436374

简介:

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

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

第四章:编码

image-20240907184649596

要精熟掌握每项技艺,关键都是要具备“信心”和“出错感知”能力。

4.1做好准备

编码是一项颇具挑战也十分累人的智力活动。相比较其他类型的活动,编码要求更加聚精会神。

  1. 首先,代码必须能够正常工作。

​ 必须理解当前要解决的是什么问题以及该如何解决。必须确保编写的代码忠实遵循解决方案。必须管理 好解决方案的每一处细节,并且使语言、平台、现有架构以及当前系统的所有问题和平共处。

  1. 代码必须能够帮助你解决客户提出的问题。

    很多时候,客户提出的需求其实并没能真正解决他们自己的问题。这有赖于你去发现这些问题并与客户交流,以确保代码能够满足客户的真实需求。

  2. 代码必须要能和现有的系统结合的天衣无缝。

    你的代码不能让系统变得更僵硬、更脆弱、更晦涩,必须要妥善管理好各种依赖关系。简而言之,编写代码时必须遵循稳健的工程原则。

  3. 其他程序员必须能够读懂你的代码。

    这不仅包括要写好注释这类事,还包括要精心锤炼代码,使它能够表达你的编程意图。要做到这点很不容易。事实上,这可能是程序员最难精通的一件事

    如果感到疲劳或者心烦意乱,千万不要编码。强而为之,最终只能再回头返工。相反,要找到一种方法来消除干扰,让心绪平静下来。

4.2 流态区

这是程序员在编写代码时会进入的一种意识高度专注但思维视野却会收拢到狭窄的状态。在这种状态下,他们会感到效率极高;在这种状态中,他们会感到“绝无错误”。

在流态区状态下,你其实放弃了顾及全局,因此,你很可能会做出一些后来不得不推倒重来的决策。在流态区写代码可能会快些,但是后面你将不得不更多地回头重新审视这些代码。

对作者而言,听音乐有助于不进入“流态区”。(奇怪的要求)

结对是用以应对中断的一种好方法。当你接答电话或回答其他同事的问题时,结对搭档能够维护住中断处的上下文。等到你重新回去和结对搭档一起工作时,他能够很快地帮你恢复被打断前的思维。

当然,中断无法避免,总有干扰会打断你、消耗你的时间。发生这种情况时要记住一点,也许下次也会轮到你去打断别人请求帮助。因此,礼貌地表现出乐于助人的态度才是专业的态度。

4.3 阻塞

有的时候,死活就是写不出代码来。我自己就曾经遇到过,也看到其他人身上发生过这种情况。干坐在电脑前面,但什么都写不出来。

造成原因:对于我而言,另外一个主要因素便是睡眠。如果睡眠不足,我就什么代码也写不出来。其他因素还包括焦虑、恐惧和沮丧等。

解决方法:找一个搭档结对编程。

创造性输出”依赖于“创造性输入”。

4.4 调试

衡量你是否是一名专业人士的一个重要方面,便是看你是否能将调试时间尽量降到最低。绝对的零调试时间是一个理想化的目标,无法达到,但要将之作为努力方向。

4.5 保持节奏

软件开发是一场马拉松,而不是短跑冲刺。你无法全程一直以最快的速度冲刺来赢得比赛,只有通过保存体力和维持稳定节奏来取胜。无论是赛前还是赛中,马拉松选手都会仔细调整好自己的身体状态。专业程序员也会同样仔细地保存好自己的精力和创造力。

  • 知道何时应该离开一会儿

  • 开车回家路上

  • 洗澡

    埋头忙于解决问题时,有时候可能会由于和问题贴得太近,无法看清楚所有的可选项。由于大脑中富有创造性的部分被紧张的专注力所抑制,你会错过很棒的解决方案。因此,有时候解决一个问题最好的办法是回家,吃顿好的,然后上床睡觉,再在第二天清晨醒来洗个澡。

4.6进度延迟 :

管理延迟的诀窍,便是早期检测和保持透明。要根据目标定期衡量进度,使用三个考虑到多种因素的期限, 乐观预估、标称预估、悲观预估。尽量严守这三个时间点。不要把预估和期望混淆在一起!把全部这三个数字呈现给团队和利益相关者,并每天修正这些数字。

交付失误:

在程序员所能表现的各种不专业行为中,最糟糕的是明知道还没有完成任务却宣称已经完成。有时候这只是一个撒过头的谎言,这就已经很糟糕了。但是,如果试图对“完成”做出一种新的合理化定义,潜在的危险性是最大的。

我们自欺欺人地认为任务已经完成得足够好,然后转入下一项任务。我们自己给自己找借口说,其他还没来得及完成的工作可以等有更充裕时间的时候再来处理。

解决:可以通过创建一个确切定义的“完成”标准来避免交付失误。最好的方法是让业务分析师和测试人员创建一个自动化的验收测试[9],只有完全通过这些验收测试,开发任务才能算已经完成。

4.7帮助

编程并非易事。越年轻的程序员对此可能越没有什么感觉。毕竟代码只不过是一堆if和while语句而已。但是随着经验渐长,你会开始意识到把这些if和while语句组装在一起的方式十分重要。不能期望将它们简单混在一起就能得到最好的代码。

相反,必须小心谨慎地将系统分解为易于理解的小单元,同时使这些单元之间的关系越少越好,这并非易事。编程很难,事实上,仅凭一己之力无法写出优秀的代码。既使你的技能格外高超,也肯定能从另外一名程序员的思考与想法中获益。

4.7.1 帮助他人

  • 互相帮助是每个程序员的职责所在。将自己封闭在格子间或者办公室里与世隔绝,有悖于专业的职业精神。你的工作不可能重要到你不能花一丁点儿时间来帮助别人。事实上,作为专业人士,要以能够随时帮助别人为荣。
  • 给他人提供帮助并非说明你比人家聪明很多,而是因为你带来了一个新的视角,对于解决问题起到了显著的催化作用。

4.7.2 接受他人的帮助

  • 如果有人向你伸出援手,要诚挚接受,心怀感激地接受帮助并诚意合作。
  • 要记住,如同要以乐于助人为荣一样,也要以乐于接受别人的帮助为荣。
  • 如果帮助唾手可得却让自己一个人堵在那儿,是很不专业的表现。

4.7.3 辅导

  • 除了自身的内驱力和资深导师的有效辅导之外,没有东西能将一名年轻的软件开发人员更快地提升为敏捷高效的专业人士。
  • 因此,再强调一次,花时间手把手地辅导年轻程序员是资深程序员的专业职责所在。同样道理,向资深导师寻求辅导也是年轻程序员的专业职责。

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

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

相关文章

Javaweb-DQL-分页查询

1. select * from stu limit 0,3; 2. select * from stu limit 0,3; 3. select * from stu limit 3,3; 4. select * from stu limit 6,3;

有哪些让你「 爽到爆炸 」的 Windows 软件?

前言 本文源于知乎的一个提问,如标题所示:有哪些让你「 爽到爆炸 」的 Windows 软件?今天大姚给大家分享6款C#/.NET开源且免费的Windows软件,希望可以帮助大家提高学习、开发、办公效率。 Microsoft PowerToys项目简介: Microsoft PowerToys 是使用 C++ 和 C# 编程语言开发…

LeetCode刷题 堆

不会做简单题目的小菜菜!一:堆 1、一种二叉树的结构(完全二叉树) 2、完全二叉树:从上到下;从左到右;填满 3、最大堆:根节点的权值大于孩子节点 4、最小堆:根节点的权值依次小于孩子节点 5、常用操作 #创建堆(最大堆,最小堆) #添加元素 #获取堆顶元素 #删除堆顶元素…

单双链表

AcWing 826. 单链表 模板题: 实现一个单链表,链表初始为空,支持三种操作:向链表头插入一个数; 删除第 k 个插入的数后面的一个数; 在第 k 个插入的数后插入一个数。现在要对该链表进行 M 次操作,进行完所有操作后,从头到尾输出整个链表。 注意:题目中第 k 个插入的数并…

20221413杜佳妍《密码系统设计》第一周

第一周预习报告 学习内容《Windows C/C++加密解密实战》第 1,2 章第一章概念复习第二章主要在 Linux(Ubuntu,openEuler)上把软件更新到最新版(3.0版本以上)AI 对学习内容的总结(1分) 要求让AI阅读学习内容并进行总结总结第一章概念复习 1. 基本概念密码学:一门研究信息系…

信息学奥赛初赛天天练-85-NOIP2014普及组-基础题4-链表、随机存取、顺序存取、二分查找、二分比较、循环结构、图领奖

信息学奥赛初赛天天练-85-NOIP2014普及组-基础题4-链表、随机存取、顺序存取、二分查找、二分比较、循环结构、图领奖 PDF文档公众号回复关键字:202409071 NOIP 2014 普及组 基础题4 9 下列选项中不属于图像格式的是( ) A JPEG 格式 B TXT 格式 C GIF 格式 D PNG 格式 10…

【笔记】【THM】Phishing(网络钓鱼)(这个模块还没学完)

钓鱼佬永不空军!!! (请不要违反法律进行网络钓鱼)【笔记】【THM】Phishing(网络钓鱼) 了解如何分析和防御网络钓鱼电子邮件。使用各种技术调查现实世界的网络钓鱼尝试。 在本模块中,您将学习如何动手分析各种网络钓鱼攻击。从检查电子邮件的源属性到查看恶意网络钓鱼附…

Kafka原理剖析之「Topic创建」

一、前言 Kafka提供了高性能的读写,而这些读写操作均是操作在Topic上的,Topic的创建就尤为关键,其中涉及分区分配策略、状态流转等,而Topic的新建语句非常简单 bash kafka-topics.sh \ --bootstrap-server localhost:9092 \ // 需要写入endpoints --create --topic topicA …

SpringBoot集成WebSocket实现后端向前端推送数据

SpringBoot集成WebSocket实现后端向前端推送数据 这里最好了解一定 websocket 参考地址:https://developer.mozilla.org/zh-CN/docs/Web/API/WebSockets_API/Writing_WebSocket_client_applications在此之前可以了解一下【轮询(Polling)、长轮询(Long Polling)、服务器发送…

扫码获取微信公众号用户的openid,向某个用户推送消息

1. 生成二维码: 生成二维码比较简单的方法是直接使用phpqrcode程序包(可在网上下载得到)。 若想获得ThinkPHP支持,需将程序包放在ThinkPHP/Extend/Vendor目录下,让后在程序中引用,代码如下: vendor("phpqrcode.phpqrcode"); //要生成二维码的数据 $text="…

京东h5st参数js逆向

扣代码的环节挺简单的就不讲了 直接到重点 发现许多包都会有一个h5st的加密参数 那么我们就要看这个参数是怎么生成的我们可以根据请求堆栈 找到h5st的入口 当然还有一种更简单的方法 就是直接全局搜索h5st 这里采用后者这里sign函数就是h5st生成的地方 但是这是个promise异步函…

GenRec论文阅读笔记

GenRec: Large Language Model for Generative Recommendation论文阅读笔记 Abstract ​ 本文提出了一种使用大型语言模型(LLM)的创新推荐系统方法,该方法纯粹基于原始文本数据,即使用项目名称或标题作为项目 ID,而不是创建精心设计的用户或项目 ID。更具体地说,我们提出…