《代码整洁之道:程序员的职业素养》

news2024/11/15 15:34:25

作者:【美】Robert C. Martin

第1章 专业主义

专业主义就意味着担当责任,软件开发太复杂了,不可能没什么 bug。但很不幸,这并不能为你开脱。人体太复杂了,不可能尽知其全部,但医生仍要发誓不伤害病人。如果他们都不拿 “人体的复杂性” 作托词,我们又怎么能开脱自己的责任呢?

所谓专业人士,就是能对自己犯下的错误负责的人,哪怕那些错误在所难免。专业人士们要练习的第一件事就是 “道歉”。经验多了之后,你的失误率应该快速减少,甚至渐近于零。

你怎么知道代码能否常运行呢?很简单,测试!一遍遍地测,翻来覆去、颠来倒去地测,使出浑身解数来测!
写一些随时都能运行的单元测试,然后尽可能多地执行这些测试。

如果你希望自己的软件灵活可变,那就应该时常修改它!让软件保持固定不变才是危险的!如果一直不重构代码,等到最后不得不重构时,你就会发现代码已经“僵化了”。

为什么大多数开发人员不敢不断修改他的代码呢?因为他们害怕会改坏代码!为什么会有这样的担心呢?因为他们没做过测试。

第2章 说不

专业人士敢于说明真相而不屈从于权势。专业人士有勇气对他们的经理说 “不”。优秀的经理人对于敢于说 “不”的人,总是求贤若渴。因为只有敢于说 “不”,才能真正做成一些事情。

我的个人经验告诉自己,面对艰难决定,直面不同角色的冲突是最好的办法。
大多数时间,我们都希望能够说 “是”。确实,健康的团队都会努力寻求给他人以肯定的答复。
但有时候,获取正确决策的唯一途径,便是勇敢无畏地说出 “不” 字……我们要明白,委屈专业原则以求全,并不是问题的解决之道。舍弃这些原则,只会制造出更多的麻烦
许诺 “尝试”,就意味着你承认自己之前未尽全力,承认自己还有余力可施。

时常提醒自己——客户所要的任何一项功能,一旦写起来,总是远比它开始时所说的要复杂许多……
成为英雄及 “解决问题” 的诱惑诚然巨大,只是我们要明白,牺牲专业原则以求全,并非问题的解决之道。舍弃这些原则,只会制造出更多的麻烦。

“有可能写出好代码吗?有可能坚守专业主义精神吗?”
我的回答是:“是的。但你要学会如何说‘不’。”

第3章 说是

真正的承诺听起来是怎样的?
我将在……之前……(例如,我将在周二之前完成这个任务。)

如果因为意外,无法兑现承诺,那么最重要的就是尽早向你的承诺对象发出预警,越快越好,越早越好。

第4章 编码

疲劳的时候,千万不要写代码。奉献精神和职业素养,更多意义上指要遵循纪律原则而非成为长时间工作的工作狂。

“创造性输出” 依赖于 “创造性输入”。科幻小说最能激发我的创造力。
对你来说,可能是其他东西。也许是一本精彩的悬疑小说、一首诗,甚至是一本言情小说。在抛开问题的几个小时内,我会在潜意识中非常活跃地模拟各种挑战和创意,最终,内心中会升腾起几乎无法遏止的力量,激励自己去创造。

花时间手把手地辅导年轻程序员是资深程序员的专业职责所在。同样道理,向资深导师寻求辅导也是年轻程序员的专业职责。

第5章 测试驱动开发

测试驱动开发可以优化设计,我们需要隔离出待测试的代码。如果一个函数调用了其他函数,单独测试它通常会比较困难。为了编写测试,你必须找出将这个函数和其他函数解耦的办法。换言之,测试驱动开发,会迫使你去考虑什么是好的设计。

第6章 练习

专业人士都需要练习。他们用自己的时间练习,因为他们知道保持自己的技能不落伍是自己的责任,而不是雇主的责任。练习的时候你是赚不到钱的,但是练习之后,你会获得回报,而且是丰厚的回报。

第7章 验收测试

要解决开发方和业务方沟通问题,我所知道的唯一有效的办法就是编写自动化的验收测试。这些测试足够正式,所以其结果有权威性。这些测试不会造成模糊,也不可能与真实系统脱节。它们,就是无可挑剔的需求文档。

第8章 测试策略

在这里插入图片描述
自动化测试金字塔

第9章 时间管理

