エンジニアとしてプロとして、今年読んだ本(2013年)

自分はエンジニアであり、プロでありたいと思っているので、定期的に技術書を読むように心がけています。読むのと理解するのが遅いため冊数は少なめですが、それでも少しでも身につくものがあればと思って読んでいます。

エンジニアとしてプロとして、今年読んだ本 - 地平線に行く

そんなことを書いてから、早くも二年が経ちました。
今年も、どんな本を読んだか思い返してみたいと思います。

テスト技法を学ぶ

自分はあまり体系的なテストの設計を学んだことがなく、いつも「これで大丈夫だと思う」といった感覚でテストを作っていました。
また、できるだけ仕様を網羅するため、ひたすら文章でテスト項目を書いてしまっていました。このため、とても内容が分かりづらくなってしまい、それがもとで本当に網羅できているかがわからなくなってしまっていました。


そんな理由から手に取ったこの「はじめて学ぶソフトウェアのテスト技法」でした。


読んでみた感想は「びっくり」でした。
てっきり「どういうテスト項目を作ればいいのか」ということが中心なのかと思いきや、「どのような手法で仕様を整理するか」という点に大きな割合が割かれていました。
よいテスト項目を作るためにまず仕様を整理しなければいけない、というのは今から考えれば当たり前なんですが、読んだ当初は目からうろこでした。


また、この本で紹介されていた仕様を整理する手法は、テスト項目書に限らず、基本/詳細設計書の作成時にもとても有用でした。試しに、最初の設計書の段階から状態遷移図、フロー図を作りこんでいくようにした結果、わかりやすい、テストが作りやすいといった評価をもらうことができました。
さらに、それがコードをリファクタする際にも役立つなど、それほど厚くないのに、とても得ることの多い一冊でした。

CIを学ぶ

継続的デリバリー 信頼できるソフトウェアリリースのためのビルド・テスト・デプロイメントの自動化

継続的デリバリー 信頼できるソフトウェアリリースのためのビルド・テスト・デプロイメントの自動化

この本、実は去年のうちに買っていたのですが、途中で中断して積読になってしまっていたものでした。
ですが、今年になって CI をやっているチームに入った*1のを機に、改めて最初から読み直してみました。


CIの理念、著者の経験に基づいたベストプラクティス/バッドプラクティスがギュッと詰まっていて、この本自体に Jenkins などのCIツールの使い方には踏み込んでいないに、実際に CI をやっていくにあたりとても役に立ちました。
ちょっと分厚かったですが、最後まで読んだ価値がありました。


…とはいえ、それを十分に生かし切れていないのが悔しいです。
現在のところ、安定的にできているのはビルドまで。テストが不安定という問題を抱えていたり、ワンクリックデプロイとか受入れテスト、非機能要件テスト*2といったことまでできていなかったりするので、まだまだこの本で学んだこと、やれることを探して取り組んでいければと思っています*3

.NET Framework を学ぶ

プログラミング.NET Framework 第4版 (Microsoft Press)

プログラミング.NET Framework 第4版 (Microsoft Press)

技術書がこんなに面白いと思ったのは、Effective Java 以来です。
税込8,190円は高かったですが、それだけの価値はありました。


内容は900ページと盛りだくさんですが、それだけの分量になるのもうなづけるぐらい、.NET Framework の技術を網羅していました。
しかも、言語仕様書と違ってただ羅列してあるのではなく、しっかりと内容が噛み砕かれていたり、言語仕様が変わって今となって不要になったところはばっさりカットされていたりと、無駄なくわかりやすく学べました。


ちなみに、個人的にこの本の中で印象に残っているのは、下記のコードは無駄があるということ。
このコード、FxCop*4でも警告が出るのでなんでだろー、回避できないじゃん!とずっと思っていました。

int n = 5;
Console.WriteLine("n={0}", n);

ところがどっこい、本を読んで知ったのですが、こうすればよかったんですね。

int n = 5;
Console.WriteLine("n={0}", n.ToString());

こうすることで、int → object → string という変換(ボクシング)が避けられて、int → string になる、と。


