読んで良かった基礎知識の入門書
Published: 2018-01-05 07:35:15

---
title: 読んで良かった基礎知識の入門書
published: true
description: 
tags: 
---

[とあるエンジニアの技術勉強法 (インターン学生向け)](http://www.slideshare.net/iwashi86/ss-58640407) というスライドを先日 [@iwashi86](https://twitter.com/iwashi86) が書かれていました。
インターン学生向けとありますが、新人プログラマ向けとしても素晴らしい資料だと思います。

ここでは「即、役立つわけではないが後から効いてくる」という「基礎知識」に絞って教材を紹介します。
目の前の仕事のために必要なことと並行して基礎知識を学ぶのは、長期的には良いと思います。
なお「基礎」==「簡単」というわけではなく、無理せず自分のペースで付き合うのがおすすめです。

自分で読んで、かつ、とても良いと思ったもののみを紹介するので、全分野をカバーしてはいません。
基礎にどのような分野があるかは[新卒準備カレンダー2011](http://kuenishi.hatenadiary.jp/entry/20110321/1300642829)や[情報科学科カリキュラム](http://www.is.s.u-tokyo.ac.jp/student/lecture.html)が参考になります。

以下はどれも有名な本なので、ググれば感想なども見つかるでしょう。
気になった本、読もうと思う本については、ググるのも良いかもしれません。


## アルゴリズムとデータ構造


#### [アルゴリズムイントロダクション](http://www.amazon.co.jp/dp/4764904063/)

これを一通り読めば基本的なことがわからないということは無くなるだろう世界標準の教科書。
どんな問題をどんな方法で解決できるのか、またどの解法が優れた方法なのか。(優れたとはどういうことか)
パターンを勉強することで、今後出会う問題が「未知の問題」ではなく「既知の問題」になるかもしれません。
その問題が解けるのか解決不能なのか、どう解けるのかを知っていると、そうでないのとは大違いです。
またコーディングの「腕立て伏せ」としても良い題材になります。
ただし分量が多いため、最初の一冊として読むと読み切るのがやや難しいかもしれません。
そこで最初の一冊の定番となるべくして書かれたのが次の...

#### [アルゴリズムの基本](http://www.amazon.co.jp/dp/482228543X)

これです。
300ページ弱の本で、前半160ページで定番のソート、グラフをコンパクトに丁寧に取り上げています。
前半を終えればアルゴリズムへの親しみは十分で、入門したと言えると思います。
そのまま最後まで読むもよし、アルゴリズムイントロダクションに進むもよしです。
この本の弱点は、データ構造にはほとんど触れていないことです。
アルゴリズムを勉強して良かった、という感想があるなら、データ構造も勉強すると良いでしょう。
アルゴリズムイントロダクションではデータ構造も十分に紹介されています。

#### [計算理論の基礎](http://www.amazon.co.jp/dp/4320122070)

3巻に分かれていて、まずは第1巻(オートマトンと言語) だけ読むことを目標にすると楽です。
文字列の操作という一般的な処理が、オートマトンというモデルを用いて実装できると実感できます。
特に正規表現を実装できると知るのは興味深いと思います。
コンパイラの前提知識にもなっています。

#### [暗号技術入門 第3版 秘密の国のアリス](http://www.amazon.co.jp/dp/4797382228)

定番。
暗号は実務のあらゆるところに登場するので、プログラマの必修科目だと思います。
一例としては、webサイトを https でアクセスするときの動作を理解するためにも必要です。
どのような攻撃を想定し、どうすれば防げるかを考え学ぶことは、慎重に検討する姿勢を身につけるためにも有用かもしれません。

## 計算機システム

#### [コンピュータの構成と設計](http://www.amazon.co.jp/dp/4822298426/)

各ハードウェアがどのように協調動作してプログラムを実行するのかを理解できる世界標準の教科書。
性能とは何か、どう計算できるのか、改善するためにどのような工夫がなされているのか。
OS、コンパイラ、VM、並列プログラミング、など多くのテーマの下地になります。


#### [はじめて読む486](http://www.amazon.co.jp/dp/4756102131)

CPU の仕組みが具体的に書かれています。
このへんはオペレーティングシステムと密な関係があります。
OS の概要を先に勉強すると、その処理の実装という観点を持って読みやすいかもしれません。

#### [CPUの創りかた](http://www.amazon.co.jp/dp/4839909865/)

(物理的に)なぜ計算機が動作するのか。
シンプルな計算機を自作することでこれを理解するための本。
その方面の仕事でなければ業務に役立つ可能性は低いと思いますが、「やっぱりそこから理解したいよね」と思う人は多いのでは。


## オペレーティングシステム

#### [オペレーティングシステムの仕組み](http://www.amazon.co.jp/dp/4254127057)

各論は細部まで深追いせず、分量が多くならないようにされています。
また逆に、浅すぎて事実の羅列になったりせず、仕組みを理解できるくらいには具体的に書かれています。
そのバランスによって、全体の仕組みをコンパクトに学べるのが良いところだと思います。


## システムプログラミング

#### [ふつうのLinuxプログラミング 第2版](https://www.amazon.co.jp/dp/4797386479)

こうすれば Linuxコマンドは作れるとわかる本。
過程で Linux に慣れていくこともあり、初心者にとっての実用性も高いです。

#### [GNU開発ツール](http://www.oversea-pub.com/store/gnu_development_tools)

hello world を実装して実行する間に何が行われているかを1冊かけて理解する本。
1つのコマンドの裏で動いているコマンドや、使われるファイルの実態がどこにあるかなども解説されます。
使われるLinuxコマンドもすべて解説されるので、初心者にも優しいです。
なお現在は入手方法は公式サイトからPDF版を購入するのみなのでそちらからどうぞ。

## その他プログラミング

#### [プログラミングの基礎](http://www.amazon.co.jp/dp/4781911609)

これのみ「読んで良かった」ではなく「読ませて良かった」本です。
新人プログラマへの一冊という観点では最有力候補なので、含めることにしました。
プログラミングの入門書として素晴らしいと聞き、また自分も目を通して良さを感じました。
実際に新人プログラマに取り組んでもらったところ「良かった」と言っていました。
[[OCaml]書評「プログラミングの基礎」](http://d.hatena.ne.jp/kazu-yamamoto/20130318/1363581164)もご参考に。

#### [プログラミングHaskell](http://www.amazon.co.jp/dp/4274067815)

関数プログラミング言語 Haskell のベスト入門書です。
当時、自分の師匠に「プログラミングをよくできるようになるために何をすればいいか？」と聞いたら「関数プログラミングを勉強すること。Haskellでいい」と言われて読みました。
この本は洗練されていて、ポイントを本当にコンパクトに読めます。
第7章までの 70ページで関数プログラミングのエッセンスが学べるので、そこまで読むのがおすすめです。
なお Haskell を実戦で使いたい人は別途[すごいHaskellたのしく学ぼう!](http://www.amazon.co.jp/dp/4274068854)も読むべきでしょう。

#### [プログラミングErlang](http://www.amazon.co.jp/dp/4274067149)

「並行プログラミング」と言うとハイレベルに聞こえるかもしれません。
ですがこれを読むと、並行プログラミングを親しみやすいと感じるのではないかと思います。
Erlang の並行プログラミングのための強い機能群が、理解を助けてくれるでしょう。
その機能群は他の言語に輸入されてもいるため、その意味でも有意義だと思います。
関数プログラミングをあらかじめ理解しているとスムーズなので、先に上記「プログラミングHaskell」を読むと効率的かもしれません。
なお Erlang を実戦で使いたい人は別途 [すごいErlangゆかいに学ぼう!](http://www.amazon.co.jp/dp/4274069125/) も読むべきでしょう。