ITエンジニアに読んでほしい!俺的技術書大賞2017

ITエンジニアに読んでほしい!俺的技術書大賞2017

タイトルは完全にパクリです。 http://www.shoeisha.co.jp/campaign/award/2017/

前置き

今年も結構な数の本を読みました。読書メーターで読んだ本を振り返ると技術書だけでも11冊、その他は3冊でした。再読と技術書以外の書籍も含めると合計で20冊読んだようです。

そうして出会った本達の中で『これは良い!』というものを見つけたら、その都度身近にいる方々にはすすめているのですが、せっかくなのでこの場で共有してみたいと思います。

今回書評を紹介したいのは、2017年発行の4冊です。

どれも良書でしたので、おすすめ度が高い順番に紹介します。

2017年発行の書籍おすすめランキング

まずは、おすすめ順の一覧でどうぞ。

  1. 現場で役立つシステム設計の原則 ~変更を楽で安全にするオブジェクト指向の実践技法
  2. Java本格入門 ~モダンスタイルによる基礎からオブジェクト指向・実用ライブラリまで
  3. テスト駆動開発
  4. アプリケーションアーキテクチャ設計パターン

各書評

現場で役立つシステム設計の原則 ~変更を楽で安全にするオブジェクト指向の実践技法

初級者と初級者を卒業したばかりの中級者のエンジニアと初中級者を指導する立場のエンジニアに、強く強くおすすめします。

オブジェクト指向らしく書いたほうが良いという話はよく聞きますしそういう人に出会うことも多いですが、具体的な例でわかりやすく説明してくれる(できる)人って出会ったことがありません。身近にそんな人って周りにごろごろいますか?

可読性大事っていうけど実践できる人ややり方を具体的に教えてくれる人ってめったにいませんよね。

かくいう私も現場で地道にOOPの布教活動をする側ですが、いつも上手に伝えられているかというとその自信はありません。口頭で伝えきれない場合はどうしても具体的にコードを書いて示してしまいます。

でもそれをやりすぎると『自分で書いたほうが早い』となってしまうので都度やり方を伝えて覚えてもらうにしても、どれほどそのコストをかけるのか、かければよいのか1という点が難しいところです。

そういう場合、悩むのは『もっと手早くかつわかいりやすく伝えるにはどういう言い回しや例の出し方があるのだろう』だとか『この本読んどいてって渡せる書籍があると楽だなぁ』といったことではないでしょうか。

少なくとも私はそうでした2

そんな教える側にとっても教えられる側にとっても役に立つ本、それがこの本だと想います。

OOPらしく書くときにコードで気をつける点を端的に纏めてありますし、気をつけている何かに気づいた場合にどう対処したらよいのかをPolicy/StrategyやStateといったデザインパターンを使って説明してくれています。

例えば。

ビジネスでよく出てくる満たすべき条件はPolicy/Strategyパターンを使えばif文を使わずに簡潔に表現できること、ある状態からある状態へ遷移可能かどうかをEnumとMap(連想配列)を使って簡潔に表現できること、子どもや大人といった区分で変わる振る舞い(書籍の例だと料金)には専用に用意したクラス(enumなど)に振る舞いを与えれば良い3などなど、役立つパターンが数多くわかりやすく紹介しています。

『あぁ、はいはい。デザインパターン、小難しいやつね』とちょっと思ってしまった人もしかしていませんか?

そんな人にこそおすすめです。

名前がついてしまうと小難しいような感じがしますが、実際は『なんだかよくわからないけど、ちょっと見てみるか』程度の覚悟でもちょっと中身を覗いてみると一度か二度は自分でも書いたことのある構造になっているもので、そんなに難しいものではありません。

食わず嫌いをせずにぜひ手にとって見てください。3ヶ月後にはコードの質が変わっているかと思います。

具体的な中身についての書評はググるとたくさん出てきますのでこれ以上はやめておきます。

ぜひ、みなさんも読んでみてください。絶対に後悔させません。こう強くいい切れる程度にはおすすめです。

ちなみに私は都合3回読みました。


Java本格入門 ~モダンスタイルによる基礎からオブジェクト指向・実用ライブラリまで

最初に断っておきますが、『入門』と題する割にはそこまで初級者向けではありません。

これも中級者の入り口くらいにいる人におすすめの書籍です。

