编程不是动作反复练习的kata


你想成为更好的程序员吗?然后练习。这与成为更好的音乐家、更好的运动员(女性)、更好的厨师、更好的艺术家等没有什么不同。

你如何练习编程?

有很多方法。做编程kata卡塔是一种方法。

kata这个词来自于武术练习。在武术中,人们一遍又一遍地重复相同的动作,以建立肌肉记忆。
kata=重复会产生改进。

有些人从字面上翻译了这个概念。
他们试图通过一次又一次地做同样的练习来做编程kata,却没有任何变化。几天或几周后,他们就停止了,因为他们看不出有什么意义。

这也难怪。我也不能。

编程和软件设计主要是一种智力(也许还有艺术)方面的努力。
除非你不能接触打字,否则几乎没有必要建立肌肉记忆。
你训练你的大脑与你训练你的肌肉不同。
重复会使大脑麻木;变化才会刺激它。

建议催生变化 
我发现,做 "kata卡塔 "是一个探索替代方案的好机会。卡塔kata通常是一个有限的练习,这意味着你可以做多次并比较结果。

你可以在互联网上找到各种卡塔kata列表。我最喜欢的一个是 Coding Dojo

ParisDojo专注于在很短的时间内(1 到 1.5 小时)在他人面前编写代码,通常是从头开始编写代码他们使用各种语言、各种工具、各种练习形式。当在指定时间内完成并且观众可以自己在家重复练习时,他们认为练习的结果是成功的。

当我第一次遇到一个我从未做过的Kata卡塔时,我会尽可能不费吹灰之力地完成它。
我使用我最熟悉的编程语言,并且不尝试任何特技。

大多数好的卡塔kata都含有小的惊喜。它们听起来可能比实际情况要简单得多。另一方面,它们通常并不具有压倒性的难度。
要克服卡塔可能带来的惊喜,而不要因为尝试一些壮举而陷入困境。

一旦你对练习的本质感到满意,就引入变化。我使用的大多数变化都是以某种约束的形式出现的。约束是一种解放。少即是多。

以下是建议列表:

  • 遵循测试驱动开发(TDD)。这是我通常的练习手法,但如果您通常不练习 TDD,那么卡塔是一个很好的机会。
  • 将(Gollum 风格)Devil's Advocate技术与 TDD 结合使用。
  • 遵循转换优先级前提
  • 在没有模拟的情况下进行 TDD。
  • 用 mocks 做 TDD。
  • 使用测试数据生成器设计模式
  • 尝试基于属性的测试
  • 把你的鼠标拿开。
  • 在编辑器或 IDE 中隐藏文件树。在 Visual Studio 中,这称为Solution Explorer,在 Visual Studio Code 中它只是Explorer。通过其他方式浏览代码。
  • 使用其他编辑器或 IDE。
  • 使用另一种编程语言。型是练习一门新语言的好方法。当你学习一门新语言时,你经常会遇到不熟悉的语法,这就是我建议你先用一种你熟悉的语言来练习型的原因。
  • 仅使用不可变数据结构。这是学习函数式编程的良好开端。
  • 将所有方法的圈复杂度保持在1。
  • 使用不熟悉的 API。如果您通常使用NUnit,那么试试xUnit.net。使用新的 Test Double 库。使用不同的断言库。
  • 采用您想更好地理解的设计模式。我在Visitor设计模式 方面取得了特别的成功。
  • 将现有的 kata 解决方案重构为另一个设计。
  • 重构另一个程序员的kata解决方案。
  • 对kata进行配对编程。
  • 结对编程时使用乒乓模式。
  • 对其进行移动编程。

我喜欢卡塔的一点是它们足够小,你可以多次做同样的练习,但设计不同。这使得学习新的做事方式变得容易,因为您可以比较解决同一问题的不同方法。

重复使大脑迟钝,而变化则刺激它。Katas 很棒,因为它们是简短的练习,但您必须有意识地引入多样性才能使它们适合您。你不是在建立肌肉记忆,而是在形成新的神经通路。