give IT a try

プログラミング、リモートワーク、田舎暮らし、音楽、etc.

プログラマ歴12年の僕が選んだ「10年経っても役立つ技術書17選」

はじめに

僕がプログラミングを始めてから、もうすぐ12年になろうとしています。
この12年間、いろんな技術書を読んだり、仕事やプライベートでたくさんコードを書いたりしてきました。


最初に入ったSIerでは主にJavaを、前職の社内SE時代はC#をメインのプログラミング言語として使ってきました。
現在はRubyをメインで使っていますが、言語が変わっても、また何年経っても「これはあのとき学んだ知識が役に立ってるよなあ」と思う瞬間がときどきあります。


そこで今回はこれまでに読んだ技術書を一通り振り返り、「この本で学んだことは今でも役に立ってる」と思うものを17冊ピックアップしていきます。

おことわり
  • (2014.09.29 20:00追記) このエントリのタイトルは「10年経った今でも役に立っている」という意味で付けています。「今から10年後まで役立つ」という意味ではありません。(紛らわしくてごめんなさい)
  • 僕がプログラマとして従事してきたのは主に業務系の情報システムやインターネット向けのWebアプリケーションです。分野が異なると意見も異なるかもしれません。
  • 「10年経っても役立つ知識」というテーマなので、大半がかなり昔に読んだ技術書です。現在ではすでに絶版になっている本もいくつかあります。その場合は似たようなジャンルの技術書を見つけて読んでください。
  • 改訂版や新装版が発売されている場合はそちらのリンクを載せています。
  • 今回はあくまで「コードを書いたり、デバッグしたりするのに役立つ本」に絞りこみました。組織文化やプログラマとしての心構え等に関する本は載せていません。

 

きれいなコードを書くための知識

CODE COMPLETE 第2版 上 完全なプログラミングを目指して

CODE COMPLETE 第2版 上 完全なプログラミングを目指して

CODE COMPLETE 第2版 下 完全なプログラミングを目指して

CODE COMPLETE 第2版 下 完全なプログラミングを目指して

このCODE COMPLETEを読んだときは本当に衝撃的でした。
CODE COMPLETEはどういうコードが良くて、どういうコードが悪いのかを明快な言葉で説明してくれる技術書です。
この本を読むと自分のコードが良くなるだけでなく、偉そうにしている先輩が書いたコードも「なんだ、意外と大したことないな」と思えるようになります(苦笑)。
巻末の参考文献も豊富で、ここからさらに別の面白そうな技術書を見つけることもできます。
ただし、最新のプログラミング言語やフレームワークから見ると、ところどころ内容が古く思えるところがあるかもしれません。

2015.11.24 追記
「CODE COMPLETE、高くて買えません!(><)」っていう人は、代わりに「リーダブルコード」を読むのも良いと思います。
たしかCODE COMPLETEとよく似た内容が書かれていたと思うので。

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

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

  • 作者: Dustin Boswell,Trevor Foucher,須藤功平,角征典
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2012/06/23
  • メディア: 単行本(ソフトカバー)
  • 購入: 68人 クリック: 1,802回
  • この商品を含むブログ (140件) を見る

(追記終わり)


新装版 リファクタリング―既存のコードを安全に改善する― (OBJECT TECHNOLOGY SERIES)

新装版 リファクタリング―既存のコードを安全に改善する― (OBJECT TECHNOLOGY SERIES)

リファクタリング、大事ですね。
外から見た振る舞いは変わらなくても、中身のコードが違えば将来の保守性や可読性がずいぶん変わってきます。
元祖「リファクタリング」はJavaで書かれていますが、「リファクタリング:Rubyエディション」のように、言語によってはその言語向けの「リファクタリング」が発売されていることもあります。
Java以外の言語をよく使う人は別言語バージョンを探してみるのもいいかもしれません。


達人プログラマー―システム開発の職人から名匠への道

達人プログラマー―システム開発の職人から名匠への道

  • 作者: アンドリューハント,デビッドトーマス,Andrew Hunt,David Thomas,村上雅章
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2000/11
  • メディア: 単行本
  • 購入: 42人 クリック: 1,099回
  • この商品を含むブログ (347件) を見る
「ここのコード、DRYじゃないですね」って言うときの「DRY = Don't repeat yourself(同じコードを繰り返さないこと)」はこの本で有名になりました。
他にもコードの書き方やプロジェクトの進め方において、とても役立つ考え方が満載です。

テストに関する知識

実践的プログラムテスト入門

