新卒ソフトウェアエンジニアのための技術書100冊

こんにちは、技術部 高井です。

春といえば、フレッシュマンの季節ですね。このブログを読む方の中には、明日からエンジニアとして新社会人になるという方もいらっしゃるのではないでしょうか。クックパッドでも新しい仲間を迎えるための準備をしていたところで、その準備の一環として「新卒ソフトウェアエンジニアのための技術書100冊」というものを作成しました。

この100冊は、職業ソフトウェアエンジニアとしてキャリアを積むにあたって、読むべき技術書に悩んだら、まずはこのリストから選ぶとよいのではないでしょうかという提案です。

リストに多少の趣味や主張がはいっているのは、まあご愛嬌ということでお許しいただければとおもいますが、職業プログラマとして知っておくべき知識を網羅できるように心がけました。古典と呼ばれる名著についてはできるだけ取りいれ、独習が難しい難解なコンピュータサイエンスの教科書は避けています。これは必読書だろうというものでも、絶版や版元品切れなどで入手が難しいケースであれば、リストから外してあります。その他、(本当は臆せずに読んで欲しいのですが)洋書は避けました。

また、リストには便利のためにジャンルと難易度を付してあります。★なしは、ソフトウェアエンジニアを目指さない方でも読んで理解できる本、★ひとつは入門者向けの本で、★が増えるにつれて難度が増していきます。

この100冊は、読みごたえのある本ばかりです。ですから、経験によっては読んでもまったく理解できないという場合もあるでしょう。新しい知識を身に付けようというのですから、分からないこと、知らないことが書いてあるのが当たり前です。

私が尊敬するソフトウェアエンジニアの先輩のうちの一人である、ただただしさんも「改訂新版 コンピュータの名著・古典100冊」という本に寄せた文章で、技術書を読んで「さっぱりわからなかった」経験について触れています。そして、そういった本は、経験を積むにつれて「一読しても理解できなかった本は、しばらく時間をおいてから読み返すと、その価値が何倍にもなって返ってくる」とも書いています。

ソフトウェアエンジニアの仕事は難しく、色々なことを知らなければならない場面も多くあります。ぜひこの100冊のリストが、あなたのキャリアにとって役に立ちますように!

新卒ソフトウェアエンジニアのための技術書100冊

