プログラミング初心者の学生が2年間で読んだ本の中でオススメを紹介する


目次

01. はじめに
02. ネットワーク
03. データベース
04. セキュリティ
05. linux
06. web
07. 機械学習
08. 低レイヤ
09. uiux
10. リファクタリング
11. aws
12. その他
13. さいごに

1. はじめに

プログラミングってなに?ってレベルの学生が2年間で読んだ技術書の中でオススメの書籍を分野別に紹介します。また、これから読もうと思っている書籍や現在読み進めている書籍など、気になっているものを一通り上げています。プログラミング言語やフレームワークなどの特定の言語を追求するような書籍は紹介していません。

2. ネットワーク

マスタリングTCP/IP 入門編(第6版)

ネットワークの入門書と言えばこれ!と言われるくらいには有名な本。ネットワークが苦手だった私がそこそこできるようになったのもこれのおかげ。

ネットワークってなに?IPアドレスってなに?レベルの人が読破するのは少々骨が折れるが、持っておいて損はない。ネットワークを少し勉強しているけどよくわからないなあってレベルの人が読むとスラスラ読めて非常に勉強になる。応用情報もこれ1冊で十分。名著。

ネットワークはなぜつながるのか 第2版 知っておきたいTCP/IP、LAN、光ファイバの基礎知識

ネットワークの中ではそこそこ有名な本。ネットワークがどのようにして繋がるのか非常に丁寧に教えてくれる。マスタリングTCP/IPと並び、初心者にお勧めしたい一冊。
ちなみに、この「なぜ」シリーズは何冊か出ているのだが、どれも勉強になる本ばかり。

パケットキャプチャの教科書

マスタリングTCP/IP 入門編を読んだ後で、パケットの中身についてより詳しく知りたい場合に読むとちょうどいい。Wiresharkの基本的な使い方とパケットの中身について詳しく説明されている。抽象的な概念だけではなく、実際のパケットをWiresharkを介して目で見ることで、確かな知識へと昇華させてくれる本。ネットワークスペシャリストの参考書としても有用。

シスコ技術者認定教科書 CCNA 完全合格テキスト&問題集[対応試験]200-301

CCNAという資格対策本ではあるのだが、読み物としても非常におもしろく分かりやすい。私自身、ネットワークについて深く勉強している際に、実際のネットワーク機器を一切触ることなくひたすら座学で勉強していたので、概念としては理解できていても分かりずらいなと思う場面が多々あった。そんな時にこの書籍でCiscoの機器を触りながらネットワークを構築したことでより理解が深まったように思う。

尚、実機が必要なので以下の型落ち製品辺りを中古で数台買うと良い。1台3000円程で購入し不要になったら売ればいいのでコスパも悪くない。

ルータ Cisco 1812J、Cisco 892J、Cisco 891FJ
L2SW Cisco Catalyst 2960、Cisco Catalyst 2960G、Cisco Catalyst 2960S

実機に慣れてきたらCisco Packet TracerやGNS3等のエミュレータを使うと便利。実機は見たことあるし触ったこともあるっていう人はいきなりエミュレータから入っても全然オーケー。

参考サイト
https://birumen.site/cisco-ccna/
http://jukenki.com/contents/cisco/ccna-lab-scenario/lab0-Device-Select.html

インフラ/ネットワークエンジニアのためのネットワーク技術&設計入門 第2版

「パケットキャプチャの教科書」と同じ作者の書籍。物理層の光ファイバーから始まり、物理設計、論理設計、セキュリティ・負荷分散設計、高可用性設計、管理設計と、ネットワークを構築する上で必要な事柄を丁寧に教えてくれる。実務に役立つ部分も多く、どちらかと言えば中級者向けの書籍であると感じた。これを読破できればネットワークやインフラについてかなり詳しくなれるのではないだろうか。(私はまだ途中......)

3. データベース

達人に学ぶSQL徹底指南書 第2版 初級者で終わりたくないあなたへ

基本的なSQL文は書けるようになったけどその先が分からないという初学者にオススメ。

達人に学ぶDB設計 徹底指南書 初級者で終わりたくないあなたへ

