首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

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

编程知识
2024年09月04日 21:59

代码整洁之道

image-20240904225436374

简介:

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

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

第一章:专业主义

在开启阅读此书之前,不免先问一下自己一个问题,根据这个问题的回答来决定对此书阅读的态度。

你想成为一名“专业人士”吗?你确实是想成为专业的软件工程师,对吗?

如果坚定地回答道---“是-----!”,那么调整好状态聆听Bob大叔对他40多年的编程经历的娓娓道来吧~

1.1 清楚你要什么

如果你想成为一名专业人士,必须要承担责任。

“专业主义”不仅仅象征着荣誉与骄傲,而且明确意味着责任与义务。

从你无法负责的事情上不可能获得荣誉和骄傲。

1.2 承担责任

没有对例行程序进行测试就交付软件是不负责任的。

Bob大叔担任一款控制软件的“负责工程师”,所负责的软件控制一个测量电话线路质量的小型机系统和危机系统,程序是用汇编语言编写的。该系统每天晚上都会运行“夜间例行程序”来对线路进行检测,而bob为了使新功能如期发布,未经测试直接将新系统程序交付给用户,结果接连修复程序bug。给用户和经理造成损失。

如何承担责任?

1.3 首先,不行损害之事

1.3.1 不要破坏软件功能

无法开发出完美的程序,那么要对自己的不完美负责。

所谓专业人士,就是能对自己犯下的错误负责的人,哪怕那些错误实际上在所难免。

所以我们要练习的第一件事情就是“道歉”,尽管是必要的,但是仅仅如此还不够。不能一而再,再而三地犯相同的错误。

职业经验多了之后,你的失误率应该快速减少,甚至渐近于零。失误率永远不可能等于零,但你有责任让它无限接近零。

这里给出具体的表现:

  1. 让QA找不出任何问题

  2. 要确信代码正常运行

    对所写的代码内容要做到100%的测试,但是有些代码不是很难测试吗?是的,但之所以很难测试,是因为设计时就没考虑如何测试。唯一的解决办法就是要设计易于测试的代码,最好是先写测试,再写要测的代码,这一方法叫做测试驱动开发(TDD)

  3. 自动化QA

    作为开发人员,你需要有个相对迅捷可靠的机制,以此判断所写的代码可否正常工作,并且不会干扰系统的其他部分。因此,你的自动化测试至少要能够让你知道,你的系统很有可能通过QA的测试。

1.3.2不要破坏结构

成熟的专业开发人员知道,聪明人不会为了发布新功能而破坏结构。

结构良好的代码更灵活。以牺牲结构为代价,得不偿失,将来必追悔莫及。

所有软件项目的根本指导原则是,软件要易于修改。如果违背这条原则搭建僵化的结构,就破坏了构筑整个行业的经济模型。

要想证明软件易于修改,唯一办法就是做些实际的修改。

该在什么时候做这些简单的小修改呢?随时!关注哪个模块,就对它做点简单的修改来改进结构。每次通读代码的时候,也可以不时调整一下结构。

如果觉得修改之后重新测试很麻烦,那就体现掌握测试方法的重要性了。

1.4 职业道德

职业发展是你自己的事。雇主没有义务确保你在职场能够立于不败之地,也没义务培训你,送你参加各种会议或给你买各种书籍充电。这些都是你自己的事。将自己的职业发展寄希望于雇主的软件开发人员将会很惨。

你应该计划每周工作60小时。前40小时是给雇主的,后20小时是给自己的。在这剩余的20小时里,你应该看书、练习、学习,或者做其他能提升职业能力的事情。

或许你不愿那么勤勉。没问题。只是那样的话你也不能自视为专业人士了,因为所谓“术业有专攻”那也是需要投入时间去追求的。

  • 了解你的领域

    总的来说,那些在过去50年中来之不易的理念,绝大部分在今天仍像过去一样富有价值,甚至宝贵了。

