高效程序员工作法(八)

2023-10-29

目录

 

前言:

 一、如何做好验收测试?

一句话总结:

二、你的代码是怎么变混乱的?

一句话总结:

 三、总是在MVC分层架构,但你真的理解分层么。

一句话总结:

四、为什么总有人觉得5万块钱可以做一个淘宝

一句话总结:

 五、先做好DDD再谈微服务吧,那只是一种部署形式

一句话总结:

 六、新入职一家公司,怎么快速进入工作状态

一句话总结:

七、面对遗留系统,你应该这样做

八、我们应该如何保持竞争力?

问题:

1.持续交付是否可以再做扩展?

一句话总结:

总结:


前言:

  本篇博客内容来源自:极客时间课程《10x程序员工作法》处于学习记录。将个人认为比较重要的知识点进行摘抄记录。有兴趣的同学去极客时间学习完整课程。

10x程序员工作法_开发效率_10倍效率-极客时间


 一、如何做好验收测试?

      行为驱动开发中的行为,指的是业务行为。BDD 希望促进业务人员与开发团队之间的协作,换句话说,如果你想做 BDD,就应该用业务语言进行描述。

     BDD 则让我们换了一个视角,用业务语言做系统测试,所以,它是一个更高级别的抽象。

     想写好 BDD 的测试用例,关键点在用业务视角描述。

     自动化验收测试也是一个逐步发展的过程,从最开始的各自为战,到后来逐渐形成了一个完整 的自动化验收测试的体系。

一句话总结:

将验收测试自动化


