ボム君.com

読者です 読者をやめる 読者になる 読者になる

ボム君.com

レビュー、IT系のネタ、ブログ術等を書いています。

プログラミングで食べて行きたいなら必読の技術書20選

今回はプログラミング歴10年を超えてきた私が今まで読んできた技術書の中から以下のような人のために20冊の技術書を選びました。

この記事を読んでほしい人

  • プログラマーをやっているけどスキルが頭打ちになっている
  • 自分の職場以外で使っているプログラミング技術を知りたい
  • プログラミングという職業で一生食べていきたい

選んだ20冊は読み終えると一回りエンジニアとしてスキルアップできるものばかりです。プログラミングを一生使える自分の技術にしていきたいならどの書籍も読む価値が十分にあります。

どうぞ!

Code Complete

上巻、下巻で合計1000ページを超えるボリュームで良いプログラミングをするためのテクニックを解説している名著。

この書籍の良い点としては、データを用いて論理的に良いコードの書き方というのを解説している点です。

以下はデータで内容を解説している代表的な箇所ですが、ベンチマークテスト等で数字で証明されているとやはり非常に説得力が強くて信頼できます。

  • コードの書き方によるデバッグのパフォーマンス
  • プログラミング言語毎のコード内容に応じた処理速度
  • プロジェクト規模に応じた開発時間


また、個人的に非常に役立った内容としては上巻9章の中で解説されていた、「疑似コードプログラミングプロセス(PPP)」という内容でした。

疑似コードプログラミングプロセスとは実際にコードを書き始める前に、疑似コード(プログラミング言語に依存しないコード)で設計を行うことです。
このレベルで一度設計をしておくことで、どの関数やメソッドに対し、何の制御を入れるかをプログラミングの前に明確化できるようになりました。
おかげで開発スピードや不具合発生も大きく減り、未だにこの書籍には感謝しています。

プログラミング言語に依存しない概念を書かれている書籍なので何の言語のプログラマでも絶対読むべきです。

達人プログラマー

Code Completeよりも実際に書かれているコードは少な目ですが、プログラミングをする上で知っておくべきテクニックが満載です。

本書ではプログラマーなら知っておくべき、同じことを何度も繰り返してはいけないというルール「DRYの原則」や、あるモジュールを変更した際に他のモジュールに対して変更を与えてはいけないようにする考え方「直行性」について詳しく解説しており中堅以上のプログラマにとって非常に勉強になります。

また、それ以外にもプログラマなら自分の身を守るための一つの手段である正確な見積もりをするためのテクニックについても解説があり、まさに達人プログラマーを目指すなら読みたい書籍です。

Clean Code アジャイルソフトウェア達人の技

プログラマがコーディングの中で関わる各作業について詳しく解説されています。
以下は代表的な項目ですが、いずれもJavaのコードを使って具体的にどう書けば良いのか書いているのですぐに実践で使える内容になっています。

  • 良い名前の付け方
  • 良いコメントの書き方
  • クラス設計とデータ構造
  • 単体検査
  • 同時並行性

また、第一章でC++の開発者のビャーネ・ストラウストップ等の有名人達のプログラミングに対する考え方について記載があります。
有名プログラマ達の考え方を知るというのは良いコードを書くための近道になります。
プログラマはクラス設計、エラー処理、リファクタリング等コーディングの中で様々な場面に出くわしますが、その際に彼らの考え方が参考になります。

文字通り綺麗でエレガントなコードを書きたいなら必読です。

詳説 正規表現

プログラミングをやっているとテキストファイル処理や文字列置換等の場面に出くわすことがあります。
そのような場面で正規表現を知っているか知らないかでコードの質が劇的に変わってきます。
正規表現を極めている人は極小のコードで検索・置換の処理用コードを書けてしまうため、その分不具合も少ないです。

文字列処理を頻繁にやるならプログラミングテクと並行して学んでいきたい分野が正規表現です。

また、プログラミング以外にも会社の業務の中でテキストファイルを編集したりする場合にもすごく役に立ちます。
知っておいて損は全く無いですね。

ハッカーと画家

著者はポール・グレアムというハッカーで、エッセイ集のような読み物。

プログラミングのテクニックが記載された技術書では無いので、実践的な技が知りたい人にはあまりおすすめしませんが、ハッカー(コンピュータについて普通の人より深い技術的知識を持っている人)がどのような考え方をしているかというのが分かります。

著者が今ではあまり使われないLispというプログラミング言語(※Emacs等では使われているが)を使うので、Lispについて結構書かれていてLisp愛が伝わってきます。
別にLispなんか知らなくても良いという人でも、読んでおくと新しいエンジニアリングライフが見えてくるかも。

UNIXという考え方

150ページ程度の薄い書籍ですが、UNIXの設計思想がこの本に詰め込まれています。
UNIXの考え方として作られた以下のような定理が本書で紹介されています。↓

  • スモール・イズ・ビューティフル
  • 一つのプログラムには一つのことをうまくやらせる
  • できるだけ早く試作を作成する
  • 効率より移植性
  • 数値データはASCIIフラットファイルに保存する