​ 下面列出了每个专业软件开发人员必须精通的事项:

  • 设计模式。必须能描述GOF书中的全部24种模式,同时还要有POSA书中的多数模式的实战经验。

  • 设计原则。必须了解SOLID原则,而且要深刻理解组件设计原则。

  • 方法。必须理解XP、Scrum、精益、看板、瀑布、结构化分析及结构化设计等。

  • 实践。必须掌握测试驱动开发、面向对象设计、结构化编程、持续集成和结对编程。

  • 工件。必须了解如何使用UML图、DFD图、结构图、Petri网络图、状态迁移图表、流程图和决策表。

  • 坚持学习

    读书,看相关文章,关注博客和微博,参加技术大会,访问用户群,多参与读书与学习小组。不懂就学,不要畏难。如果你是.NET程序员,就去学学Java;如果你是Java程序员,就去学学Ruby;如果你是C语言程序员,就去学学Lisp;如果你真想练练脑子,就去学学Prolog和Forth吧!

  • 练习

    业精于勤。真正的专业人士往往勤学苦干,以求得自身技能的纯熟精炼。只完成日常工作是不足以称为练习的,那只能算是种执行性质的操作,而不是练习。练习,指的是在日常工作之余专门练习技能,以期自我提升。

    作者这里指出“卡塔”类型练习,类似刷leetcode解决小的单元问题。

  • 合作

    专业软件开发人员往往会更加努力地尝试与他人一起编程、一起练习、一起设计、一起计划,这样他们可以从彼此身上学到很多东西,而且能在更短的时间内更高质量地完成更多工作。

  • 辅导

    想迅速牢固地掌握某些事实和观念,最好的办法就是与你负责指导的人交流这些内容。这样,传道授业的同时,导师也会从中受益。

  • 了解业务领域

    每位专业软件开发人员都有义务了解自己开发的解决方案所对应的业务领域。如果编写财务系统,你就应该对财务领域有所了解;如果编写旅游应用程序,那么你需要去了解旅游业。你未必需要成为该领域的专家,但你仍需要用功,付出相当的努力来认识业务领域。

  • 与雇主/客户保持一致

    雇主的问题就是你的问题。你必须弄明白这些问题,并寻求最佳的解决方案。每次开发系统,都应该站在雇主的角度来思考,确保开发的功能真正能满足雇主的需要。

  • 谦逊

    编程是一种创造性活动。写代码是无中生有的创造过程,我们大胆地从混沌之中创建秩序。我们自信地发布准确无误的指令,稍有差错,机器的错误行为就可能造成无法估量的损失。因此,编程也是极其自负的行为。

    然而,专业人士也知道自己会摔跟头,自己的风险评估也有出错的时候,自己也有力不从心的时候。这时候,如果他们照照镜子,会看到那个自负的傻瓜正对着自己笑。

    因此,在发现自己成为笑柄时,专业人士会第一个发笑。他从不会嘲讽别人,自作自受时他会接受别人的嘲讽。反之,他则会一笑了之。他不会因别人犯错就对之横加贬损,因为他知道,自己有可能就是下一个犯错的人。