二、你的代码是怎么变混乱的?

    对程序员最好的惩罚是让他维护自己三个月前写的代码。

  软件开发符合SOID原则

  • 单一职责原则(Single responsibility principleSRP
  • 开放封闭原则(Open–closed principleOCPLiskov
  • 替换原则(Liskov substitution principleLSP
  • 接口隔离原则(Interface segregation principleISP
  • 依赖倒置原则(Dependency inversion principleDIP

       当我看到了 SOLID 的五个原则之后,我终于想明白了,原来我追求的方向错了。如果说设计模式是,设计原则才是设计模式并不能帮你建立起知识体系,而设计原则可以。

     首先,什么是单一职责原则呢?如果读过《敏捷软件开发:原则、实践与模式》,你对单一职责的理解应该是,一个模块应该仅有一个修改的原因。

     单一职责原则可以用在不同的层面,写一个类,你可以问问这些方法是不是为一类 actor 服务;写方法时,你可以问问这些代码是不是在一个层面上;甚至一个服务,也需要从业务上考虑一下,它在提供是否一类的服务。总之,你看到的粒度越细,也就越能发现问题。

一句话总结:

把函数写短。


 三、总是在MVC分层架构,但你真的理解分层么。

      之所以你可以这么放心大胆地忽略底层协议,一个关键点就在于,网络模型的分层架构实现得太好了,好到你作为上层的使用者几乎可以忽略底层。而这正是分层真正的价值:构建一个良好的抽象。

    我从最常见的服务端三层架构入手,给你讲了它们的来龙去脉。分层架构实际是一种设计上的分解,将不同的内容放在不同的地方,降低软件开发和维护的成本。

    分层,更关键的是,提供抽象。这种分层抽象在计算机领域无处不在,无论是编程语言,还是网络协议,都体现着分层抽象的价值。有了分层抽象,人们才能更好地在抽象的基础上构建更复杂的东西。

    在日常工作中,我们应该把精力重点放在构建自己的领域模型上,因为它才是工作最核心、不易变的东西。

一句话总结:

构建好你的领域模型


四、为什么总有人觉得5万块钱可以做一个淘宝

     为什么我们要了解一个系统的演化过程呢?因为作为程序员,我们需要知道自己面对的到底是一个什么样的系统。

    淘宝的工程师之所以要改进系统,真实的驱动力不是技术,而是不断攀升的业务量带来的问题复杂度。

    所以,评估系统当前所处的阶段,采用恰当的技术解决,是我们最应该考虑的问题。

      作为拥有技术能力的程序员,我们都非常在意个人技术能力的提升,但却对在什么样情形下,什么样的技术更加适用考虑得不够。采用恰当的技术,解决当前的问题,是每个程序员都应该仔细考虑的问题。如果今天的内容你只能记住

一句话总结:

用简单技术解决问题,直到问题变复杂。


 五、先做好DDD再谈微服务吧,那只是一种部署形式

     相对于整体服务(Monolithic)而言,微服务足够小,代码更容易理解,测试更容易,部署也更简单。

     这些道理都对,但这是做好了微服务的结果。怎么才能达到这个状态呢?这里面有一个关键因素,怎么划分微服务,也就是一个庞大的系统按照什么样的方式分解。

DDD 到底讲了什么呢?它把你的思考起点,从技术的角度拉到了业务上。

      战略设计是高层设计,它帮我们将系统切分成不同的领域,并处理不同领域的关系。我在前面的内容中给你举过订单用户的例子。从业务上区分,把不同的概念放到不同的地方,这是从根本上解决问题,否则,无论你的代码写得再好,混乱也是不可避免的。而这种以业务的角度思考问题的方式就是 DDD 战略设计带给我的。

      战术设计,通常是指在一个领域内,在技术层面上如何组织好不同的领域对象。举个例子,国内的程序员喜欢用 myBatis 做数据访问,而非 JPA,常见的理由是 JPA 在有关联的情况下,性能太差。但真正的原因是没有设计好关联。

所以要做好微服务,第一步应该是识别限界上下文

      每个限界上下文都应该是独立的,每个上下文之间就不应该存在大量的耦合,困扰很多人的微服务之间大量相互调用,本身就是一个没有划分好边界而带来的伪命题,靠技术解决业务问题,事倍功半。

一句话总结:

学习领域驱动设计


 六、新入职一家公司,怎么快速进入工作状态

       多数程序员习惯的工作方式,往往是从细节入手,很难建立起一个完整的图景,常常是只见树木不见森林,而我的方式则是从大到小、由外而内,将要了解的内容层层分解,有了大图景之后,很容易知道自己做的事情到底在整体上处于什么样的位置。我把上面的内容总结了成一份供你参考。

一句话总结:

了解一个大项目,从大图景开始。


七、面对遗留系统,你应该这样做

       我们把前面学到的各种知识运用到了改造遗留系统上。只要产品还在发展,系统改造就是不可避免的。

       改造遗留系统,前提条件是要弄清楚现状,知道系统为什么要改造,是架构有问题,还是领域模型混乱,只有知道根因,才可能有的放矢地进行改造。

改造遗留系统,我给你几个建议:

  • 构建测试防护网,保证新老模块功能一致;
  • 分成小块,逐步替换;
  • 构建好领域模型;
  • 寻找行业中关于系统构建的最新理解。

  • 八、我们应该如何保持竞争力?

  我们的焦虑来自于对未来的不确定性,而这种不确定性是一个特定时代加上特定行业的产物。

      从长期来看,只要生活中还有需要用自动化解决的问题,程序员这个群体还是很有前景的。但随着时间的推移,程序员这个职业的溢价也会越来越低,单纯凭借身处这个行业就获得好发展的可能性也越来越低,想让自己的职业生涯走得更顺畅,还需要找到更好的目标,不断努力。

     当你有了一专,拓展多能,就会拥有更宽广的职业道路。比如,我拥有了深厚的技术功底,通晓怎么做软件:

  • 如果还能够带着其他人一起做好,就成了技术领导者。
  • 如果能够分享技术的理解,就有机会成为培训师。
  • 如果能够在实战中帮助别人解决问题,就可以成为咨询师

问题:

1.持续交付是否可以再做扩展?

     别把自己局限在程序员这个单一的角色中,应该了解软件开发的全生命周期。在前面的内容中,我讲了不少做产品的方法,比如,MVP、用户测试等等。如果只把自己定位在一个写代码的角色上,了解这些内容确实意义不大,但你想把自己放在一个更大的上下文中,这些内容就是必须要了解的。

  •      如果你还什么都不会,那有一份编程的工作就好。
  •      如果你已经能够写好普通的代码,就应该尝试去编写程序库。
  •      如果实现一个具体功能都没问题了,那就去做设计,让程序有更好的组织。
  •      如果你已经能完成一个普通的系统设计,那就应该去设计业务量更大的系统。

      从目前的发展来看,IT 行业依然是一个非常有前景的行业,但想在这条路上走好,需要我们成为 “T ”型人才,也就是一专多能一专多能的前提是一专,让自己成为某个方面的专家。这个专家要放在行业的标准去看,这才能降低因为一个公司的波动而造成的影响。

一句话总结:

在学习区工作和成长。


总结:

持续交付

  • 将生产部署纳入了开发的考量。
  • 持续交付的基础设施通常包含持续集成环境、测试环境、预生产环境和生产环境。
  • 构建流水线保证到了下游的交付物一定是通过上游验证的。
  • 随着 Docker 的诞生,交付由发布包变成了 Docker 镜像。

DevOps

  • 将开发和运维结合到一起。
  • 环境配置工具上的进步,让基础设施即代码成了行业共识。

验收测试

  • 验收测试要站在业务的角度编写。
  • BDD 是一种编写验收测试的方式。
  • Given...When...Then... 的描述给了一个描述业务的统一方式。
  • 写好验收测试,需要构建测试模型。

SOLID 原则

  • 设计模式背后的道理。
  • 单一职责原则(Single responsibility principleSRP)。
  • 开放封闭原则(Open–closed principleOCP)。
  • Liskov 替换原则(Liskov substitution principleLSP)。
  • 接口隔离原则(Interface segregation principleISP)。
  • 依赖倒置原则(Dependency inversion principleDIP)。
  • 用好单一职责原则,前提条件是看待问题颗粒度要小。

DDD

  • 它将思考的起点拉到了业务上。
  • DDD 分为战略设计和战术设计。
  • 微服务做好微服务的前提是划分好限界上下文。
  • 微服务的第一步,不要划分微服务。

在这个模块中,我们还了解了一些重要的思路,让我们把工作做得更好。

程序员的三大美德:

  • 懒惰、急躁和傲慢(Laziness, Impatience and hubris)。
  • 小心 NIH 综合症(Not Invented Here Syndrome)。
  • 写好构建脚本,做好项目自动化。
  • 参照 Java 知识体系,学习运维知识。
  • 软件设计最基础的原则是高内聚、低耦合
  • 分层架构是一种设计上的分解。
  • 不同业务量的系统本质上不是一个系统。
  • 采用简单技术解决问题,直到问题变复杂。实战指南
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

高效程序员工作法(八) 的相关文章

  • 韦东山嵌入式教程第四篇Linux驱动基础知识学习笔记(1)——Hello驱动程序

    驱动入门 Hello驱动程序 1 怎么写出一个驱动程序 确定主设备号 定义自己的file operations结构体 实现对应的open read write函数 填入file operations结构体 实现入口函数 安装驱动程序时 就会
  • 嵌入式内核及驱动开发中级(上)

    目录 第一部分 一 设备分类 设备申请和注销 一 Linux内核对设备的分类 二 设备号 内核中同类设备的区分 三 申请和注销设备号 二 Code exerccise 三 知识补充 第二部分 一 函数指针复习 一 函数指针复习 1 1 内存
  • 驱动怎么学

    1 什么是驱动 1 1理解驱动的概念 1 驱动一词的字面意思 驱动就是让一个东西动起来 给一个东西动力 让它动起来 2 物理上的驱动 比如 一个球放在那儿没动 你踢了一下它 给了它一个力 给了力之后它就能动 就说明你驱动了它 这就是物理学上
  • DRM几个重要的结构体及panel开发

    一 DRM Linux下的DRM框架内容众多 结构复杂 本文将简单介绍下开发过程中用到的几个结构体 这几个结构体都在之前文章里面开发DRM驱动时用到的 未用到的暂不介绍 DRM中的KMS包含Framebuffer CRTC ENCODER
  • 内核hwmon驱动框架详解以及海思芯片温度驱动分析

    1 hwmon驱动框架介绍 hwmon即hardware monitoring framework 硬件监视框架 可以把温度传感器 风扇 电源管理等设备的驱动都利用hwmon框架去实现 在设备的归类上比较容易理解 2 hwmon驱动框架分析
  • Linux SPI 驱动实验

    目录 Linux 下SPI 驱动框架简介 SPI 主机驱动 SPI 设备驱动 SPI 设备和驱动匹配过程 I MX6U SPI 主机驱动分析 SPI 设备驱动编写流程 SPI 设备信息描述 SPI 设备数据收发处理流程 硬件原理图分析 试验
  • 嵌入式:驱动开发 Day4

    作业 通过字符设备驱动分步注册方式编写LED驱动 完成设备文件和设备的绑定 驱动程序 myled c include
  • keil C51 常见错误和警告

    C51编译器识别错类型有三种 1 致命错误 伪指令控制行有错 访问不存在的原文件或头文件等 2 语法及语义错误 语法和语义错误都发生在原文件中 有这类错误时 给出 提示但不产生目标文件 错误超过一定数量才终止编译 3 警告 警告出现并不影响
  • Failed to execute /linuxrc. Attempting defaults... 解决方案

    今天想移植个根文件系统 使用的板子是友善之臂的S3C2440 这个很多书上都有介绍 难度倒也不是很大 按照手册一步步的来 移植完之后 烧写到flash里面 发现不能运行 怎么回事 检查了一遍 发现和教材上一样 难道教材有问题 在网上找了移植
  • 异步通知实验(信号)

    目录 异步通知 异步通知简介 驱动中的信号处理 应用程序对异步通知的处理 硬件原理图分析 实验程序编写 修改设备树文件 程序编写 编写测试APP 运行测试 编译驱动程序和测试APP 运行测试 在前面使用阻塞或者非阻塞的方式来读取驱动中按键值
  • Linux INPUT 子系统实验

    按键 鼠标 键盘 触摸屏等都属于输入 input 设备 Linux 内核为此专门做了一个叫做 input子系统的框架来处理输入事件 输入设备本质上还是字符设备 只是在此基础上套上了 input 框架 用户只需要负责上报输入事件 比如按键值
  • USB之基础知识

    1 USB概述 USB Universal Serial Bus 通用串行总线 是一个外部总线标准 用于规范电脑与外部设备的连接和通讯 USB接口支持设备的即插即用和热插拔功能 USB接口有4个pin脚 分别为VCC GND Data Da
  • Linux MISC 驱动实验

    我们板子上的某些外设无法进行分类的时候就可以使用 MISC 驱动 MISC 驱动其实就是最简单的字符设备驱动 通常嵌套在 platform 总线驱动中 实现复杂的驱动 一 MISC 设备驱动简介 所有的 MISC 设备驱动的主设备号都为 1
  • Android HAL 层框架分析(一)

    作为一个搞android驱动或者说搞底层的人 我觉得对于hal那是必须要掌握的 而且必须达到一定深度 于是我总结了一下 将整个自己的分析思路写下来 主要是看android源代码 根据源代码得到的思路 看源代码比看什么著作书籍都管用 andr
  • RK3568 CAN驱动更新说明

    RK3568 CAN问题 同时收发数据一段时间 几秒钟 can出现错误收发功能异常 必须重新down up恢复正常 内核更新rockchip canfd c iopoll h 配置Networking support gt CAN bus
  • OC5228 100V多功能LED恒流驱动器-高辉调光 65536:1 调光比

    同脚位拼对拼替代智芯HI7001 磁吸灯 舞台灯电源方案新贵 概述 OC5228 是一款外围电路简单的多功能平均电流型LED 恒流驱动器 适用于5 100V 电压范围的降压BUCK 大功率调光恒流LED 领域 芯片PWM 端口支持超小占空比
  • 32位/64位WINDOWS驱动之-突破进程保护映射的方法进行跨进程读内存2

    32位 64位WINDOWS驱动之 突破进程保护映射的方法进行跨进程读内存2 一 在过保护读写筛选器中添加 读写驱动2 c 驱动层 代码如下 include
  • 5V转±12V无变压器双boost电路

    最近有个新项目 需要 10V范围的模拟量输出 非隔离 对于5V以下供电的控制板而言单端输出绝对没问题 可现在需要有正负输出 是少不了正负电源的 因此准备设计一个5V转 12V的电源 然后选择一个双向供电的运放 来实现单端模拟量信号向双向模拟
  • STM32 CAN通信理解(是半双工还是全双工?)

    STM32F429 CAN通信 CAN 是控制器局域网络 Controller Area Network 的简称 它是由研发和生产汽车电子产品著称的德国 BOSCH 公司开发的 并最终成为国际标准 ISO11519 是国际上应用最广泛的现场
  • 学习区分dB、dBm、dBuV、dBi

    dB 对于分贝的概念 很多朋友最早接触这个概念 是用 分贝 评估声音的大小 声音的大小用分贝 dB 表示 是一种对数单位 用来描述声音的强度或功率比例 如果P是我们需要测试的声压级或声功率级 P0是参考值 通常取为标准听觉阈限的声压级 X

随机推荐

  • css滚动条样式属性

    webkit scrollbar 滚动条整体部分 可以设置宽度 webkit scrollbar button 滚动条两端的按钮 webkit scrollbar track 外层轨道 webkit scrollbar track piec
  • FIO详解

    fio Flexible IO Tester 一 服务器配置 由于我们想通过fio得到SSD真实的参数信息 因此我们需要服务器BIOS一些参数的配合 以便能更好的体现硬盘的性能 以华为1288HV5为例 二 fio 1 安装 a 下载地址
  • C++ reverse函数使用

    STL C reverse remove remove if 1 reverse函数使用 函数功能 将序列 first last 的元素在原容器中颠倒重排 包含在algorithm库中 C 头文件 include reverse函数用于反转
  • 服务器换主板要重装系统吗,换主板需要重装系统吗【解决方案】

    有不少用户在使用电脑的过程中可能会碰到换主板需要重装系统吗的情况 大部分用户电脑技术都是菜鸟水平 面对换主板需要重装系统吗的问题 无法自行解决 不少用户都来咨询小编换主板需要重装系统吗要怎么处理 其实可以根据以下步骤 1 打开机箱 将除了显
  • 简单易学的机器学习算法——Softmax Regression

    Contents hide 1 简介 2 代价函数 3 Softmax回归模型参数化的特点 4 权重衰减 5 Softmax回归与Logistic 回归的关系 6 Softmax 回归 vs k 个二元分类器 7 中英文对照 8 中文译者
  • 2019年利用qshell将七牛云存储文件下载到本地的方法

    最近在做一个有赞微商城的课程设置 想着先丰富微商城的课程内容 于是就想到了使用之前课程网站的视频 第一步当然就是要把课程视频下载下来 但由于原来网站的视频都是技术开发人员之前把视频上传到了七牛后调用的 而且还做了防盗链处理 于是找到七牛云存
  • cuBLAS使用(1)

    cuBLAS 的 API 参考指南 CUDA 基本线性代数子程序库 CUDA Basic Linear Algebra Subroutine 介绍 cuBLAS库是在NVIDIA CUDA 运行时之上实现的BLAS 基本线性代数子程序 它允
  • buucft web (exec)

    一 解题 打开链接 发现是一道ping题 于是便输入本地IP127 0 0 1查看回显 发现回显正常 然后便测试管道符合 是否可用并输入 127 0 0 1 ls 来查看文件目录 结果发现管道符合 并未禁用且发现以下两个文件目录 然后输入
  • 转盘中文字部分的实现(没啥用,别看)

    text width 642rpx height 642rpx width 590rpx height 590rpx margin left 26rpx margin top 26rpx display flex justify conte
  • uniapp上传图片视频文件集合组件

  • 分享一个科幻风的404

    先看效果 再看代码
  • 华为OD机试 C++ 最大可靠性设备

    题目 你正在组装一台设备 这台设备由不同种类的零件组成 每种类型的零件都需要一个 每个零件都有自己的 可靠度 和价格 昂贵的零件通常具有更高的可靠度 但是 组装完成的设备的可靠度是由所有零件中可靠度最低的那个决定的 也就是说 如果你有5个零
  • Redis操作工具类

    前期文章中关于RedisOperateUtil工具类使用时需要强制类型转换 针对List等操作不方便 为此特意更新RedisOperateUtil工具类 前文链接 https blog csdn net liwenyang1992 arti
  • 前端面试知识点总结

    前端知识点 vue知识点 Vue的两个核心点 组件渲染更新的过程 Vue的MVVM实现流程 虚拟 DOM patch 方法 diff 算法 什么是patch patch的流程 说一下指令v el的作用是什么 nextTick 使用场景和原理
  • Java 5-3、用户模块-Mapper.xml的SQL整理

    5 3 用户模块 Mapper xml的SQL整理 一 SQL总结 三个 select SQL login findUserById findUserByAccount 一个 insert SQL register 一个 update SQ
  • vue3+vant4结合(vue-i18n)实现国际化语言切换

    1 先安装i18n npm install vue i18n 2 配置多语言文件 先进行国际化配置在src下创建一个lang文件夹并在其中创建index js zh js en js文件 若为TS 更改文件后缀即可 自定义语言格式 expo
  • 测试数据又多又乱?自动化软件测试数据管理平台Parasoft DTPv2021.1发布

    Parasoft DTP 汇总来自不同测试实践的结果 提供对测试结果的智能和持续监控 消除了与错误软件相关的业务风险 加快了交付速度 并促进了持续的流程改进 DTP 监控和测量质量实践的应用 例如静态分析 单元测试 覆盖分析 运行时错误检测
  • burpsuite插件自动识别图片验证码暴力破解

    burpsuite插件自动识别验证码暴力破解 1 准备工具 2 工具配置 2 1 burp导入captcha killer modified 0 14 jar 2 1 1 先生成jar包 2 1 2 再将jar包导入burp 2 2 kal
  • linux %s替换命令,linux vi 替换命令

    linux vi 替换命令 发布时间 2010 10 22 16 34 53 作者 佚名 我要评论 久了没用vi 命令都忘了 到网上找了些 记录下 以下内容出自网络 来源已经不详 vi vim 中可以使用 s 命令来替换字符串 以前只会使用
  • 高效程序员工作法(八)

    目录 前言 一 如何做好验收测试 一句话总结 二 你的代码是怎么变混乱的 一句话总结 三 总是在MVC分层架构 但你真的理解分层么 一句话总结 四 为什么总有人觉得5万块钱可以做一个淘宝 一句话总结 五 先做好DDD再谈微服务吧 那只是一种