Clojure 护栏驱动开发的范围-测试和类型?

Clojure 护栏驱动开发的范围-测试和类型?,clojure,tdd,Clojure,Tdd,在Rich Hickey的演讲中,他作了一个主题为 在这篇文章中,他提出了关于测试驱动开发的观点: “我认为我们身处一个我想称之为护栏编程的世界……‘我可以改变,因为我有测试!’谁会这样做?谁开车到处撞护栏?护栏能帮你到达你想去的地方吗?” Rich更重要的一点是,除非你有一个关于你想要构建什么的强大的心智模型,否则TDD是没有价值的。你需要知道你在做什么 考虑到里奇已经编写了一种动态语言(即除了core.typed之外没有其他类型),他似乎主张建立一种“强大的心智模型”,而不是像艾滋病那样的类

在Rich Hickey的演讲中,他作了一个主题为

在这篇文章中,他提出了关于测试驱动开发的观点:

“我认为我们身处一个我想称之为护栏编程的世界……‘我可以改变,因为我有测试!’谁会这样做?谁开车到处撞护栏?护栏能帮你到达你想去的地方吗?”

Rich更重要的一点是,除非你有一个关于你想要构建什么的强大的心智模型,否则TDD是没有价值的。你需要知道你在做什么

考虑到里奇已经编写了一种动态语言(即除了core.typed之外没有其他类型),他似乎主张建立一种“强大的心智模型”,而不是像艾滋病那样的类型和测试


把这些东西放在一起。类型的使用是在护栏驱动开发的范围内,还是仅限于TDD?

在我看来,重点是首先要清楚地思考您的问题,给它一点时间,让它在你的大脑中沉淀下来,让解决方案在一段时间内发展,而不是像TDD那样,你一拿到项目就开始编写测试,然后编写代码让这些测试通过——这听起来像是gaurdrail驱动的开发


类型而言,它们无处不在,我是说字面意思。没有类型你无法思考,它们是人类理解周围世界的心智模型。在编程中,类型在静态类型语言中是显式的,而在动态语言中是隐式的。如果没有类型,您甚至无法编程-尝试在不知道参数类型的情况下编写函数体。

您是否可以详细说明为什么您认为类型的使用将在其中任何类型的“范围”内?显然,如果您用强类型语言编写代码,您需要有一个更强大的“心智模型”。在Clj中,可以将编译器的类型提示设置为优化。试图优化未完成的代码通常会阻碍任何开发。所以我认为类型不在“GDD”或TDD的范围之内。是的,我认为静态类型是一道屏障。护栏的作用是告诉你(相当有力地)你不能去哪里,这也是静态打字的作用。我认为里奇的观点是,专注于你想达到的目标是一种更有效的解决问题的方法。我对这一点的直觉理解是一种“设计的正确性”。感谢您深思熟虑的回答。