気まぐれエンジニア日記

ひよっこエンジニアの雑記

「プログラミング」を教えない情報系学科の意義に関し, 一学生が考えること

はじめに

筆者も情報系学科の3年生となり, 自らの職業の決定というものが遠い将来というわけでもなくなってきました. 筆者自身は大学院への進学を決めましたが, 情報系学科の大学院進学率は機械系や物理・化学系と比べると低く, 学部4年で卒業・就職を考えている学生も少なくありません. 筆者の周りにも少なからずそんな学生がいます. 就活をする, あるいは就活をしようと考えている彼らから, よくこんなことを耳にします.

  • 大学の成績は就活においてほとんど役に立たない. バイトやインターン等の実務経験の有無ばかりが重視されてしまっている.
  • 就活に向けて開発の経験を積みたいのに, 課題が忙しくてほとんど時間が取れない.
  • 大学で教えることと実務でやることが乖離しすぎている. 大学では理論的なことばかり教えられて, プログラムの実装力を上げる機会が与えられない.
  • 扱うプログラミング言語も実務と講義で全く異なる. あんな言語使わないのに講義でなぜやるのか.

筆者は大学院に進むと決めたために, 就職が目の前に迫っているわけではないとはいえ, 2年後には同じような思いをすることは目に見えています. こうした大学と企業の思惑の差とも言えるものをどう考えるかということは到底他人事にはできません. 筆者は企業側の言い分を詳しく聞いたわけではないので, 企業がどう考えているだろうという想像はしないことにします. そうではなくて, 大学が, 自分たちが教えていることと実務との差に関してどう考えているんだろうか, 学生はそれをどう捉えるべきなんだろうかということを想像してみたいと思います.

大学の言い分

講義や学内の就活説明会, 研究室配属説明会で聞かされる, 大学が目指しているものを少し整理してみましょう. 著者の通う大学では, こんなようなことを教員から聞きました.

  • このご時世, すぐにコードが書けるようになるとか言って即戦力になる人をを育てるような目的で教えているところもありますが, 大学としてはそう言った小手先のテクニックではなくて, 長い目で見て役に立つ力を身につけてほしいと考えています.
  • 与えられた仕様をプログラムにするなんてことは誰だってできる. 今や小学生だってね, コードを書いて立派にものを作ったりしているわけだ. 大学を出た君たちがやることはそこじゃないだろうってことですよ.

こんなことを大学はいう一方, 企業は実務経験の有無を面接で聞いているらしく, そこに大きな差があるようです. そしてその差によるしわ寄せは, 他でもない大学と企業の狭間にいる我々学生にやってくるわけです. これはあんまりではないか, そう考えるのも不思議ではありません. 筆者だってそう思います. もっと大学で実務経験に近いことを教えてくれれば, もっと企業が大学のいう長い目で見て役立つことに目を向けてくれれば, そう思います.

だけれども, 大学の教員は決してバカではない, それどころか博士課程を出て研究を続け, 教員をやっているわけですから, 多くの学生より, 社会人より頭はいいはずです. そうであれば, こうした大学と企業の思惑の差に教員が全く気づいていないと考えるべきではないように思います. それでもなお, このような差を解消しようという方向にならないのか, 実装力の強化に特化したような講義を多く配置しないのか, そこを考えていく必要がありそうです.

4年間で理論から実務まで, それは無理難題

話は少し変わりますが, 情報科学と聞いたとき, どんなものを思い浮かべるでしょうか. ちょっと大学の講義を思い返してみました.
論理回路・電気回路・ハードウェアデバイス, コンピュータアーキテクチャ, コンパイラ, オペレーティングシステム, データベース, 情報理論と符号化, 通信技術, 信号処理, ネットワーク・Web, チューリングマシンと計算量, アルゴリズムとデータ構造, 手続き型パラダイム, オブジェクト指向パラダイム, 関数型パラダイム, ソフトウェア分析設計手法, 最適化・パターン認識
まだあるかもしれません. 忘れていたらその科目の先生ごめんなさい. 今パッと思いつくのはこんなもんです. いや, パッと思いつくだけでこれだけあるんです.

著者は大学に入って初めてプログラミングを経験しました. 大学1年からプログラミングを始めて, たった3年でこれだけのことを勉強してきたわけです. 逆に言えば, 大学はこれだけのことをプログラミングを始めて1, 2年の学生も多くいる中で教えているわけです. 冷静に考えてとんでもないことだと思いませんか. 例えば, 数学なんかは小学校の算数から入って, 少なくとも大学の教養まで(数学科の人はもっとですが), 13年かけて大学レベルまで持っていくわけです. それが情報科学になった途端, たった3, 4年で「大学レベル」と言えなければいけないわけです. 筆者が賛同するかは別としても, 大学が6年一貫教育, すなわち院進を前提としたような話し方をするのも, 無理はないのかもしれません.

学部の間にこれだけのことをやらなければいけない, しかも時間は3, 4年しかない. そうなったとき, 当然ながら全てを端から端まで教えることは不可能で, 何かしらの取捨選択が必要になるであろうことは想像に難くありません. だったら大学は企業の求める実務経験の方を教えてくれればいいじゃないか, なぜそちらの方を捨てて, 理論的な方ばかりやらされるんだ. せめて, 課題を減らすなり実務寄りの課題を出すなりしてくれればいいのに. 次にそんな声が聞こえてきそうです. この点を考えていきましょう.

大学は学生に「期待」している

