写点什么

今天,给你推荐一门争议不断几近失传的武功秘籍

2020 年 1 月 16 日

今天,给你推荐一门争议不断几近失传的武功秘籍

先打个招呼,我要介绍一个老朋友,熊节,在 ThoughtWorks 我们亲切称之为大熊。



介绍他的重要原因是,从“大学肄业”到 ThoughtWorks 总监咨询师,从业 18 年,他倡导的敏捷开发影响了包括我在内的一代程序员,也是我在 ThoughtWorks 里一直学习的榜样,我能加入 ThoughtWorks,也是深受大熊等人的影响。


我加入 ThoughtWorks 已八年有余,做过全栈开发、架构、TechLead、咨询、EA、中台……但我始终认为这八年 ThoughtWorks 教给我最大的价值的东西就是两个,一个是重构一个就是 TDD。


TDD 教会了我以终为始、目标驱动,重构教会了我持续演进、精益求精。


这些思想和技巧,不光影响了我编程的过程,还渗透到了之后咨询、架构、大规模架构重构、企业架构、数字化转型、中台等各个领域各个维度。在刚刚大熊翻译出版的《重构》第二版中,我和同事一起总结的“重构十六字心法”也非常荣幸的被大熊采纳到了序言之中。


所以今天郑重的为大家推荐一门熊节的关于 TDD 的课程,要知道在我们 ThoughtWorks 内部,也很少有人有机会能听到熊节的 TDD 课的,机会难得,强烈推荐。


什么才是程序员的核心竞争力?如何提高开发效率?2800 字,强烈安利给工作 8 年以下的程序员,剩下的内容就交给大熊……有请。


【熊节原创】

当年我们开发一款安卓 APP,用测试驱动开发的方式,不需要真机、不需要模拟器,在 JVM 上直接跑,180 秒跑完 2000+个测试用例,平均每 0.09 秒跑一个,我们下班回家老婆孩子热炕头时隔壁的大哥们还在写 Bug。


这个事情发生在 2014 年,也让我有了一个新思考。


第一,站在个人角度,在 996 大环境下,程序员的核心竞争力到底是什么?


看的人多、时间长就能发现规律,1-3 年求发展,3-5 年求跳槽,5 年以上求破瓶颈。我觉得核心解是开发效率。


我不知道这些场景有多少人遇到:


1.拿到一个需求,琢磨半天想不明白如何分解,不知道怎么下手;


2.一开始代码没测试,上线后,经常半夜被抓来处理问题,不要问我代码有没有坑,我自己也不知道;


3.新功能要改动一块老代码,不敢轻易下手改,每做点修改都很害怕。


开发效率低,要么低在需求上,要么低在质量上。很多朋友在后台留言,其实就是一句话:为啥我的开发效率低?


我觉得原因是观念停滞,方法陈旧,但求偷懒。


现在有一个误区,各大企业面试,比如流传的阿里技术面,他就考你 JVM 的细节啊、高并发。他并不是一个程序员日常开发效率的体现。


我们就会去刷题、背算法,至于这些东西一年到头用几回,无所谓。理解需求、拆分任务、编写测试、高质量的代码实现——很少有程序员意识到,我每天的工作是什么,我的基本功如何。


如果一个人意识到了并且开始刻意训练,他就会在这个团队中鹤立鸡群。


这会带来什么效应?别人会看到这个人价值很大。我 2013 年在 ThoughtWorks 带的员工,在我这干了 1 年,去教合作公司号称有多少年经验的程序员怎么做软件,这些老程序员还很服他。



我们之前讨论过一个问题,为什么明明知道有用,但是我们就是很少人会写单元测试?


除了工作环境,我觉得很大原因是现在至少 80%的程序员都在凭本能开发。


基本功不扎实+不写单元测试,两个加起来就是天坑。以为不写测试做得快,最后会陷入效率低的死循环:


1.对需求把握不准,写完 PM 不认;


2.代码有没有坑不知道,3 个月前写的代码一碰就虚;


3.添加新功能就破坏旧功能,测出一堆 bug 加班修,bug 越修越多;


4.以上循环,就会陷进无限返工、低效率的焦油坑。


2001 年我们敏捷开发圈里一个朋友,用测试驱动开发的方法,大家一个礼拜的活他半天就做完,剩下四天半他就在那上网炒股,后来炒股还赚了不少钱。


很多人说没时间搞测试,这是一个很大的误区。


写测试的本质就是在描述,清晰框定需求,本来就该做的事之前不做,用手快来掩盖方法慢。


更大的问题是,像腾讯、阿里、头条、美团、百度,越是大厂越要测试先行,你在小厂不写测试、工作方式不对,就越难跳到一线大厂。


之前还能吃大锅饭,今年 5 月甲骨文裁员开始,腾讯、阿里、百度、京东、今日头条、美团,很多一线大厂都在紧急做敏捷转型,能力行的上,不行的走,试图通过轻量级的开发和适应性的计划方法来应对市场变化。


我是熊节,前 ThoughtWorks 总监咨询师,拥有十八年从业经验,我曾为多个大型企业架构开发软件系统,带队领导了华为、中兴的敏捷开发转型。


我 10 年前曾翻译过《重构》、《最后期限》、《软件工艺》,希望能把敏捷开发引进中国。


我是如何在工作中实践敏捷开发的?


测试驱动开发(TDD)是敏捷开发的核心实践,就像钥匙——拧动 TDD,就拧开了敏捷开发的大门。


TDD 就像脚手架,为代码提供保护网,他的核心在于严格规定开发节奏,一次把需求理清,一次做对、消除返工,不用调试就能获得反馈。


里边有三个关键:


第一步任务分解:测试先行,分离关注点,并用单元测试表达;


第二步单元测试:遵循 Given-When-Then 三段式,符合极限编程原则;


第三步小步快走:此处的坑在于很多人容易一下写多,破坏 TDD 节奏。


唯一的不爽,这是一个找虐的过程,他迫使你稳定小步前进,所以每一步都必须先想好要达到什么效果,每一步都有充分的测试覆盖。


但一旦会用,节省出的时间会远大于编写测试代码而产生的工作量总和。


掌握测试驱动开发,解决三个老大难问题:


第一,准确把握需求,开发出来的功能一定是客户想要的;


第二,保障软件质量,开发出来的代码一定是有自动化测试覆盖的。


第三,通过反复训练提高开发速度与代码准确率。


6 月份我和极客学院合作,训练了 200+位开发者,帮他们掌握 TDD,让自己受益。


他受益的形式可能是别人 5 天的活,他两天干完,就算公司强制 996,他也可以用剩下 3 天学点新东西,为有一天到大厂、为晋升做准备。


第二期《敏捷开发实战营》将在 8 月 8 号上线,我会亲自带队,训练出一支能熟练应用 TDD 的敏捷开发团队,改进工作方式,提高编程基本功。


我想做的事情就是,第一,通过大量反复的线上训练,能让大家看到我们基本功有很大差距。


第二,我会让你们反复、大量训练,练自己不熟悉的内容,并且快速得到反馈,直至能应用到工作。


本文转载自健荐公众号。


原文链接:https://mp.weixin.qq.com/s/_i1DSVLmbgsKLHZNiJjTdw


2020 年 1 月 16 日 10:08166

评论

发布
暂无评论
发现更多内容

mPaaS x Menxlab | 1024程序员节:Talk is cheap,Show me the AppID

蚂蚁集团移动开发平台 mPaaS

程序员 开发者 mPaaS 1024

现成区块链交易所开发app,币币撮合交易平台搭建

WX13823153201

现成区块链交易所开发

学习总结

饺子

架构师训练营第一周课后作业

李日盛

面试官的灵魂一击:你懂 MySQL 事务日志吗?

Java架构师迁哥

攻克金融系统开发难点,借助SpreadJS实现在线导入Excel自定义报表

Geek_Willie

SpreadJS 在线导入excel

吃透阿里大佬整理的Java面试要点手册,成功五面进阿里(二本学历)

Java架构追梦

Java 学习 架构 面试 核心知识点整理

JavaScript 类型 — 重学 JavaScript

三钻

Java 前端 前端进阶

趣味科普丨一文读懂云服务器的那些事儿

华为云开发者社区

镜像 服务器 服务

1分钟带你get React setState 面试要点

Leo

面试 前端 React 前端进阶训练营 setState

学了那么多 NoSQL 数据库 NoSQL 究竟是啥

哈喽沃德先生

数据库 nosql 非关系型数据库

Microsoft Azure机器学习采用NVIDIA AI为Word编辑器提供语法建议

Geek_459987

架构师训练营第五周学习总结

尹斌

typora增强-mac

老菜鸟

Typora

千万不要往 Shell 里粘贴命令!

大道至简

命令行

自动化测试框架类型,你知道几种?此处介绍5种比较常见的

软测小生

软件测试 自动化测试框架 软件自动化测试

全面到哭!BAT内部Java求职面试宝典,必须人手一份!

Java架构之路

Java 程序员 架构 面试 编程语言

解析 CloudQuery 审计分析功能

CloudQuery社区

数据库 sql 安全 工具软件

机器学习是什么?

马同学

学习

AI让远程交流“更清晰”:GAN消除视频通话中的抖动

Geek_459987

iOS性能优化 — 一、crash监控及防崩溃处理

iOSer

性能优化 ios开发 Crash 监控及防崩溃处理

ArCall功能介绍手册

anyRTC开发者

ios 音视频 WebRTC RTC 安卓

DDIA 读书笔记(2)数据模型的存储与检索

莫黎

读书笔记

GitLab用户切换引发的某程序员“暴动”,怒而开源项目源码

小Q

Java git 学习 开发 代码仓库

《码出高效:Java开发手册》“码” 出高效的同时编写出高质量的代“码”。

Java成神之路

Java 程序员 架构 面试 编程语言

架构训练营第一周学习小结

李日盛

spring-boot-route(二十二)实现邮件发送功能

Java旅途

Java Spring Boot 发送邮件

数据结构与算法系列之链表操作全集(一)(GO)

书旅

go 数据结构 数据结构和算法

vivo 商城前端架构升级—前后端分离篇

vivo互联网技术

Java 前端 前后端分离

数据湖探索DLI新功能:基于openLooKeng的交互式分析

华为云开发者社区

数据 处理

LeetCode题解:98. 验证二叉搜索树,递归中序遍历过程中判断,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

演讲经验交流会|ArchSummit 上海站

演讲经验交流会|ArchSummit 上海站

今天,给你推荐一门争议不断几近失传的武功秘籍-InfoQ