kagamihogeの日記

kagamihogeの日記です。

とあるコンピュータサイエンス学科の初等プログラミングコースの風景

昨日のプログラマーになれる人なれない人 - kagamihogeのblogホッテントリ入りしてビビった。ので、もうちょっと詳しいエントリを書く。俺の母校の内情暴露になってしまうけど、何人受講者がいてどんな人間が何人受かってどんな人間が何人落ちた、ってデータはその気になれば調べられるデータだと思うので書いてしまう*1

ただし、このエントリには注意点がいくつかる。

俺の母校は偏差値 50 とかの学歴的にはちょっとアレな大学であること。データの分析期間は俺の在籍期間 4 年間しかないこと。その 4 年間は今から約 10 年は前の出来事なこと。学生一人一人を綿密に調査したわけではない、かなり俺の主観が混じった「意見」であること。

つまりは、俺の主観的意見なので科学的な客観性は無い、ということを念頭に置いてほしい。


前置きが長くなったけど本題へ。

初等プログラミングコースの目的

「ポインタと再帰を理解したプログラムが書けること」。素朴な単方向リストが C でソラで書ければギリギリ単位認定、って感じです。はてな界隈のプログラマー的には「そんくらい出来てあったりめぇだろ」な最低ラインだと思います。

100 人の受講者とカテゴリ

さて、今受講者が 100 人居たとする。このとき、受講者はおおよそ 5 カテゴリに分かれる。その内訳人数はこんな感じ。

A: 5人
B:35人
C:30人
D:20人
E:10人

各カテゴリの詳細

次に各カテゴリがどんな人たちかについて。

カテゴリ A。教える必要がほとんど無い人たち。何かのきっかけでコンピュータに触れていれば独学でプログラマーになれていたかと。そもそもこのテの天才的なハッカーたちは定められた順序で体系的に学ぶってのは向いてないかも。自分の好きなように好きなだけ勉強してもらったほうがいいというか。今は web があるからワザワザ大学に来る必要もあんまり無いしね。

カテゴリ B。ちょっと苦労はするけど演習問題などを通じてポインタと再帰ぐらいなら難なくクリアする人たち。指導教官のもとで適切な初等教育を受ければプログラマーとして自分の道を確立できる。あとは放って置いても自分の興味の赴くままに勝手に成長してくれる。

カテゴリ C。かなり苦労はするけど演習問題をたくさん解かせたり担当教員・TA が丹念に付添えばポインタと再帰はギリギリクリアする人たち。こういう順序でこういう単位をとっていくといいよ、と指導教官が道を示してあげればそれなりには成長してくれる。ただし、「単方向リストは習ったよね?じゃあちょっと応用でリング状にしてみようか」っていうと厳しかったりするのだが・・・。

カテゴリ D。かなり苦労するし演習問題をたくさん解かせたり担当教員・TA が丹念に付添って熱心に教えても色々なところでつまづいて結局ポインタと再帰が乗り越えられない人たち。カテゴリ D と E にはどんな教育方針が適切なのかは俺は意見を持ち合わせていません。

カテゴリ E。int a = 10 が分からない人たち。

このコースは 40% ―D,E と C の一部(つまり 100 人中 3,40 人)―は落第する。目的が「ポインタと再帰を理解したプログラムが書けること」なので残念ながら単位を上げることは出来ない。

ちなみに、この落第者には GW とか夏休み明けで居なくなるっていうプログミングの適性以前の―なんというかやる気の問題ってヤツ―人たちも含んでいる。カテゴリ D,E と C の一部にはそういう人たちも含んでますよ、ってことです。

つまり、厳密な意味でポインタと再帰を理解してるのは A,B の 40 人。C はビミョウなラインなんだけど、何人かには単位上げないと再履修者が多くなり過ぎて大学が回らないという現実的な問題が・・・。アンマリ落としすぎると、まぁ、その・・・経営がマルビになっちゃうんで。

A と B の開き、B と C の開き

A と B の間にもかなりの開きがあるんだが、B と C の開きはもっとある。その境界は端的に言えばポインタと再帰の理解にある。ただ、俺が思うに、コースの目的が「ポインタと再帰の理解」だからそう見えるのであって、もっとそれ以前の段階でつまづいていると思う。だから、

ポインタと再帰はかなりの難関だけど、それ以前の段階でつまづいている人がかなりいるのでは、と俺は思う。ポインタと再帰までは騙し騙しでやれてるだけなんじゃないかなぁ?

と昨日書いた。

で、これは俺の暴論なんだが C,D,E の人たちは潜在的に int a = 10 が分からないのとほとんど同じなんじゃないか?と。int a = 10 を変数という概念で見れていなくて、単なる構文として暗記してるだけでは?と思う。ポインタと再帰ぐらい複雑なものになると暗記でなんとかなるような代物でもないし、なんとかしていいものでもない。

B と C の開きでいちばん大きいのは、抽象的なモノの考え方。コンピュータ的な物の考え方というか、問題を分割したり、単純化したり、段階化したりといった、物の考え方そのものが理解できない。

FizzBuzz問題(続き)

プログラミングしている時の私の頭の中は動物的な勘がぐるぐる渦巻いているような感じで理路整然と演繹的に問題を解いているのではなく、あっちこっち試行錯誤
(中略)
プログラミングの苦手な人は、この「分解」ができていません。

これに俺はマッタクの同感。

Java グラマー*2としてなら C,D ぐらいの理解度でもナントカなるけど、それより高度な―少なくともポインタと再帰程度には難しい―ことをやろうとすると壁にぶつかる。

「動物的な勘がぐるぐる渦巻く」ことをしないのかやらないのかは分からないけど 2 年とか 3 年プログラマーとして働いてそういう状態になれないなら、そもそも脳の構造がプログラマーに向いてないのでは、と思う。

よって D,E と C 全部もしくは一部(つまり 100 人中 30 〜 60 人)はそもそもプログラマーに向いていないのではないか?と考えて、昨日↓のような書き方をした。

ものすごく大雑把に言うと 4 割から 7 割の人はプログラマーに向いてない、ということになる

最初に書いたように俺の主観的意見なので科学的な客観性は無いので、4 割から 7 割という数値の科学的な根拠はまったくないです。

・・・んでまぁ、B と C の間にはマリアナ海溝並に深い隔たりがあるわけで。これはもう住んでる世界どころか次元が違うとしか言いようがない。なので、ポインタと再帰が理解できる人たちにとっては理解できないことが理解できない

*1:むしろこういうデータはオープンにしたほう価値あるんじゃないかな、とすら思う

*2:あえて蔑称を使うが人格レベルで差別するつもりはありません