情報系学部の大学4年間の学びを使った参考書と共に紹介する

## はじめに

この記事はQiita エンジニアフェスタ 2021「今まで買ってよかった技術書を紹介しよう！」の参加記事です。

https://qiita.com/official-events/d409f91fc8b9b44cefb4

このフェスタに参加しつつ、Qiitaに貢献できることを考えた結果、情報系大学生が何を学んでいるかを紹介することを考えつきました。

現時点、Qiitaに大学の参考書の記事はありません。これをきっかけに、様々な情報系学部の参考書が共有されたら、エンジニアにとって役に立つのではと思います。

実力社会と言われるエンジニア業界です
が、全くの初心者が学んだ軌跡なので、全くプログラミングを触ったことのない人にも参考になると思います。

## この記事の構成

カテゴリに分けて紹介していきます。

おすすめの本には★をつけています。


## プログラミング

### [プログラミング言語C 第2版 ANSI規格準拠](www.amazon.co.jp/dp/4320026926)

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1623593/f5329e8c-863d-7f42-91b7-875e6f1fa1f6.png" width="200px">

教科：C言語
履修時期：1年前期

- **言わずと知れたC言語のバイブル**
- **正直難しい**。大学入ったばかりの初学者が読むものではない
- ただ頑張って読んでみると**サンプルコードなどが充実**しており、教授のスライドの補足として役に立った。

今思えば大学一年生には非常に難しい一冊でした。人によっては[苦しんで覚えるC言語](https://9cguide.appspot.com/)を参考にしていました

入ったばかりの大学生になんの言語を学ばせるかは、議論が分かれるところのようです。

https://qiita.com/wholekeik/items/4b8ee0825f0b12778a3a

ちなみに私はC言語で良かったと思います。ポインタの概念が理解でき、プログラミング言語の設計などに活かせるようになりました。

### ★[独習C++ 第4版](www.amazon.co.jp/dp/B018I2GJD8)

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1623593/309b26cb-c796-c364-a22e-3d02dd7e75a0.png" width="200px">

教科：C++
履修時期：1年後期

- C言語を学び、**オブジェクト指向を理解する**位置付け
- **C言語を理解した人**なら、非常にわかりやすい一冊だと思う
- 内容も大半がクラスやその継承、オーバーロードなど**オブジェクト指向の入門**

C言語を学んだのちに、オブジェクト指向を学ぶ一環としてC++が選ばれたように思います。
ここで脱落した友達が多く、そのうち数人は留年していきました。

### ★[Java本格入門 ～モダンスタイルによる基礎からオブジェクト指向・実用ライブラリまで](www.amazon.co.jp/dp/B071D8RYR5)

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1623593/31c90708-add5-afeb-9db8-6f630a95505f.png" width="200px">

教科：JAVA
履修時期：2年前期

- C、C++を理解した後に、**ライブラリやAPIなど実践的な内容**を学ぶ位置付け
- **C++と共通する内容**はつまらなかった覚え
- この本にはないが、NHKの番組表APIを取得する内容が役に立った

言語を学ぶというよりかは、APIやJavaDoc、変数名の付け方など、実戦で役に立つ内容が含まれています。
JSONやCSVを扱うライブラリで、[NHKの番組表API](https://api-portal.nhk.or.jp/)を使用しました。
もしこの本を使う方がいたら、ぜひ取得してコンソールに表示させてみてください。

### [オブジェクト指向における再利用のためのデザインパターン（改訂版）](www.amazon.co.jp/dp/4797311126)

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1623593/54bcc075-f2e5-be7f-dbad-099e65c331b5.png" width="200px">

教科：中級プログラミング
履修時期：2年後期

- **GoF本**として有名。**プログラミングの書き方のテンプレ**が書かれている
- **買っていない。**なぜなら5000円を越すほど高いから。（研究室で読みました）
- 23種のデザインパターンは正直現場で使用するのかわからない

教授の解説がなければ理解できないであろう一冊。オブジェクト指向を理解した上で、さらに理解を深めるきっかけにはなります。しかし、デザインパターンを実際に利用しようとは思えない。

ライブラリを作る人などは必須と教授が言っていた。現代はライブラリが豊富なため、これを使う人は少ないのでは。

**【補足】GoFのデザインパターンとは**

- よくある課題に対して汎用的に使用できるプログラミングの設計のこと
- オブジェクト指向を応用した設計手法が23個あげられている

### 【番外編】[入門 Python 3](www.amazon.co.jp/dp/4873117380)

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1623593/17185aec-3877-b76f-26f0-52d765c924e6.png" width="200px">

教科：-
履修時期：2年と3年の間

- 独学で学ぼうとした時の一冊
- 研究で必要→何でもいいやろ、俺天才やし→めちゃむずいやん！！ってなった一冊
- **「完全に理解した」状態になっていた私を目覚まさせた**

大学3年でプログラミングを完全に理解したと天狗になっていたが、教科書一冊を理解できたのは教授のおかげだと知らしめさせられた。
2年では挫折しているため内容は覚えていません。

## 理論、設計

### ★[アルゴリズムの基礎](www.amazon.co.jp/dp/4320028473)

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1623593/5fb376d1-a3ba-87ee-83c8-d1dfeb16e765.png" width="200px">

教科：アルゴリズムとデータ構造
履修時期：1年前期

- **ソートアルゴリズム**と**探索アルゴリズム**を題材に、アルゴリズムの基礎を学べる
- **オーダ記法**など研究でしか使わないと思ってたら普通に使うんですね
- ただ、ソースコードは一切なく、**数式と擬似言語表現のみ**のため、抵抗がある

**アルゴリズムとは？**から始まる講義でした。
内容は今となっては遅れて理解できますが、プログラムのソースコードを用いた参考書の方が理解しやすかったと考えています。

### [アルゴリズムの設計と解析 I&II (サイエンスライブラリ情報電算機 35)](www.amazon.co.jp/dp/4781902790)

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1623593/dcd0db3b-06b2-aad8-8c59-6a0f366d6e56.png" width="200px">

教科：アルゴリズム応用
履修時期：2年前期

- ここにきて**絶版本**。**1977年出版**
- **ALGOLが使われている**ものの、擬似言語表現として読めば理解できる
- 再帰法や木など、アルゴリズムの設計が学べる
- もっと簡単な本があるのでは？

アルゴリズムを学ぶなら、あえてこの本を選ぶ必要はないと感じます。
教授の板書が全てこの本の丸写しだったため、買ってノートを端折りました。

### [離散数学―コンピュータサイエンスの基礎数学 (マグロウヒル大学演習)](www.amazon.co.jp/dp/4274130053)

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1623593/86add9f5-006e-1950-bc0f-75edf3a990f0.png" width="200px">

教科：命題論理
履修時期：1年前期

- **集合の表し方**から、**離散数学における関数**の理論を学ぶ一冊
- ガチガチの数学授業と思いきや、**その後のコーディングに役立つ**
- **回路を組む**ときににも必須の知識が詰まっていた

レジュメがなければ理解できなかっただろうと思います。
数式が苦手な人（私も含め）が独学するにはお勧めできないですが、必須の知識だと思います。

## Web知識

### ★[情報ネットワーク (放送大学教材)](www.amazon.co.jp/dp/4595315066)

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1623593/792c8dfb-d93a-bb7d-c41a-d83c5f2d6864.png" width="200px">

教科：ネットワーク基礎
履修時期：1年前期

- 放送大学の教科書ともあり、**理解しやすい**
- IPアドレスやサブネットマスクなど、**基礎中の基礎が書かれている**
- **基本情報技術者試験**の合格に役立ったと思う

他大学の教科書ですが、十分に独学でも理解できると思います。
放送大学で受けると11,000円かかるそうですが、**テキストのみ+補足をネットで調べる**で十分理解できると思います。

### ★[基本からわかる 情報通信ネットワーク講義ノート](www.amazon.co.jp/dp/427421835X)

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1623593/943ec977-611d-61a1-58c5-a0f9a0282532.png" width="200px">

教科：ネットワーク、セキュリティ
履修時期：1年後期、2年前期

- **ネットワークの基礎的知識**があれば、充実した内容
- 確かに基本からなのだが、その基本が**ある程度の知識がないと理解できない**
- 図解入り、2色刷り、問題付きと、これまでの教科書に比べてとっつきやすい

そもそも**独学でも学べるように作られている**ため、わかりやすく理解も深くなるという良書。
教授の講義がなくても、**基本情報〜応用情報技術者の学び始めレベル**が理解できる。

## 番外？一般教養だけれどもITに役に立ったもの

### [経営学の基本テキスト](https://www.sankeisha.com/book-search/detail/20180315140514)

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1623593/64b32800-b985-e5db-54a0-0581b6f5c803.png" width="200px">

教科：マネジメント
履修時期：2年後期

- Amazonに売っていないので、**これ以外でもいいと思います**
- 経営というか、**社会の仕組み**について理解できる一冊
- **基本情報技術者試験**の範囲に被る

基本情報技術者試験に出てきたため、紹介しました。
エンジニアを目指すものとして学ぶべき内容だと感じます。

### [コア講義 線形代数](www.amazon.co.jp/dp/4785315687)

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1623593/7758008b-028a-0ec6-b3d2-733eb629c5e1.png" width="200px">

教科：線形数学
履修時期：1年前期、1年後期

- **行列、ベクトル**、情報を学ぶ上で必須の知識
- ただ、この教科書が**一番わかりやすいとは言えない**

よくある数学の教科書ですが、学んだ内容はエンジニアに必須であると感じました。
基礎レベルではあるものの、Qiitaにも**最新の機械学習の論文**を紹介する記事があります。
それを理解するのに役立つと思われます。

## 終わりに

12冊を紹介しましたが、教員の解説があるかないかによっておすすめできる本が変わります。

Qiitaに必要とされている技術書と、いわゆる教科書はそう言った根本的な違いがあるのかもしれません。