Cyber Dojo 设计者谈 Cyber Dojo——为了好玩执行代码

Jon Jagger 专注于TDD的咨询师。
为了培训和练习TDD他设计了网站cyber-dojo.org。
被《The Coding Dojo Handbook》誉为当前最好的TDD练习工具。
本文是Jagger在nor(DEV):con演讲第一部分的概要。
演讲视频地址 http://www.infoq.com/presentations/cyber-dojo-1

缘起

2009年,Jagger参加了一次Uncle Bob组织的Coding Dojo。有30人左右参加,分成6组。进行两轮练习,每轮编码45分钟,之后各组轮流在投影仪上展示代码。

这次Dojo有几件事给他留下了很深的印象:

  1. 有两组在整整2小时期间没有写出任何代码,因为他们需要安装编程语言和测试框架,但是网络有问题。
  2. 在演示成果时,6组里有5组都遇到了连接投影仪问题。
  3. 活动结束时,Uncle Bob宣布一组获胜。这在Jagger看来也是非常奇怪的。

晚上回到酒店,Jagger开始回想dojo中遇到的开发环境和投影仪问题。怎么解决这次Dojo中遇到的典型问题。参与者至少应该在电脑里准备什么?
结论是:什么也不用,通过Web页面来进行编码。
这样所有代码都在服务端,可以用一台电脑连接投影仪来展示所有人的代码。
就这样,Cyber Dojo的最初想法诞生了。


基本功能

截至2015年3月演讲时,Cyber-dojo上已经有4万多次Dojo练习了。


创建练习session

在开始一次Dojo练习时,首先需要选择语言。然后需要选择测试框架。这是很早就确定的设计决定之一,测试是必不可少的。

选择练习题目

之后可以选择练习题目,可以选择Verbal进行随便什么题目的练习。一般来说,我们用Fizzbuzz作为编程练习的入门题目。就像用hello world做语言展示的传统一样。
题目选择后,会产生Dojo的ID。任何人只要有了ID就可以参与练习。这样就算不在一个地方的人也能一起进行练习了。

输入ID,开始编码。系统会分配一个动物头像给你。
你好,小蜜蜂

这里有个很重要的一个设计,你可能已经注意到了,没有login。你不需要输入用户id,密码,姓名等等等等。

为什么呢?

  1. 一方面,注册和登陆不好玩。对于参与练习的人来说,有什么必要输入这些信息呢?
  2. 更重要的原因,是Cyber Dojo的设计理念。这是一个练习编程的环境,而不是开发环境。
  • Jagger发现,如果一个公司事情不太顺当,往往他们的文化有问题。那么怎么通过练习来改变文化呢?
  • 在一个大家对Dojo式编程练习都没什么概念的的环境里。如果我们每个人输入名字,等到review代码时,大家就会看到,哦这是某某人的代码。
  • 这样代码就直接和个人以及自尊心关联起来。这对讨论和练习都是有阻碍作用的。
  • 在文化开放的组织中知道是谁的代码并没什么问题,但是如果组织的氛围不太友好,匿名的设计带来很大的好处。
    当我们review的时候,就只能看到动物头像,并且猜测“犀牛这里这样写可能是因为……”。
    当然,犀牛这组的成员可以进行解释“我们这里是想做什么什么”。重要的是,他们可以自己选择是不是要揭示身份。
  • 在氛围不怎么好的环境中。很可能前一两轮大家并不愿意表明自己,随着练习的进行,大家会逐步理解到这是个练习,最重要的不是最终结果。渐渐的放开心态融入讨论。

进入编码的环节,可以看到练习题目的介绍,以及基础的起始代码和测试。这些代码和练习题目无关,只与选择的语言以及测试框架相关。

按test!

之后,“test”按钮。
没有保存,没有编译,没有代码高亮。
唯一能做的就是写代码,然后,点击测试——但愿如此。

在课程中能见到一种常见的模式,在第一轮练习的整整45分钟里,往往有一两组一次测试都没有运行。因为这就是他们平时工作的方式,他们不习惯测试驱动开发。
这样很好,Jagger并不会去告诉他们应该怎么做,只是让他们按照自己习惯的方式去工作,然后结果就会自然的显示出来。在review的时候,他只是说:“我们无法对犀牛进行review,因为他们在45分钟里一次测试都没有跑。”
不需要再说什么。他们自己会决定在后面的练习中是不是要增加测试的频率。

红灯、绿灯、黄灯

当你点击测试按钮,代码会被提交到服务器,运行测试。
红灯表示测试失败。
然后你根据输出找到错误并且进行修改,如果一切正确,就会看到一个绿灯。
如果代码根本无法执行,比如输入拼写错误,就会得到一个黄灯。


答疑,测试频率和代码之间有什么联系么?


假如你不断的敲码:写代码,写测试,写代码,写测试……,25分钟之后,你按下测试按钮。
最有可能得到的是什么灯?想想看
黄灯
随着你不断的输入代码的过程,完全不犯错的可能性会不断的降低。距离你上次跑测试越久,修改代码越多,你越有可能得到一个黄灯。

而这之后呢?
你输入了25分钟代码,运行测试结果是黄灯,之后会发生什么?
你会修正一个输入错误,再次测试,这时得到的什么?
黄灯,你会发现原来还有其它的输入错误。

再次修正错误,跑测试,什么灯?
黄灯

这是一个很典型的模式,当不熟悉TDD的人进行第一轮练习中往往会出现。
长时间的空档,既没有绿灯也没有黄灯。
然后黄灯,黄灯,黄灯,黄灯……
然后
时间用完了。