关于会议,有两条真理:
(1)会议是必需的;
(2)会议浪费了大量的时间。
收到会议邀请,务必确保出席会议可以给自己目前的工作带来切实且显著的成效,否则不必参与。

有时候你工作时会心不在焉。很可能是因为要做的事情让人恐慌、难受,或者厌烦。你说服自己有些工作更紧急,所以转去处理,这种行为叫作优先级错乱——提高某个任务的优先级,之后就有借口推迟真正急迫的任务。优先级错乱是自我麻醉的谎言,我们知道这不是真的,但还是用它来欺骗自己。

第10章 预估

业务方觉得预估就是承诺。开发方认为预估就是猜测。
为了降低预估的误差,可以把大任务分成许多小任务,分开预估再加总,结果会比单独评估大任务要准确很多。

第11章 压力

观察自己在危机时刻中的反应,就可以了解自己的信念。如果在危机中依然遵循着你守持的纪律,就说明你确实相信那些纪律。反过来说,如果在危机中改变行为,就说明你并不真正相信常规行为中的原则。

第12章 协作

程序员最糟糕的表现是两耳不闻窗外事,只顾一头将自己埋在技术堆里。专业程序员会花时间去理解业务。会和用户讨论他们正在使用的软件,会和销售人员与市场人员讨论所遭遇的问题,会和经理们沟通,明确团队的短期目标和长期目标。

第13章 团队与项目

团队已经有了凝聚力,但却因为项目结束了就解散这样的团队,则是极为荒谬的。最好的做法是不拆散团队,让他们继续合作,只要不断地把新项目分派给他们就行。

第14章 辅导、学徒期与技艺

学校能够传授的是计算机编程的理论。但是学校并不会也无法传授作为一名编程匠者所需掌握的原则、实践和技能。这些东西只有经由师徒个体间多年的细心监督和辅导才能获得。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

隐藏excel单元格数据的两个方法

在Excel中,公式是用来计算数据和结果的非常重要的一部分。但是,有时候您可能希望隐藏公式,以保护其不被他人修改或查看。那么今天小编就来给大家分享隐藏excel单元格数据的方法。 一、使用“隐藏”功能 在Excel中,我们还可以使用…

ZYNQ学习--AXI总线协议

一、AXI 总线简介 AXI(Advanced Extensible Interface)高级拓展总线是AMBA(Advanced Microcontroller Bus Architecture)高级微控制总线架构中的一个高性能总线协议,由ARM公司开发。AXI总线协议被广泛应用于高带宽、低…

大语言模型超参数调优:开启 AI 潜能的钥匙

前言 在人工智能的广袤领域中,大语言模型(LLM)凭借其强大的实力,不断重塑着我们对机器理解语言的认知。然而,要使这些模型在特定应用场景中发挥最大效能,关键在于巧妙调整其超参数。本文将引领你深入探究 …

x-cmd pkg | bat: cat 命令现代化替代品,终端用户必备工具

目录 简介快速上手安装使用与第三方工具组合使用 功能特点竞品和相关作品进一步阅读 简介 bat 是由 github.com/sharkdp 用 Rust 开发的 cat 命令现代化替代品。它比 cat 命令扩展了更多的现代化功能,如语法高亮、自动分页、Git集成等,能为用户提供更为…

python如何跨文件调用自己定义的函数

当自己定义函数过多时,只有一个python文件时代码会很长,不易理清代码框架,比如下面这段代码,如何隐藏具体函数细节呢?也就是把def函数放到另外一个python文件里步骤如下: 一个python文件代码篇幅过长 imp…

结构体对齐、函数传参、库移植

结构体字节对齐 按固定位大小匹配地址&#xff0c;a:10b:1020位 <32位4字节 202040位>32位 所以ab20作为一个int型&#xff0c;int c:20 单独做4个字节&#xff08;int&#xff09; 101020 &#xff08;int&#xff09;4个字节 &#xff0c;20&#xff08;int&#x…

算法之逻辑斯蒂回归(Logistic regression)

简介&#xff1a;个人学习分享&#xff0c;如有错误&#xff0c;欢迎批评指正。 逻辑斯蒂回归&#xff08;Logistic Regression&#xff09;是统计学中一种广泛应用于二分类问题的算法。它的主要目标是预测二分类问题中的事件发生的概率。尽管名字里有“回归”&#xff0c;但逻…

wordpress迁移到别的服务器

