機能は定義から始めるべきです。
機能の実装者として、実装の詳細に対する追求は骨の髄まで刻まれているようで、私たちは性能の最適化、より効率的なアルゴリズム、より少ないメモリ使用、より制御可能なデータフローの振る舞いを追求します... これらは常に間違いではなく、人々は常により良い製品を求めています。しかし、新しい製品を開発する際、このような思考の慣性は実際にはいくつかの困難をもたらすことがあります。
非常に愚かな悪循環は、私たちが良い製品を望むため、より良い技術を使用し、細部において完璧を追求することです。これにより、私たちは常により良い方法を見つけることになり、したがってこの製品を完成させることができなくなります。より良いアプローチは、最初に設計を決定し、それを実装することです。これは比較的伝統的な方法であり、多くの大規模システムに適用されますが、アジャイル開発はこの種のアプローチの拡張であり、小規模なシステムは大規模システムほど詳細な設計の要求が高くなく、変更も比較的容易であるため、設計作業と開発作業が統合され、伝統的なプロセスを簡素化し、複数回にわたって行うことで、チームはより迅速に製品を提供し、フィードバックを得ることができます。これらの年、こうしたトレンドに適応するために、市場には多くの関連サービスやツールが登場しました。
大規模開発のニーズに適応し、アジャイル開発の速度にまで加速できるモデルはあるのでしょうか?数年前、私はドメイン駆動設計に関するいくつかの本を読みました。これは非常に良い開発モデルですが、チームに対する要求が高いと言えます。言い換えれば、依然として高コストの選択肢であり、チーム全体が迅速に調整できない場合、その開発速度は依然として遅いままです。
既存の開発モデルは常に人々に新しい概念を学ぶことを要求しているようですが、私たちが直接取り組むことができる普遍的な概念はあるのでしょうか?実際にはあります。なぜなら、この分野の人々は多かれ少なかれ数学を学ばなければならないからです。
そうです、数学はおそらくこの世界で最も多くの人々に使用され、最も合意を得やすいツールモデルの一つです。私の両親はソフトウェアを使って毎月の売上を統計し計算する方法を知らないかもしれませんが、彼らも数学的手法を用いて同じ結果を得ることができます。私たちがソフトウェアの構造や論理を確認するとき、それは単なる数学理論の実際の応用に過ぎません!現代の多くのデザイン理念には数学の影が見られます。おそらく、概念を純粋な数学の領域に戻す時が来たのかもしれません。
これらの年、関数型プログラミングの普及は、この思想の実際の表れであるようです。ですので、最初の言葉に戻りましょう:機能は定義から始めるべきです。この言葉は実際には数学に関するものであり、数学は定義に関するものです。厳密な定義は厳密な証明をもたらし、証明可能な定義こそが有用で安全です。集合論、群論、環論、トポロジーなどの多くの定義や定理は、私たちが証明可能で安全で拡張可能な安定したシステムアーキテクチャを構築する基盤を提供します。強力な制約条件は、各機能が厳密に統合されることを可能にし、最下層の実装の詳細に気を配る必要がなくなります。