Jagger并未有意去做什么,只是设置好了系统,然后让他们做平时他们会去做的事情。
之后系统就清晰的显示出我们所做的。
在这45分钟里,展示了什么?

一次微型的瀑布软件开发过程。


继续展示

你的每次测试都会留下一条历史记录

每次运行的结果都列在页面顶部,Jagger想要鼓励练习者尝试和回退,因而他设计在任何时候都可以点击一盏灯,就可以选择回到这次的历史版本。

假定现在有10个动物头像进行dojo,第一轮45分钟过去了。很有趣的一件事,如果你说:“时间到。”会发生什么?
他们想要延长时间!

“我们还没做完。我们老是黄灯。
我们已经连续16个黄灯了。但是我们真的真的差一点点就做完了。”

但是Jagger会说:“不,不,时间到,我们不需要交付什么东西”

仪表盘

然后我们回到首页,进入仪表盘页面。在这里可以看到所有动物按时间排列的所有灯。
这里我们可以点击任何一盏灯进行代码review,这是Jagger设计这个系统的最重要目的之一。

review之后,我们重复进行练习。点击创建练习,系统会记住上次选择的语言,测试框架和题目。
然后,我们又从头开始了。


不要增加功能,想想能删掉什么功能

常常有人要求增加一个功能,从上次没完成的练习继续进行。
这对开发而言是很正常的,我们想完成一件事。但是在Dojo练习中我们不需要完成什么,我们不交付什么。
所以Jagger有意设计每次Dojo从头开始。

有时,这会让一些人觉得抵触。
然而,Jagger的设计就是想要让你不舒适。

这个练习的环境被故意设计的和开发环境不一样。

在开发环境里,你有各种各样的高级功能,让你进行的更快
对开发而言是很必要的。
然而在练习中,你并不是在开发,你不需要完成什么。
但是Jagger发现,只是这样说说并不会有任何效果。
他发现,把Cyber Dojo设计的与开发环境越不一样,它越有效果。
因为更有助于练习者理解,这不是个开发环境,这是用来练习的。

练习的概念听起来很简单,但是对很多参与者来说都是非常难的一个转变。他们太习惯于赶着时间尽快编写出代码,他们满脑子想着做的更快,而非质量。

因而,Cyber Dojo被有意设计为没有语法高亮,没有自动补全,没有编译,没有保存。
这是Jagger能想到的,可以提供的最少功能。
Jagger常常主动去想,什么功能是可以去掉的,而非增加功能。

最近Cyber Dojo又有了一项改动。
所有的测试框架的输出中都会有错误行号来定位错误。
如果根本没有行号呢?
Jagger增加了功能,在输入框边上点击,就可以隐藏代码行号。
这样练习者就可以选择关掉行号显示,从而使自己写的更慢


捐助

Cyber-dojo对非商业使用是免费的,商业使用需要进行捐助来获得授权。
所有的捐助都用来为孩子们买树莓派。
网站的运营成本由谷歌承担。(这是去年演讲时的情况,目前费用已改由BDD测试框架 http://cucumber.io 承担)


核心设计理念

  • 开心而非赚钱
  • 基于团队而非基于个人

所以在review页面每个人都可以看到所有动物的所有记录。
这也是做出无login,匿名等设计背后的理念。
这种基本的价值理念会在系统设计演化时提供重要的参考。

比如,常常有人要求添加一个功能,让一次Dojo里的每个人可以选择不同的语言。因为每个人熟悉的语言不同。他们想用自己最熟悉的语言进行练习。
这很合情合理。但是Jagger一直拒绝这个要求。
因为这是着眼于个人而不是团队的。
如果这么做了,带来的后果是review时就会看到各种不同的语言,这样的效果比一种统一的语言差得到。

另一个原因,我们在练习中并不是为了舒适,我们练习是为了学到东西。

“如果我学到了一些东西,但是我的行为没有因此有任何改变。
那么我并没有真的学到什么”

对Jagger来说,如果他来一个组织进行培训,几天过后他离开了,每个人又做着和以前一样的事情。那么他的工作是失败的。
所以他通过让练习者不适应来促使改变。
当你使用Cyber Dojo时,Jagger想要让你用的不舒服

  • 关注学习而非完成
  • 做得慢一些而非做得更快

学习很重要的一方面就是,慢下来。

因为总是有人要求增加功能,而Jagger感兴趣的是,可以去掉什么功能。他在Cyber-dojo上增加了一个FAQ:

你干嘛不增加……?
不,听着。
不要再想着怎么进展得更快,开始尝试做得更慢。
不要总想着完成,想想改进。
想想以一个团队进行练习。
这才是建立Cyber Dojo的原因。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,421评论 25 707
  • 做TDD是为什么? 关于TDD的概念、工具、技巧等,经典的书籍材料可能介绍的更为全面细致。这篇文章想分享的是从一个...
    武可阅读 2,589评论 2 21
  • "青青,陪朕说说话吧。" "皇上唤我青青还是青卿?"她收回繁杂的思绪,虽回过头来,却并不看他,只是懒懒地问了句她自...
    刘袖子阅读 640评论 0 0
  • 调试ueditor的时候遇到了一个问题,如图: 后台报错提示找不到JsonObject类,于是引入下面的jar包后...
    李北北阅读 3,895评论 2 0
  • 一个事物,你厌恶他,不喜爱它,但不去管它,用“忍一时风平浪静,退一步海阔天空”的气量来对它,可能永远只是那一个事物...
    我謝心宁阅读 447评论 0 0