2014年1月28日火曜日

抽象化を教える際のパラドックス

個人的にはまったく実感が無いのですが、
新人が来るから何を教えようかという声が聞こえる時期になってきました。

んでまあ、
自分だったら何を教えるかというのを妄想するわけですよ。

このブログを読んでいる方なら予想がつく方もいるかもしれません。

そうです、
*抽象化*です。

どのレイヤーでソフトウェアを開発するにしても、
抽象化は廃れることなどありません。

プログラマーの実力は、
抽象化レイヤーをどれだけ自由に行き来できるかと言っても過言ではないからです。

では新人には抽象化についてみっちり教えるとしましょう。

でもまあ、
抽象化について抽象的に教えるのはまず無理でしょう。

抽象化が身についていないから教えるわけなんですから。

なので具体的な例をいくつか提示して教えていくわけなのですけど、
そこで困った問題に遭遇します。

人によって、
そこから抽象化を学び取れる人とそうでない人がいるのです。

よくよく考えれば当たり前です。

こちらが提示したのは具象化したものであって、
抽象化の例ではないのですから。

教える側は、
そこから察することを暗黙的に要求しているのです。

でもこれっておかしくないかな?

具象化した例から抽象化した要素を察するって、
つまり抽象化そのものです。

つまり抽象化を学ぶために抽象化を要求しているのです。

これが今回のお題、
抽象化を学ぶためには抽象化能力を要求するというパラドックスです。

まるで筋肉を鍛えたいけど、
トレーニングメニューをこなすだけの筋力がない状態のようです。

筋肉を鍛えるためには筋肉を動かしますけど、
筋肉を動かすだけの筋力がない場合はどうするのかって話です。

例えば悪いでしょうか…では耳を動かす筋肉とかではいかがでしょう。

人によっては耳なんて全く動かせませんよね。

そんな人にどうやって耳を動かす筋肉を鍛えさせるのでしょう。

つまりプログラミングの才能がない≒抽象化能力がないというのは、
抽象化を鍛えるだけの初期能力(筋肉繊維・神経)が無いということです。

えーと、何が言いたいかというと…おまえ才能がね~よ!!ってことです。

これに対する反論として、
苦労したけど理解できた経験を語る方もいらっしゃいます。

しかしそれって、
初期の抽象化能力が鍛えられる閾値ギリギリだっただけではないでしょうか。

つまり学習可能なグループにも得手不得手があるってことです。

その才能差を埋めるだけの努力は素晴らしいことですが、
あなたよりも才能が低い方に対してはもっと努力しろと言うのは違う気がします。

もしも数十年もかかるようであれば、
それはさすがに別の何かに時間を費やすべきではないでしょうか。

こういった部類も、
人間の寿命が著しく伸びない限りは学習不可能なグループと言えるでしょう。

そしてその学習不可能なグループっていうのは、
思っているよりもずっと多いのです。

採用面接でソースを書かせることが推奨されるのは、
学習不可能なグループや、
学習できても年単位かかってしまうグループを切り落とすのに必要だからです。

落とされてもいいじゃないですか。

抽象化を必要としない仕事だってたくさんあります。

だからどうか、
新人研修の段階で始めて判明するなんて事態はもっと減らしていきましょうよ…

(参考)一般化(抽象化)する能力
(参考)どうしてプログラマに・・・プログラムが書けないのか?

0 件のコメント:

コメントを投稿