Kata

[视频]质因数 Ruby版

这次Kata练习做的是求质因数,这个练习比较简单,适合初学TDD的同学练习。在给刚接触TDD的同学介绍TDD的时候,我比较喜欢用这个练习,可以给大家展示TDD的效果,帮助大家建立TDD的信心。 但是这次练习只是给大家做个演示,这种TDD的做法做的比较顺畅其实是一个巧合。解题思路完全是被case牵着走,在别的情况下前进是十分艰难的。解题之前需要对问题有比较深的认识,自己设计一步一步的case,知道case能把我们带向哪里,逐步向目标前进。 今天的这个视频过程十分的坎坷...各种手误,还不小心关了编辑器。根据上次的反馈,这次我增加了些解说,整个过程有些刻意放慢,时间拖到了20多分钟。其实这个练习大家自己做的时候也就10多分钟。 上次使用ScreenFlow自带的快捷键显示工具,感觉显示了很多多余的按键操作,这次使用了另外一个开源工具:KeyCastr。 使用的工具: Ruby 1.9.3 RSpec

Ruby

[视频] 罗马数字Kata Ruby版

最近这两个月一直在坚持每天做Kata练习,有不少的收获。我会挑一些比较有意思的做成视频发出来,也算是Kata接力的继续吧。 很巧这次做的Kata练习依然还是罗马数字,只不过上次用C#,这次换成了Ruby。另外,这几天学习了一种新的解法,不同于之前的递归,代码也相对简洁。 以前的做法多是放弃提取1到10之间的规则,直接使用字典。这个做法就是尝试发现1到10之间的规则,将4和9作为特例处理。充分利用了罗马字母叠加的逻辑。 在TDD过程中,不断使用愚蠢的办法制造重复,然后再重构的过程中,通过不断抽象重复推进代码演化。这个练习中Case的选择并没有体现出来,只需自然的顺着数字前进,因为数字顺序与逻辑演化方向是大概一致的,所以不会出现case路径选择问题。   第一次在Mac上录视频,还第一次献“声”,有点小紧张。 使用的工具: Ruby 1.9.3

C#

又见斐波那契

之前公司在找人面试的时候,我几乎必问的题目就是斐波那契数列,题目很简单,就是求斐波那契数列第n位的数值。很多教科书都会使用这个题目来做例子。每次我都是给面试者一只笔和一张纸,让他写出来,基本上不会给任何限制,随便使用任意语言,任意解法。之所以让我这么爱用这个题目的原因是,这个题目虽然简单,但是有一些小坑需要处理,可以和面试者讨论这些坑的处理方式,执行过程中发生了什么,探索一些不一样的解法等等,可以比较好的了解候选人的思维。然而,让我诧异的是,没有几个人能思路清晰的写出解法来,并说出思路以及里面的坑,好容易有写出来的却没法说清思路以及改进方式,甚至有许多工作多年的“资深”工程师都写不出来。 一般最常见的写法就是简单的递归实现: public int Fibonacci(int n) { if (n