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

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

「中間」はありえないのだろうか? - コンピュータ教育について

まったく対照的な、2 つのコンピュータ教育に関する記事。
お手軽プログラミング言語は教育によくない

最近の大学の授業ではCやC++Lisp、(そしてもちろん)Adaと言った本格的な言語、数学やアルゴリズム、ハードウェアとの密接な関わり方といった難解なテーマを教えず、Javaのような簡単で人気が高く、近年減少気味の受講者数を増やせそうなお手軽な言語とカリキュラムしか教えなくなっていると主張。

C言語入門、東京大学情報科学科の場合

C入門第1回では、シェルを実装、データを圧縮・解凍するプログラムを実装、スパムフィルタを実装というお題目が並んでいる。

うーん、どっちをどう突っ込もうか迷ってしまうけど、まずは「お手軽」のほうから。

プログラミングの入門級であれば、C++Lisp や Ada はありえないと思う。(Ada は書いたこと無い)。数学は分かってたほうがいいけど、必須ではないし、アルゴリズムは必要だけど、言語が分かってない人間にアルゴリズムを教えるのは結構大変だ。擬似コードだってプログラムなのだから。

だから、入り口は「お手軽」でもいいと思う。とはいっても、いきなり「PHP で簡単 Web プログラミング」なんかだと、どうかと思うし、「Visual Basic で誰でも Windows プログラミング」ってのもどうかと思う。C か Java か、 LLでも良いならPerl(use strictさせて)とか Ruby(私はあんまり書けない) あたりが妥当じゃないか。で、配列とか、構造体(データクラスでもいい)とか、言語に組み込まれたライブラリがそこそこ使えるようになれば、とりあえず入門は終了。

入門が終わったら、アセンブラかな。本物でもいいし、CASL2 みたなエミュレータでもいい。目的はメモリの使い方を学ぶこと。アルゴリズムの教育を始めるのもこのタイミング。

ここまで来られれば、あとは勝手に成長していくだろうし、来られなかった人は、申し訳ないけどコンピュータ使って仕事や研究をするのはやめたほうがいい、と思う。

つーか、普通の大学ならそんな感じで、カリキュラム組むと思うのだけど、違うのかな?繰り返しになるけど、それに受講者が着いてこられないのなら、そんな教育は何かが間違っている、と思うよ。入り口はお手軽でもいい。けど、その後はちゃんと教えなきゃ、って思う。


次、東大。いくらなんでも不親切すぎるでしょ。C 言語の入門(というよりは、アルゴリズムの授業だから、入門レベルではないのかも?)でやるべきではない。いや、やってもいいのだけど、最低システムコールを教えてからじゃなきゃ、シェルなんて作れないじゃん。統計的なアルゴリズムを知らなきゃスパムフィルタも厳しいし、圧縮アルゴリズムも、lzh でも zip でも何でもいいけど、その手のやつを見たことなきゃ、実装できるわけないじゃん。「ぐぐって調べろ」的なことが書いてあるけど、例えばシステムコールなんて、概念そのものを知らなきゃ調べようがないぜ。それとも、シェルのソースをハックしろ、ってことなのかな?それだけの能力があったら、授業受けるのなんて、ばかばかしいよなぁ。

授業を受けたわけではないから、上記の批判は見当違いなのかもしれんけどね。逆に、Advanced 課題についてもきちんと解説しているのであれば、それは素晴らしい授業だと思う。

結論としては、タイトルどおり、中間は無いのだろうか、ということ。お手軽すぎてもダメだし、厳しすぎてもダメだと思う。