wordpress论坛网站搭建 于2023/11/16写的该文章 一-配置环境 配置LNMP&#xff08;linuxnginxmysqlphpphpmyadmin&#xff09;环境或者LAMP&#xff08;apache&#xff09; 可以选择集成了这些软件的套件 下载链接&#xff1a;https://www.xp.cn/download.html 手动下载这…

https加密原理

以为http的数据都是以明文传送&#xff0c;会有很大的安全问题&#xff0c;所以出现的https协议。https就是在http协议的基础上增加了一个安全层&#xff0c;可以对数据进行加密和解密(例如SSL、TLS等)。 https加密解密的原理&#xff1a;证书非对称加密对称加密 在讲解原理前…

Python爬虫之urllib模块详解

Python爬虫入门 此专栏为Python爬虫入门到进阶学习。 话不多说&#xff0c;直接开始吧。 urllib模块 Python中自带的一个基于爬虫的模块&#xff0c;其实这个模块都几乎没什么人用了&#xff0c;我就随便写写了。 - 作用&#xff1a;可以使用代码模拟浏览器发起请求。&…

2024 年最新前端ES-Module模块化、webpack打包工具详细教程(更新中)

模块化概述 什么是模块&#xff1f;模块是一个封装了特定功能的代码块&#xff0c;可以独立开发、测试和维护。模块通过导出&#xff08;export&#xff09;和导入&#xff08;import&#xff09;与其他模块通信&#xff0c;保持内部细节的封装。 前端 JavaScript 模块化是指…

【Pytorch】一文快速教你高效使用torch.no_grad()

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 博主简介 博主致力于嵌入式、Python、人工智能、C/C领域和各种前沿技术的优质博客分享&#xff0c;用最优质的内容带来最舒适的…

2024年中国研究生数学建模竞赛A/C/D/E题全析全解

问题一&#xff1a; 针对问题一&#xff0c;可以采用以下低复杂度模型&#xff0c;来计算风机主轴及塔架的疲劳损伤累积程度。 建模思路&#xff1a; 累积疲劳损伤计算&#xff1a; 根据Palmgren-Miner线性累积损伤理论&#xff0c;元件的疲劳损伤可以累积。因此&#xff0c;…

基于SpringBoot+Vue的商城积分系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目源码、Python精…

手机在网状态查询接口如何用C#进行调用?

一、什么是手机在网状态查询接口&#xff1f; 手机在网状态查询接口是利用实时数据来对手机号码在运营商网络中的状态进行查询的工具&#xff0c;包括正常使用状态、停机状态、不在网状态、预销户状态等。 二、手机在网状态查询适用哪些场景&#xff1f; 例如&#xff1a;商…

【线程池】ThreadPoolExecutor应用

ThreadPoolExecutor应用 每一步的坚持与积累,都是铸就高薪和大牛的必经的修炼 哈哈,不吹牛逼了,今天来分享最近在提升中的学习总结,无论是对在职场还是求职,看完,我相信都会有些许的收获和成长 也难得过了一个悠闲点的周末,哈哈哈,一起奥利给!! 本文总纲: 1.为什么要自定义线程…

联合体的用法和用联合体判断大小端存储

像结构体⼀样&#xff0c;联合体也是由⼀个或者多个成员构成&#xff0c;这些成员可以不同的类型。但是编译器只为最⼤的成员分配⾜够的内存空间。联合体的特点是所有成员共⽤同⼀块内存空间。所 以联合体也叫&#xff1a;共⽤体。 给联合体其中⼀个成员赋值&#xff0c;其他成…

Linux 文件系统(下)

目录 一.文件系统 1.文件在磁盘上的存储方式 a.盘面、磁道和扇区 b.分区和分组 2.有关Block group相关字段详解 a.inode编号 b.inode Table&#xff08;节点表&#xff09; c.Data blocks&#xff08;数据区&#xff09; d.小结 二.软硬链接 1.软链接 a.软链接的创建…

SystemExit: 系统退出异常的完美解决方法⚙️

&#x1f6aa;SystemExit: 系统退出异常的完美解决方法⚙️ &#x1f6aa;SystemExit: 系统退出异常的完美解决方法⚙️摘要引言正文1. 什么是SystemExit异常&#xff1f;&#x1f4dc;2. 捕获SystemExit&#xff1a;是否应该这样做&#xff1f;⚠️3. 正确处理SystemExit的最…

javase复习day30综合练习

制造假数据 制造数据 练习一 package Demo1;import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; im…