情報系学科OB生が教える学習ロードマップとおすすめ本 ~其ノ二~

# 情報系学科OB生が教える学習ロードマップとおすすめ本 ~其ノ二~

## はじめに
前回の記事では「情報系学科OB生が教える学習ロードマップ」として基礎的な学問についての学び順とおすすめ教材をまとめました。まだ見ていない方はこの記事の前に以下の記事に目を通していただけると幸いです。なお、今回の内容だけでも有益なようには書くつもりです。

[情報系学科OB生が教える学習ロードマップ](https://qiita.com/rerere0101/items/2d1a730320cee6502b68)



前回の記事ではコンピュータ通信技術までの学び方を執筆しました。実際に情報系の学生も学んでいる順番通りかと思います。(しょぼい図ですみません^^;)
![学習ロードマップ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134021/370869c3-c88c-281f-4238-6ebd74b717bb.png)

今回はついに応用学問です。コンピュータグラフィックス以降を説明していこうと思います。



## 「コンピュータグラフィックス・コンピュータビジョン」
まず有名なCG/CVについてです。情報系学生であれば一度は学ぶのではないでしょうか？

### コンピュータグラフィックス
プレステ世代でしたので、情報といえばCGという学生も結構いた印象です。学び始めるとわかるのですが、基本的にCGは"物理演算の組み合わせ"ということがわかります。

CGを学びたいのであればとにかく数学からマスターしておくと理解が深まるかと思います。基本的には2DのCGから学ぶのがいいかと思います。特に私が最初に学んだ手法として**レイトレーシング**というものがあります。以下のサイトがわかりやすいです。

- [レイトレーシングとは?](https://knowledge.shade3d.jp/knowledgebase/%E3%83%AC%E3%82%A4%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%B3%E3%82%B0%E3%81%A3%E3%81%A6%E4%BD%95)

レイトレーシングがわかると物理的な演算による物体描写がわかるので、今後のグラフィックスの作成に繋がってくるかと思います。CGについては取り組むソフトが大事です。

- [POV-Ray](http://www.povray.org/)

- [Blender](https://blender3d.biz/)

本についてはCG検定の取得を目標にこれらの教材に取り組むとよいかと思います。

- [コンピュータグラフィックス](https://www.amazon.co.jp/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%82%B0%E3%83%A9%E3%83%95%E3%82%A3%E3%83%83%E3%82%AF%E3%82%B9-%E6%94%B9%E8%A8%82%E6%96%B0%E7%89%88/dp/4903474496/ref=pd_bxgy_img_2/358-9591839-0428648?_encoding=UTF8&pd_rd_i=4903474496&pd_rd_r=9862b5a8-e27c-447d-b98d-1c581f4cfd7c&pd_rd_w=NN9Qz&pd_rd_wg=SXDKv&pf_rd_p=e64b0a81-ca1b-4802-bd2c-a4b65bccc76e&pf_rd_r=PTKP8RJCFDRZFNKQ3G9P&psc=1&refRID=PTKP8RJCFDRZFNKQ3G9P)

![](https://images-na.ssl-images-amazon.com/images/I/51y88JWRCqL._SX346_BO1,204,203,200_.jpg)


- [CGエンジニア検定エキスパート・ベーシック公式問題集[改訂第三版] ](https://www.amazon.co.jp/CG%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E6%A4%9C%E5%AE%9A%E3%82%A8%E3%82%AD%E3%82%B9%E3%83%91%E3%83%BC%E3%83%88%E3%83%BB%E3%83%99%E3%83%BC%E3%82%B7%E3%83%83%E3%82%AF%E5%85%AC%E5%BC%8F%E5%95%8F%E9%A1%8C%E9%9B%86-%E6%94%B9%E8%A8%82%E7%AC%AC%E4%B8%89%E7%89%88-CG%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E6%A4%9C%E5%AE%9A%E5%85%AC%E5%BC%8F%E5%95%8F%E9%A1%8C%E9%9B%86%E7%B7%A8%E9%9B%86%E5%A7%94%E5%93%A1%E4%BC%9A/dp/4903474593/ref=pd_bxgy_img_3/358-9591839-0428648?_encoding=UTF8&pd_rd_i=4903474593&pd_rd_r=66481588-2fd6-46a5-8bd5-67136a1eb46c&pd_rd_w=D6Ny4&pd_rd_wg=XLBpf&pf_rd_p=e64b0a81-ca1b-4802-bd2c-a4b65bccc76e&pf_rd_r=BGDBN2XJMN8KB3PZH354&psc=1&refRID=BGDBN2XJMN8KB3PZH354)


![](https://images-na.ssl-images-amazon.com/images/I/51PJwF0-QfL._SX352_BO1,204,203,200_.jpg)


### コンピュータビジョン
そもそもコンピュータビジョンとは何か？と思われる方もいらっしゃるかと思います。私が習った際に教授が言っていたことで「CGとCVは逆演算である」という言葉を思い出します。

コンピュータグラフィックスとは基本的には3次元情報から一枚絵を作り出す技術なのですが、これによって出来上がった一枚絵から3次元空間の情報量（例えば奥行きや位置関係など）を復元する技術がコンピュータビジョンだと考えています。

最近ではこれに追加してより多くの補完情報を取得する技術も含められているのでしょう。例えば物体検出などがそれに当たると思います。（専門ではないのでこのくらいで。）
申し訳ありませんが実際に使用したおすすめの本がわかりません。ただ、以下の本が研究室の輪講に使われていた記憶があります。

- [コンピュータビジョン](https://www.amazon.co.jp/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%93%E3%82%B8%E3%83%A7%E3%83%B3-David-Forsyth/dp/4320121570)

![](https://images-na.ssl-images-amazon.com/images/I/5184r80-zQL._SX344_BO1,204,203,200_.jpg)


## 「データベース (Database)」
応用の続いてのジャンルはデータベースです。データベースという言葉を聞いたことがあるでしょうか？

名前の通り、データを保存しておくソフトウェア（正確にはミドルウェア）です。ミドルウェアという言葉による理解の妨げはないので、ソフトウェアとして学んでいいと思います。


データベースには色々な種類があるので、Webアプリエンジニアになりたての人たちは混乱すると思います。特にMongoDBなどのデータベースは非常に知名度が高いので、これらのソフトがデータベースの例だと思っている方もいらっしゃるでしょう。

ただ、私はまず学ぶべきは**リレーショナルデータベース(RDB)**であると思います。実際に、情報系の学生も必ずこれから学びます。
リレーショナルデータベース(RDB)とは関係性をあらかじめ記述し、その関係性のデータ集合体のためのデータバングと思ってください。例えばExcelで生徒のデータを管理する時に、各列に項目名(id, 名前, 年齢, 学年など)を設定し、細かい実際のデータを記述すると思いますが、あれを想像してください。

このリレーショナルデータベース(RDB)からデータを取得するための専用言語を**SQL(Structured Query Language)**と呼びます。WebエンジニアでもアプリケーションエンジニアでもSQLを知らないと笑われると思いますのでここは絶対にものにしておきたいところです。


私の時には先生のスライドで学んだのですが、学習書としては以下のものでいいでしょう。また、これらの学習書を学んだ後、PHPなどのプログラミング言語を使い、簡単なWebアプリケーション(DBからのデータ呼び出し/保存/編集/削除操作が必要なもの)を作成してみるといいでしょう。

- [リレーショナルデータベース入門](https://www.amazon.co.jp/%E3%83%AA%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%AB%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E5%85%A5%E9%96%80%E2%80%95%E3%83%87%E3%83%BC%E3%82%BF%E3%83%A2%E3%83%87%E3%83%AB%E3%83%BBSQL%E3%83%BB%E7%AE%A1%E7%90%86%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%83%BBNoSQL-Information-Computing-%E5%A2%97%E6%B0%B8-%E8%89%AF%E6%96%87/dp/4781913903/ref=sr_1_2?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9&qid=1596990533&s=books&sr=1-2)

![](https://images-na.ssl-images-amazon.com/images/I/517YUf4wvnL._SX357_BO1,204,203,200_.jpg)

- [ゼロからはじめるデータベース操作](https://www.amazon.co.jp/SQL-%E7%AC%AC2%E7%89%88-%E3%82%BC%E3%83%AD%E3%81%8B%E3%82%89%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E6%93%8D%E4%BD%9C-%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%AD%A6%E7%BF%92%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E3%83%9F%E3%83%83%E3%82%AF/dp/4798144452/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9&qid=1596990533&s=books&sr=1-1)

![](https://images-na.ssl-images-amazon.com/images/I/51sf73NhVTL._SX395_BO1,204,203,200_.jpg)

ただこの辺はイケてるプログラマの方々はすでに新技術を採用している方も多いと思いますので、すこしその後の技術展望の話をします。
RDBにはその性質ゆえ課題(特にビッグデータを扱う用途で、分散環境を考慮しだすと..)もありました。それらの課題に直面した結果RDB/SQLを脱しようという志のもの開発されているのがNoSQL(Not Only SQL)です。
GAFAなどの会社がこぞって運用していたので、一気に知名度が上がりました。

リレーショナルデータベースのデータ管理方法が悪いのではなく、あくまで起源RDBが保持する性質を踏まえた際の課題であり、これらの性質を緩めることでRDBの形のまま進化させようとしているNewSQLというものも出ているようです。

構造化されたデータを扱うのがRDB/SQLなのに対して、Image/Movie/Audioデータなどの非構造データ保存のユースケースが増加したため、周知を加速させた背景もあるのかもしれません。

賛否両論あると思いますが、私自身はよほどのことがない限り通常のアプリ開発のデータベースの第一候補はリレーショナルデータベースだと思っています。SQLは絶対に学びましょう。



## おわりに
今回は[前回記事](https://qiita.com/rerere0101/items/2d1a730320cee6502b68)の続編として、応用学問について扱ってみました。
次回は応用の分野であるパターン認識やインターフェースを紹介します。


コメントなどお待ちしております。執筆の励みとなりますので、ぜひお願い致します！