3年实践之编程操练攻略
[按:首先感谢codingstyle.cn的掌门人匠友李小波的邀请,让我于2016年3月30日晚,在欢乐的bilibili.com上进行“如何进行编程操练”的直播、录屏并写就此文。
“如何进行编程操练”录屏下载地址:http://pan.baidu.com/s/1bztFv4
“如何进行编程操练”高清版PPT下载链接:http://pan.baidu.com/s/1kVapd8F
]
编程操练,就是个人或多人在一起刻意练习测试驱动开发(Test-Driven Development, TDD),来锻炼程序员的测试先行、测试用例设计、小步代码提交、重构代码、提升代码质量、反复操练同一题目寻求更佳实现方法、结对编程等能力。编程操练不求完成率、不求编程速度、但求共同领悟软件开发之道。
编程操练的形式一般分3种:
1)Code Kata 编程招式:单人操练编程招式(即有趣的编程题目);
2)Coding Dojo 编程道场:多人在半天内,于编程道场中结对进行编程操练;
3)Code Retreat 编程静修国际日:在coderetreat.org的组织下,全球各个城市多人在每年感恩节前的同一个周六的一天内,于编程道场中结对进行编程操练;
编程操练的种类一般分3种:
1)从零开始用TDD写代码;
2)将遗留代码用TDD重构到设计模式;
3)将遗留代码用TDD重构到函数式编程;
我从2012年底参加老外程序员Mike Long在北京主持的编程静修国际日到现在的3年多时间里,自己做了几百次的个人编程操练,组织了2次编程静修和30次bjdp.org编程道场,有3大收获:
1)结识了近两千位匠友(bjdp.org微信公众号的用户数量);
2)撰写了《驯服烂代码》(更确切的名字是《动手操练测试驱动开发》);
3)开发思路从TDD拓展到UDDD (User Data Driven Development, 用户数据驱动开发)。
个人进行编程操练的攻略:
1)编程环境推荐:IntelliJ各种语言的IDE、Cyber-dojo.org网页编程操练工具和Cyber-dojo私服;
2)TDD入门:推荐首先阅读我撰写的《驯服烂代码》(因为这是国内第一本通过和读者结对编程操练各种Kata来入门TDD的书籍,它像一位私人教练一样,手把手地引导读者步入TDD的大门。该书中国亚马逊有kindle版,纸版即将绝迹,目前我这里尚余少量,在2016年4月15日前,打赏80元得签名版《驯服烂代码》包邮,详情请点击左下角“阅读原文”链接),然后阅读《Clean Code》(告诉你整洁代码该如何写)、《Refactoring》(告诉你如何重构代码腐臭)、《Working Effectively with Legacy Code》(告诉你如何将难以编写测试的遗留代码转变为便于写测试的状态);
3)编程操练常用的Kata:FizzBuzz(适合TDD初学者入门)、Anagrams(适合体验TDD如何通过小步重构驱动出递归算法)、String Calculator(适合体验编程时如何满足SOLID设计原则)、Gilded Rose(适合体验重构到设计模式或函数式编程)、Ticket Dispenser(适合体验如何编写mock来解除耦合进行单元测试)、Game of Life(适合编程静修)。
4)个人将一个招式操练熟练后,别忘了录屏分享,加入到匠友姚若舟所发起的“Kata接力”活动中(链接详见“如何进行编程操练”高清版PPT)。
编程道场中的参加者只要携带自己安装好开发测试环境的笔记本电脑来就好了。
编程道场组织者攻略:
+编程道场之前:
1)编程道场之前,先联系场地赞助方,确定好时间、地点、带有投影仪的能容20人的办公室;
2)发布并推广活动报名信息,推荐使用微信公众号来发布,请参加者们加组织者的微信,建微信群,更加方便互动;
3)确定一位联系人的电话,为找不到活动地点的参加者提供方便;
4)活动需要操练的Kata自己最好能操练熟练,为引导参加者做准备;
5)在自己的电脑上安装Cyber-dojo私服,供参加者使用,可以带一个无线路由器以备场地wifi不给力;
6)用挂纸写出Kata内容,以便参加者编程时参考;
7)提前30分钟到场做准备,贴挂纸,测试网络;
8)准备一些报事贴和白板笔,供最后回顾时使用;
9)可带一个激光笔备用。
+编程道场期间:
1)请大家自我介绍;
2)介绍Kata;
3)参加者报数分组,结对编程用Cyber-dojo编写kata,组织者此时可以拍照以便写回顾文章;
4)用Cyber-dojo来分享与讲解参加者的代码;
5)参加者重新报数分组,结对编程用Cyber-dojo重新编写kata;
6)用Cyber-dojo来分享与讲解参加者的代码;
7)回顾:参加者各自在报事贴上写“本次活动的收获”、“本次活动需要改进的地方”、“疑问”,然后分类贴在墙上,组织者在各位参加者面前朗读报事贴上的内容,必要时请写报事贴的人解释一下,进行回顾;
8)大家鼓掌感谢场地赞助方,场地赞助方此时可以植入一些简短的广告。
+编程道场之后:
1)组织者尽快撰写本次编程道场的回顾文章,会议纪要形式即可,要附上活动现场照片,以便今后做进一步的市场推广;
2)可以建域名和网站来存放回顾文章,我使用godaddy.com来申请域名和建站;
3)可以建微信公众号来发布下一次活动报名信息;
编程静修参加者攻略,与编程道场参加者攻略基本相同,只是要注意,每个session结束,要删代码,以便换搭档获取新思路。
编程静修组织者攻略:
1)联系愿提供一天场地与所有参加者一顿免费午餐的赞助方;
2)在coderetreat.org网站增加event,获取code retreat官方的培训、活动视频在线链接通知等帮助;
3)发布并推广活动报名信息,推荐使用微信公众号来发布,请参加者们加组织者的微信,建微信群,更加方便互动;
4)请场地赞助方提供麦克和音响,以便在中午休息时播放一些编程操练的视频,在每个session结束前,可以播放搞笑版Delete your code视频;
5)请场地赞助方提供一个额外的大屏幕电视,来和编程静修国际日相同时区的城市视频连线互动。
“我编程经验不多,能参加编程道场吗?”当然可以,只要你在活动前抱着虚心的态度,自己反复操练,提升自己的经验,就可以在活动的结对编程中施展出来,另外你也可以从你的搭档那里学到很多。
“我觉得我的编程能力达不到很高的水平,能组织编程道场吗?”当然可以。只要你在活动前抱着虚心的态度,自己反复操练,提升自己的水平,并且意识到:编程操练的组织者不是培训师,编程操练的参加者已经通过结对编程互相学习了,组织者只要控制好活动各个环节有序进行就可以了。当然,如果你发现参加者的代码有改进空间,那么你可以使用类似下面的“赞赏+改进”的方法进行引导:“我觉得number这个变量的命名富有表达力。如果能把StringCalculator类中的解析字符串的职责分离出去,就更好了。”
编程操练参考资料:
1)Emily Bache的Coding Dojo Handbook电子书包含大量的组织编程道场的资料,该书可以在线购买;
2)Cyber-dojo.org及私服,进入bjdp_org微信公众号,点击屏幕下方“笨嘴”,选择cyber-dojo,可以查看如何安装cyber-dojo私服;
3)Toastmasters.org,一个成立了91年的国际非盈利教育机构,在国内有上百家俱乐部,供人操练中英文演讲及领导力,是我创办编程操练社区bjdp.org的源泉。
操练成就匠艺。全栈开发者的编程操练社区:bjdp.org北京设计模式学习组。微信订阅号:bjdp_org,QQ群号:235913915,网站:www.bjdp.org。