@poshboytl 在下面这个贴里呼唤了我,我就写些想法。。展开的比较大,就独立成贴听听大家的意见。
http://ruby-china.org/topics/6650
我推崇选择工具为任务所在的抽象层面服务 - pick tools for the abstraction level that you work on.
工具的效率是一个因素,另一个很大的因素是设计和开发很大程度上是个创造的过程,而组好的工具是能帮助创造本身的工具。合适的工具本身会帮助你集中思考某层面需要的东西,有利于发散性的创造过程。
举几个例子 -
原型图的时候我喜欢 Balsamiq 一类的工具 - 明白告诉你就是粗狂,快速做 n 个不同的原型,扔了在做,做了在仍,直到找到合适的,如果用 OmniGraffle 这类的东西都可能会不经意的太注重细节了。
写对象交互的代码测试的时候用 Rspec, 在写 spec 的时候不知道该怎么设计的代码,等到写了几个 spec 后会忽然豁然开朗了,正是因为 Rspec 工具本身的小模块,功能期待,对象交互期待这些功能会引导你思考这个侧面上的东西 - 侧重交互及模块化而不是怎样堆出一个 30 行的 method 来实现一个功能。
行为测试是测试用户的行为,对用户与界面交互最好的 DSL 就是自然语言。用这样的语言会让你真正从用户行为流程来思考,而不是拘泥于具体的实现过程。没错,这里面可能要多写一些类似 regex matching 的东西,但这些相对于其提供的好处来说是非常值得的。
在说远一些,语言不仅是表达思想的工具,更是约束或者说结构化思想的模具 。比如我回家说东北话的时候会发现自己忽然很豪放。编程语言也是这样,学一门编程语言最大的好处是能带来一个新的视角,提升或集中思维的层面。如果只是学一套新的语法就每什么意思了。而这个也是设计成功的 DSL 所能带来的。