Coding Kata简介
前段时间听到一个比较有意思的概念叫做Coding Kata,今天试了一下来说说一些想法和思考。Kata是一个日语,意思大体上是日本武术的套路,没有找到比较好的中文翻译来解释Coding Kata这个词。
Coding Kata是一种练习编程能力的一种方法,它要求程序员在拿到一个简单的联系以后进行重复的编码。比如说,第一次快速的按照需求写出来了能工工作的程序,然后抛弃可以工作的第一个版本,重头开始第二轮的编码,然后进行第三次。如果Coding Kata只是这样子重复打代码的话除了练习打字以外那么没有任何意义了,这个方法的根本目的就是为了练习者不断的体挑战自己,跳出自己的舒适区,从而提高自己。
也就是说当你抛弃第一份代码进行第二轮编码的时候,你需要思考更多,比如要怎么写才能够更加的简洁,如何提高代码的可读性,是不是有一些性能可以提高的等等问题。必须要逼迫自己去思考这些问题,让自己写出来的程序比第一轮更好,这才是Kata的目的。
很多时候我们为了解决某一个问题而写出一段代码,但是却不是每一次都能回头再重新看看自己的代码,改改自己的代码,让自己的代码变得更优雅更漂亮。而且一旦我们熟悉了一种技术或者某些框架,我们很容易就会反复的去使用这一些我们熟悉的东西而不愿意去尝试一些新的技术和知识。
这其中的原因我觉得有很多,首先虽然说掌握一门新技术以后会有很大的成就感,但是学习一门新技术的过程往往不是那么的愉快。在这个过程中,你会觉得自己很无知,很多东西都要从零开始了解。所以如果没有一定足够的动力驱使你,很多人都很难去学习一门新技术。我也是这样子的。其次,使用熟悉的技术能够以最快的速度解决问题,而完全没必要去学新的东西。即使新的技术比现在的高效,那又怎样?反正我用这个也能实现。
如何进行Kata练习
我的一些看法
- 首先找到一个合适的练习题。如果你刚开始想试一下这个东西的话,你可以向我一下去搜一下现成的一些Kata题目(用英文搜,中文的资料比较少)。建议将一些个人觉得比较好的保存下来,下次如果学习一门新的语言的时候可以直接用这个来联系。如果是想联系算法的话,可以选择TopCoder,或者各大ACM网站,这些都直接有判题系统也就可以省下自己验证的过程了。并且平时可以把一些感兴趣的技术或是想尝试的东西记录下来,然后去尝试。
- 找一段比较空的时间,保证不会经常被打断。
- 开始练习。练习过程中注意要写足够的单元测试,用来保证你在一轮又一轮的改动中没有将功能破坏。剩下来的练习就靠自己了。
- 反省总结。结束以后必定会很痛苦,但是肯定或多或少学到或者悟到一些东西,思考一下这些东西,最好能够将这些想法记录下来。如果没有,那就白白浪费了这么多时间。
亲身感受
我找了一个String Calculator试了一下,说说我第一次的感受。
- 单元测试在这个整个过程中很重要。
- 写第一个版本的时候很轻松愉快,基本上就没做太多思考就是实现功能。第二个回合,进行了很多的重构,改掉了一些比较低效的地方。然后,第三轮就真的不知道怎么改了。于是就从性能的角度出发做了一些修改,在这个过程中还下载了一个性能检测的工具,最后对有一个算法进行了简单的调整提高了一点点。完成这个Kata。
- 我觉得这个过程中要尽可能多的从多方面进行思考,我觉得第一次的Kata并没有太过于挑战我自己的底线,所以也没学到太多东西。
- 如果能够有一个人帮助你做一些Code Review指出可以提高的地方就更好了。
以后我会继续使用这个方法挑战自己的底线。
一些关于Coding Kata的资料: