プログラミング学習半年の間に読んだ本まとめ

プログラミングを学習し始めて約半年が経ったので、学習の為に今までに読んだ本をまとめます。

最初読んだときは、「この技術、考え方はなんか重要らしい」という感覚でいまいちピンとこないことが多々ありましたが、久しぶりにざっと読み返してみると「お！これは重要や！後でじっくり読み返そう」という気づきがありました。プログラミングを勉強し始めや、少し慣れてきた頃など、複数回読み返すことで理解が深まっていくと感じました。

今回紹介する本は、プログラミング基礎知識、アルゴリズム、Ruby on Rails、データベース、SQL、JavaScriptなどがメインです。全１３冊

[１、これから始めるプログラミング基礎の基礎](https://www.amazon.co.jp/%E6%94%B9%E8%A8%823%E7%89%88-%E3%81%93%E3%82%8C%E3%81%8B%E3%82%89%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E5%9F%BA%E7%A4%8E%E3%81%AE%E5%9F%BA%E7%A4%8E-%E8%B0%B7%E5%B0%BB-%E3%81%8B%E3%81%8A%E3%82%8A/dp/4297101181/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%9F%BA%E7%A4%8E%E3%81%AE%E5%9F%BA%E7%A4%8E&qid=1570244016&sr=8-1)


プログラミング学習を始める前に読みました。これが最初の１冊。
コンピューターの基礎知識から始まり、プログラミングとは何か、何ができるのか、どう動くのかという全体の概要を理解するのに役立ちます。変数や条件式、配列、関数、引数、またオブジェクト指向などプログラミングに関する基礎知識を一通り学べます。今見返しても内容は充実しているなと感じます。細かくて難しい内容は書いていないので、これからプログラミングの学習を始める、始めたばかり、また一旦学習内容を整理したいという方にはオススメ。


[２、爆速！アルゴリズム]
(https://www.amazon.co.jp/%E7%88%86%E9%80%9F-%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0-%E6%AF%8E%E6%97%A5%E3%81%AE%E7%94%9F%E6%B4%BB%E3%81%8C%E3%81%BF%E3%82%8B%E3%81%BF%E3%82%8B%E3%81%86%E3%81%A1%E3%81%AB%E5%A4%89%E3%82%8F%E3%82%8B-%E3%82%A2%E3%83%AA%E3%83%BB%E3%82%A2%E3%83%AB%E3%83%A2%E3%83%83%E3%82%B5%E3%82%A6%E3%82%A3/dp/4492557873/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=%E7%88%86%E9%80%9F%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0&qid=1570244070&sr=8-1)

アルゴリズムを勉強しようと思って手に取ったのがこの１冊。
日常生活を例に、楽しくアルゴリズムが学べる内容。参照テーブル、二分探索、スタック、バックトラック法、マージソート、リンク解析、情報の圧縮、優先度付きキュー、連結リスト、多次元配列とヒープなど様々なアルゴリズムを日常生活に置き換えてストーリー仕立てで易しく書かれています。
「洗濯物の山に埋もれている、全てのソックスの左右をいかに早く正しく揃えるには？」
「毎週、買い物に行く回数をできる限り少なくするには？」
「スーパーで通る通路の数を最小にするには？」
「140文字以内にいかに情報を多く詰め込みツイートできるか？」
などアルゴリズムって言葉はしているけど具体的によく分かっていないからなんとなく知ってみたい（自分もそう）という方にはオススメ。非常に易しく書かれているので学術書を読むよりも読みやすい。


[３、プログラマの数学](https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%81%AE%E6%95%B0%E5%AD%A6%E7%AC%AC2%E7%89%88-%E7%B5%90%E5%9F%8E-%E6%B5%A9/dp/4797395451/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=PWE0KUO3JE5H&keywords=%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%81%AE%E6%95%B0%E5%AD%A6&qid=1570195103&s=books&sprefix=purogurama%2Cstripbooks%2C249&sr=1-1)

タイトル通り数学がメインであり、もともと数学が得意でない自分がプログラマとして数学は重要だろうと手に取ったのがきっかけ。数学が得意な方はスラスラ読めると思いますが、自分は少し苦労しました。間にクイズも出題されています。
０と１のみで表す２進数、プログラムを組む上で基礎となる論理（かつ、または、ではない、〜ならば、等しい）、ド・モルガンの法則（「Aではない」または「Bではない」＝「AかつB」ではないに置き換えられる」など）、剰余（１００日後の曜日を計算するには？）、累乗、数学的帰納法、順列と組み合わせ、指数など。この記事を書くにあたり久しぶりに少し読み返して見たら、案外（失礼ですね）面白かったので、またじっくり読んでみようと思います。


[４、プロになるためのWeb技術入門]
(https://www.amazon.co.jp/%E3%80%8C%E3%83%97%E3%83%AD%E3%81%AB%E3%81%AA%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AEWeb%E6%8A%80%E8%A1%93%E5%85%A5%E9%96%80%E3%80%8D-%E2%80%95%E2%80%95%E3%81%AA%E3%81%9C%E3%80%81%E3%81%82%E3%81%AA%E3%81%9F%E3%81%AFWeb%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%92%E9%96%8B%E7%99%BA%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E3%81%AE%E3%81%8B-%E5%B0%8F%E6%A3%AE-%E8%A3%95%E4%BB%8B/dp/4774142352/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=%E3%81%82%E3%81%AA%E3%81%9F%E3%81%AF%E3%81%AA%E3%81%9CWEB&qid=1570195149&s=books&sr=1-1)

そもそもWebとは？と思い手に取ったのがこの１冊。
Webの歴史から始まり、WebサーバーとWebクライアントの役割、通信に使われるHTTPについて、Webアプリケーションを開発する上での必須の技術、構成要素（データベースなど）など幅広く書かれています。これもWeb開発を学ぶにあたっては一読しておきたい一冊。


[５、基礎Ruby on Rails]
(https://www.amazon.co.jp/%E6%94%B9%E8%A8%824%E7%89%88-Ruby-Rails-IMPRESS-KISO/dp/429500460X/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=1KEFFQ3F7GDQ9&keywords=%E5%9F%BA%E7%A4%8Eruby+on+rails&qid=1570195846&s=books&sprefix=%E5%9F%BA%E7%A4%8ERuby%2Cstripbooks%2C268&sr=1-1)

スクールではRuby on Railsを学んでいたので辞書代わりに一応買った一冊。正直あまり読んでいない。が、Ruby on Railsの概要、一通りの文法、MVCの流れについて書かれているのでRuby on Railsを勉強する方にとっては充実した内容になっている。ただ、難点として（個人的に）値段が安くないのと重い（デカイ）。


[６、オブジェクト指向でなぜつくるのか]
(https://www.amazon.co.jp/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E3%81%A7%E3%81%AA%E3%81%9C%E3%81%A4%E3%81%8F%E3%82%8B%E3%81%AE%E3%81%8B-%E7%AC%AC2%E7%89%88-%E5%B9%B3%E6%BE%A4-%E7%AB%A0/dp/4822284654/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=277Y3B4ZBCSX7&keywords=%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E3%81%A7%E3%81%AA%E3%81%9C%E3%81%A4%E3%81%8F%E3%82%8B%E3%81%AE%E3%81%8B&qid=1570195233&s=books&sprefix=%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%2Cstripbooks%2C271&sr=1-1)

就活の面接時に「うちはRubyじゃないけど、同じオブジェクト思考型の言語だからすぐ慣れるよ」と言われて、そのときは「ほーん」という感じでしたので、とりあえずオブジェクト指向型を更に理解するために手に取った一冊。かなりオススメの一冊。オブジェクト指向といえばいろんなところで「動物がスーパークラスで哺乳類がサブクラス」「人は生年月日という属性を持つ」などの比喩で説明されることが多いですが、概念だけでなく出来るだけ本質的なもの（仕組み）を理解しようというのがこの本の主旨。OOP(オブジェクト指向プログラミング）の基本的な仕組みである「クラス」「ポリモーフィズム」「継承」の解説など。概念的にオブジェクト指向とは〜だけでは理解があやふやになってしまうので、しっかりと「オブジェクト指向の仕組み」について理解するにはオススメの一冊。次に紹介する「プログラムはなぜ動くのか」と同じ「なぜシリーズ」はお気に入りなので何回も読み返しています。勉強しはじめや、少し経験積んだ方にも多分オススメできる一冊。


[７、プログラムはなぜ動くのか]
(https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%AF%E3%81%AA%E3%81%9C%E5%8B%95%E3%81%8F%E3%81%AE%E3%81%8B-%E7%AC%AC%EF%BC%92%E7%89%88-%E7%9F%A5%E3%81%A3%E3%81%A6%E3%81%8A%E3%81%8D%E3%81%9F%E3%81%84%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%AE%E5%9F%BA%E7%A4%8E%E7%9F%A5%E8%AD%98-%E7%9F%A2%E6%B2%A2%E4%B9%85%E9%9B%84/dp/4822283151/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=Z3GS9T36MX0K&keywords=%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%AF%E3%81%AA%E3%81%9C%E5%8B%95%E3%81%8F%E3%81%AE%E3%81%8B&qid=1570195346&s=books&sprefix=%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%AF%E3%81%AA%E3%81%9C%2Cstripbooks%2C254&sr=1-1)

前述の[オブジェクト指向でなぜつくるのか]が分かりやすかったのでついでに読んでみた一冊。基本的なコンピューターサイエンスを学べるので「基本情報技術者試験」に向けて勉強するにあたり予備知識になったかなという感想。おなじみの２進数や、メモリーとは？ということについて学べました。コーディングだけでなくその裏の仕組みについて理解したい人にはオススメ。一度は読んでみても無駄ではないはず。


[８、達人に学ぶDB設計 徹底指南書]
(https://www.amazon.co.jp/達人に学ぶDB設計-徹底指南書-初級者で終わりたくないあなたへ-ミック/dp/4798124702/ref=sr_1_1?__mk_ja_JP=カタカナ&crid=25AY256UAPOOF&keywords=達人に学ぶdb設計+徹底指南書+初級者で終わりたくないあなたへ&qid=1570195398&s=books&sprefix=達人に%2Cstripbooks%2C271&sr=1-1)

Webアプリケーション開発にあたって、データベース設計は重要。ということでネットで調べてオススメ度が高かったこの本を選択。データベース設計に必要な知識、考え方が網羅されているので理解が深まりました。RDBMS、論理設計と物理設計、正規化、ER図、バッドノウハウやグレーノウハウなど。


[９、達人に学ぶSQL 徹底指南書]
(https://www.amazon.co.jp/%E9%81%94%E4%BA%BA%E3%81%AB%E5%AD%A6%E3%81%B6SQL%E5%BE%B9%E5%BA%95%E6%8C%87%E5%8D%97%E6%9B%B8-%E7%AC%AC2%E7%89%88-%E5%88%9D%E7%B4%9A%E8%80%85%E3%81%A7%E7%B5%82%E3%82%8F%E3%82%8A%E3%81%9F%E3%81%8F%E3%81%AA%E3%81%84%E3%81%82%E3%81%AA%E3%81%9F%E3%81%B8-CodeZine-BOOKS/dp/4798157821/ref=sr_1_2?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=25AY256UAPOOF&keywords=%E9%81%94%E4%BA%BA%E3%81%AB%E5%AD%A6%E3%81%B6db%E8%A8%AD%E8%A8%88+%E5%BE%B9%E5%BA%95%E6%8C%87%E5%8D%97%E6%9B%B8+%E5%88%9D%E7%B4%9A%E8%80%85%E3%81%A7%E7%B5%82%E3%82%8F%E3%82%8A%E3%81%9F%E3%81%8F%E3%81%AA%E3%81%84%E3%81%82%E3%81%AA%E3%81%9F%E3%81%B8&qid=1570195398&s=books&sprefix=%E9%81%94%E4%BA%BA%E3%81%AB%2Cstripbooks%2C271&sr=1-2)

データベースとSQLをセットで学習しようと思い、じゃあデータベースと同じ「達人シリーズ」でいいかと思い選択。正直ミスった。というのもこれは多分中級者向け。ある程度SQLを知っている方にはオススメできる内容となっています。CASE分や分析関数など。SQL知っている人向けに更にうまく書くコツなどを伝授するような一冊。一度は読んでみて価値のある一冊ですが、SQLについて基本的なことを知りたいという初学者の方（自分も）には、次に紹介する２冊がオススメ。


[１０、スッキリわかるSQL入門]
(https://www.amazon.co.jp/%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%E3%82%8F%E3%81%8B%E3%82%8BSQL%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E3%83%89%E3%83%AA%E3%83%AB222%E5%95%8F%E4%BB%98%E3%81%8D-%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E4%B8%AD%E5%B1%B1%E6%B8%85%E5%96%AC/dp/4295005096/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=3LWSJPXF1LF7K&keywords=%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%E3%82%8F%E3%81%8B%E3%82%8Bsql%E5%85%A5%E9%96%80&qid=1570195586&s=books&sprefix=%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%2Cstripbooks%2C459&sr=1-1)

SQL初学者にオススメの一冊。SQLにとりあえず必要な知識はこの一冊読めばでOK。最後に問題集もついており、システムのインストールは不要でオンラインで練習ができる。


[１１、SQL ゼロから始めるデータベース操作]
(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_2?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=SQL&qid=1570195655&s=books&sr=1-2)

同じく初学者にオススメ。


[１２、ノンプログラマのためのJavaScriptはじめの一歩]
(https://www.amazon.co.jp/%E3%83%8E%E3%83%B3%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AEJavaScript%E3%81%AF%E3%81%98%E3%82%81%E3%81%AE%E4%B8%80%E6%AD%A9-WEB-DB-PRESS-plus/dp/4774153761/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=3QPURAZRFK34R&keywords=%E3%83%8E%E3%83%B3%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AEjavascript%E3%81%AF%E3%81%98%E3%82%81%E3%81%AE%E4%B8%80%E6%AD%A9&qid=1570195748&s=books&sprefix=%E3%83%8E%E3%83%B3%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%2Cstripbooks%2C267&sr=1-1)

JavaScript初学者にオススメの一冊。内容的にはJavaScript７割、Jquery２割、HTML・CSS１割。JavaScriptの基本的な文法。動かすまでの流れなど基礎を学習できる。

[１３、リーダブルコード]
(https://www.amazon.co.jp/%E3%83%AA%E3%83%BC%E3%83%80%E3%83%96%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%89-%E2%80%95%E3%82%88%E3%82%8A%E8%89%AF%E3%81%84%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E6%9B%B8%E3%81%8F%E3%81%9F%E3%82%81%E3%81%AE%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%A7%E5%AE%9F%E8%B7%B5%E7%9A%84%E3%81%AA%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF-Theory-practice-Boswell/dp/4873115655/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=%E3%83%AA%E3%83%BC%E3%83%80%E3%83%96%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%89&qid=1570195956&s=books&sr=1-1)

プログラマは1人１冊持っていると言われるほど有名な１冊。
就活の面接で「何をどう勉強したらいいですか」みたいな質問をしたら「とりあえずリーダブルコード読んでおけ！」と言われたので、その日のうちに購入した一冊。いやいやコーディングの上手い、下手とは？？」「同じ機能を実装するんなら誰がコード書いても似たり寄ったりだろ」と思っていた無知プログラマーの自分には目から鱗の一冊。詳しくは、別記事にまとめていますので興味のある方はぜひ読んでやってください。
[Qiita記事：リーダブルコード　要約](#https://qiita.com/kota_sho/items/c285205fe6007d6eafee)