大学 情報学科OBが教える学習ロードマップとおすすめ本
はじめに
今後は高校などでも学習過程に情報(プログラミング)が追加されていくようですね。この情報技術、近年注目されているにもかかわらず、何についてどのくらい知っておけばいいか、わかりづらいです。
今回は、私が実際に受けていた授業をもとに、どのような授業が有益だったか、どのような順番で学べばよいのか、について注目し、なんとなくロードマップを作っていきたいと思います。
また実際に情報学科OBの私が使った本を紹介していきます。実際に使った本しか載せませんので、変な本は絶対に紹介しません!
#情報学問の全体像について
全体像について雑な一枚絵を作ってみたので、とりあえずこれを見てください。
所説あると思いますが、振り返ると情報学(情報工学)の学習というのはこの木のようになっていると思います。下のものほど基礎的な学問になっています。
プログラミングというのはアルゴリズムを実現するための言語と考えているので、ここには入れていません。ただ、プログラミングが学習の手助けになるのは間違いありません。
土台「基礎の数学/基礎の情報工学/アルゴリズム」
基礎の数学力
数学力は何に使うの?と思うかもしれませんが、基礎的な数学力がないとそもそもこの後に登場する各学習内容を理解できません。ただ、ここでいう基礎の数学は高校範囲の数学に追加で大学範囲の**「応用確率」、「微分積分」、「代数学」**程度でよいと思っているのが実感です。
基礎の情報工学
「どのような学問に手をだそうとしているかの心構え」程度でいいです。コンピュータを一度も触ったことがない人は難しいので...。Windows、画面、キーボード、マウス、Web技術など普段触れている技術が何となくわかればいいです。あとデジタルデータについてはわかっておくと後が早いです。
デジタルデータとは「0か1の集合で表されるデータ」のことです。数字もデジタルデータといえるし、画像などもデジタルデータといえます。
じゃあ2以上の数はどうするの!と思うかもしれませんが、そこは2進数を使います。2進数とは0と1のみを使って数を表す仕組みです。0or1の1文字につき1bitというデータ量があります。これが情報の単位になります。
この基礎の情報工学(or 情報理論)に出てくる大事な要素に符号化、誤り訂正、エントロピーなどの内容があります。これらは、0-1の二進数で表現されたデータについての基本的な知識となります。必須ではないのですが、情報の学生はみんな一度は学ぶ物ですので、ぜひ学んでおくと良いかと思います。
アルゴリズム
実際にはここからが情報の学習と言えるでしょう。今回の目標はアルゴリズム学習ではないので、簡単に紹介します。
アルゴリズム、これを簡単にいうと「Input⇒Output までの手順」のことです。
何か命題があった時に、アルゴリズムというフィルター/ルールを通して言葉を翻訳しなおす作業を行うのが情報学問の基礎的発想です。
例えば
「0以上の2つの正の数を計算し、10以上の場合には合格、10未満の場合には不合格と判定する」
という課題があったとします。これをコンピュータで実現するため、アルゴリズムを踏まえた言葉に直すと以下のようになります。
「入力の値2つがともに0以上ならば、以下の処理に進む。加法演算子で和を計算する。その計算結果が10以上の場合にはTrue、10以下の場合にはFalseを返す」
比較、演算、比較という処理のつながりに置き換えています。これに加えてループという処理もあります。
何か命題があったときにコンピュータはどうやって処理していくのか、これを机上で分かっていると後の学習で効いてきます。計算の順番や、ループの作り方はプログラミングでそのまま活きてきます。アルゴリズムはあなどれません!!!
また計算速度の表し方として計算量オーダーというものも知っておくことが大事です。
これ以上の内容は以下の名著に譲るとします。有名な本で、多少アルゴリズム記述言語が独特な上、とても分厚いですが読んで損はありません。
計算機の基礎「コンピュータサイエンス」
情報を学問として学ぶ上で一番の基礎となり、また一番の難所となるのがこのコンピュータサイエンスです。これも所説あると思いますが、ここではPCのメモリやCPUなどの計算機を指すハードウェア、およびWindowsやMacOSなどを指す**OS(オペレーティングシステム)**を学んでください。
ハードウェア
おすすめの本から紹介してしまいます。とってもわかりやすく書いてある本が以下(俗にいうパタヘネ本)です。基礎を学んでいく上で、他の本に浮気せずにじっくりと読み込むことをおすすめします。
まず最初に、ハードウェアはめっちゃ難しいです。内容もとっても理系的です。ただやっていることはとてもシンプルです。
ハードウェアの役割は単純です。0-1の二進数で数が表現できるのは前述しましたが、これら2進数表現された一定の列(機械語)を受け取り、加法など単純な計算を行うのがCPUの大きな役割です。また、これらの計算した値を一時的なデータ格納容器である記録媒体(メモリ)に書き出す役割も担います。
与えられた単純計算を電気信号を用いて高速に繰り返し行う。これがハードウェアの役割なのです。
これ以上は前述の本を読んでほしいです。コンピュータはどのようなことをしているのか、なぜインテルはすごいのか...その基本がわかると思います。ハードウェアを学ぶなかでハードウェア的な並列処理も出てくると思いますが、これがいかに難しい技術なのかわかれば、あなたの理解が進んでいる証拠です。
オペレーティングシステム
続いて、ハードウェアと一緒に読んでほしい・学ぶべきなのがオペレーティングシステムの本です。
俗にいう恐竜本で、非常に高価なのですが、持っておいて損はないかと思います。
絶版(?)なのでぜひ早期に購入していただきたいです。広く浅くですが、基本的な内容は網羅しているかと思います。
ではなぜOSをハードと一緒に学ぶのか?
ハードウェアは、基本的には簡単な演算しかできません。対して我々は、前述した「アルゴリズム」のような非常に複雑なロジックを計算しようとします。
その間を取り持つのがOSの役割なのです。ハードウェアはたかだか数bitの処理を高速で行う機械です。アルゴリズムを直接実装する場所ではありません。アルゴリズムはハードウェアに対して単純計算に置き換えられて渡されないといけないのです。
このソフトウェアとハードウェアの間をオペレートする優秀な存在がいないとハードウェアへの責任、負担が重くなります。その存在こそOSなのです。こうして考えるといかにOSが偉大かが直感的に理解しやすいかと思います。
他にも様々な役割がありますが、それは上記の本で学んでいただきたいです。
コンピューター通信技術
コンピュータサイエンスの分野を学べば基本的なパソコンの動作はわかっていくると思います。続いてはコンピュータの醍醐味の一つである通信技術について学ぶのが良いかと思います。
通信と言っても幅広いのですが、個人的には学んできたものを振り返ってみると、大きく分けて3トピックかと思います。**「ネットワーク」, 「有線通信」, 「無線通信」**です。ただ有線通信は光ファイバーなどの具体的な技術が入っており、学びたい人向けの独立した領域なので今回は省略します。
無線通信もネットワークを学ぶなかで出てくる内容をもれなく学べば問題はないでしょう。初学者が学びやすい、おすすめの本がないので今は割愛します。
ネットワーク
ネットワークを学ぶ際、まず教科書で出てくる単語といえばOSI参照モデルになるでしょう。コンピュータがどのように他のコンピュータと通信しているのかの規約(ルール)を学ぶことになります。
この参照モデルを特に現用のインターネットに合わせて理解していく過程で、インターネットプロトコル(IP), Ethernetなどの通信規約を学ぶことになります。また、この通信規約通り動く機器としてルーター、スイッチングハブを合わせて学んでいくことになります。
実は、インターネットプロトコルなどの通信規約は、OSの一部であるカーネル(Kernel)にソフトウェア的に実装されているものです。あくまで通信規約はソフトウェアなんだという認識が大事です。
これらを学ぶのは以下の本がいいでしょう。まずは三分間シリーズを全て読破して概要を掴み、「ネットワークはなぜつながるのか」で全体を連結するのが良いと思います。
おわりに
とりあえず、情報学の基礎となる分野は以上となります。これらを学ぶ過程で気になったキーワードがあれば、それについて本屋さんなどで技術書を探してみると広がりが出るかと思います。また、一般的に「情報理論」と呼ばれるようなエントロピーや符号化、誤り訂正などの話はなかなかおすすめの本がないのが実情です。
本記事の内容は学問としての”情報”の基礎編ですが、実社会で皆様が目にするITシステムを構成するためのさまざまな応用分野が存在しますので、続編記事のリンクも掲載します。
続編記事:
基礎学習について第二弾(データベース技術やコンピュータビジョン技術など)
実際に社会人からエンジニアを始めた人へ
執筆の励みになりますので、感想やほかのおすすめの本などコメントをしていただきたいと思います!