From:https://www.cnblogs.com/TonyCode/p/18397487
本文地址: http://www.shuzixingkong.net/article/1740
0评论
提交 加载更多评论
其他文章 C#自定义控件—仪表盘
C#用户控件之仪表盘 如何让温度、湿度、压力等有量程的监控值如仪表盘(DashBoard)一样显示? 思路(GDI绘图): 定义属性:(仪表盘的半径、颜色、间隙;刻度圆的半径、颜色、字体;指针的颜色、占比;文本的字体、占比;) 绘制图形:(半圆、刻度、指针、中心、文本) 定义属性(将以上属性挨个敲完
C#自定义控件—仪表盘 C#自定义控件—仪表盘 C#自定义控件—仪表盘
如何调用openai的TTS模型
这是24年1月份写的了,调用代码大概率有变动,仅供参考。 1 什么是OpenAI的TTS模型 OpenAI的TTS模型是一种文本到语音(Text-to-Speech)模型,它可以将给定的文本转换为自然语音音频。TTS代表Text-to-Speech,是一种人工智能技术,它使计算机能够模拟自然语言的声
如何调用openai的TTS模型
每天5分钟复习OpenStack(十五)Ceph与Bcache结合
上一章我们成功部署了bcache,这一章我们将Ceph与Bcache结合来使用,使用Bcache来为ceph的数据盘提速。 1 ceph 架构 一个标准的ceph集群可能是如下的架构,SSD/NVME 存储元数据,而SATA盘存储数据。这样的架构下,物理介质的SATA盘读写速率上限决定了存储集群Ce
每天5分钟复习OpenStack(十五)Ceph与Bcache结合 每天5分钟复习OpenStack(十五)Ceph与Bcache结合 每天5分钟复习OpenStack(十五)Ceph与Bcache结合
【Azure Policy】使用deployIfNotExists 把 Azure Activity logs 导出保存在Storage Account
问题描述 使用Azure Policy,对订阅下的全部Activity Log配置Diagnostic Setting,要求: 在Subscription或Management Group级别,针对未启用Activity Log功能的订阅,启用Activity Log功能; 对已经启用了Activi
【Azure Policy】使用deployIfNotExists 把 Azure Activity logs 导出保存在Storage Account 【Azure Policy】使用deployIfNotExists 把 Azure Activity logs 导出保存在Storage Account 【Azure Policy】使用deployIfNotExists 把 Azure Activity logs 导出保存在Storage Account
基于 GoFrame 框架的 Go 项目打包成镜像,并上传至 Harbor 镜像库
〇、前言 在云服务时代最流行的部署方式就是容器部署,这也是最推荐的部署方式。 对于 GoFrame 框架就不多介绍了,直接来初始化一个 demo,备用。 // 初始化一个项目:gf-demo gf init gf-demo -u // -u 参数,是否将现有 goframe 框架更新为最新版本 //
基于 GoFrame 框架的 Go 项目打包成镜像,并上传至 Harbor 镜像库 基于 GoFrame 框架的 Go 项目打包成镜像,并上传至 Harbor 镜像库 基于 GoFrame 框架的 Go 项目打包成镜像,并上传至 Harbor 镜像库
全网最适合入门的面向对象编程教程:45 Python 实现常见数据结构-链表、树、哈希表、图和堆
数据结构是计算机科学中的一种组织和存储数据的方式,它决定了数据的访问方式和操作效率,数据结构的选择和实现对程序的性能和设计至关重要。本文主要讲述了如何使用Python语言和内置库实现常见数据结构。
全网最适合入门的面向对象编程教程:45 Python 实现常见数据结构-链表、树、哈希表、图和堆 全网最适合入门的面向对象编程教程:45 Python 实现常见数据结构-链表、树、哈希表、图和堆 全网最适合入门的面向对象编程教程:45 Python 实现常见数据结构-链表、树、哈希表、图和堆
Comfyui 基础教程(一) —— 本地安装部署
前言 前面一篇文章已经介绍过,ComfyUI 和 Stable Diffusion 的关系。不清楚的朋友,看传送门 Stable Diffusion 小白的入坑铺垫 。 WebUI 以及 ComfyUI 不等于 Stable Diffusion,可以简单粗暴一点的理解为方便运行某些大模型的工具。由于
Comfyui 基础教程(一) —— 本地安装部署 Comfyui 基础教程(一) —— 本地安装部署 Comfyui 基础教程(一) —— 本地安装部署
Java核心知识体系9-并发与多线程:线程基础
Java系列 Java核心知识体系1:泛型机制详解 Java核心知识体系2:注解机制详解 Java核心知识体系3:异常机制详解 Java核心知识体系4:AOP原理和切面应用 Java核心知识体系5:反射机制详解 Java核心知识体系6:集合框架详解 Java核心知识体系7:线程不安全分析 Java核
Java核心知识体系9-并发与多线程:线程基础 Java核心知识体系9-并发与多线程:线程基础