いつ俺〜いつから俺ができないと錯覚していた?〜

社会人ブロガー。大手メーカーでソフトウェア開発をしている人。プログラミングは結構得意。

大学生はプログラミングを独学で学ぶしかないのか?

f:id:shun_prog0929:20151205103515j:plain

プログラミング。

理系なら誰もが身に付けたいと思うスキルの一つですね。

最近は文系でもプログラマーとして企業に採用されることが増えてきており、プログラミングの能力に対する需要の高さが伺えます。

 

では、そんなプログラミングをどのように学ぶか。

理系の学生で少しでもプログラミングに興味があれば、大学でしっかり学びたいと思うでしょう。

文系の学生であっても、なんだかんだで一般教養科目の中にプログラミングの勉強ができるものもあって、そこで学べばいいかなと思う人も多いかもしれません。

だが、現実はそう上手くはいかないもので大学でプログラミングを学ぶというのは非常に難しいのです。

 

僕は正直憤りを感じております。

 

今回は現役大学院生である僕が、実際に大学に入って感じたプログラミング教育の実態と問題、そして本当にプログラミングができるようになりたければどうすればいいのかについて述べたいと思います。

 

大学のプログラミング教育の実態

まず、前提として大学という場所が、1から10まで懇切丁寧に教えてもらえて、できるようになるまで付き合ってくれるようなところだと思わないでください。

できるようになるのはあくまで学生本人。

できるようにならなければ落ちるだけ。

大学はそういった場所です。

 

そしてプログラミングの講義ですが、理系の学部であれば1年生から受けられることが多いです。

その形式としては、実際にプログラミングに触れながら、どのようにプログラムを書けばいいのかを教えているものがほとんどです。

中には、黒板にプログラムを板書したりする先生もいるようですが。

そして僕はこの講義を受けてこんな感想を抱きました。

 

「この授業を受けて本当にプログラムが書けるようになるのか?」

 

僕は大学に入る前から趣味でプログラムを書いてきたからかもしれませんが、この講義でプログラムが書けるようにはならないのでは?という直感が働きました。

そして、その感覚はあながち間違っておらず、講義だけでプログラムを書けるようになった人は本当にわずかでした。

多くの人は、最終的に単位を取るためだけにできればいい最低ラインに立つだけで精一杯。

今考えると、講義で実際にプログラムが書けるようになった人なんて一人もいなかったのかもしれませんが。

ここでプログラムが書けていた人は、高校生のときからプログラムを書いてきた人たちばかりですから。

 

大学のプログラミング教育の問題

なぜプログラムが書けるようになれないのか。

それは大学のプログラミングの講義の形態に問題があるからです。

 

問題は大きく分けて2つあると思います。

 

  1. 「先生1人」対「生徒多人数」の講義形式
  2. プログラミングのうわべだけを学ぶ講義

 

まず1つ目の「先生1人」対「生徒多人数」の講義形式について話しましょう。

そもそもの大学の講義はそういうものだろう、という声はあるかもしれません。

確かにその通りだと僕も思います。

しかし、プログラミングに関してはこの形式が全くもってよくない。

だってプログラミングは自分がプログラムを書いて、その結果が返ってくるというものでしょ?

なのに人から聞いて、自分からは発信しない。

これを書いてみて、と結果の分かりきっている指定された内容を書くだけ。

ただの確認作業ですよ、これでは。

進歩するものも、進歩しないというものです。

なら対話的な講義にすれば?となりますが、多人数を相手にしての対話的な講義はどうしても偏りが出てきますし、先生も敬遠しがちです。

プログラミングを学ぶのであれば、対話的にしやすい少人数で学んでいくのが良いと思います。

 

次に、プログラミングのうわべだけを学んでしまっていることですね。

大学の講義では、プログラミング言語の構文(書き方)主体で学んでいきます。

例えば、繰り返しを記述するfor文について教えられるとしましょう。

先生は例を書きながら教えてくれるでしょう。

「for文はこう書けば動くよ」

確かにその通りに書いてみれば動きます。

さて、ここでこのfor文の性質を理解できている人が何人いるか。

これがC言語におけるfor文なら、以下のような性質です。

 

for文は

 for(初期化式; ループの継続条件式; 再初期化式) { 文; } 

のように書くことができる。

それぞれの初期化や条件は"式"である。

条件に従って繰り返し実行されるのは"文"である。

初期化式によって得られた値から、ループの継続条件を満たす限り与えられた"文"を繰り返し実行し、"文"を実行した後には毎回再初期化式に基づいて初期化される。

 

ブロックが省略できるなど、構文としてはもう少しありますが本質は同じですので省略しています。

 