実践的プログラムテスト入門

  • 作者: ボーリスバイザー,Boris Beizer,小野間彰,石原成夫,山浦恒央
  • 出版社/メーカー: 日経BP社
  • 発売日: 1997/08/26
  • メディア: 単行本
  • 購入: 3人 クリック: 59回
  • この商品を含むブログ (13件) を見る
ソフトウェアテスト技法

ソフトウェアテスト技法

「ソフトウェアのテスト = ただの動作確認」と思っている人は意外と多いかもしれません。
確かに動作確認なのですが、ソフトウェアのテスト方法には体系化された様々な「テスト技法」が存在します。
「テスト技法」と言われてピンと来ない人は、こういったテスト専門の技術書を読んで一度勉強しておくことをお薦めします。
ただしこの本はどちらもかなり難しい部類に入るので、最初は「はじめて学ぶソフトウェアのテスト技法」のような入門者向けの本で学習する方が良いかもしれません。

オブジェクト指向設計、オブジェクト指向プログラミングに関する知識

増補改訂版Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門

一時期に比べると「デザインパターン」という言葉を聞く機会は減ってきたように思いますが、現在でもデザインパターンがオブジェクト指向設計の重要な考え方であることには違いありません。
オープンソースライブラリの「XxxFactory」みたいなクラス名を見て、「Xxx工場って何や?」って思ったことがある人はデザインパターンの勉強をしましょう。
元祖「デザインパターン」は いわゆるGoF本 なのですが、結城浩さんの書かれたJava版の方がわかりやすいと思います。


実践UML 第3版 オブジェクト指向分析設計と反復型開発入門

実践UML 第3版 オブジェクト指向分析設計と反復型開発入門

  • 作者: クレーグ・ラーマン,依田智夫,今野睦,依田光江
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2007/11/12
  • メディア: 単行本(ソフトカバー)
  • 購入: 8人 クリック: 179回
  • この商品を含むブログ (29件) を見る
オブジェクト指向プログラミングに必ず出てくるのが「クラス」です。
すでに用意されているクラスを使うことは簡単でも、「自分でクラスを定義しろ」と言われたらどうすれば良いのかわからない、という人は結構多いのではないでしょうか?
この本では仮想的な開発プロジェクトを題材にして、オブジェクト指向分析やオブジェクト指向設計の具体的な方法を学ぶことができます。
こういった技術書を読んで、どんなクラスが良いクラスなのか、また、どんなクラスが悪いクラスなのかを評価できるようになりましょう。


アジャイルソフトウェア開発の奥義 第2版 オブジェクト指向開発の神髄と匠の技

アジャイルソフトウェア開発の奥義 第2版 オブジェクト指向開発の神髄と匠の技

  • 作者: ロバート・C・マーチン,Robert C. Martin,瀬谷啓介
  • 出版社/メーカー: SBクリエイティブ
  • 発売日: 2008/07/01
  • メディア: 単行本
  • 購入: 18人 クリック: 586回
  • この商品を含むブログ (72件) を見る
上の「実践UML」と同様に、こちらの本でもオブジェクト指向設計において重要となる様々な原則が説明されています。
「オレオレ分析」や「オレオレ設計」で拡張性や再利用性の低いクラスを作ってしまう前に、単一責任の原則やオープン・クローズドの原則などを適用してイケてるクラス設計ができるようになりましょう。

データベースに関する知識

データベース実践講義 ―エンジニアのためのリレーショナル理論 (THEORY/IN/PRACTICE)

データベース実践講義 ―エンジニアのためのリレーショナル理論 (THEORY/IN/PRACTICE)

データベースを操作する言語と言えばSQLですが、そもそもデータベースシステムが「リレーショナル理論」という数学的な理論をベースにして作られていることはご存知でしょうか?
この本ではSQLではなく、データベースシステムの土台となっている「リレーショナル理論」にフォーカスを当てており、SQLの裏に隠れているリレーショナル理論の奥深さを学ぶことができます。
ただしこの本は数学的でかなり難解な部類に入るので、読み終えるまでになかなか時間がかかるかもしれません。


ビジネス環境の変化に強いデータベース設計―仕様変更なんて恐くない!

ビジネス環境の変化に強いデータベース設計―仕様変更なんて恐くない!

別にこの本が特別オススメというわけでなく、これ以外の本でもいいんですが、システム開発をするなら「データベース設計/テーブル設計」に関する本を一冊以上読んでおきましょう。
「正規化?インデックス?何それ、おいしいの??」ってなっちゃう人は、こういった本を読むまで自分でテーブルを定義しちゃいけません!

正規表現に関する知識

詳説 正規表現 第3版

詳説 正規表現 第3版

  • 作者: Jeffrey E.F. Friedl,株式会社ロングテール,長尾高弘
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2008/04/26
  • メディア: 大型本
  • 購入: 24人 クリック: 754回
  • この商品を含むブログ (86件) を見る
