dotkuwaの日記: プログラムの新しいカテゴリー分け 4
日記 by
dotkuwa
プログラムは、
・TDD可能プログラムカテ
・TDD不能プログラムカテ
に類別できるのでは無いか?
TDDを推進している人でも、TDDが出来ない部分もあるという
のは、自ずからゆっている事ですし。
そして、TDD可能プログラムカテは、
・簡単
・現在の教育で、普通に優等生だった人はだれでも、
トレーニングを積まなくても、TDD可能プログラムカテ
は理解出来、率先して作り出すことも可能
・だから、TDD可能プログラムカテに関しては、
トレーニングコースなど不要
なのでは無いでしょうか?
トレーニングが必要なのは(陽にどういう分類の物に
なるか不明ですが)TDD不能プログラムカテで有って、
ゆえに、
プログラミングのトレーニングとしてTDDを使うのは
自己撞着ではないか、ないか、ないか!!!
「陽にどういう分類の物になるか」試案 (スコア:1)
プログラムは(最終的に)テストが出来ます。(最終的に)テストが
可能なのに、なんでTDD可能と不能が出来るのか、
が問題です。
そして「不能」側のカテゴリーは、(実用)プログラム学習に於いて、
・全体が分からない
・手順書を誰も作ってくれず、引継ぎがうまく行かない
という、(実用)プログラムの「痼疾」について知見をもたらすかも
知れません。
・TDD可能プログラムカテは、
因果関係が必ず「xFy」になる。
・TDD不能プログラムカテは、たとえば、
因果関係が「x1~x100Fy1~y20G(z1~z10Hr1~r2000)s1~s5It1~t30」
と言った複雑な因果関係となり、
しかもその因果関係が確定するのが、プログラムがかなり出来た時、
あるいは最悪プログラムが完成した時に限られる。
で有ると思案します。
要するに、この様な木構造や入れ子構造の因果関係を持った(実用)
プログラムは
真に「高階関数」であり(模式的に言うなら1.2階とか)、
真に「高階関数」で有るから、1階しか検知出来ない人類には、
・初めから因果関係が判る
事が絶対に不可能で、
・初めからは因果関係が(全くと言っていい程)判らない
・調べ学習をして初めて因果関係が判る
のだと思います。
2次元人が球の全体を知る事は出来ず、なめて行って調べる必要が有る
のと同じです。
調べ学習の「手順書」とは、極論するならばググレカスなので、
「その様なもの、手順書とは呼べない」と言われると、全くその通り
です。
高階だから優れた次世代だというのは違うと思います。そしてその
高階から目をそらし、うまい所だけをつまみ食いしようとするのが
TDDです。実用プログラムを作ろうとしている所で、その様なつまみ食い
をしたら、周りの人に嫌われるのが道理で、実際その様になっている
と思います。
「高階関数」に関するゴールポスト (スコア:1)
>要するに、この様な木構造や入れ子構造の因果関係を持った(実用)
>プログラムは真に「高階関数」であり
と申しましたが、ゴールポストを動かさせて頂きます。
上記の内、「プログラム」というのが嘘です。そうでは無く、
・アーキテクチャーレベルの検討を経て得た方針(世界の切り捨て)
の範囲内での、
・すべての可能世界(到達しうるすべての世界線)での「プログラムの
バリエーション全て」
です。
具体的に言うと、プログラムを考えている際の、
・(インターフェースを壊すレベルの)リファクタリングによる
プログラムのバリエーション
・もはやリファクタリングと言えないレベルの(動作すら違うレベルの)
プログラムのバリエーション
全てを「高階関数」と言うという風に、ゴールポストを動かしたいの
です。
この様な「高階関数」なら、"調べ学習をして初めて因果関係が判る"
のも頷けます。トゥットゥルー!!
実用性とは (スコア:1)
実用的なプログラムを作る際、プログラマーは「本当の事」を
知りません。プログラマーはプログラムを何とかするだけでその
人生の全部を使わなければやっていけないからです。
他人から「本当の事」を聞き出すのはまず無理です。同じことを
何度でも裂いて、円環の理でも得れば別でしょうけれど、無いです。
とするとどうするか、
・世界を切り捨てる。この最低ラインだけは「本当の事」を知る人間
にも守ってもらう。
・その中で、「なになには正しい」ともその真反対とも、有り得ると
して備える。
・あらかじめテストでピン止めしておけば、「本当の事」は動かない
などというのは幻想。
です。
動き得る全ての可能世界のプログラム全てを考える必要が有ります。
例えば、
・複数人数でプログラムを作っていて、クラスのキャラが被ってしまった時、
別の可能世界に移る必要が有ります。
・複数人数が、同じクラスを別のキャラと考えていても、別の可能世界に移る
必要が有ります。
・「本当の事」を知っている人の、個々の知識と、まとめた知識が矛盾している
事が有ります。まとめた知識が個々の知識より簡便な場合、みんなから
褒められるからです。善意からの地獄です。
ですので、まとめた知識の簡便さと、その真反対はいずれも到達可能な
世界線です。
・学校の先生がその講義内でのみなら、特定の可能世界のみにピン止めする事は
可能で、ならばTDDも可能でしょうけれど、それは学校の講義内だからです。
とか、有ります。
つまり、
動き得る全ての可能世界のプログラム全てを考える必要が有ります。
仕事でやっているプログラマーはみんなそうだと思います。
だから形にこだわったりして、少しでもあらかじめ世界を切り捨てておくのです。
またゴールポストを動かします。 (スコア:1)
誤:
・アーキテクチャーレベルの検討を経て得た方針(世界の切り捨て)
の範囲内での、
・すべての可能世界(到達しうるすべての世界線)での「プログラムの
バリエーション全て」
正:
・アーキテクチャーレベルの検討を経て得た方針(世界の切り捨て)
の範囲内での、
・すべての可能世界(到達しうるすべての世界線)毎の「最もふさわしい
プログラム」全て
です。
さすがに「プログラムのバリエーション全て」はきつすぎます。
多分、そのプログラムの「型」(「すべての可能世界の」が付く型)を表現
するもっとも素直でなやり方は「手続き型」なのでしょう。
未分の関数たち(シグニチャに囲われていない関数たち)を「上から
眺める」プログラムが操作するプログラムを作る事になる訳
ですから。
なんでもかんでもシグニチャに囲われた関数でないといけないと、と
いうのは旋盤もボール盤も有って、把持の方法こそがきもな場面で
ハサミしか能が無い、というのと似ています。