软件工程师进入编程世界的55个锦囊:《 好代码 ,坏代码》

2023-11-04 02:10

本文主要是介绍软件工程师进入编程世界的55个锦囊:《 好代码 ,坏代码》,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

软件工程领域关于如何写出优秀代码的建议和观点非常多。但生活没有那么简单,
绝不只是尽可能多地吸取好的建议并严格遵守。由于不同来源的建议往往相互矛盾,我们怎么知道要听从哪个建议。更重要的是,软件工程并不是一门精确的科学,不可能将其提炼为一套绝对可靠的原则(无论我们如何努力)。每个项目都不一样,几乎总有一些因素需要权衡。

为了写出优良的代码,我们必须对手上的方案有合理的判断,并彻底想清楚特定方法 的结果(好的和坏的)。为此,我们必须了解问题的根本:编写代码到底是为了实现什么目标?实现那些目标需要考虑哪些高层因素?《好代码 ,坏代码》就可以帮助刚入门的软件工程师获取这些技能。

好代码 ,坏代码

[英] 汤姆·朗(Tom Long) 著,姚军,茹蓓 译

Google开发工程师从零讲解高质量代码,整合作者及团队多年的软件开发实践经验,通过50+条锦囊妙计、100+个案例,帮你轻松理解和掌握编程技能。

软件工程师在不断积累经验的过程中会发现,日常编程中所做出的决策对于软件的正常运 行、工作的顺利开展以及其他人的维护有很大的影响。学习编写(从软件工程角度来看)优良代 码需要花费许多年的时间。这些技能的获得过程往往很缓慢。工程师从自己的错误中吸取教训, 或者不断从团队的资深工程师那里得到建议,以特定的方式得到这些技能。

本书特点

本书介绍软件工程师经常用于编写可靠的、易于维护的代码的关键概念与技术。本书并不是 简单列举“该做”和“不该做”的事项,而是旨在解释每种概念和技术背后的核心理论,以及需 要权衡的因素。这应该能够帮助读者对如何像一位经验丰富的软件工程师那样思考和编程有基本 的理解。

本书的读者

本书的目标读者是那些已经具备基本编程技能,想继续提高编程技能的人。本书适合有0~ 3年软件工程师工作经验的人阅读。有丰富工作经验的工程师可能发现,本书中的许多内容他们 都已经掌握,但我希望他们把这本书当作指导其他同行的有用资源。

本书的组织结构

本书分为三部分,共11章。第一部分介绍较为理论性的概念,它们组成了我们对代码的思 考方法。第二部分转向较为实用的经验教训。第二部分的每一章都分为一系列主题,分别涵盖特 定的考虑因素或技术。第三部分介绍创建有效和可维护的单元测试的原则与方法。

本书各章节的总体形式是:先阐述一个可能有问题的场景(以及部分代码),然后说明消除部分或全部问题的替代方法。从这个意义上说,每个章节往往是从展示“坏”代码过渡到“好” 代码,但需要注意的是,坏和好是主观的说法,与语境相关。正如本书所要强调的,在编程工作 中往往要考虑一些微妙的差别和权衡,这也就意味着好坏的区别并不总是一目了然。

第一部分“理论”为一些总体性和较为理论性的考虑因素打下基础。这些考虑因素组成我们像软件工程师那样编写代码的方法。

  • 第1章介绍代码质量的概念,特别是我们打算用高质量代码要实现的一组实际目标。 然后,我们将这些目标展开为“代码质量的六大支柱”,为日常编程使用提供高层策略。
  • 第2章讨论抽象层次。这是指导我们如何构造代码,并将其分解为不同部分的基本考 虑因素。
  • 第3章强调考虑必须使用我们的代码开展工作的其他工程师的重要性。本章还将讨论 代码契约,以及如何仔细考虑这些契约以防止软件缺陷。
  • 第4章讨论软件错误,并阐释为何认真思考错误通知与处理方法是编写优良代码的关 键部分。

