徐昊 · TDD 项目实战 70 讲
徐昊
Thoughtworks 中国区 CTO
18159 人已学习
新⼈⾸单¥98
登录后,你可以任选4讲全文学习
课程目录
已完结/共 88 讲
实战项目二|RESTful开发框架:依赖注入容器 (24讲)
实战项目三|RESTful Web Services (44讲)
徐昊 · TDD 项目实战 70 讲
15
15
1.0x
00:00/10:00
登录|注册

课前必读01|20年前的“老古董”技术,为什么还值得开个课?

讲述:李辰洋大小:9.13M时长:10:00
你好,我是李辰洋,是《徐昊·TDD 项目实战 70 讲》的课程编辑。
如果你看完了目录和开篇词,心里估计会生出这么两个疑问:
光正文就有 70 节课之多。TDD 又不是什么新技术,而且还比较小众,需要这么大的课程容量吗?
每节课除了图文和音频外,还有 20+ 分钟的视频。视频有什么必要吗?
这些都是好问题。归根结底,要回答上述疑问,我们就需要明晰 TDD 的学习难点在哪里。

如何搞定 TDD?

从一项技能被使用和理解的难度上来看,TDD 的复杂度是中等。更具体些来说,TDD 的学习复杂度大致低于熟练掌握一门编程语言,高于学习一个框架或者类库。看起来,TDD 的学习难度并不算大,那么为什么很多人还是没能学会呢?
TDD 的一大学习困难点就在于,会 TDD 的人对其中的妙处有着非常强烈的主观体验,而不会 TDD 的人,则体会不到。所以最佳的学习路径,就是由熟练者来指导新人。那么课程的第一个设计亮点,通过视频的形式来演示用 TDD 实现项目开发的全过程。

设计亮点一:以视频演示为主,图文为辅

需要说明的是,视频是整个课程的核心构成部分,而不是多了一种交付形式来丰富内容。因为 TDD 的重点就在于跟着测试的步调来“驱动”开发。
我在课程设计之初进行调研时,有同学反馈说:
在团队里的新手学 TDD 的时候,我会让他们自己敲一遍代码,然后录个视频发给我。最后发现很多人做错了,他们都是先写实现再写测试。所以如果有视频的话,他们至少不会犯这个错误。
这实际上就是没有学会驱动。他的开发就只是开发,测试就只是测试,并没有把两者有机地结合在一起。而这个有机的组成部分,是没有办法用文字表达出来的,只能用视频来呈现。归根结底,必须通过视频,来体现使用 TDD 构造软件的过程。跟着老师在视频中演示的思路走,重现测试“驱动”开发的时间线。
事实上,徐老师在录制视频时,也只是走一遍时间线确定下时间,然后就开始录,并不会修改什么步骤。
顺便说个题外话。在课程设计之初,徐老师就表明这次课程会是视频为主的内容交付形式。起初我一直无法理解,为什么不能用文字来总结,说明使用 TDD 来实现功能需求的思路。后来找了位开发小哥,坐在他旁边看他跟着徐老师的视频敲代码,然后再看着他自己演练,终于感知到了几分意思。
而文字部分呢,侧重于总结视频演示重点,以及梳理 TDD 学习中的相关问题。所以在学习的过程中,非常建议你将视频与文字结合起来,学习效果会更好。

设计亮点二:以三个技术框架为核心,而非玩具项目