ジャンル難易度タイトル
AndroidJava言語プログラミングレッスン第3版
Android★★Android Layout Cookbook アプリの価値を高める開発テクニック
Android★★Android Security
Android★★Effective Java 第2版
iOSミクシィ公認 スマホアプリ開発実践ガイド
iOS★★iOSアプリ テスト自動化入門
iOS★★iOS開発におけるパターンによるオートマティズム
JavaScriptJavaScript本格入門 ——モダンスタイルによる基礎からAjax・jQueryまで
JavaScript★★JavaScriptパターン ——優れたアプリケーションのための作法
RubyたのしいRuby 第4版
RubyRuby 1 はじめてのプログラミング
RubyRuby 2 さまざまなデータとアルゴリズム
RubyRuby 3 オブジェクト指向とはじめての設計
Ruby★★Rails3レシピブック 190の技
Ruby★★The RSpec Book
Ruby★★初めてのRuby
Ruby★★Ruby on Rails 4 アプリケーションプログラミング
Ruby★★★Rubyのしくみ ——Ruby Under a Microscope
UNIX入門UNIXシェルプログラミング
UNIX★★ふつうのLinuxプログラミング
UNIX★★プロのための Linuxシステム構築・運用​技術
WebWebを支える技術 ——HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)
WebスラスラわかるHTML&CSSのきほん
Web★★ハイパフォーマンスブラウザネットワーキング
Web★★ハイパフォーマンスWebサイト
Web★★実践 Web Standards Design ——Web標準の基本とCSSレイアウト&Tips~
アルゴリズム★★★アルゴリズムクイックリファレンス
アルゴリズム ディジタル作法 ——カーニハン先生の「情報」教室
アルゴリズム CODE ——コードから見たコンピュータのからくり
エッセイ ウェブ進化論 ——本当の大変化はこれから始まる
エッセイ伽藍とバザール
エッセイ理科系の作文技術
エッセイ ハッカーと画家
オブジェクト指向オブジェクト指向のこころ
オブジェクト指向★★増補改訂版Java言語で学ぶデザインパターン入門
オブジェクト指向★★★オブジェクト指向入門 第2版 原則・コンセプト
オブジェクト指向★★★オブジェクト指向入門 第2版 方法論・実践
サービス開発ユーザビリティエンジニアリング 第2版
サービス開発★★Running Lean ——実践リーンスタートアップ
サービス開発★★Lean Analytics ——スタートアップのためのデータ解析と活用法
サービス開発 リーンスタートアップ
セキュリティ暗号解読
セキュリティ★★新版暗号技術入門
セキュリティ★★体系的に学ぶ安全なWebアプリケーションの作り方 ——脆弱性が生まれる原理と対策の実践
セキュリティ★★Hacking: 美しき策謀 第2版 ——脆弱性攻撃の理論と実際
ソフトウェア開発UNIXという考え方
ソフトウェア開発リファクタリング・ウェットウェア
ソフトウェア開発ピープルウェア
ソフトウェア開発コーディングを支える技術
ソフトウェア開発達人プログラマー
ソフトウェア開発★★スーパーエンジニアへの道
ソフトウェア開発★★継続的デリバリー
ソフトウェア開発★★★組織パターン
データベースSQL ゼロからはじめるデータベース操作
データベース楽々ERDレッスン
データベース★★★ハイパフォーマンスMySQL
データベース★★★プログラマのためのSQL 第4版
デザイン情報デザインの教室
デザイン誰のためのデザイン
デザイン★★インタフェースデザインの心理学
デザイン★★マイクロインタラクション
デザイン ノンデザイナーズ・デザインブック
テスト知識ゼロから学ぶソフトウェアテスト 【改訂版】
テスト★★ソフトウェアテスト技法ドリル
テスト★★★テストから見えてくる ——グーグルのソフトウェア開発
テスト★★★ソフトウェア・テストの技法
テスト★★★実践アジャイルテスト
ネットワークネットワークはなぜつながるのか 第2版
ネットワーク★★インフラ/ネットワークエンジニアのためのネットワーク技術&設計入門
ネットワーク★★マスタリングTCP/IP 入門編
バージョン管理入門Git
バージョン管理GitHub実践入門
プログラミングリーダブルコード
プログラミング★★実践テスト駆動開発 ——テストに導かれてオブジェクト指向ソフトウェアを育てる
プログラミング★★プログラミング言語C
プログラミング★★珠玉のプログラミング
プログラミング★★詳説 正規表現
プログラミング★★★クリーンコード
プログラミング★★★コードコンプリート
プロジェクトアジャイルサムライ
プロジェクト★★熊とワルツを ——リスクを愉しむプロジェクト管理
プロジェクト★★デスマーチ 第2版 ——ソフトウエア開発プロジェクトはなぜ混乱するのか
プロジェクト★★アート・オブ・アジャイルデベロップメント
プロジェクト★★アジャイルな見積りと計画づくり ——価値あるソフトウェアを育てる概念と技法
プロジェクト★★人月の神話
関数プログラミングプログラミングの基礎
関数プログラミング★★関数プログラミング入門
機械学習★★集合知プログラミング
機械学習★★入門 機械学習
数学いかにして問題をとくか
数学論理学
数学★★プログラミングのための確率統計
数学★★プログラマの数学
設計★★UML モデリングのエッセンス 第3版
設計★★ユースケース駆動開発実践ガイド
設計★★リファクタリング
設計★★間違いだらけのソフトウェア・アーキテクチャ ——非機能要件の開発と評価
設計★★★エンタープライズ アプリケーションアーキテクチャパターン
設計★★★エリック・エヴァンスのドメイン駆動設計
設計★★★レガシーコード改善ガイド
/* */ @import "/css/theme/report/report.css"; /* */ /* */ body{ background-image: url('http://cdn-ak.f.st-hatena.com/images/fotolife/c/cookpadtech/20140527/20140527163350.png'); background-repeat: repeat-x; background-color:transparent; background-attachment: scroll; background-position: left top;} /* */ body{ border-top: 3px solid orange; color: #3c3c3c; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ Pro W3', 'Hiragino Kaku Gothic Pro', Meiryo, Osaka, 'MS Pゴシック', sans-serif; line-height: 1.8; font-size: 16px; } a { text-decoration: underline; color: #693e1c; } a:hover { color: #80400e; text-decoration: underline; } .entry-title a{ color: rgb(176, 108, 28); cursor: auto; display: inline; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ Pro W3', 'Hiragino Kaku Gothic Pro', Meiryo, Osaka, 'MS Pゴシック', sans-serif; font-size: 30px; font-weight: bold; height: auto; line-height: 40.5px; text-decoration: underline solid rgb(176, 108, 28); width: auto; line-height: 1.35; } .date a { color: #9b8b6c; font-size: 14px; text-decoration: none; font-weight: normal; } .urllist-title-link { font-size: 14px; } /* Recent Entries */ .recent-entries a{ color: #693e1c; } .recent-entries a:visited { color: #4d2200; text-decoration: none; } .hatena-module-recent-entries li { padding-bottom: 8px; border-bottom-width: 0px; } /*Widget*/ .hatena-module-body li { list-style-type: circle; } .hatena-module-body a{ text-decoration: none; } .hatena-module-body a:hover{ text-decoration: underline; } /* Widget name */ .hatena-module-title, .hatena-module-title a{ color: #b06c1c; margin-top: 20px; margin-bottom: 7px; } /* work frame*/ #container { width: 970px; text-align: center; margin: 0 auto; background: transparent; padding: 0 30px; } #wrapper { float: left; overflow: hidden; width: 660px; } #box2 { width: 240px; float: right; font-size: 14px; word-wrap: break-word; } /*#blog-title-inner{*/ /*margin-top: 3px;*/ /*height: 125px;*/ /*background-position: left 0px;*/ /*}*/ /*.header-image-only #blog-title-inner {*/ /*background-repeat: no-repeat;*/ /*position: relative;*/ /*height: 200px;*/ /*display: none;*/ /*}*/ /*#blog-title {*/ /*margin-top: 3px;*/ /*height: 125px;*/ /*background-image: url('http://cdn-ak.f.st-hatena.com/images/fotolife/c/cookpadtech/20140527/20140527172848.png');*/ /*background-repeat: no-repeat;*/ /*background-position: left 0px;*/ /*}*/