こんな感じで、今までずっと気になって溜まっていた C# の「?」が次々に解消していきました。
ほかにもJavaとC#で、フィールドの初期化順序が違うなど、Java との違いをたくさん発見できたのも面白かったです。


惜しむらくは、年末に仕事が立て込んでしまい、今年中にすべて読み終わらなかったこと。
来年早々には、一気に最後まで読みたいと思います。

電話について学ぶ

電話はなぜつながるのか 知っておきたいNTT電話、IP電話、携帯電話の基礎知識

電話はなぜつながるのか 知っておきたいNTT電話、IP電話、携帯電話の基礎知識

携帯電話はなぜつながるのか

携帯電話はなぜつながるのか

温故知新、ということでネットワークの基礎を学ぶのに電話の仕組みについて知っておくのもありかなーと思って買ったのがこの本でした。


また、社内的に携帯電話関係の仕事が多いというのも買った理由の一つ。
おかげで、交換機やら携帯電話の初期のネットワークを設計していたときの裏話を伺ったときに、相手の話す内容がとてもよく理解できたとということがありました。
勉強しておくと視野が広がる、といいますが、こういった形で学んだとこが生かす機会もあるんだというのが印象に残った一冊です。

本の内容、あまり関係ないですがw

よいコードの書き方を学ぶ

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

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

自社内で話題になっていた、という理由で読んだのがこの本。
薄く広く、さまざまなやり方を網羅して紹介していたのが印象的でした。きれいなコードの書き方というのはいろんな意見がありますし、自分としてもこの本に書いてあることすべてをやろうとは思わないですが、幅広く紹介されている中から、自分がいいなと思った方法を取捨選択して生かすことのできた一冊でした。


ちなみに、この本はリーダー主導でチーム全員で回し読みすることになった本でもあります。
なかなか自分から先輩にこの本いいですよー、っていうのは言いづらいので、トップダウンでこういうことをやってもらえるのはとても嬉しかったです。
全員の時間を奪うことになるので、なかなかやる機会は難しいそうですが、ぜひ小規模になっても継続的にやれないかなと思っています。

その他

Googleを支える技術 ?巨大システムの内側の世界 (WEB+DB PRESSプラスシリーズ)

Googleを支える技術 ?巨大システムの内側の世界 (WEB+DB PRESSプラスシリーズ)

今年一年を振り返って

今年も技術書読んでないなーと思っていたんですが、去年よりも冊数読んでいました。
これは、たまたま年初に積読覚悟で技術書まとめ買いしたのが大きかったようです。結果的に、だいたい読んだ*5ので、とりあえず技術書は買っとくという戦略もありかなということに気づきました。


このやり方、(リスクは高そうですが)今後も生かしていければなと思います。

      • -

今年書いたブログの記事は、今回を含め13本でした。
去年より増えたとはいえ、Java 7 Update 40 で修正されたバグ のように、明らかに書くのが遅かった*6記事があったり、「null」をフラグとして使うのは、やめた方がいいというプチ炎上した記事があったりと、記事の内容に反省が尽きない一年でした。
来年は、それを踏まえて量と質の両方を高めていきたいと思っています。


最後になりましたが、いつも読んでくださる皆様、誠にありがとうございました。
特に今年は、ほとんどの記事に誰かしらからはてブはてなスターをいただけ、とてもうれしかったです。


それでは、2014年もよろしくお願いいたします。

*1:新機能開発以外のこまごましたバグの調査や Subverion の管理などをやっています。その一環として、CIによる改善も任されています。

*2:このうち、性能試験をぜひ CI でやりたいと思っています。現在だと、性能試験は大きな変更があった時に手動でやっているだけなので、ちょっとした変更で大きく性能が劣化していたり、開発の後半にならないと性能がわからないといったことが多々あるためです。これを CI で大きく改善できないかと目論んでいます。

*3:もちろん、がむしゃらにやってもしょうがないので、今のチームに何が必要かを見極めたうえでやっていきますが。

*4:C#の静的コード解析ツール

*5:つまり、一部が積読になりましたw

*6:Java7 Update40 がリリースされる前の5月時点から調べ初めてていて、結局書いたのが12月でした。