重新思考 Code Retreat


我是 Seaborn Lee,这是我的第 19 篇原创文章,1400 字,阅读需要大约 5 分钟。


上周六,「北京软件匠艺小组」和 「Agile 1001」联合举办了 Code Retreat 活动。
自 2012 年第一次参加 Code Retreat 以来,我在深圳,成都,北京一共举办了 6 次活动。
而这次,我以引导者教练身份参与了此次活动,目的是赋能,让更多人有能力举办此类活动。

之前的每一次活动,参与者都反馈收获很大,而这次,一位资深程序员在参加后提出了许多 反馈和建议 ,大部分是负面的。
另外,最近好多朋友也在问我,如何在企业内部组织 Code Retreat,以打造学习氛围,提升编程能力。
这两件事促使我重新思考,Code Retreat 到底是什么?

是什么

在「 如何组织程序员集体学习活动 Code Retreat 」中,我这样定义 Code Retreat:

想要编写出更好的代码,和更优雅地编写代码的程序员来说,Code Retreat 是最棒的集体学习活动
它通过结对编程并频繁轮换搭档的形式,极大地开阔程序员的眼界和思维
不同于 Hackthon(黑客马拉松),Code Retreat 通常为期一天不以完成题目为目标,每一个小时都会删除全部代码,找个新搭档,针对一个目标进行练习

许多程序员在平时的工作中,迫于项目进度压力,没有时间去思考更好的代码,以及更好的编码方式。
而 Code Retreat 活动就是一天放下进度压力,专门思考如何让代码更优雅,以及如何更高效地编码的活动。
通过和不同的人结对编程,使用不同的语言,开阔自己的眼界。
在 Code Retreat 中,每个 Session 有一个约束条件:

  • TDD
  • 不使用鼠标
  • 结对时不能说话
  • 不能使用条件表达式
  • 不能使用循环
  • 每个方法不超过 4 行

更多约束请参考: Activity Catalog
引导者会在巡场时,会不断提醒大家专注练习的目标,而不是完成题目本身。
比如练习快捷键时,应当放慢速度,观察自己的每一次操作,是否有更便捷的方式,如果还是按自己平时的方式编写,便不会有任何收获。

比如为了在光标所在行的上面插入新行,很多人习惯将光标移到上一行,再一直按右方向键直到行末,再敲一下回车。而在大部分的 IDE 里是可以通过一个快捷键做到的。

尽管 Code Retreat 中会使用 TDD,结对编程,函数式编程等技术,但我认为 Code Retreat 既不是推广 TDD,也不是推广函数式编程。
如果非要说在推广什么,我认为是「刻意练习」,通过这个活动让大家知道该练习什么。但从知道到做到必须经历练习的过程,如果回去不练习的话,实际上也就只是知道了更多,对平时编码并不会产生什么积极的影响。

不是培训

Code Retreat 不是培训,因为没有讲师,参与人员编程经验不尽相同,使用的语言,开发环境也是形形色色。
收获主要来自于你的搭档以及每个 Session 结束后的集体分享。
引导者的作用是,就是营造一个轻松的环境,让大家积极地交流,分享。一次好的活动,对引导者的能力要求,引导能力高于编程能力。
当然,大部分热衷于组织 Code Retreat 活动的引导者,也是经验丰富的开发者。

以什么心态参加

每次活动,都有人私信我说,我只有几个月的编程经验,能参加吗?甚至还有零编程经验的同学,既然他有热情,我从来不会拒绝。

最重要的是有开放的心态,愿意学,愿意分享。经验浅的人,必定可以大开眼界,学到很多。
而如果你经验丰富,你的收获从哪里来呢?
你当然也能从其他有经验的人身上学到新东西,而你还可以通过教经验少的搭档加深自己对已有知识的理解。所谓教学相长,带人的能力也是需要刻意练习的。

怎么做

作为引导者,为了让大家更有收获,我应该在活动开始前,强调「刻意练习」,消除大家想要「完成」的心态。
并且将第一个 Session 的时间适当延长,让大部分人能「完成」,这样在后续的练习中就不会再那么执着于完成。

2017 年,我将会帮助更多人组织 Code Retreat 活动。如果你想要组织,可以阅读我的文章:

有任何疑问,欢迎与我联系,我非常乐意提供帮助~