SQLやデータベースの基礎はなんとなく理解できたけど、具体的にどのような感じでデータベースを構築すればいいのか分からない、という人に初学者にオススメ。個人的にデータベース関連の本で一番感動した本。これを読んだ後にアウトプットとしてなにかしらデータベース設計を行うことで(最初が一番難しい)中級者へとステップアップできるように思う。応用情報の参考書としても有用。

SQLアンチパターン

ある程度データベースにこなれてきた中級者向けの書籍。

4. セキュリティ

ハッキング・ラボのつくりかた 仮想環境におけるハッカー体験学習

私がセキュリティに興味を持つきっかけとなった本。非常に丁寧に解説してあるので前提知識がなくとも頑張れば読破は可能であるだろうが、最低限、ネットワークとLinux、仮想化の基礎知識を持っている状態で読むことをお勧めする。

内容としては、VirtualBoxの中にkali linux(ペネトレーションテスト用のLinuxディストリビューション)を入れ、Windows機やMetasploitable、無線LAN等のハッキングを行う。広く浅くという感じではあるのだが、セキュリティの重要さをこれほど単純明快に教えてくれる書籍は他にないのではないだろうか(Windows Defenderは大切!)

また、この本の執筆からそれなりに時間が経過したことでkali linuxの設定等が書籍の内容とかなり変わっている。ネットで調べて進めることもできるのだが、めんどくさいので私は以下の同人誌を購入した。

その他、仕様が変わり、書籍通りに実行してもエラーで進まない場面がそれなりにあったので自己解決能力が必要。作者のQ&Aサイトを見たり、ツイッター等で質問をすると親切に教えてくれる優しい人(著者含む)がいるので有効活用しよう。

暗号技術入門 第3版

基本情報・応用情報レベルのセキュリティ知識があればスラスラと読める上、読み物として非常に面白い。暗号と聞くと数学や数式のイメージがあり、難しそうと感じてしまうことがあると思うのだが、この本は高校数学程度を理解していれば苦労することなく読み進められる(というかほとんど数式は出てこない)

内容としては古典暗号から現代の暗号、認証周りのお話など広く浅くといった感じ。応用情報や情報処理確保安全士の資格対策本としても有用ではないだろうか。

ちなみに以下の本もオススメ。軽くしか読んでないのだが、上記の本をもう少し詳しく説明したような感じだった。より深く学びたい人はこちらも検討してみると良いだろう。(ちなみに、以下の本はハッキングラボの著者と同じ)

体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 脆弱性が生まれる原理と対策の実践

Webエンジニアなら是非とも読んでおきたい一冊。通称「徳丸本」として有名。WebにまつわるセキュリティのあれこれをPHPを通じて学習していく流れ。ローカルプロキシツールの使い方も丁寧に書かれているので非常に勉強になる。

はじめて学ぶバイナリ解析 不正なコードからコンピュータを守るサイバーセキュリティ技術

低レイヤにあまり詳しくないという人でも気軽に読める一冊。内容としてはバッファオーバーフロー攻撃がメインでgdb-pedaの使い方やアセンブリの基本的な読み方、メモリの仕組みについて丁寧に解説してくれている。低レイヤは難しそう、でもバイナリ解析に興味があるといった初学者の方にオススメ

リバースエンジニアリングツールGhidra実践ガイド ~セキュリティコンテスト入門からマルウェア解析まで~

リバースエンジニアリングに関する書籍は新しいものが少なく、現在の環境で実行できるものが少ない。そんな中、NSA(アメリカ国家安全保障局)が2019年にOSSとして公開したリバースエンジニアリングツール「Ghidra」を題材にした本書が2020年に発売された。

かなりぶ厚く、一見、中級者向けかと思われるが一応入門者向け。最低限、バイナリやアセンブリ、C言語に関する基礎知識があれば読み進められる。IDAの経験があれば尚良し。私はIDAを使用した経験がなく、いきなり本書を読み進めているが今のところ問題ない(まだ途中......)

不安な人は「はじめて学ぶバイナリ解析」等でバイナリやアセンブリに慣れておくことをお勧めする。

詳解セキュリティコンテスト

7月発売予定のセキュコンを題材とした書籍。

