Kata代码,程序猿的练习课程
原文信息
Code Kata
http://codekata.pragprog.com/2007/01/code_kata_backg.html#more
译文
背景
你是怎样成为一名伟大的音乐家的呢?通过了解音乐的理论,并且懂得你乐器的发音机制。同时也需要有天赋。但更深一层次的说,伟大的人都是需要来自练习;对理论进行一遍又一遍的尝试,根据每一次的练习结果做得越来越好。
你知道怎样成为一名全明星运动员的吗?很显然需要耐心和天赋。但是你应该知道,最伟大的运动员每天花费了无数小时来练习。
但是,在软件开发领域,我们通过理论对开发者进行训练,然后,直接将他们扔到深渊:在一个项目中进行工作。这正如一群合适的小孩,告诉他们必须再一小时内打败 红皮肤人(喂,我们是有目标的,对吧?)。在软件开发中,我们的确是在工作中进行我们的练习,所以,这就是为什么我们总会在工作中出现错误的原因。我们需要找到一种方法将练习和专业的工作区分开。我们需要额外的练习部分。
CodeKata:
一个描述所有的事情是怎么开始的
MoreKata
也许“kata”并不是最合适的语言来描述这个事情;那么就使用某种特殊的办法,它使用其他的技术来也达到教育的目的。
Kata
用什么东西来达到最好的练习课程呢?你需要一个不被打断的时间,并且你想尝试做的事情非常简单。你需要尝试很多次,并且即使出现错误时不会感到非常难受。你需要在每次尝试时,都会根据程序的反馈进行修改提高。同时也不需要感觉到有压力:这也是为什么在实际开发项目中很难进行联系的原因。需要让开发变得有趣:尽可能地在每一步都只进行一小步的尝试。最终,你将会认同练习的中重要性,因为你将会比你未尝试练习训练时知道得更多。
代码 Kata 是一种尝试将练习的方式带到软件开发中。一个 kata 是一种练习特定的问题,比如当你重复一个表格很多很多次的时候,每一步都进行一小步的提高。在代码 kata 中都是很相似的。每一次都是一个很简单的练习(可能 30 分钟或者 1 小时左右)。一些需要实际动手编写程序,一些可能通过不同的方式来编程(例如伪代码)。一些问题能够在最终被解决,或者我们仅仅思考下编程之外的一些问题。这些并不是只有唯一一个正确的答案。我将在几乎每一周添加一个新的 kata。在你动手时的花费一点时间来尝试练习他们。
如果你想讨论 kata,这里有一个邮件列表,和维基网址。然后,记住 kata 的重点不是要一个正确的答案。重要的是你通过这种方式所学习到的东西。
KataOne: 超市价格。价格看起非常简单,但是抛去问题的表面,这里有些很有意思的值得考虑 的问题
KataTwo: 切分算法. 切分算法是相当枯燥乏味的。如果你通过使用5种不同的方式来扩展丰富它,那该会变得怎样的有趣呢。
KataThree: 有多大,有多快?快速评估项目是否具有价值,是需要通过它的设计或实现决定的。这里有一些问题能够让你转变开发的常规思维。
KataFour: 数据常规. 事项两个简单的数据导出历程,并且查看他们之间有什么共同点。
KataFive: Bloom过滤器. 实现一个简单的基于哈希查找机制并且根据他的特点进行探索。
KataSix: 颠倒顺序组成的词. 在一个字典中找出所有颠倒顺序组成的词.
KataSeven: 复习. 我们的代码在眼光挑剔者的眼中是什么样子的呢?而我们有怎样使得我们的眼光变得更加犀利呢?
KataEight: 目标. 是什么驱使我们使用当前写代码的方式来到到我们要实现的目标呢?
KataNine: 检出. 重新回到超市的实例。这一周,我们将扩展我们的代码,以实现价格计算的系统,比如:1个苹果需要 50 美分,而 3 个苹果将花费 1.3 美元
KataTen: 哈希与类的比较. 类:总是一种正确的方式来背使用(假设)类和对象来构建复杂的商业目标,或者一些相似的结构(哈希与多个哈希)来完成工作
KataEleven: 排序. 仅仅因为我们需要对某些不必要的事情进行排序,意味着我们需要使用一种非常方便的排序算法
KataTwelve: 最佳销售. 为一个高档的网络商场考虑一个前十的最佳销售物品。
KataThirteen: 计算行数. 计算一个 Java 源代码文件中的行数,并不是像想象中的那么容易。
KataFourteen: 三维. 运用三维 分析程序来生成文本,使得我们能够体验到不同的启发式探索.
KataFifteen: 与“位”一起玩. 一个在位序列中的探索。
KataSixteen: 商业规则. 你是怎样顺应(或改变)已系列的商业规则的呢?
KataSeventeen: 更多的商业规则. 这些规则制定了整个处理流程使得变得很复杂,特别是当他们呢常常考虑到周围等待的突发情况。
KataEighteen: 依赖. 让我们一起写一些代码来计算在程序中事物或类的依赖的东西。
KataNineteen: 词语链. 写一个程序来解决词语链的问题,例如(cat -> cot -> dot -> dog).
KataTwenty: Klondike. 体验多种多样的探索方式来玩游戏#Klondike.
KataTwentyOne: 简单的列表. 让我们来一起玩一下不同实现方法的简单列表。
有一些地方(不是这篇博客中的评论),可以用来讨论这些代码 kata。
第一个是 雅虎组(YahooGroups)邮件列表,第二个是在 PragProg 维基的首页。
我不得不承认,对于做这种事情时,我感到非常紧张。我希望所有同学在讨论这些 kata 之前能花费一点时间来实际动手做一下。最大的收获是从一点点的在编程中发出“噢,啊哈”这样的时刻。所以,当考到其他开发者在讨论这样的问题时,将会变得非常有趣。
好词好句
fitness 健康,合适的
invest 投资,花费
Karate 日本的一种空手到 karate chop 二分切分算法
estimation 评估,判断
Munging 礼仪
Anagrams 颠倒顺序组成的词
Trigrams 三线性
heuristics 启发探索
These are unlikely to have a single correct answer
remember that the point of the kata is not arriving at a correct answer
我的感想
关于文章链接
文章中提到的一些地址在译文中没有标注,如果有读者感兴趣的话,可以打开原文网址,点击相关链接进行访问。
发发感叹
人生路上,总有那些偶遇的事情,如果不好好珍惜,以后又得后悔了。好啦,不废话了:
国庆的时候回家看这本书,《我编程,我快乐》,自然是没看完的。结果,现在正在为每周写四篇博客的文章头痛时,打开了之前写下的笔记,打开了这个网址“http://codekata.pragprog.com”,大喜,就有我要翻译的文章了。哈哈。
这是其他网址的评论:
Code Kata是一种程序员自我修炼和提高的方法。简单可行但是需要持续不懈。如果使用TDD做Code Kata,可以很好的提升对TDD的理解和掌握,而不只是停留在书本知识和培训的.
总体感觉这种练习的方式,对于我们这些程序猿来说会很有帮助的,那么,不要想了,动起手来吧。加油!