UNIXの設計当時はまだ今の時代のように統合開発環境や高スペックPCといった開発のための環境が整っていた時代ではありません。
C言語とEmacsを使ってゴリゴリ書いていた時代に、生き残るOSを作るために何を考え何を残したのかが分かります。

オブジェクト指向プログラミングとかにも共通的に通じる概念も書かれているので、UNIXとか使わないし縁も無いって人にもおすすめです。
今使われているLinuxやAndroid等のベースになったUNIXというOSがどのような考え方で作られたのか知りたいなら読みましょう。

リファクタリング

コード修正に対しての考え方が変わる一冊です。

質の悪いコードに対し、「動いているから修正しないで置いておこう」という守りの考え方から、「質の悪いコードは悪、積極的に良いコードに改善しよう」という攻めの考え方へ思想が変わります。

「コードの臭い」「リファクタリングカタログ」の部分を読み進めることで、何が悪いコードなのか?どのように書いていると設計が崩壊する前兆なのか?どのように改善すべきなのか?というのが分かります。
私もこの本を読む前は感覚程度でしか修正タイミングが分かっていませんでしたが、本書で明確にソース修正すべきタイミングが分かるので不具合が出て手に負えなくなる前に対処できるようになりました。

本書の中ではJavaでコード解説されています。
JUnitを使ってのテストの書き方なんかも詳しく書かれているのでテストケースの作り方が分からん!という人にも丁度良いです。

コードが気づいたら滅茶苦茶になってメンテができない!リファクタリング学びたい!という人は読んでおきたい書籍です。

オブジェクト指向における再利用のためのデザインパターン

デザインパターンというのはオブジェクト指向プログラミングで頻繁に使われる設計のパターンです。

オブジェクト指向といのは使いこなせば非常に有効な設計テクニックですが、レベルの低い人が設計すると滅茶苦茶で分かりにくいコード内容になってしまったりします。
自由度が高いからこそ諸刃の剣にもなるので、上手く使いこなすというのが非常に重要です。
上手く使いこなしたいという人のために、本書では先人たちが苦労をしながら作り上げてきた有効なオブジェクト指向の設計パターンが書籍にまとまっています。

以下のような考えの人にはおすすめです。

  • クラスにメンバやメソッドを定義して使えばオブジェクト指向だ
  • 継承が上手く使えない
  • クラス同士の良い役割の割り当て方が分からない

アジャイルソフトウェア開発の奥義

アジャイルという言葉がソフトウェア業界だと一人歩きしているけれど、そもそも「アジャイル」って何?というところが序盤に書かれています。

本書の中盤ではソフトウェア設計について詳しく書かれており、オブジェクト指向の代表的な原則のSOLIDの原則がそれぞれのルール事に解説されているという点が良いです。

  • 単一責務の原則
  • 開放閉鎖の原則
  • リスコフの置換原則
  • インターフェース分離の原則
  • 依存性逆転の原則

オブジェクト指向ということでとりあえずクラスを使っているけど、何のルールに従って設計すると良いソフトウェアできるの?知らないなぁ?って人は読んでおくと良いですね。

アジャイルサムライ−達人開発者への道−

アジャイル開発のプロセスはこの本を読めばほぼ分かります。

  • ユーザーストーリーの立て方
  • 計画作り
  • 反復しての開発サイクル(イテレーション)、
  • リファクタリング
  • 単体検査
  • テスト駆動プログラミング(エクストリームプログラミング)

今までウォーターフォールのような開発プロセスでしかやってこなかったという人にとっては発見が多い本であると思います。
特にテスト駆動開発というテストファーストでその後で処理を書いていくことで品質の良いソフトを作りあげるという考え方は読んでおくべきでしょう。

継続的インテグレーション入門

この書籍はコーディング等についての書籍ではなく、開発の中でのプロセスをいかに自動化して効率的するかという点について詳しく書かれています。

プログラマならコーディングをして実際に動作させる際にビルド→実行→デバッグ→修正→テストという流れを繰り返すが、このような何度も行う作業は自動化してうまいことまとめちゃおうよってことが語られています。

書籍の中ではキーボードのボタン一つで自動ビルド・テスト実行等をまとめて行うためのテクニックが詳細に書かれていて、自分の開発環境の構築の際にも非常に参考になった一冊でした。

ポインタの極意

C言語を職場で使っているなら読んでおきたい一冊。

ポインタは初心者がC言語を学ぶ際に必ずつまづく箇所で、中堅プログラマでも正確に分かっていないという人も多くいるはずでしょう。
ポインタと配列の関係、ポインタを使ってのリスト処理という内容が詳しく書いているのでこれを読めばポインタマスターです。

この書籍で一度ポインタを深くまで理解しておくと今後のプログラミングの幅が広がります。

Subversion実践入門

プログラマーにとって開発する際にはバージョン管理ツールはいまや必須のツールです。

多くの会社で使用されているオープンソースのバージョン管理ツールSubversionについて、ツールの導入とチェックイン・チェックアウト等のコマンドの使い方、バージョン管理用サーバの構築方法について詳細に書かれています。

Git等の様々なバージョン管理ツールが今はありますが、バージョン管理ツールについてあまり知らないという人はまず敷居の低いSubversionから学びましょう。
この書籍でSubversionに慣れることで開発作業が大幅に効率アップすること間違いなしです。

7つの言語 7つの世界

Rubyの開発者であるまつもとゆきひろさんも翻訳に関わっている一冊。

以下のような7つの言語が取り上げられています。↓

  • Ruby
  • Io
  • Prolog
  • Scala
  • Erlang
  • Clojure
  • Haskell

どの言語もメジャーに使われている言語では無いですが、それぞれの言語が設計される際にどのような思想に影響を受けていたか書かれていたりするのが面白い。

関数型プログラミングというあまり使われていないプログラミングの考え方だったり、ScalaやHaskellがErlangの考えを引き継いでいるというのが知れたりできたのが非常に新鮮です。

他の言語のことも知って設計に幅を持たせたいという人は読んでおくと役に立つでしょう。

基本から学ぶソフトウェアテスト

プログラマーをやっているとコーディングや設計に関する書籍は沢山読むと思いますが、テスト手法についてはあまり知らないという人が多いのではないでしょうか?

作成したプログラムには必ずバグが入るものなので、それらに対してどのようにテストするかというが本書で基礎から学べます。

「テストを作るためにはテスト対象をよく理解しなければいけない、そうしないとテスト仕様は作れない」というは当たり前のことをテスト初心者の時に読んで知り衝撃を覚えました。

他にもデシジョンテーブルやバグ報告の書き方等も詳しく書かれています。
テストエンジニアとしてのキャリアを目指している方、もっと品質の良いソフトを作りたいと思っているプログラマそれぞれにもおすすめの一冊です。

ソフトウェア見積もり

プログラマにとって仕様通りに品質の良いソフトを作成するというのは重要な考え方です。
でもそれ以上にビジネスの場面では納期に間に合わせるという考え方がさらに重要視されます。

この書籍では正確な見積もりを出すのがいかに難しく、見積もりに影響する要素としてどのようなものがあるか書かれています。

普段上司からこのソフトどの位でできる?見積もって?と言われて見積もったあげく、見積もりの2倍以上工数かかってしまった。見積もりってなんて難しいんだ!と正確な見積もりができなくて苦しんでいる人にとっては必ず読むべき書籍でしょう。

見積もりのテクニックを知ることでデスマーチに巻き込まれないようにするため身を守れるようになります。

人月の神話

初版は40年前に発行された名著です。今まで読まれ続けているというのは時代が変わったとしても実践で使える考え方がこの書籍に詰め込まれているということでしょう。

この書籍に書かれていた私が一番重要だと思った箇所は「人と月は等価交換ではない」という箇所です。
1人の人が50か月かかる作業があったとして、じゃあ50人いれば1か月で終わるかといったらそうではない。
人と月は入れ替えれないというのは今見積もりする際にも非常に参考にしています。

GNU Make

EclipseやVisualStudio等の統合開発環境でビルドする際には内部で必ずMakeが走っています。
ビルドはいつもやっているけど一体どういう仕組みで効率よく実行ソフトを作り上げているのか知らないという人は読んでおきましょう。

この書籍ではMakeというのがどのような仕組みでコンパイル対象のファイルを見つけていくかだったり、Makeファイルというのはどのような書き方をすれば良いのかというが詳細に書かれています。

Makeファイル自体最近はほとんど書くことは少なくなってきたかもしれませんが、概念を知っておくのは大事ですので読んでおきましょう。

情熱プログラマー

プログラマーという職業で幸せに生きていきたい人のための書籍。

個人的に強く印象に残っている内容としては、所属するチームの中では「自分が一番の下手くそでいよう」という部分です。
自分がレベルの高い人たちに囲まれながら開発を行うことで、気づいたら自分も大きく成長できているということ。
いかにプログラマーにとってレベルの高い人たちに囲まれて働く環境というのが大事なのか分かり、私が自分のキャリアを見つめなおすきっかけにもなりました。

プログラマー向けの自己啓発本のような書籍です。キャリアに悩んでたり、迷っていたりするなら読んでおくと良いでしょう。

エンジニアのための時間管理術

プログラミングスキルとしては素晴らしいものを持っているけど、時間の管理はまともにできませんというプログラマーというのも多いでしょう。
そんな人のための一冊。

プログラマーが作業に集中するためには作業環境も大事だよというのがこの本を読むと分かる。
以下のようなポイントがあげられている。

  • 集中と割り込みへの対応
  • 優先順位の設定方法
  • ストレス管理
  • 目標管理
  • 自動化の仕方

将来的にマネジメント方面に進みたいとしても時間管理の技術は大事になってくるので、エンジニアリング業界で働いているならプログラミングに関わらない人にも一読して欲しい書籍。