読み始める前に
はじめまして。しがない情報系大学生です。
この記事の目的・対象読者は次の通りです。
この記事の目的
私は現在までに3年ほど情報系の学部で学び、卒論を除く卒業単位を全て取得しました。
その中でいろいろと思うところがありましたので、
- 大学でどんなことを学ぶか
をご存じない方のために説明した後で、
- わざわざ大学でプログラミングを学ぶ意味はあるか
について、個人的な見解をお伝えできればと思います。
この記事の対象読者
- これからプログラミングや情報学を学ぼうと志している方
- 大学への進学を視野に入れている方
- 現在、大学で情報学を学んでいる方
大学での3年間+α
大学のカリキュラムの解説です。
うちの大学(国立)を基準で説明するので、お堅い大学はだいたい似たようなカリキュラムだと思います。
知ってるわい!という方は適宜読み飛ばしてください。
筆者が在籍している大学・学部の概要
- 4年制国立大学
- 工学系
- 理系にもざっくりとした区別があります。
- 「工学系」は応用寄り
- 「理学系」は理論寄り
- 理系
- 大学によっては社会系で情報系のコースを設けています。
- 情報系
- 同期の人数 : 100人ほど
大学生がたどるおおまかな流れ
大学および大学院の流れをおさらいします。
-
学士(Bachelor) : 4年間
- いわゆる「学部生」と呼ばれる期間です。
- 各学部の専門だけでなく、語学や教養なども多く学びます。
- 何年目かにさらに専攻分けが行われる大学もあります。
- 途中から研究室に配属になります。配属の時期は大学によります。
- 4年次には卒業研究を行います。
-
修士(Master) : 2年間
- ここから大学院になります。
- 「博士課程前期課程」とも呼ばれます。
-
博士(Doctor) : 3年間
- 「博士課程後期課程」とも呼ばれます。
私の大学では、
- 専攻分けは無い
- 研究室配属は4年生
となっています。
理系大学生の進路として最も多いのが、修士ルートです。
学士4年間 --(大学院試[学部4年生])--> 修士2年間 --(就活[修士1年~2年の頭])--> 就職
次に多いのが、学部卒ルートです。
学士4年間 --(就活[学部2年~4年])--> 就職
それぞれの就活の中には、長期休暇(場合によっては授業を切って)のインターンに行く人が多いですし、授業のカリキュラムも柔軟に対応していく方向の大学が多いようです。
失踪も割といる。
大学で学ぶこと(専門科目)
専門科目は、学部で専攻している内容、つまり、情報系の学部だと、情報学やプログラミングの授業に当たります。
しかし、初期の授業は様々な学部で共通することが多いため、「専門基礎科目」と「専門科目」のように分かれることが多いです。
専門基礎科目
高校で学習する数学・物理の延長です。
数学は、「微積分」「線形代数」がメインになります。
物理では、「力学」「電磁気学」を扱うことが多いです。
ほとんどの学生が、「これプログラミングと関係なくね?」とやる気をなくします。そして、単位をすれすれで落として、記憶の彼方に葬り去ります。
この4つの中で、情報系の特性ゆえに重要になってくるのが、線形代数です。
線形代数は、ざっくり説明すると「大量の数値を効率的に扱う数学」でして、まさにコンピュータの領域になってきます。
専門科目
大学のカリキュラムによって内容は異なるため、あくまで一例を示します。分類はすっごく適当なのでご容赦を。
大学院試を外部受験する人もいるため、範囲を一致させる目的で、一応、最低限学ぶ内容は共通しているはずです。
また、座学以外にも演習や実験を少しは行います。
1. 数学系
- 確率・統計
- 位相数学
- 数値計算
- 微分方程式 (シミュレーションを扱うなら必須)
2. プログラム系
- プログラミングの基礎の基礎
- アルゴリズム
- ソフトウェア設計
- 並列計算
- 数理計画
3. アーキテクチャ系
- デジタル・アナログ回路
- コンピュータの仕組み
- ネットワーク・セキュリティ
4. その他専門
- シミュレーション
- 制御工学
- 信号解析
- 人工知能の基礎
わざわざ大学でプログラミングを学ぶ意味はあるか
正直なところ、大学で将来を担う優秀なプログラマに育てられている気がするか??と言われると、「び、微妙、かなぁ...」という感想です。
奥歯にものが挟まったような評価になる理由は、
- 学ぶ内容は、外れてはいないが、古いと感じる
- 学生のニーズ(内容、教え方)と、カリキュラムがうまく一致していない
からです。一つずつ見ていきます。
1. 学ぶ内容は、外れてはいないが、古いと感じる
うちの大学で学んだプログラミング言語は、C言語とJavaとMatlabでした。Pythonなども少し扱いましたが、メインで扱ったのはこの3つだけですし、Matlabは制御系以外ではあまり使われません。
通信プロトコルやコンピュータアーキテクチャなどは、現在ほとんど使われていない方式も多数教えられます。
「ふざけんな!役に立たないもの教えるな!!」と思うかもしれませんが、実はこれ、そんなに悪いことばかりではないのです。
そもそも、コンピュータやプログラミングの分野の変遷が激しすぎるのであって、ほとんどの学問は数年単位で大きく変化することは、そうそうありません。
そして、コンピュータを支える基礎技術 (数学、電気など)も、その「ほとんどの学問」に入っています。
大学の授業の役目は、「基礎技術をしっかり教えて土台を固めること」までなので、なんらおかしくはないわけです。
ただし、基礎技術として考えても古い内容が教えられることもありますが、これは純粋な教員の怠慢です。
(外れてはいない、としたのは、内容は外れてはいないけど足りてもいないという意味です。個人的には、もうちょっと授業の難易度を上げて網羅性を高めてほしかったのです...。ただし、これは学生がどこまでついてこれるかという話になるので、ここで大学のいわゆる「偏差値」というやつが効いてくるのです。)
2. 学生のニーズ(内容、教え方)と、カリキュラムがうまく一致していない
学生 : 「じゃあ、新しい内容は誰が教えてくれるの?」
教員 : 「**ええぇ、ちょっとは自分で勉強しようか...。**それか、質問されたら答えるから、せめて聞きに来なよ。」
これが1つ目の大きなズレです。
Qiita民の皆様はよくお分かりかと思いますが、特にプログラミングは、人によってレベルも求める技術も違いますから、自分で勉強しようという意志がないことにはどうしようもないのです。
昨今の受験ビジネスなどで、高校生までは教えられる体制がカッチリ定まってしまっていますから、受け身の姿勢が抜けきらない学生は非常に多いです。
あとは、大学は遊ぶところ、という世間のよくないイメージでしょうか...。
そして、2点目ですが、授業の内容が学生の想像と食い違う場合が多いです。
カリキュラムをしっかり調べないのが悪いのですが、それ以外にも問題はいくつかあります。
まず、情報系の大学に行けば、「授業でプログラムをいっぱい書いて」「人工知能(AI)やビッグデータの勉強がいっぱいできる」と思っている人が割といます。
また、「ゲームの作り方」が知りたくて大学に来る人が冗談抜きでたくさんいます。
何がおかしいのか、訂正してみるとこんな感じです。
-
学生 :「授業でプログラムをいっぱい書くぞ!」-> 教員 :「プログラムは自分で勝手に書いて。課題は出してるよね。授業はもっと別に勉強することあるんだ。」
-
学生「人工知能(AI)やビッグデータの授業は...」-> 教員「学部生にそんな難しい内容は理解できないから、諦めて今は基礎やろうね。」
-
学生「ゲームの作り方...」-> 教員「ごめんね、さすがに知らないかなぁ...」
人工知能やビッグデータの簡単なデモは、Pythonで手軽にできるようになってきているので、もう何年かすれば授業で扱うことになるかも...??
まとめ
結論、「大学でプログラミングを学ぶことは、大学で教わる内容を教わりたいなら、大いに意味がある」です。
大学での学びは、独学ほどの意識の高さを持たずとも、単位を頑張って取りに行けばそれなりの力が身につく環境、というのも利点です。カンニングする人は知りません。
別に教わりたくないし、すぐにプログラミングしたい!という方は、今すぐオンライン教材を開いて勉強を始めましょう。大学受験の勉強をするより、よっぽど充実すると思います。
最後に小言。
- 大学でプログラミングを学ぶと、「大学でプログラミングを学んだ学歴」がつきます。いいことなのかは置いておいて、聞いた話では割と役に立ってしまうのが現状です。
- AIブームで情報系の学部の倍率が上がっています。そのため、数学が得意でPC知識が本当にゼロの学生が増えています。これもいいのか悪いのか...。
- 学部の授業を受けた後、研究室配属や修士ではより「実践的に学ぶ」ことになりますが、正直、「研究室(教員、先輩、同期、後輩)によって全然違う」という特大の地雷があるので、これの良し悪しは評価不能の模様です。
長々とお読みいただき、ありがとうございました。
うちの大学は全然違うよ!とかあればぜひぜひ教えてください。