* 少ない行数で、小さな実行可能な部分をすぐに作れる。
* それを使って、いろいろなテストができる。
* どんどん、広げていくことが楽しい。自由度がある。
* 二度書く手間がほとんどない。
[B]
* 複雑なものを徐々に作り上げていくと、徐々に選択肢が狭まり次にやることが決まってくる。
* 拡張する時に、変更が少なく、局所的。
* 寿命が来た時に新しく書き直すことが苦痛にならない
[C]
* プログラミング言語自体が進歩している
もちろん、プログラミング言語だけではなくて、設計経験も大きいと思うんだけどさ。
ダメなものとしてあげるなら、tcl と php 。書き進めるには良いんだが、[B] のようにならない。大域変数を中心とした言語の限界だと思う。
Java でも、static を多用されると厳しい。
C / C++ は、一つのことをするのに必ず二回書く必要がある。大域変数に頼りがち。
Haskell や Prolog だと、完成が近付くにつれ「徐々に選択肢が狭まり次にやることが決まってくる」。型やデータの流れがプログラムを規定するから。特に、これらの言語は、
* 変数名に意味がない
ので、変数名を考える必要があまりない。なので、変数に関する「プログラムに影響を与える自由度」が逆に減っている。大域変数やインスタンス変数は変数名が大きく影響するからね。
ただし、関数名や述語名は重要。でも、hoge1, hoge2 とかは多用するな。僕のプログラミングスタイルの一つかも。
tcl/php/C/C++ でも、大域変数を禁止して、単一代入でプログラミングすると、「徐々に選択肢が狭まり次にやることが決まってくる」を体験できるはずです。
Object 指向言語は、本質的にオブジェクトが再代入されてしまうのでダメだね。Scala は、それに抵抗しているところがある。でも、これらは旧世代な印象があるな。
No comments:
Post a Comment