なぜ大学は, 実務寄りのことはほとんどやらずに, 理論的なことばかりやるのでしょうか. しかも, 「就活に役立たない」課題がたっぷりと出るんでしょうか. そのせいでバイトやインターンにかけられる時間が減るのでしょうか. 「大学は研究機関であり, 職業訓練校ではないから」というド正論も一理ありますが, 大学と企業の思惑に差があることにおそらく気がついていながら, いつまでも意地を張っているというのは, 仮にも頭のいい教員たちの考えることだとは思えません. そこには何らかの意図があるのではないか, 著者はそう考えました. 著者の答えは1つです.
大学は学生に「期待」している
これには, 2つの意味があります.


1つ目. 大学で学ぶことがちゃんとわかってしまえば, いわゆる就活で求められるような実務経験とかいう「簡単」なものは, すぐに手に入れることができるはずだという期待です.

実務経験が「簡単」というと多方面から刺されそうなのでちゃんと言っておきましょう. 先ほど, 課題を減らすなり実務寄りの課題を出すなりしてくれればいいのに. 次にそんな声が聞こえてきそうだと言いました. では, この通りにして差し上げようではありませんか. すると, どんなことが起こるか考えてみましょう. 先も言ったように, 大学で教えられる期間はたった3, 4年しかありませんから, 取捨選択が必要です. 大学で実務経験に近いこともやりましょうとなれば, 自ずと今課題で出されているもの, 講義で扱っていることをやめる必要があります. やめた分はどうなるでしょうか. 簡単です. 学生が自力でやるしかありません. 今, 実務経験はバイトやインターン, あるいは個人的にプロダクトを作るなど大学の外で自力でやっているわけですから, それが一部逆転する. ただそれだけの話です.

さて質問です.

  • 理論的なことを大学で学び, 残った少ない時間で, 大学ではやりきれない自力で実務に近いことをやる
  • 実務経験を大学でも積めるようにし, 残りの時間で理論的なことのうち大学で扱えなくなったことを自力で勉強する

この2つではどちらが易しいか.

筆者は圧倒的に上をとります. そういうことじゃないですかね. 全てのものはトレードオフです. キャッシュのウェイ数を多くすれば, コンフリクトミスは起こりにくいけどマルチプレクサが増えるのでアクセス時間が大きくなるんです. 全部いいところだけなんてできないわけです.
そうであれば, 大学で理論寄りの根本的なことがわかって, それを元に自力で実務経験を積もう, バイトをしよう, インターンを受けてみようというのは, 少なくとも大学で勉強していることを自力でやろうと思うよりは「簡単」だから, 大学では理論的なことを中心に教えようと教員が考えるのは, 実に自然だと思います. 実務が絶対的に簡単だ, 誰でもできるといっているのはではありません. どれも難しいことなのだけれど, 大学やる理論的なことの方がより自力のハードルは高いはずだと考えているのではないでしょうか. 加えて, 大学に来られるような頭を持っている人たちならば, 例えば, 大学でCを勉強すれば, Javaを勉強すれば, バイトで使うPythonは, Rubyは, C#は, TypeScriptは, きっと自分で勉強できるはずだと, 「期待」しているのではないかと考えます.


2つ目. もう二十歳を超えた, あるいは目前にしたいい大人なんだし, それぞれのことにどれだけ時間を割くかというマネジメントは自力でできるはずだという期待です.

これは筆者の苦手なことです. 大学で課題が多いと嘆いている筆者を含める人たちですが, それは多分大学の課題に時間を割きすぎなんだと思います. テキトーにこなそうと思えばいくらでもテキトーにできる. それが大学の課題の持つ性質かと思います. レポートを書けとは言われても, 多くの場合, 字数指定がありません. 簡単に終わらせることもできるし, 大作にすることもできます. 問題を解く課題なら, 他人の答案を丸写ししてはダメですが, 誰かと協力して少しずつ解くことはできます. 全部きっちり自分でやって本当に理解することもできます. 単位をたくさん落としてしまうのは問題ですが, 半分以上90点以上の評価を取らなければ人権を失うとかそんなことはありません. 大学では適度な手抜きが許されていたのだと, 今は思います.
筆者は, レポートは大作を仕上げて, 問題を解く課題も全部自分でやっていたタイプです. その必要はなかったのかもしれません. 大学が求めること, 企業が面接で見ることを適切に見極めて, 何にどれだけ時間を割くか, それをよく考える必要があるのだな, あったのだなと反省しています. 「大学で頑張ったんだから面接で評価してくれよお」と企業にいうのもおかしいし, 「インターン頑張ってるんだから単位くれよお」と大学にいうのもおかしな話です. そのバランスくらい自分で考えられるはずだと大学は期待しているのだと考えます. これは自戒です.

筆者は大学院で何をするべきだろう

こうして考えた結果を一言で言うと, 筆者は残りの時間で大学のことに関して手を抜くことを覚えるのが必要なんではないかと思いました. これは, 卒業論文修士論文が紙ゴミになってもいいとかそう言うことではなく, それだけしか見えていない状況はやめようと考えたのです. インターンも応募しよう, バイトもしよう. 大学が全てなわけではない. それだけで企業は筆者を取ってくれるわけではないのだと少し考え直しました. 一方, 大学もうまくこき使おうと思います. 研究と銘打って欲しいものを作ります. それでいいのではないかと思いました. 少しずつ行動していければいいなと思います. 難しいことですけどね.

そんなわけで, なんで大学は実務に近いことを教えないんだ, 就活を邪魔しているんだ, と思ってしまうのは少し違うのではないかと, そういうお話でした.