前作(以下)の「セキュリティコンテストチャレンジブック -CTFで学ぼう! 情報を守るための戦い方」が微妙な出来だった(具体的に言うと初学者向けなのか中級者向けなのかターゲットが分からない。初心者向けに詳しすぎるほど説明する個所もあれば難しいところをさらっと流す箇所も多かった)ので今回は期待している。

5. linux

新しいLinuxの教科書

Linuxの入門書としてオススメ。本書の手順としてはVirtualBox内にCentOSを入れて、そこでLinuxコマンドを試していくというような流れ。既にVirtualBoxを使用したことがあったりWSLを使用しているというような人は自分の環境で好きにやればいいと思う。Linuxってなに?全然分からないというような人は本書の通りに進めることを推奨する。

本書を終える頃には一通りコマンドが使えるようになっていることだろう。

Linux教科書 LPICレベル1 Version5.0対応

Linuxの二冊目としてオススメ。資格対策本ではあるのだが、Linuxの基礎が分かりやすくまとまっている。特に「新しいLinuxの教科書」ではおざなりになっていたアーキテクチャの部分やGUIに関する部分など、幅広くまとめられている。

上記二冊を読むことでLinuxについての基礎知識は一通り付いているはず(ちなみにLPIC1試験はオプション暗記ゲー)

6. web

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

Webエンジニアなら読んでおきたい書籍。後半部分はちょっと古いなと感じるような部分もあるのだが、全体を通してWebの歴史や仕組み、APIなどに関して分かりやすくまとめられている。

7. 機械学習

深層学習教科書 ディープラーニング G検定(ジェネラリスト)公式テキスト 第2版

私が読んだのは初版なのだが、AIや人工知能に関して広く浅く簡潔にまとめられている。これを読んだから機械学習やディープラーニングが実装できるというような書籍ではないのだが、エンジニアなら一般教養として知っておくべき知識がまとめられている。最近、機械学習やディープラーニングって言葉をよく聞くけど何もわからんって人にオススメ。

人工知能は人間を超えるか ディープラーニングの先にあるもの

G検公式テキストとほぼ同じような内容。こちらは完全に読み物となっている。好みもあるだろうが、第2版が発売されたばかりのG検の方がより新しい情報が書かれているためオススメはしない。

Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎

G検テキストで機械学習についてなんとなく分かったという人が一歩踏み出すのに最適。フレームワークscikit-learnを利用して機械学習の流れを学ぶ。Pythonの基礎知識と機械学習の基礎知識があればなんとか読み進めていけるはず。後半はちょっときつかったかも…

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

言わずと知れた通称「ゼロつく」。ディープラーニングの入門書と言えばこれ。ライブラリに頼らず一から実装することで本質的な理解を促す。

8. 低レイヤ

