Наши ограничения:

  • Мы можем надеяться, что сможем сделать надежными только те вещи, которые мы в состоянии понять.
  • Мы можем одновременно рассматривать (фокусироваться) только несколько вещей.
  • Взаимодействующие вещи должны рассматриваться вместе.
  • Сложность (переплетенность вещей) мешает пониманию.

Способность рассуждать о поведении программы критична для дебага и для определения точек внесения изменений. Любой баг, обнаруженный на проде, прошел все проверки типов и все тесты. Более того, никакой набор тестов и никакие инструменты рефакторинга не позволят вносить изменения в “грязный” запутанный код быстрее, чем в простой и чистый.


Состояние никогда не бывает простым, потому что оно переплетает значение и время. В то же время состояние - это очень легкая для восприятия концепция. При этом состояние вплетает в себя все вещи, которые с ним взаимодействуют, прямо или косвенно.