プログラムを書いてから実行されるまでのラグ
あるプログラムを書くとします。
書いたプログラムが実行されるのはいつでしょうか?
プログラムのタイプにもよりますが、例えばWebアプリのコードだとして、自分でローカルで動かしてみるか、あるいはデプロイして開発環境で動かすか、あるいはなんらかのテスティングフレームワーク経由で動かすか。
依存性の大きいコードだと、動かす、も一筋縄ではいかないでしょう。
DBの状態、キャッシュの状態、デプロイ、DNS、その他のシステムを構成する様々な要素...。
コードを書く行為と実行して動作を確認するまでの間に、ラグが生じます。
このラグが大きいほど、開発に無駄なコストがかかっていると思っています。
書いて動かして改善する、のサイクルをなるべく早く回したい。
そのために取れる戦略が色々あります。
ローカル環境の整備、テストの充実、抽象化とモックによる部分的な動作環境の構築、デプロイの自動化、などなど。動かしたい対象の性質に合わせて様々です。
でも、そもそも、動かないものは動作確認も取れません。
最低限、動くを保証した上で、動作を確認する戦略を乗せたい。
静的型付けによるコンパイル時のチェックは、最低限のプログラムの動作を保証する重要な機構だと思います。
書いたコードに対して、最初のフィードバックを与えてくれるのはコンパイラ(あるいは、IDEが提供する型チェック)です。
書いたコードの正しさは、いくつかの層に分かれていて、言語機能でサポートされる層の保証が大きければ大きいほど、その上の層の負担が減ります。
型システムがどんなに進化しても、コンパイルが通ればそれだけで正しいコードである、というレベルにまではなかなか到達はしないでしょう。しかし、正しさを確認する工程の補助を強化することはできます。
システムの規模が大きくなるにつれ、書いたコードの実行までのラグが大きくなるので、これを小さくする工夫が開発を円滑にするための重要なファクターだと思います。