第二部分“实践”以更贴合实践的方式,用特定的技术与示例介绍代码质量的前五大支柱(第1章定义的)。

  • 第5章介绍提高代码可读性的方法。这能确保其他工程师理解代码的意义。
  • 第6章介绍避免意外情况的方法。这能确保其他工程师不会误解代码的功能,从而最 大限度地降低出现缺陷的可能性。
  • 第7章介绍使代码不容易被误用的方法。这使得工程师不容易在不经意间编写出逻辑 错误或者违反假设的代码,最大限度地降低出现缺陷的可能性。
  • 第8章介绍实现代码模块化的方法。这种关键技术有助于确保代码表现出清晰的抽象 层次,能够适应不断变化的需求。
  • 第9章介绍代码的重用性和可推广性。这能避免软件工程师重复编写类似代码,使得 添加新功能或构建新特性更加方便、安全。

第三部分“单元测试“介绍编写高效单元测试的关键原则和实用方法。

  • 第10章介绍影响单元测试代码的一些原则和考虑因素。
  • 第11章以第10章介绍的原则为基础,为编写单元测试提供一系列具体、实用的建议。 阅读本书的理想方式是从头到尾完整阅读,因为本书前面的章节是后续章节的基础。尽管如 此,第二部分(以及第11章)中的主题通常相对独立,而且每个主题篇幅较小,因此,即使单 独阅读,也是有益处的。这样的编写方式是有意为之,目的是提供向其他工程师快速解释既定优 秀实践的有效手段。对希望在代码评审中解释特定概念或指导其他工程师的工程师来说,这是非常有用的。

如何运用本书中的建议

阅读任何关于软件工程的书籍或文章时,一定要记住这是主观的论题,并且对现实问题的 解决方案通常不是完全明晰的。按照我的经验,优秀的工程师总是带着健康的怀疑心态去阅读任 何文章,并渴望理解其中的基本思路。人们的观点各不相同且不断发展,同时可用的工具和编程 语言也在不断改进。想要知道在何时运用特定建议、何时忽略它们,就必须理解它们的缘由、背 景以及限制范围。

本书旨在收集一系列有用的主题和技术,以引导工程师写出更好的代码。尽管考虑这些主题 和技术或许是明智之举,但不应该将其看成绝对正确的理论,或者将其作为绝不能破坏的硬性规 则。良好的判断力是优秀工程师必不可少的特征。

这篇关于软件工程师进入编程世界的55个锦囊:《 好代码 ,坏代码》的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/342492

相关文章

揭秘世界上那些同时横跨两大洲的国家

我们在《世界人口过亿的一级行政区分布》盘点全球是那些人口过亿的一级行政区。 现在我们介绍五个横跨两州的国家,并整理七大洲和这些国家的KML矢量数据分析分享给大家,如果你需要这些数据,请在文末查看领取方式。 世界上横跨两大洲的国家 地球被分为七个大洲分别是亚洲、欧洲、北美洲、南美洲、非洲、大洋洲和南极洲。 七大洲示意图 其中,南极洲是无人居住的大陆,而其他六个大洲则孕育了众多国家和

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

软件设计师备考——计算机系统

学习内容源自「软件设计师」 上午题 #1 计算机系统_哔哩哔哩_bilibili 目录 1.1.1 计算机系统硬件基本组成 1.1.2 中央处理单元 1.CPU 的功能 1)运算器 2)控制器 RISC && CISC 流水线控制 存储器  Cache 中断 输入输出IO控制方式 程序查询方式 中断驱动方式 直接存储器方式(DMA)  ​编辑 总线 ​编辑

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

代码随想录冲冲冲 Day39 动态规划Part7

198. 打家劫舍 dp数组的意义是在第i位的时候偷的最大钱数是多少 如果nums的size为0 总价值当然就是0 如果nums的size为1 总价值是nums[0] 遍历顺序就是从小到大遍历 之后是递推公式 对于dp[i]的最大价值来说有两种可能 1.偷第i个 那么最大价值就是dp[i-2]+nums[i] 2.不偷第i个 那么价值就是dp[i-1] 之后取这两个的最大值就是d

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip