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

概述

工作即将满8年,如果算上2年实习的话,满打满算我已经走过将近10年的程序员编码生涯。关于Spring Boot知识点,关于微服务理论,也已经看过好几本书籍,看过十几篇技术Blog,甚至自己也写过相关技术Blog。

无论是Spring Boot,还是微服务,这些我们都可以称之为编程职业硬技能。这些硬技能一般来说都是固定的,有规律可循的。对大多数人而言都是可以快速习得的,至少是掌握其使用方法的。

但是职业不是说仅仅有这些硬技能就可以应付的,我们还需要很多软技能,包括:融入团队、人际交往、压力应对、成果交付、冲突解决、沟通、带领团队、合作互惠等等。

我们需要阅读这本书!

这本书就能给你一些警醒和帮助。阅读过程中,相信你也会会心一笑,又或者苦涩一笑。

很后悔没有早几年读到这本书。当然,这并不是说这是一本度过一遍就可以放下的书籍;事实上,这是一本常读常新的书。

注:下文以引用的方式摘抄原文,附带一些个人体会、私货与碎碎念。

专业主义

什么样的代码是有缺陷的呢?那些你没把握的代码都是!

要用这些自动化单元测试去测多少代码呢?还要说吗?全部!全部都要测!
我是在建议进行百分百测试覆盖吗?不,我不是在建议,我是在要求!你写的每一行代码都要测试。完毕!

说“不”

说“是”

编码

测试驱动开发

TDD,Test Driven Development,测试代码先于业务代码的编码。

TDD三项法则:
1.在编好失败单元测试之前,不要编写任何产品代码。
2.只要有一个单元测试失败了,就不要再写测试代码;无法通过编译也是一种失败情况。
3.产品代码恰好能够让当前失败的单元测试成功通过即可,不要多写。

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

事后写的测试只是一种防守。而先行编写的测试则是进攻,事后编写测试的作者已经受制于已有代码,他已经知道问题是如何解决的。与采用测试先行的方式编写的测试代码比起来,后写的测试在深度和捕获错误的灵敏度方面要逊色很多。

练习

只有通过不断的反复练习,才能提高自己的职业技能。作者提到的练习方式包括:学习其他语言,为开源项目做贡献,参加编程柔道场(编程马拉松),

一万小时理论。

展开来说,除了作者说的练习外,我们还可以解决同事疑问,学习GitHub开源代码,参加技术峰会,看技术书籍,浏览stackoverflow网站,回答技术问题,写技术blog,写技术书籍。

验收测试

在工作中,有一种现象叫观察者效应,或者不确定原则。每次你向业务方展示一项功能,他们就获得了比之前更多的信息,这些新信息反过来又会影响他们对整个系统的看法。

首先,即便拥有全面准确的信息,评估也通常会存在巨大的变数。其次,因为不确定原则的存在,不可能通过反复推敲实现早期的精确性。需求是一定会变化的,所以追求那种精确性是徒劳的。

测试策略

QA在团队中要扮演的便是需求规约定义者(specifier)和特性描述者(characterizer)

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

时间管理

回头看我过往8年的职业生涯,参加过无穷无尽的用户需求评审会议,测试用例评审会议,Code Review会议,生产事故复盘会议,

关于会议,有两条真理:
1)会议是必需的;
2)会议浪费大量的时间。

如果会议让人厌烦,就离席。

凡是不能在5分钟内解决的争论,都不能靠辩论解决。—— Kent Beck

有人会表现得非常被动。他们同意结束争论,之后却消极对待结果,拒绝为解决问题出一份力。

要小心这类会议:它们的目的是发泄情绪,或者让大家站队。如果会议上只有一面之词,就要避免参加。

死胡同和泥潭

所有软件开发者都要遇到死胡同。比如你做了决定,选择了走不通的技术道路。你对这个决定越是坚持,浪费的时间就越多。如果你认为这关系到自己的专业信誉,就永远也走不出来。

慎重的态度和积累的经验可以帮你避免某些死胡同,但是没法完全避免所有的。所以你真正需要的是,在走入死胡同时可以迅速意识到,并有足够的勇气走回头路。这就是所谓的坑法则(The Rule of Holes):如果你掉进了坑里,别挖。

比死胡同更糟的是泥潭。泥潭会减慢你的速度,但不会让你彻底停下来。泥潭会阻碍你前进,但如果使尽全力,你仍然可以取得进展。之所以说泥潭比死胡同更麻烦,是因为在泥潭中,你仍然可以看到前进的道路,而且看起来总是比走回头路要短(虽然实际不是这样)。

我曾经看到过产品因为陷入泥潭而报废,公司因为陷入泥潭而破产。我也看到过原本小步快跑的团队,在几个月内被泥潭搞到步履蹒跚。除了泥潭,没有其他东西能够对开发团队的效率产生如此深远且长期的负面影响,绝没有。

真正的问题在于,泥潭和死胡同一样是无可避免的。慎重的态度和积累的经验有助于避开泥潭,但无法彻底避开每一处泥潭。

预估

需求估时,项目排期,

PERT,计划评审技术,Program Evaluation and Review Technique。

压力

谈到压力,就不得不提到当下非常流行的一个词:PUA。

在我之前的工作经历中,被人PUA过。

换一份工作,换一个岗位。在我做技术经理时,我可能也在不知不觉中PUA过其他同事,当然在我自己看来,这哪里能算得上PUA呢?

需要谨记的是,随着我们的工作年限的提升,工作能力的提高,自然而然工资也在增长的过程中,要时刻管理好压力。我们可能会作为一个小领导,手下带着几个人。在我们上面,也有话语权更大的领导们。当上面领导在施加压力的时候,压力往下传递的方式和方法是一门很大的学问。

协作

专业程序员的首要职责是满足雇主的需求。这意味着要和你的经理们、业务分析师们、测试工程师们和其他团队成员很好地协作,深刻理解业务目标。这并不是说你必须要成为业务方面的老学究,而是说你需要理解手上正在编写的代码的业务价值是什么,了解雇你的企业将如何从你的工作中获得回报。

专业程序员最糟糕的表现是两耳不闻窗外事,只顾一头将自己埋在技术堆里,甚至连公司业务火烧眉毛行将崩溃了也不闻不问。你的工作职责就是要让业务免于陷入困顿,让公司可以长久发展下去。

团队与项目

组建一个强有力的团队远远比做成一个艰难的项目更有意义。绝大多数人(98%)仅仅只是平庸人。世间少有的是一个旷世奇才,能够仅仅凭借一个人完成一件伟大的产品。哪怕是乔布斯那样的偏执狂般的天才人物,也需要一直队伍协作起来才能创造出iPad、iPhone等划时代的产品。

有凝聚力的团队通常有大约12名成员。最多的可以有20人,最少可以只有3个人,但是12个人是最好的。这个团队应该配有程序员、测试人员和分析师,同时还要有一名项目经理。

关于团队建设的重要性不言而喻,组建一个战斗力超强的团队更并非易事。君不见,多少创业团队失败就是因为团队成员出现各种各样的隔阂、利益出现冲突、想不到一起去等等。

所以,项目应该跟着团队走,而不是团队因为某项目而临时组建。临时组建的团队要经历多久的磨合期,什么时候才能有多少比较高效的产出,这些都是不确定性。而不确定性就意味着失败。

专业的开发组织会把项目分配给已形成凝聚力的团队,而不会围绕着项目来组建团队。一个有凝聚力的团队能够同时承接多个项目,根据成员各自的意愿、技能和能力来分配工作,会顺利完成项目。

辅导、学徒期与技艺

鄙人本科专业是自动化,所谓的又一个【万金油】专业。【隐隐约约】记得,本科即将毕业时有去找过实习找过工作,但是一来自己啥也不会啥也不懂,没有找到满意(高薪)的工作;二来也不想太早面对现实社会(能多逃避几年是几年),所以选择读研。专业是模式识别与智能系统。

嗯,非计算机科班出身。

本科和研究生(实习时)甚至都没有怎么写过Java代码,只写过C、MATLAB、C#、Python、Shell。误打误撞,第一份工作去了一家外企,使用Java语言。工作前两年疯狂恶补Java基础与Spring等框架。这几年一直也在持续看书学习在弥补所谓的非科班出身的基础薄弱。

我想表达的意思是,程序员,尤其、特别、非常值得一提的是Java程序员并不是没有门槛。

虽然在达内(嗯!有没有会心一笑的朋友们?!!)培训机构学习一两个月就可以找到一份Java开发职业!!!

事实上,编码还是有门槛的,哪怕是Java编码。

事实上,还有相当多的人,确实也承认编码是有门槛的,但是测试能有什么门槛呢?不就是点点点吗?不就是发现Bug吗?不就是根据产品出具的需求文档来验收功能发现其中不想符合的地方吗?

所以,我无数次听到或看到:哎呀,行业不景气,经济在下滑,要不要考虑转行做测试呢?

这口气说得好像,测试没有任何转行的门槛一样。

事实上,在我不算长的职业生涯里,看到过好几例表现极其差的测试(QA)同事。表现是逻辑思维混乱,理不清业务模块间的关系,不具备自我学习的能力等等。

画家不会这么做,管道工不会这么做,电工也不会这么做。天哪,我甚至认为快餐厨师也不会这么做!在我看来,这些雇用计算机科班毕业生的公司在新员工培训上的投资,起码应该比麦当劳在服务生身上的投资要多些才对吧。

我们不要自欺欺人地说这无关紧要。这很要紧。我们的文明运行在软件之上。是软件在传送和操纵我们日常生活中无处不在的信息,是软件在控制我们的汽车引擎、变速箱和刹车,是软件在维护我们的银行账户、发送账单和接收付款,是软件在帮我们洗衣服,是软件在告诉我们时间,是软件在电视上显示图片,是软件在发送短消息和拨通电话,是软件在我们疲劳时为我们带来娱乐。软件无处不在。

我不是在反对转行,只是在提醒自己需要持续学习。公司不能(也没有任何规定必须要如此)给你提供培训的资源时,你需要自己主动积极去学习。

工具

git是必备技能,

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

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

相关文章

以存算一体芯片加速汽车智能化进程,后摩智能带来更优解?

汽车产业的长期价值锚点已悄然变化,催生出新的商业机遇。 过去,在燃油车市场,燃油经济性和品牌认知度等是重要的消费决策因素和资本价值衡量标准,但在新能源时代,产业价值聚焦在两方面,一是电动化&#xf…

Netty Review - Netty与Protostuff:打造高效的网络通信

文章目录 概念PrePomServer & ClientProtostuffUtil 解读测试小结 概念 Pre 每日一博 - Protobuf vs. Protostuff&#xff1a;性能、易用性和适用场景分析 Pom <dependency><groupId>com.dyuproject.protostuff</groupId><artifactId>protostuff-…

论文阅读——RS DINO

RS DINO: A Novel Panoptic Segmentation Algorithm for High Resolution Remote Sensing Images 基于MASKDINO模型&#xff0c;加了两个模块&#xff1a; BAM&#xff1a;Batch Attention Module 遥感图像切分的时候把一个建筑物整体比如飞机场切分到不同图片中&#xff0c;…

STM32微控制器在热电偶传感器应用中的性能评估

热电偶传感器是一种常用的温度测量技术&#xff0c;广泛应用于工业和自动化领域。在本文中&#xff0c;我们将探讨STM32微控制器在热电偶传感器应用中的性能评估。我们将涵盖STM32的特性、热电偶传感器的原理、硬件连接、软件编程以及性能评估的方法和指标。 STM32微控制器的特…

swing快速入门(二十三)弹球小游戏

注释很详细&#xff0c;直接上代码 上一篇 新增内容 1. 键盘响应监听 2. 使用定时器事件更新画板 3. 定时器事件的开始与暂停 4. 弹球小游戏的坐标逻辑判断 import javax.swing.*; import java.awt.*; import java.awt.event.*;public class swing_test_19 {//创建一个窗…

Ubuntu 常用命令之 du 命令用法介绍

&#x1f4d1;Linux/Ubuntu 常用命令归类整理 Ubuntu系统下的du命令是一个用来估计和显示文件和目录所占用的磁盘空间的命令。du是“disk usage”的缩写&#xff0c;这个命令可以帮助用户了解磁盘被哪些文件和目录使用。 du命令的常见参数有 -a&#xff1a;列出所有文件和目…

React网页转换为pdf并下载|使用jspdf html2canvas

checkout 分支后突然报错&#xff0c;提示&#xff1a; Cant resolve jspdf in ... Cant resolve html2canvas in ... 解决方法很简单&#xff0c;重新 yarn install 就好了&#xff0c;至于为什么&#xff0c;我暂时也不知道&#xff0c;总之解决了。 思路来源&#xff1a; 先…

JVM启动流程(JDK8)

JVM启动流程(JDK8) JVM的启动入口是位于jdk/src/share/bin/java.c的JLI_Launch函数,其定义如下: int JLI_Launch(int argc, char ** argv, /* main argc, argc */int jargc, const char** jargv, /* java args */int appclassc, const char** appclass…

centos7安装开源日志系统graylog5.1.2

安装包链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1Zl5s7x1zMWpuKfaePy0gPg?pwd1eup 提取码&#xff1a;1eup 这里采用的shell脚本安装&#xff0c;脚本如下&#xff1a; 先使用命令产生2个参数代入到脚本中&#xff1a; 使用pwgen生成password_secret密码 …

在ClickHouse数据库中启用预测功能

在这篇博文中&#xff0c;我们将介绍如何将机器学习支持的预测功能与 ClickHouse 数据库集成。ClickHouse 是一个快速、开源、面向列的 SQL 数据库&#xff0c;对于数据分析和实时分析非常有用。该项目由 ClickHouse&#xff0c; Inc. 维护和支持。我们将探索它在需要数据准备以…

C++中多态的原理

文章目录 前言多态的原理多态的条件要求虚函数表用程序打印虚表多继承的虚函数表静态多态和动态多态菱形虚拟继承 前言 上篇讲解了多态的原理&#xff0c;这篇文章来详细讲解一下多态的原理。 这里有一道常考笔试题&#xff1a;sizeof(Base)是多少&#xff1f; 为什么不是8&…

【CF闯关练习】—— 800分段

&#x1f30f;博客主页&#xff1a;PH_modest的博客主页 &#x1f6a9;当前专栏&#xff1a;cf闯关练习 &#x1f48c;其他专栏&#xff1a; &#x1f534;每日一题 &#x1f7e1; C跬步积累 &#x1f7e2; C语言跬步积累 &#x1f308;座右铭&#xff1a;广积粮&#xff0c;缓…

推荐一个vscode看着比较舒服的主题:Dark High Contrast

主题名称&#xff1a;Dark High Contrast &#xff08;意思就是&#xff0c;黑色的&#xff0c;高反差的&#xff09; 步骤&#xff1a;设置→Themes→Color Theme→Dark High Contrast 效果如下&#xff1a; 感觉这个颜色的看起来比较舒服。

腾讯云发布升级版金融音视频解决方案,提供全新架构、安全和特性

远程银行、视频尽调、全媒体客服、路演直播……近年来&#xff0c;音视频技术支撑下的非接触式金融服务&#xff0c;成为了金融机构数字化转型和探索服务创新的重要方向。 12月21日&#xff0c;腾讯云正式发布升级版金融级音视频解决方案。新方案在架构、安全和特性上进行全面…

【数字图像处理】实验二 图像变换

图像变换 一、实验内容&#xff1a; 1&#xff0e; 熟悉和掌握利用Matlab工具进行数字图像的读、写、显示等数字图像处理基本步骤。 2&#xff0e; 熟练掌握各种图像变换的基本原理及方法。 3&#xff0e; 能够从深刻理解图像变换&#xff0c;并能够思考拓展到一定的应用领域。…

Ubuntu 常用命令之 less 命令用法介绍

&#x1f4d1;Linux/Ubuntu 常用命令归类整理 less命令是一个在Unix和Unix-like系统中用于查看文件内容的命令行工具。与more命令相比&#xff0c;less命令提供了更多的功能和灵活性&#xff0c;例如向前和向后滚动查看文件&#xff0c;搜索文本&#xff0c;查看长行等。 les…

ChatGPT一周年:开源语言大模型的冲击

自2022年末发布后&#xff0c;ChatGPT给人工智能的研究和商业领域带来了巨大变革。通过有监督微调和人类反馈的强化学习&#xff0c;模型可以回答人类问题&#xff0c;并在广泛的任务范围内遵循指令。在获得这一成功之后&#xff0c;人们对LLM的兴趣不断增加&#xff0c;新的LL…

阿里云ECS配置IPv6后,如果无法访问该服务器上的网站,可检查如下配置

1、域名解析到这个IPv6地址,同一个子域名可以同时解析到IPv4和IPv6两个地址&#xff0c;这样就可以给网站配置ip4和ipv6双栈&#xff1b; 2、在安全组规则开通端口可访问&#xff0c;设定端口后注意授权对象要特殊设置“源:::/0” 3、到服务器nginx配置处&#xff0c;增加端口…

Qt之QWidget 自定义倒计时器

简述 Qt提供的带进度显示的只有一个QProgresBar,这个控件要么是加载进度从0~100%,要么是持续的两边滚动;而我想要是倒计时的效果,所以QProgresBar并不满足要求,而Qt重写控件相对于MFC来说简直是轻而易举,所以就整了两种不同的倒计时控件; 效果 代码 QPushButton的绘制部…

2023 英特尔On技术创新大会直播 | AI魅力的生活化

目录 前言正文 前言 依稀记得去年的直播大会&#xff0c;主要展现了其灵活、加速和半集成化的独特优势&#xff0c;广泛应用于人工智能、5G通信、边缘计算以及视觉图像处理等领域&#xff0c;不断提供领先的性能、能效和可编程性的创新。 如今又带来一些不一样的特色&#xf…