プログラム学習カリキュラム

本日ちょうど大学の助教*1さんと学習カリキュラムについて話す機会がありました。


正直なところ、授業というスタイルでは全員に正しいことをたたき込むのは難しいので、気づくための欠片を埋め込むのはどうかという話になりました。

失敗を犯す

デザインパターンなど、美しい形がなぜ美しいのかをきちんと理解して貰う*2

よいソースと悪いソースの比較

何が良くて、何が悪いのかを明確に定義しておく。
2つを比較出来る様にする。
悪いソースから、どこが悪いのか、どこが良いのかを発見するといった、厳密な採点では測れない、自分の意見とその理由を確立するためのカリキュラムを提供する。

(例)
変数を使い回す。
hoge1, hoge2, ... や a,b,c,...など、命名規則が悪い。
マジックナンバーを多用する。
共通処理が何ヶ所にも現われる。
不要なコメントを残す。

ツールをツールとして扱う

フローチャートUMLは考えをまとめるツール。
決してこれが必要だという馬鹿な考えを押しつけない。
仕様書の矛盾*3を感じて貰う。


この様なことを授業中に述べたり、配った資料に明記したりといった方法で、頭の片隅には(運が良ければ)残るようにする。
そのとき理解できなくても、必要になったときの指針となり得るため、十分有用だと自分では思う。向上心のある人は、それについて自分で聞いたり、調べたり*4すると思うし。


また、私見ですが、会社に入って教育を受けても、ソフトウェアについてはプロになれる保証がないんですよね。しかも高確率で。
なぜなら、教える事が間違えている*5から。
それを考えると、情報系学生は時間のあるうちに勉強して、自分の意見を固めておくことをおすすめしたいです。

*1:研究室の直接の担当ではないのだけれど

*2:自分は2,3年は悪い方式で行い続けていたので、デザインパターンに出会ったとき、なぜそれを行うのかがよく理解できた

*3:仕様書を書いて、毎回修正してるとそのコストが馬鹿にならない

*4:ただ、ジャンルとしては文系に近く、上の意見を完全否定する書籍が存在するのが悲しいところ。セオリーとか。

*5:古くて時代遅れの無駄な作業をやっている場合、それを間違いと呼んでもいいでしょう?