Javaの言語としての仕様・構文の説明もありますが、どちらかというと経験豊富な著者らが現場で培った『Javaをうまく使うにはどうしたらよいか』の知見を広める書籍の側面が強いように思えます。そうかくとちょっとEffective Javaっぽいですが、もっと簡単な内容です。

そのため、『Javaの構文や言語特性はある程度覚えた。でもそれらをどう使いこなせばわからない』という人に状況にいる人に特におすすめです。

レベル感としては業務でコードを書き始めて1年経過したくらい4のエンジニアに特に適していると思います。

私は認証関係を扱うことが多いのですが、認証系の業務であまり扱う機会のないファイル操作に関しての章がとても勉強になりました。

一番役立っているのはListをimmutableに使えるドSのCollections#unmodifiableListを知れたことです。

原則としてインスタンスはimmutableにしたいのですが、Listとなるとそうはいかないのがこの本をよむまでの悩みでした。しかし、このAPIを知れたことで簡単にimmutableなListを作ることができるようになり、いまはとても捗っています。

と言った具合に現場で役立つ情報が盛り沢山です。

この本のタイトルにも『現場で役立つ』の冠をつけたほうがよかったかもしれませんね。


テスト駆動開発

言わずとしれた名著の新訳版です。JUnit5でも動くように書き直されており、コードサンプルも省略されている部分がないせいで全体像が見えなくなる(読者が迷子になる)ことがないように細かい所まで配慮されています5
もはや古典と言って良いこの本ですが、翻訳者のt-wadaさんの手で見事に生まれ変わっています。

さて、この書籍はテスト駆動開発というタイトルが付いてはいるものの、この本の本質はテスト自体にはなく『プロダクションコードがもつ意図をテストコードでどう表明するか』を具体的に示している点ではないでしょうか。
その点を付録Cでの『TDDのテストとは、いわばプログラミングの補助線、治具です』と言う言葉が端的に表しているような気がします。

私達が普段書いているテストには回帰テストの意味合いがあります。
しかし、それより重要なのは『意図していた・期待していた振る舞いをプロダクションコードが正しく表現できいるか』を確認するすべなのだということを示している点ではないでしょうか。

3番目に挙げてはいますが、この本も本当に良書です。
ぜひ、手にとって見てください。


アプリケーションアーキテクチャ設計パターン

この本はアーキテクチャ寄りのエンジニアにおすすめです。

業務で普通に話されているが、実はよくわかってない用語やよくある一般的なアーキテクチャについて知るにはとても良い書籍です。
しかし、(ただの印象ではあるが、ちょっとだけ)Java EE贔屓に感じる6ところがあり、またドメイン駆動設計の説明が薄く、手続き型を前提にしている点が少しだけ残念に感じました。
ただ、それ以外は現場で役立つ情報が満載で本当に勉強になる書籍です。

万人向けではありませんが、方式設計などにも興味がある人にはおすすめします。

終わりに

以上、4冊の書籍を紹介しました。 興味を持った本はありましたか?

もしあれば、ぜひ買ってみてください。

ちなみに私は紹介したほとんどの本を会社の書籍購入補助を利用して買いました7
良い会社ですよ、本当に。

以上。



  1. 相手が自社のプロパーの場合は話は別で、スキルアップすればするほど会社の資産・利益につながるので時間と都合が許す限りはリソースを割いています。相手が伸びるのを見ているのも楽しいですしね。

  2. ちょっと偉そうに書いてみましたが、どちらかといえば私も教えられる側の中級者だと思っています。

  3. 著者は区分オブジェクトと表現しています。私はStateパターンの亜種だと思っています。一般的に知られたデザインパターンでしょうか?私は知りませんでした。

  4. 根拠のないただの感覚値ですがステップ数に換算して4000行、クラス数に換算して30-50程度でしょうか。

  5. この点で良書なのにもったいないと感じたのはClean Codeが挙げられます。リファクタリングの様子を紹介している節があるのですが、コンパイルが通る完全なコードが載っておらず、私は写経ができませんでした。やる気をなくしてしまったあとに付録にコードがあることに気づきましたが、借りていた本ということもあり時間の都合でトライする前に返してしまいました。

  6. 著者はマスタリングJavaEE5の人なので、ポジショントーク的なところもあるのかなという気はしています。のでまぁ、私は仕方ないと思いました。どこにそう感じたのか時間があればもう一度振り返りたいと思います。

  7. 年間で10冊以上技術書を買っていると結構な金額になるので、この制度はとても助かっています。感謝しかありません。