そういえば先生は言っていた、基本は大事だと
「Basic, Basic, Basic! なこと - 檜山正幸のキマイラ飼育記 メモ編」と「偏見、誤解、曲解など - 檜山正幸のキマイラ飼育記 メモ編」を一緒にした。
Basic, Basic, Basic! なこと
人生50年以上やって、やっと納得することもある。いやっ、これは若者に納得してもらわないと困ることなんだが、
- 学校の先生が言うことはけっこう正しい。
曰く:
- 基本が大事だ。
- 一見つまらなそうなことでも、おろそかにしないでやれ。
セミナーの経験から、次のようなことが確実に分かってないことが理解の大きな障壁になっている感じがする。
- 単元集合(singleton set)ってなに?
- 単元集合はいくつあるの?
- 単元集合が同じってどういうこと?
- 単元集合の元は何でもいいの?
- どうやって単元集合の元を選ぶの?
- 単元集合からの写像ってなに?
- 単元集合への写像ってなに?
- 単元集合と任意の集合の直積はどうなる?
- 2つの単元集合の直積は?
- 2つの単元集合の直和は?
- 空集合はいくつあるの?
- 空集合からの写像ってなに?
- 空集合への写像ってなに?
- 空集合と任意の集合の直積はどうなる?
- 空集合と任意の集合の直和はどうなる?
- 2つ(?)の空集合の直積は?
- 2つ(?)の空集合の直和は?
- 定数と関数は違うの?
- 定数関数ってなに?
- 定数関数が同じってどういうこと?
- 関数の引数がないってどういうこと?
- 関数の戻り値がないってどういうこと?
- 戻り値がない関数を他の関数に合成できるの?
- 引数がない関数に引数を渡せるの?
- 引数を無意味に増やして(水増し)、ほんとに無意味じゃないの?
- 引数を無視する関数って、役に立つの?
- 計算は関数なの?
- 関数は計算なの?
- 計算式と関数って違うの?
あまりBasicじゃないけど:
- 文(statement, sentence)とか指令(instruction)、コマンドとかも関数なの?
- Lispのprognとか、Erlangの「,」ってダメなの?
- さすがにprint文は関数じゃないでしょ?
偏見、誤解、曲解など
次のような傾向がある。困ったことだとも言えるが、だいたいは致し方ないこと。
- プログラミング言語を通してしか概念や現象を見られない。
- ハードウェアとしてのコンピュータや、大粒度コンポネントからなるシステム構造などは、単一プログラミング言語では理解できないから、まったくダメ。
- 関数とか変数とかも、プログラミング言語の定義しか見えてない。
- モナドやクロージャも言語機能と思っている。
- 早い段階で習った概念は強い刷り込みになる。
- 集合/写像が強烈に刷り込まれているのは驚き。
- 集合/写像に強く縛られているが、実はその概念は曖昧。
- 写像を考えても、余域は考えてなかったり。
- 写像の同一性もハッキリと意識してない。
- 余域と像がゴッチャ。
- X→Y のとき、X=Y のケースを考えない。考えられない。
- X→X なんてないと思う。代入や状態遷移の定式化ができない。
- 引数は、構文上の引き数だけだと思っている。
- 戻り値は、構文上の戻り値だけだと思っている。
- メモリの上書き変更は関数じゃないと思っている。
- それゆえ、破壊的代入やデバイスとのIOは関数で定式化できないと思っている。
- X→X は idX しかないと思っている。
- 写像は、単射か全射のどちらかだと思っている。
- 集合圏で、cod(f)⊆dom(g) なら結合可能だと思っている。(致し方ない)
- a|→f(a) と f:X→Y がゴッチャ。(致し方ない)
- 関数そのものと、個別の値-値対応と、式が区別できない。(致し方ない)