さて、プログラミングの講義ではこれらのことを理解できるように教えられるのか?

そんなことはほとんどないです。

for文って何?状態で次に行ってしまう人もいるでしょう。

それでは学んだことにはなりません。

"式"と"文"の違いについて分からないまま進んでいる場合も多いと思います。

些細な違いでしょ?と思う人もいるかもしれませんが、そんなことはありません。

このようなことが積もっていくと、結局何ができて何ができないのか分からなくなっていくのです。

 

さらに、この構文の例を挙げながら学ぶ方法にはもう1つ問題があります。

それは自分がその構文を使う場面が想像できていないことです。

構文の書き方ばかりに注目してしまい、一番重要な自分が使いたい時にどの構文を組み合わせればいいのか分からない、という事態が起きてしまうのです。

これは、非常に大きな問題です。

 

このように、大学のプログラミング教育には問題があるのです。

 

じゃあどうすればいいの?

ここが難しいところ。

現状の講義に問題があったとしても学生である我々に改善できる可能性はほとんどない。

 ならば独学で学ぶしかないか?となりますが自分1人で勉強していて分からないところが出てきてもなかなか解決できないもの。

そんなことが続いているうちに諦めてしまう人が多いでしょう。 

やはり少人数で、誰か先生となってくれる人がいるのが理想。

 

というわけで、まずは講義を最大限利用することを考えてみましょう。

僕は先生に直接聞いてみるのがいいと思います。

「先生のところにいってプログラミングをもっと教えてもらってもいいですか?」

これだけ。

結構真面目に聞いてくれる先生もいますよ。

先生にとっても自分の研究室の宣伝にもつながるかもしれないですから。

それに、先生自身は忙しくても研究室の学生が教えてくれるという場合も考えられるでしょう。

そうすれば、貴重な話を聞く機会も増えるでしょうし、自分のプログラミングの能力はやる気次第でかなり上がります。

なにせ、教えてくれるのがプログラミングの専門家なわけですから。

 

それがどうしても無理なら、一緒に講義を受けている人に聞きましょう。

自分よりわかっている人が何人かはいると思います。

この時に意識して欲しいのは、漠然としたことではなく、具体的な内容を聞いてください。

聞いている相手は一緒に講義を受けている学生であって、専門家ではありません。

漠然としたことを聞いても、しっかりとした答えが返ってくることはないでしょう。

ですから、自分が何が分からないのか、何がうまくいっていないのか、できるだけ具体的に聞くようにしましょう。

 

それも無理というあなた。

プログラミングは友達よりもできていると思っているのかな?(笑)

そうしたらやはり独学しかないかもしれません。

ただ、気をつけて欲しいのは独学には限界があるということをわかって欲しい。

将来的に1人でプログラムを書くということはほとんどないので、何人かで書いてコードの分かりやすさに気をつかう状況になるのが望ましいです。

 

最後に、分からないことは自分で調べてみるというのも重要。

Googleは最強の先生です。

自分が分からないことは他にも分からない人がいるものです。

意外とすぐに解決するかもしれません。

 

大学生にプログラミングを教えてみた

少し前に、大学3年生の後輩にプログラミングを教える機会がありました。

3人の後輩に教えましたが、彼らは学科の中でもプログラミングができる方だと思います。

 

どのようなことを教えたかといえば、プログラミング言語がどうやって動いているの?という話から、実際に簡単な計算機を動かしてみよう、という内容です。

 

彼らは僕の話を熱心に聞き、半日ほどの間しっかり集中して内容を身につけていきました。

実際に、この日学んだことを自分でやりたいことに活かしていけたらもっと進歩するのかなと思います。

 

この時思ったのですが、短い講義を一週間おきに何回もやるより、半日くらい時間をとってしっかりやったほうがいいですね。

いろいろ教えれますし、考える時間を取ることができますから。

 

少人数でしたので、彼ら自身にも分かったところを改めて説明してもらうというのがなかなか面白かった。

理解していると思っていても説明してみようとすると案外うまく言えなかったり。

説明しようとすることで、自分の理解も深まりますし良いことばっかりでしたね。

 

まとめ

今回は大学のプログラミング教育について僕が思うことを書かせていただきました。

プログラミングを勉強するというのはなかなか大変なものです。

ですが、プログラミングには多くの可能性がつまっています。

ですが、何か大きなことをしようと思っても、1人ではなかなかうまくいきません。

もっと多くの人がプログラミングを学び、いつか大きなことをやりたいと思った時にみんなでやれる。

その輪がどんどん広がっていったら素敵だなって思いますね。

なにはともあれ、まずは勉強!

独学は大変ですから、できれば身近な人と一緒に学んでいきましょう!