一般的な業務システムやWebシステムを開発する場合、文字列を扱わないシステムは皆無だと思います。
電話番号、メールアドレス、生年月日など、形式はほぼ決まっているものの、値としては異なる文字列を抽出したり置換したりするケースはよくあります。
そんな場面で威力を発揮してくれるのが正規表現です。
正規表現を使いこなせれば、そうした文字列処理をほんの数行で実現することができます。
この本は一見とっつきにくそうですが、正規表現を全く知らない人でも理解できるように一から丁寧に教えてくれます。
僕もこの本を読んで正規表現を使いこなせるようになりました。

ネットワークプロトコルに関する知識

今夜わかるHTTP (Network)

今夜わかるHTTP (Network)

今夜わかるメールプロトコル (Network)

今夜わかるメールプロトコル (Network)

今夜わかるTCP/IP (Network)

今夜わかるTCP/IP (Network)

インターネットを全く使わずに過ごす一日なんて考えられないと思います。
もはや空気のごとく存在しているWebページやEメールですが、どういう理屈でサーバーとあなたのマシンがつながっているのか、ちゃんと理解できているでしょうか?
というわけで、技術者であればちゃんと裏側の仕組みも理解しておきましょう。
こういった知識を持っているかどうかで、トラブルを解決するまでのスピードも変わってきたりします。
このシリーズは真面目に解説するとややこしいネットワーク関連の知識をゆる~く解説してくれるので、僕でも飽きずに最後まで読めました。

文字コードに関する知識

文字コード「超」研究 改訂第2版

文字コード「超」研究 改訂第2版

プライベートであれ、仕事上であれ、忘れた頃に遭遇するのが「文字化け」です。
しかし、そもそも文字コードって何でしょうか?
文字コードとエンコーディングの違いは説明できますか?
こういった知識が身についていると、文字化けに遭遇したときでも落ち着いて素早く解決できます。
技術者なのに近所のおばちゃんと同じレベルで慌てふためいたりしないよう、こういった地味な(?)知識も身につけておきましょう。

アルゴリズムや計算機科学に関する知識

平成26年度 イメージ&クレバー方式でよくわかる 栢木先生の基本情報技術者教室 (情報処理技術者試験)

平成26年度 イメージ&クレバー方式でよくわかる 栢木先生の基本情報技術者教室 (情報処理技術者試験)

今どきのプログラミング言語で一般的なWebアプリケーションや業務システムを開発する場合には、ぶっちゃけアルゴリズムや計算機科学、すなわちコンピュータが計算を行える仕組みなんて知らなくてもプログラムは組めちゃいます。
しかし、「僕はアルゴリズムなんて知りません!」と胸を張って答えるのは技術者として変ですし、計算機科学を勉強しておかないと、うっかり浮動小数点誤差の罠にはまって重大なバグを生み出してしまうかもしれません。
このあたりの内容も複雑かつ、奥が深いので真面目に勉強すると大変ですが、とりあえず基本情報技術者試験に合格できれば最低ラインの知識を身につけることはずです。(あくまで最低ラインですけど)
僕の場合、この本を読んで試験に合格しました。わかりやすくてオススメです。


2015.11.5 追記
まだ読み終わっていませんが、アルゴリズムやデータ構造の勉強をもう少しちゃんとやりたいときは、この本が良さそうです。

定本 Cプログラマのためのアルゴリズムとデータ構造 (SOFTBANK BOOKS)

定本 Cプログラマのためのアルゴリズムとデータ構造 (SOFTBANK BOOKS)

まとめ

というわけで、今回は「10年経っても色あせない知識が学べる技術書」を17冊ピックアップしてみました。
最新のフレームワークや流行りのプログラミング言語を学習するのも楽しいですが、こういった「技術者としての基礎体力作り」もおろそかにしないようにしましょう。


また、人によって「10年経っても色あせない知識」は異なってくると思います。
あなた自身の「10年経っても色あせない知識」があれば、ぜひご自身のブログ等で紹介してみてください!

参考資料

僕がこれまでに読んだ本はブクログに登録していってます。(最近買った本はあまり登録してないけど・・・)
興味のある方はこちらも参考にしてみてください。

junichiitoの本棚 (伊藤淳一) - ブクログ
f:id:JunichiIto:20140929070344p:plain:w500


あわせて読みたい

技術書ではなく、僕のキャリアを振り返りながらこれまで経験したことやそのときに感じていたことなどをまとめています。


今回のエントリに限らず、技術書関連のエントリはこれまでにいくつか書いてきています。
気になる方はこちらもどうぞ。