エンジニア一年目、役に立った本そうでもなかった本

フルタイムのエンジニアとして働き始めて一年、いちおう技術書を読んできた。どんな本を読んできたか振り返る意味で、これは役に立った、これはそうでもなかったということを記録しておこうと思う。

前提として、自分はコンピューターサイエンスを学んできたわけでもなく、中学生からプログラミングをやっていたわけでもないいわゆる「文系プログラマー」に近い存在。一応工学部システム創成学科というところを出ているけど。プログラムをまともに書いたのは大学院に上がってからというくらい。それ以降は週一でRails開発のバイトをしていた。

現職でも主にRailsで、基本的に開発に使うのはRubyばかり。あとは一応趣味?というか後学のためにKotlinでAndroidアプリやReact+Reduxで習作を作ってるくらい。

基本的に良さげな本を選んで読んでいるので、良かった本のほうが多い。多いので、一応種別ごとに分けて書いた。

役に立った方

 WEBの話

「WEBを支える技術」

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

それまでRailsアプリの開発に携わっておきながら、HTTPメソッドの種類とかHTTPステータスコードとかあんまり良く知らなかったんですね。そういう自分にとっては「WEB技術」についてコンパクトにまとまっているこの本はとても役に立った。

いまでもすぐ手の届くところにおいてあり、「このエラーのときにはどのステータスを返そうか」と悩んだときは参照している。

「WEB API The Good Parts」

Web API: The Good Parts

Web API: The Good Parts

サーバーサイドの開発を担当していたので、APIを設計・実装してクライアント開発者に仕様書などを渡して使ってもらうということになる。そんなん誰でもできるやろと思ってたんだけど、どういうパラメーターをどんな名前で要求してどんなレスポンスをどんな構造で返すかとかやってみるとこれが大変。 このキー名おかしいやろ、とかなんでこのキーがここに入ってるんだよ、とか色々言われる。

まこの本を読んだだけですぐいい設計ができるわけではないんだけど、何を気をつければいいのかわかるだけでも見通しはよくなる。

設計の話

「マイクロサービスアーキテクチャ

マイクロサービスアーキテクチャ

マイクロサービスアーキテクチャ

いま携わってるプロダクト、決してマイクロサービスとは言いたくないが複数のサービスがREST APIで連携して動くシステムになっている。僕は認めないけど自称マイクロサービスアーキテクチャ

これが役に立つのは別にネットワーク越しに連携するシステムの設計だけじゃないと思う。コンポーネントが協調動作するようなアプリケーションを設計するのであれば、参考になるだろう。

オブジェクト指向設計実践ガイド」

オブジェクト指向設計の本だけど、開発にRubyを使う場合を想定して書かれている。なので自分の場合は即役にたった。個人的にもっともためになったのがテスト設計の章である。正直にいって、自分が携わっているプロジェクトのテストはあまりよくない。良くないということは何となく分かるけど、何が良くないかはわからない。そんな状態だった自分に答えを与えてくれた。

むやみに書いたテストはリファクタリングの助けにならないどころかむしろ変更の妨げにすらなるということを教えてくれた。

Rubyの話

「Effective Ruby

Effective Ruby

Effective Ruby

就職するまでは、「プログラマーになるにしてもRubyがメインになることはないだろう」と思ってたんだけど入ってみたらまさかのRuby。これまでRailsは使ってきたけどRubyとまともに向き合おうとしてこなかったが、もう逃げられないなと思って。下のメタプログラミングRubyと違い、読んですぐ生きる話が多いのが良い点。

仕事でRubyを使うなら読むべきだと思う。

メタプログラミングRuby

メタプログラミングRuby 第2版

メタプログラミングRuby 第2版

こちらもRubyを学ぶために読んだ本。とはいえこっちは読んですぐ使えるテクニック満載というわけじゃない。正直これを読んだだけじゃメタプログラミングをどういう場面で使うべきかまではわからない。

最初はライブラリのコードや、既存コードを読み解くために役に立つと思う。とりあえずメタプログラミングの使われている部分が読めるようになり、読んでいる内に使ってみる場面が出てきて、使えるようになるという感じだろうか。少なくとも自分はメタプログラミングあまり使わない。

その他教養みたいな話

「ITエンジニアのためのデータベース再入門」

ITエンジニアのためのデータベース再入門

ITエンジニアのためのデータベース再入門

これもWEBを支える技術と同じような感じ。いままでRDBまわり全部 ActiveRecord に放り投げていた部分、実際には何が起きているのか知ることができた。WEBまわりの知識に比べたら緊急度は低いものの、インデックスって何してるの?とか早めに知っておいたほうがよいだろう。

そうでもなかった本

「プリンシプル オブ プログラミング」

会社で配布されて読まされたけど、こういう本をいきなり読まされても学ぶものがない。ある程度経験を積んで、「なんとなくこうやるとうまくいく」という経験則を身に着けた段階で読めば「自分がなんとなく気づいていたこのパターンにはこういう名前がついていたのか」と納得する効果はありそう。でもこれから経験を積んでいく段階で読んでも「あっそう」で終わり。

アジャイルサムライ」

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

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

人・プロジェクトをマネジメントする立場になってないとあんまり役に立たないかな―という感じ。まだ仕事を振られる側の立場にいて、自分の作業という範囲内で時間やタスクのマネジメント手法を学びたいというのであれば一般的なビジネス書のほうが役に立つのでは。