色々な課題を解決するのに共通して重要なのは問題を適切に分割すると言う事。
部分問題同士の関係をシンプルにして、ある部分問題の事を考えているときに別の部分問題の事を考えなくても良いように分割する。
全体を俯瞰的に考えると言う行為と、ある部分を詳細に考えると言う行為は、人の性質として同時には行えないような気がする。
したがって、この部分問題同士の関係が疎になる様に上手く分割することが重要となる。
ソフトウエアの設計は物理的な自由度が高いので色々な分割の方法が考えられる。
建築やハードウエアの設計よ様なより物理的なものと、数学や哲学の様なより観念的なものの中間にあたる。
ソフトウエアのメタな設計ノウハウは他の分野でも役立つし、他の分野のノウハウもソフトウエア設計に役立つ。
プログラム言語自体の設計もソフトエアの設計の一つなので、設計方針の好例として参考にする事が出来る。
アプリケーションよりドメインに依存しないソフトウエア設計上の共通的な一般化された問題を考えて設計されている。
さらに、多くのプログラム言語設計にも共通の概念が存在する。
これがより一般化された共通的なソフトウエア設計上の概念を表している。
したがって、複数のプログラム言語の共通の概念を学ぶことは、色々なソフトウエア設計に役立つ一般的な概念を学ぶことにつながる。
また、今後は一つの別となプログラム言語で全ての課題に対処するのではなく、課題の性質によって適切なプログラム言語を使い分けるやり方が主流になると考えられる。
プログラム言語の共通概念を学んでおけば、複数のプログラム言語を早く正確に習得できるようになる。
さらに、これは他人の設計を理解するのにも役立つ。
他人の書いたプログラムを理解する事が難しいのは、問題の分割の様な中間的な概念が存在しているから。
これを共通的な概念が使われていれば、それを理解している人同士では理解が容易になる。
0 件のコメント:
コメントを投稿