[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識

コンピュータサイエンスの入門書としてオススメ。C言語で実験をしながらもカーネルやメモリ、スケジューラ、ファイルシステム、ストレージデバイスと基礎を幅広く学べる。ソースコードを読み解かなくても十分に勉強になる。普段高レイヤばかり触っていて低レイヤはちょっと苦手...というような人に読んでもらいたい一冊。

コンピュータシステムの理論と実装 ―モダンなコンピュータの作り方

NANDという電子素子からスタートし、論理ゲート、加算器、CPUを設計。オペレーティングシステム、コンパイラ、バーチャルマシンなどを実装しコンピュータを完成させて、最後にその上でアプリケーション(テトリスなど)を動作させる。

これぞコンピュータサイエンスというような内容。普段高レイヤを触っていることが多い私にはきつかった...。流れとしては各章で座学として基礎を学び、ヒントを通じて課題へと取り組むような感じ。課題の答えは本書の中には書かれていないので、GitHubなどにコードを上げてくれている先人に倣うと良い。全体で100時間はかかるだろうなという内容で、私は途中で挫折してしまった。しかし途中まででも十分に勉強になり、コンピュータの理解への足掛かりとなった。

手を動かしながら本書を終えた時、真の意味でコンピュータを理解したと言えるのかもしれない。

本書を読んだのは1年前なので時間があればもう一度トライしたい。できれば本書を読む前に「Linuxのしくみ」や後述する「CPUの創り方」等を読んでからのほうが挫折する可能性が少ないように思われる。

CPUの創りかた

表紙から漂う、懐かしさを覚えるような0年代感。2003年に発売されてから長く愛読されてきた名著。別途、電子部品が必要ではあるのだが、実際に作らなくても読むだけでも十分に価値はある。「コンピュータシステムの理論と実装」と併せて読むことでより理解が深まる。

ゼロからのOS自作入門

[OSを手づくりするワクワクを体験!]

「30日でできる! OS自作入門」の後継とも言える本書。

時間がなくて読めていないのだが、是非とも読んでみたい一冊である。

9. uiux

ノンデザイナーズ・デザインブック [第4版]

言語化しにくいデザインの基礎を非常に分かりやすく教えてくれる。エンジニアに限らず全ての人に、是非とも一読してもらいたい書籍である。読了後は物を見る目が変わると言っても過言じゃないほど、勉強になった本だった。

10. リファクタリング

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック

言わずと知れた名著。プログラミング初心者から上級者まで、コードを書く人全員に読んで貰いたい書籍。ただ個人的には前評判で期待しすぎたせいか、そこまで本書で感動することはできなかった。当たり前のことが中心に書いてあるのだが、特に独学で勉強している人ほど気づかない点が多いのではないだろうか。プログラミングの義務教育みたいなもん。

11. aws

AWS認定資格試験テキスト AWS認定 クラウドプラクティショナー

AWSってなに?ってレベルの人が手っ取り早く概要を掴むための本。これを読んだからと言ってAWSが使えるようになるというわけではない。実践的な技術を求めるならばソリューションアーキテクトのなど、別の本を勧める。

12. その他

令和03年【春期】【秋期】 応用情報技術者 合格教本 (情報処理技術者試験)

応用情報の勉強の際に利用したのだが、今でも辞書的な扱いで見ると、時々新しい発見がある。幅広い分野を網羅している本として1冊くらい持っていても良いのではないかと思う。

オブジェクト指向でなぜつくるのか 第3版 知っておきたいOOP、設計、アジャイル開発の基礎知識

オブジェクト指向周りのことだけでなく、プログラミングの歴史まで含めて様々なことが書かれている。またメモリについても書かれているので、静的領域・ヒープ領域・スタック領域に馴染みがない方には是非とも読んで貰いたい。そこまで難しい内容でもないので、初学者から中級者向け。

問題解決力を鍛える!アルゴリズムとデータ構造

昨年に発売されて話題になった書籍。Atcoder対策の本として蟻本があるが、少し難しいと感じる人や、単純にアルゴリズムを勉強したい方にもオススメ。入門書として非常に分かりやすい。

いまさら聞けない ビットコインとブロックチェーン

ブロックチェーンってなに?ってレベルの人が概要を知るための本。若干古いが、読み物として普通に面白い。エンジニアの一般教養としてブロックチェーン技術を学びたい人にオススメ。

改訂2版 わかばちゃんと学ぶ Git使い方入門〈GitHub、SourceTree、コマンド操作対応〉

私が読んだのは初版だが、git関連の書籍で一番有名な気がする。漫画形式でゆるく進んでいくのでサラっとgitを勉強したい人にオススメ。本書だけでも十分にGitを使いこなせるようになる。より深い知識やアーキテクチャについて知りたい人は別の本を推奨する。

イラストでわかるDockerとKubernetes

DockerやKubernetesなどのコンテナ技術について、カラーイラストを多用しながら丁寧に解説している。なんとなくでDockerを使っている人や、コマンドは使えるがイマイチ分からないというような人にオススメ。コマンドを極力排除して、コンテナ技術の解説に徹している。

ただこのページ数(130ページ余り)でこの値段は少々高いような気もする。

13. さいごに

今まで読んだ本や気になっている本をこうしてまとめていると、あれもこれも書きたいって感じで思ったよりたくさん書いてしまいました。基本的に基本情報レベルの知識があれば、紹介した分野の本を上から順番に読んでいくと良い感じで学習できるかと思います。是非参考にしていただければ幸いです。