想要搞定 TDD,另一个需要突破的障碍则是实战中的细节。这意味着你要在复杂场景下反复练习,才能学会怎么在不同的上下文中去应用。针对这一点,我们设计了四个实战项目。
其中第一个项目是演示参数行命令解析的例子。这个例子源自 Bob 大叔那本广为流传的书——Clean Code。这是一个编程练习级别的例子,非常简单。目的是让你眼见为实,亲眼看一看真正的 TDD 是怎么驱动开发的,从而对真正的 TDD 有个感性且直观的认识。
在这个项目之后,我们将进入 TDD 的完全实战环节,老师会带着你使用 TDD 的方式去实现工作中常用的 3 个技术框架,包括 IoC 容器、RESTful、SQL mapper。
之所以选择技术框架,而不去虚构某个业务系统,主要是因为 TDD 的难点首先在于理解需求,并将需求分解为功能点。
如果去虚构业务系统,那么我们很难详尽描述所有的业务假设(功能上、组织上、运营方式上等)。但如果使用一些常用的技术框架,由于你对它们大体的功能及其要解决的问题,已经有所了解。所以老师不仅不用花那么多的时间来啰嗦上下文,同时也有利于你跟随题目自行练习。
当然,这三个技术框架的难度会高于你在实际工作中所使用的。因为搞定 TDD 的关键就在于在复杂场景下反复练习,最终学会怎么在不同的上下文中去应用。

该怎么学习 TDD?

TDD 的学习难点首先在于理解需求,理解需求,并将需求分解为功能点。而最佳的学习路径,就是跟一个真正会 TDD 的程序员来学习。
那么看看视频、跟着敲敲代码,能学会 TDD 吗?显然不能。要知道,课程中的所有代码,我们并没有放在 GitHub 或者 Gitee 上。这样做的意图在于,希望你能在观看完徐老师的演示视频之后,开动下自己的小脑筋,亲自动手再去写一遍。写完之后,可以将你与老师写的代码进行对比。这个有效的学习方法也可以总结为“一看二动三对比”。
另外,徐老师特地邀请了他 Thoughtworks 的两位同事作为课程的审稿人,分别是王晓峰老师和郑茗蔓老师。茗蔓在学习审核的过程中,也收获了一些思考。下面是她的分享:
我大概是在 2020 年接触的 TDD,那时只知道 TDD 是一种先写测试再写实现的开发方式。但越简单的道理,实践起来就越是困难。在最初实践 TDD 时,我经常碰到的一种情况是:拿到新的功能需求后,通常在第一个测试就会直接断言这个功能期望的输出。这样做的结果是,用一个测试驱动了一整个功能需求。
 
可想而知,如果这个功能很复杂,那我首先需要花大量时间去构造测试,然后再花费大量时间去试图一口气完成整个功能需求。这种做法显然没有理解 TDD 中的“编写一个无法通过的测试”原则,也不知道这个测试到底需要什么样的粒度。
 
在学完第一个实战项目后,我之前的很多疑惑都得到了解答。测试驱动开发,从名字上看很容易误解为不过是调换了写实现代码和测试代码顺序的一种开发方式,但实则不然。通过先写测试来不断地对自我进行验证和提问:对需求是否了解?对当前项目架构是否了解?当前架构是否到了需要演化的时间节点?来加强自身对需求和架构的关注,进而达到优化架构的目的。徐昊老师从各个方面系统地阐述了测试驱动开发到底是什么。因此,通过本门课的学习,让我更为全面地了解到了什么是测试驱动开发。
 
在老师视频演示敲代码时,我也会跟着敲一遍。对于课程内容,我会先整体浏览一遍,跳过不理解的地方。然后再拉通整个小节的内容,试图理解老师讲述的逻辑,并进行总结与记录。有时候也会反复翻看之前的课程内容,总是常读常新。有些之前不懂的地方,来回多看和思考,慢慢就明白了。

编辑寄语

最后,我还想讲两个题外话。首先,在这里,我也非常感谢晓峰和茗蔓勤勉的审核工作,以及专业的合作态度。在我看来,他们都是软件匠艺的追求者。他们为了提出一个好问题,甚至需要查阅好几篇文献,为我们课程内容做了非常严谨且专业的技术审核工作。
第二个题外话。在这么大的课程容量下,还要建议你采用“一看二动三对比”这样的学习方式。可以预见到,这会让你花费不少的精力,而完全坚持下来也有些困难。
所以我们目前策划了如下活动,来尽量保证你的学习效果:
建立微信群。我们的运营同学会组织活泼严肃、团结紧张的学习打卡活动。
我们目前还在策划一个“线上带练”的学习项目。由徐昊老师亲自带队,手把手教你怎么在实战中练习 TDD。预计 4 或 5 月会开启。
不定期举办一些开奖活动。
三月春风,柳色初青,一年之计正在于此。欢迎你加入 TDD 的学习!正如在《如何落地业务建模》中所做的那样,编辑的其中两个角色定义是“程序员的鼓励师”和“解决方案提供者”,所以如果你有什么关于 TDD 学习的疑惑,或者对于课程的想法,欢迎你反馈给我!
好了,接下来,欢迎你在评论区自由发言!徐老师在评论区等着你!
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

该课程以视频演示为主、图文为辅,以真实技术框架为核心,为学员提供了系统全面的TDD学习体验。学员可通过观看视频全程体验TDD的妙处,并使用真实技术框架在复杂场景下反复练习。课程强调学员在观看视频后亲自动手写代码,并进行对比学习。此外,课程还提供了学习打卡活动、线上带练项目和开奖活动,以提高学习效果。整体而言,该课程设计亮点突出,有助于学员突破TDD学习的难点。

2022-03-1620人觉得很赞给文章提建议

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《徐昊 · TDD 项目实战 70 讲》
新⼈⾸单¥98
立即购买
unpreview
登录 后留言

全部留言(15)

  • 最新
  • 精选
  • 🐑
    置顶
    TDD专栏福利大合集: 1、打卡赢好礼(4月23日-5月10日):正在进行中,学习专栏第1-10讲并在留言区打卡,结束后奖励; 2、代码亲手评(5月底):预计打卡结束后启动,完成前10讲的打卡,即可提交代码练习作业,徐昊老师会亲自点评; 3、线上带你练:根据专栏更新节奏和老师时间安排确定,徐昊老师会线上带四个同学手把手地改代码,敬请期待! 具体活动介绍见 👉 http://gk.link/a/11jPi
    2022-04-28
  • Gojustforfun
    希望课程中不要用到太多Java独有特性——TDD for java devs,这样可以让受众更广——TDD for all devs。期待课程,我打算用Go追课并输出

    作者回复: 跟语言无关 主要看重构工具的成本

    2022-03-16
    4
    11
  • Kevin
    我毫不怀疑我能学会TDD,但我很担心我没有地方发挥这个开发模式。要知道我现在工作的地方(国内大厂),连单元测试都几乎没有。

    作者回复: 千里之行,始于足下

    2022-03-17
    9
  • escray
    虽然老师没有说,但是我特别希望文中有这样一句话: “只要智商正常,就能学会 TDD” 已加群,如果不能坚持5个月的时间完成专栏的学习,如果还是没有办法通过这次课程学会 TDD,那我就彻底放弃写代码的“愿望”,认真去做项目经理或者售前。

    作者回复: believe in yourself

    2022-03-17
    4
    3
  • 兔嘟嘟
    请问老师,编写测试时,需要对API接口写单测吗,写起来比直接POSTMAN检测费劲多了

    作者回复: 要写 但不是单元测试

    2022-03-17
    2
  • jjn0703
    跟上队伍,好好学TDD~

    编辑回复: 加油呀

    2022-03-18
  • Ramirez
    买到=学会。留言=精通。完事儿
    2022-03-16
    9
  • 3.141516
    在最初实践 TDD,非常容易先开发后写测试。 不过就算如此,从可测试的角度,也能找出代码中需要优化的地方。
    2022-03-16
    2
  • Xiaosong
    tdd没学好太容易成tfd了
    2022-04-25
    1
  • Geek_7c0961
    从陈天老师的rust了解TDD,打算用rust来做。
    2022-04-01
    1
收起评论
大纲
固定大纲
如何搞定 TDD?
设计亮点一:以视频演示为主,图文为辅
设计亮点二:以三个技术框架为核心,而非玩具项目
该怎么学习 TDD?
编辑寄语
显示
设置
留言
15
收藏
12
沉浸
阅读
分享
手机端
快捷键
回顶部