tsucchi’s diary(元はてなダイアリー)

はてなダイアリー(d.hatena.ne.jp/tsucchi1022)から移行したものです

新入社員がやってくる?

前の会社では、新入社員はなかなか入ってこなかったなぁ...。(つーか今も入っていない)。
さてさて、そろそろ新入社員が入る季節なのですね。今の会社は 10 月ごろまで研修しているので、むしろ今が教育期間な感じですけど。

新入社員がやってくる──専門知識を教える技術:第1回 “分かりやすく説明”しては、いけないんですか? (2/5)

教える側の人間である「先生」は、現実世界の「問題」について、学習者よりもはるかに豊富な知識と経験を持っています。しかしそれが先生の「アタマの中」にあるままでは教えられません。「教える」ためにはそれを整理して「教材」にする必要があります。

 その「教材」を使って先生が「教える」と、生徒は「必死に考え」て、そして「理解」します。これが大事なポイントです。

「必死に考える」プロセスなしに、人が専門知識を「理解」することはあり得ません。

 問題はここなんですね。

 実は、「分かりやすく説明」しようとするあまりに、「必死に考えなくても分かる」程度に「教材を削減」しすぎている例が非常に多いのです。これでは薄い理解しか得られませんし、そんな理解では現実の問題解決には役に立ちません

全体的にはいい記事だと思う。でもこの後がいただけない。

 私がこの「教材を削減しすぎた」例を最初に見たのは20年前でした。当時、ITベンダーに入社した直後に「C言語プログラミング」研修があったのですが、その研修では「C言語の研修」であるにもかかわらず「CPUの仕組み」についてまったく教えていませんでした。「C言語」というプログラム言語はコンピュータの中枢部品である「CPU」の仕組みをそっくりそのまま反映するような形でできているため、その知識を持っておくと理解が非常に楽になります。にもかかわらず、その研修では教えていなかったわけです。

をいをい。C言語のどこが CPU と関係あるのさ?
# 関係するのって、せいぜい int とかのサイズぐらいだよなぁ。MMX とか使うと関係するのかな?(使ったこと無いから知らない)

それよりも、C言語を教えるときに教えなきゃいけないのはメモリアドレスについてでしょ。ポイントは、「C言語の配列は単なるリニアなメモリなこと」と「関数の中では配列の先頭アドレスがポインタに縮退するから等価に扱えること」と「配列とポインタは似てるし、時には等価だけど、本当は別物」の 3 点かな。

でも、これを新人に教えるのは正直ちょっとつらい。つーか、たぶんうまく説明できない。

せいぜい、「配列はリニアなメモリであること」に絞って教えて、あとは、2 次元配列も本当は 1 次元だよとか、printf でのアドレスの出し方とか、境界を飛び越えるとセグったりゴミが入るよとか、セグった時のデバッグの仕方とか、そのぐらいが限界かな。どのくらい時間を取れるかにもよるけど。

先生が間違っているのは、一番生徒に信用されないわけで、これが一番学習効率を落としますよ、ということだけは言っておく。自戒の念もこめて。