専修大学ネット情報学部では例年入学してくる学生にはどのようなプログラミングの授業をおこなっているのでしょうか?
授業の中では、基本的なC言語とJava言語を教えています。そこまでやったら自分が興味あるプログラミング言語や、流行りのプログラミング言語を使ってみることに関しても奨励しています。
学部3年生ぐらいになると、プログラムを書くということに関して自学ができるようになっています。ただ、その中でも自学ができるのは正直2割が精一杯かなと思います。250人程いますので、50人位ですね。学部3年生になると、彼らに関しては、私には一切質問なしで自分たちでネットや本で調べて行っています。
プログラムに関して自学できる学生数を増やすことは可能なのでしょうか?可能だとしたらどのような授業内容の改革が必要だと松永先生はお考えでしょうか?
学習方法を変えることによって変わると思っています。 今から50年程前のプログラミングの授業は、いきなり文法書が配られて「これであなたはプログラムが書けます。」と言われ先生は退席していました。私が学生の頃のプログラミングの授業では、文法を覚え、アルゴリズムを覚えればプログラムは書けるという全体の下で授業が行われていました。
プログラムというのは文章のライティングと同じで、文法と単語を知っていてもいい文章が書けるものではありません。アルゴリズムを知っていてもプログラムが書けるものではなく、結局はプログラミング固有の技術の習得が必要だと思います。
プログラムは、一見動いているようですが、きちんと動くかどうか怪しく、動いているけど裏側は正しく動いていないというものが多いです。正常に動くプログラムを実現するために、どういう保証をしなければならないか、というプログラムのテスト技術などは、習得すべきプログラム固有の技術の一つだと思います。
書いたプログラムは必ずテストをしなくてはいけません。現状の学校のプログラミングの授業では専門的なテストの方法を教えていませんが、もっとテストやデバッグに関して授業のなかで教えていくことが必要だと考えています。
現在専修大学ネット情報学部の授業でもプログラミングの授業に関して改善していこうとしていまして、いわゆる伝統的な文法を教えるだけではダメだと感じており、90分の授業の中では運用や書き方を教える必要があると考えています。
プログラムを書くうえで特に学生に意識してほしいことはありますか?
最初から構造的に破綻しているプログラムは直しようがなく、書きなおした方がいいと思います。間違いに気が付いた時に数行で直せるならいいですが、あちこちパッチをあてていくような形で、場当たり的なプログラムを直していくというやり方は止めた方がいいと思います。
また場当たり的なソースコードの修正を避けるために、できるだけプログラム相互の依存関係をなくなさなければならないと思います。
プログラミングに向いている人と向いてない人はどうやってわかるものでしょうか?
同じ目的を実現するのに、極端にプログラムの量が長くなってしまう人はあまりプログラミングすることに向いているとは言いがたいと思います。特に工夫をこらすのではなく、とにかく時間をかけてコードを書くことで目的を達成するようなプログラムを書こうとしてしまうような方にこの傾向が強いように思います。
またプログラムに限った話ではありませんが、説明がピンポイントで要点を押させられているかが大事ですね。 これができる方は優秀なエンジニアの素養があるように思います。
ただし、口頭での説明が下手でも、文章を書かせると非常にうまく、プログラミング自体も非常に得意というような方もいらっしゃいます。そういう方に関しては、文章構造を気にする傾向にあるので、授業の中で提出してくるレポートも非常にわかりやすいですね。
松永先生の研究室に所属されている学生様はどのような取り組みをされているのでしょうか?
学部3年生であれば、10人ほど在籍していまして、フロントエンドな技術を使いたい学生が多いです。過去には、Androidアプリを作ったり、Unityでゲームを作っている学生さんがいました。今年は、GoogleEarthを使ったアプリケーションを作っている学生がいます。
学部4年生には、セキュリティ関係のプログラミングコンテストにも参加している学生もいます。
アプリケーションを形にするというプログラミングとプログラミングコンテストにおけるプログラミングはどのような共通点、差異がありますか?
私の研究室の学生が参加しているのは、アルゴリズム系のプログラミングコンテストです。そのため、限られた時間の中で、適切なアルゴリズムが選択し、正しく動くプログラムを書かなくてはいけません。そのためには、頭の中で様々な判断が求められます。
間違ったプログラムを書いたときには、その修正コストが高い。そのため、コンテストでは、限られた時間の中で、プログラムがデバッグしやすいように書かれているという点も勝敗を分けます。
先生が特に注目されているプログラミングコンテストはありますか?
日本だとオンラインでAtCoder、海外だとtopcoderやcodeforcesなどのコンテストに注目しています。ぜひエンジニア就活をご覧になられている学生さんで興味のある方は挑戦されてみるとよいかと思います。
松永先生インタビューの機会を頂き、ありがとうございました。