Hello Worldのその先へ - 若手エンジニアにお勧めの本6選
はじめに
こちらの動画でも紹介したのですが、春は新人エンジニアの季節。そして去年や一昨年前の新人たちが2年目から3年目になる季節です。というわけで、そんな彼らが初級者から中級者になるためにオススメの本を紹介したいと思います。
この記事では動画の内容に加えて「どんな本を何故紹介するのか?」という観点も合わせて加筆しています。
ラインナップ
紹介する本は以下のラインナップです。超有名本を含めて 「アーキテクチャ」 「運用」 「コーディング」 「インフラ」 「データベース」 とWebアプリケーションエンジニア必須の6カテゴリから1つずつ選出してみました。
- UNIXという考え方―その設計思想と哲学
- ITIL はじめの一歩 スッキリわかるITILの基本と業務改善のしくみ
- リーダブルコード ―― より良いコードを書くためのシンプルで実践的なテクニック
- レガシーコード改善ガイド
- Webエンジニアが知っておきたいインフラの基本
- SQL実践入門 高速でわかりやすいクエリの書き方
基本的な選定方針
この手の本の紹介をするとついつい良書だけど難易度の高いものや、あれもこれもと思ってしまい10冊も20冊も増えがち。。。ただ何十冊も紹介したらその中のどれを読むのか悩む、とも思うので、以下のようにな方針に基づき独断と偏見で6冊に絞ってみました。
2年目、3年目のステップアップ向け
まずはペルソナというかターゲットを考えました。私自身もそうだからWebアプリケーションエンジニアをイメージして、かつ1,2年ほど実務で揉まれてきて、ある程度はコードも書けるし多少の設計もできるようになってきた。今までに読んできたIT系の本はどちらかというと「〇〇入門」 とかが多い。そのくらいの人を想定して選んでみました。まあ、ようはうちの会社の新人とかに一定数居そう人なのですねw
ハウツーよりは基礎, 気づきになる本
初級者の場合は最初なので入門書やハウツー本を読みがち。もちろん、それは全然悪く無いのですがステップアップには違うタイプの知識も必要です。
今後10年エンジニアを続ける上での土台になるような基礎的な本や新しい視点に気付けるような本を選んでみました。たかだか6冊なので 「これだけ読めば大丈夫!」 という分けではありませんが、そうした星の数ほどある良書を読んでいく、探していくための第一歩になれば良いな、と。
上記のような観点なのでK8sとかGoとか最新の特定の技術によった本は選んでいません。それはそれできっと必要なら読むでしょうし。
アルゴリズムとか計算機科学よりの話も入れようかな、とも思ったのですが、まずはより身近なところから始めるのが良いと思ったので今回の6カテゴリを考えました。
読むのを挫折しにくい
みんな忘れてるかもしれないですが、技術書を読むのは結構大変なものです。もちろん、それを楽しく読めるのも良いエンジニアになるための資質の一つかもしれませんが、誰もがそうでもないし、最初からそうでもない。
なので良書であっても分厚すぎたり内容のレベルが高すぎるものは含めない事にしました。良書を買っても積読だけしておいても意味がないですから(自戒
一度読んで行けば次に読むのはもっと楽になるので、徐々に濃くしていくのが沼にひきづり込むための常套手段ですよね?(ぉ
各本の紹介とオススメ理由
UNIXという考え方―その設計思想と哲学
楽天Books | Amazon
トップを飾るのはUNIXという考え方。Webアプリケーションエンジニアの多くはLinuxに親しみがあると思います。lsやcdはもちろんgrepやsed, head/tailなどのシェルコマンドにもそろそろ慣れてきたころかもしれません。
ただこの(CLIで使う)LinuxというOSはGUIで対話的に操作出来るWindowsやMacとは大きく操作体系が違いますよね? そこには強い思想と哲学があり、それを源流であるUNIXに立ち上って学ぶのは非常に良いことだと思います。
本書に書かれたパイプ&フィルタや、ポータビリティを最優先したテキストベースのフォーマット思想など、こうしたアーキテクチャの実践的な例を具体的な実装と紐づけて解説されてるので、まずそれが役立ちます。それらは今でも使う考え方ですから。ただ、それ以上にアーキテクチャを学ぶ第一歩としてもとても良いと思っています。MVCがどうとかDDDがどうとか、そういった本を今後読んでいくと思いますが、ここまで身近な例と一緒に解説されることも少ないと思うので最初にアーキテクチャを学ぶ本としても最適だと思います。(GoFに限らずの)デザインパターンの本やアーキテクチャパターンの本を読んでいくのもその後でいいかな、と。
あと、とてもページが少ないですし単純に読み物としても面白いのでその点も良いですね。当時のコンピュータ史を知るきっかけにもなるでしょう。おしむらくは日本語版は電子書籍が無いことなのですよね… まあ、薄いし紙の本でも良いのだけど。
ちなみに、私が初めて読んだのはそろそろ20年近く前になりそうですが、今でもお気に入りの本でこうした技術書の紹介のときには真っ先に名前を上げる一冊です。
ITIL はじめの一歩 スッキリわかるITILの基本と業務改善のしくみ
楽天Books | 楽天Kobo | Amazon | Kindle
2冊目はITILの本です。「え、ITIL?」 「私はエンジニアだよ? スーツな人じゃないのだけど…」 そう思う人も居るかも知れません。しかしながらエンジニアであろうがなかろうがITのに関わるすべての人が読むべきサービス管理/運用のベストプラクティス、それがITILです。特に今回はエンジニア向けだし運用に関するベストプラクティスに注目して考えて良いでしょう。
こう言うと 「いやいや、今は運用といえばDEVOPSやSREだよ?」 「今どきJTCの使うようなカビ臭いものを学びたくない」 なんて思う人も居るかも知れませんがそれはとんでもない誤解です。
ITILにはインシデントと問題を別のものとして考えるプラクティスや、構成管理や変更管理、リリース管理などなどサービスやプロダクトを運用していく上での必須の概念が良くまとめられています。DEVOPSやSREと反するものではなく共通というか下敷きにしてる部分も多く、たくさんの会社で採用されている基本的なプラクティス集です。運用の全量を知るにはITILからが良いでしょう。読んだからといって別にすべてのプラクティスをその通りに実践する必要はないですし。
先にITILを学ぶことでDEVOPSやSREの文脈で語られる話もスムーズに理解出来ると思います。実際のところ最初はSRE サイトリライアビリティエンジニアリングとかを紹介しようとも思ったのですが、いきなり触れるには難しすぎるし、SREとか以前に 「運用に何が必要か?」 をまず知っとくべきとも思ったので。共通言語としてビジネス側の人たちとも会話出来るようになりますしね。
もう一点重要なポイントとしては 「フレームワーク (FW)」 に慣れるというか存在を知ることです。ここでいうFWはRailsやReactのようなアプリケーションFWではなく、思考パターンやプロセスのベストプラクティス集です。コンサル系の人とかが詳しいと思いますが、この辺を上手く活用すればシステムの設計やなにか考えごとをする時に圧倒的な時短になるし説得力も増すので、そういった概念に触れる最初の一歩としても良いと思います。
と、ここまで本の内容というよりITILの説明になってしまいましたが、数あるITILの本の中でこれを選んだのはかなり噛み砕いてあって読みやすいからです。表題にもある通り 「もしも八百屋にITILを導入したら。。。」 と一昔前にはやった「もしドラ」的なノリでサクサク読めます。それでいてきちんとポイントになるような事は押さえてあり、資格試験を受けるならともかく 「ITILを知る」 という目的には最適かな、と思って選びました。こういうとっつきやすい本が多いのも良いところですね。
リーダブルコード ―― より良いコードを書くためのシンプルで実践的なテクニック
楽天Books | Amazon | Oreilly Books (PDF)
3冊目はリーダブルコードです。おそらく今回紹介する中では一番有名な本でしょう。
2年目、3年目ともなればとりあえず動くコードは書けるようになったし読みやすいコードというのも少しずつ分かってきたのでは無いでしょうか? ただ、まだまだ先輩からレビューで指摘される事が多かったり、後輩に自信を持って指摘するのは難しい、そんな状態ではないかと思います。これは 「読みやすいコード」 というものを自分の中で言語化出来てないからでしょう。リーダブルコードは本当に基本的な、だけどとても重要な事が書かれたコーディングのガイドです。
実のところこの手の類書はたくさんあります。
リーダブルコードより「Clean Code」や「CODE COMPLETE」、あるいはもう少し包括的な「達人プログラマー」とかを読んだほうが良い、という人も居ると思います。確かにここに上げた本の方がより詳しくあり、そっちの方をオススメする理由も非常に分かります。ただ、致命的な問題点があるんです。ええ、とても長いんですよ・・・
このグラフは先程上げた本のページ数を比較したものです。「CODE COMPLETE」なんて628ページもあるのでちょっといきなり読むにはパワーの要る本です。一方で「リーダブルコード」は270ページと短いながらも重要な事はきちんと書いてあるので、まずはこの本を読み切る事から始めるのが良いと思います。
レガシーコード改善ガイド
楽天Books | 楽天Kobo | Amazon | Kindle
4冊目はレガシーコード改善。一昔前に 「テストがないコードはレガシーコードだ!」 というセンセーショナルな見出しで有名になった本です。
実のところこの本は他とは少し違い中級者になるためというよりは中級者向けの本です。なのでちょっと他とは毛色が違うのですが、どうしても入れたかったので。
というのも、本来はTDDやBDDの本を紹介するべきなのかもしれませんが、UT周りに関しては比較的たどり着き易いのと、そうした本に書いてある 「理想的なユニットテスト」 を実践出来る現場ばかりでは無い、と思ったからです。もちろん、ちゃんとしたテストコードが書ける現場はいくらでもあると思いますが、レガシーコードにはいつ出会うか分からないですし、今見ているプロダクトがレガシーコードでせっかく学んだUTが役に立たない、だからUTは意味がないみたいになって欲しく無いので 「武器を与える」 という点でこの本を紹介したいと思います。
この本の中にはテストが無いコードをどのように解析していくのか、スプラウトメソッドなどを使ってどのように 「今日書くコード」 からUTを書いていくのかという点が述べられています。結構あるあるネタも多くて読書会向きの本でもありますね。とても実践的な内容ですし 「モンスターメソッドを直す必要がありますが、テストを書くことが出来ません」 とか 「もうウンザリです。何も改善できません」 とか 各章の見出しが秀逸なので、全部が分からなくても一旦読んで自分のお道具箱に入れておき、必要担った時に立ち戻るのも良いと思います。
編集して祈る(Edit and Pray) から 保護して変更する(Cover and Modify) に変えていきましょう!
ちなみにそもそもUnitTestをどう書くの? という方は手前味噌で恐縮ですが一旦下記の記事が参考になると思います。
Webエンジニアが知っておきたいインフラの基本
楽天Books | 楽天Kobo | Amazon | Kindle
5冊目はインフラの本です。ただ、この本はアプリケーションエンジニアにこそ読んで欲しいと思っています。奇しくもここ最近TLで 「インフラエンジニアはブルーオーシャン」 という話題が盛り上がっていました。その是非はさておきとして、そのコメントの中でアプリエンジニアとインフラエンジニアの間に大きな溝があるのだな、と改めて感じました。確かに開発をやっていると設計やコーディングのことばかりに頭が行きがちなのはとても分かります。しかしながら 「あなたの書いたコードはどこで動きますか?」 「どんな構成で、どういった運用設計になっていますか?」 「増強にはどのくらいの時間がかかりますか?」 この辺を一切知らずしてまともなアプリケーション設計はできませんし、障害対応とかでインフラTと会話もまともに出来ません。最近流行りのコンテナを多様すると従来のインフラ設計の一部をアプリケーションエンジニアが担うケースも出てくるでしょう。なので基本的なインフラの知識はアプリケーションエンジニアにも必須なのです。別にフルスタックエンジニアとか名乗らなくても、です。
さて、インフラの本というのもたくさんあると思いますが、この本のおすすめポイントはかなり広範囲に関して書かれている事です。Web系のシステムにおける用語などのインフラ基礎知識、要件定義や調達などの流れの説明、MTBFやMTTRといったRASの基本的な考え方、インフラデザインパターン、監視、障害発生時の基本方針、パフォーマンスチューニングと包括的に書かれています。その特性上、あまり踏み込んだ内容は少な目ですがインフラの全体感を知るには最適なので、最初に読むのは良いですね。網羅的なので実務で場当たり的にやってて欠けていたピースが埋まっていくと思います。その上で必要があれば例えばマスタリングTCP/IPだったり、各種専門の本に徐々に進んでいけば良いと思います。インフラといってもミドルウェアからストレージ、ネットワーク、ラッキングに空調まで言い出すとキリがないので。ただ、アプリケーションエンジニアもこの本に書いてある内容くらいは把握しておくべきでしょう。
内容としては2014年に書かれたものであり、ツールなど少し古い部分もありますが大事なところは変わってないので問題ありません。またクラウドが当たり前にはなりましたが、少なくともIaaSを使うならほぼ同じですし、サーバレスでもこれらを理解した上で使う必要があるので色褪せずに今もおすすめできると思います。
SQL実践入門 --- 高速でわかりやすいクエリの書き方
楽天Books | 楽天Kobo | Amazon | Kindle
最後の一冊はSQL実践入門です。実はこの本はタイトルの印象とは異なり、RDBのアーキテクチャの解説本でもあります。
DBの本というとテーブル設計とDB自身のアーキテクチャと大きく2つに分かれると思いますが、テーブル設計は開発者が意識しやすいところですが、データベースのアーキテクチャはつい忘れがちだと思うので、こちらの方向性の本にしました。ちょうどTLでも 「アプリエンジニアはDBの事を気にしたクエリを書けない」 とか 「インフラエンジニアにSQLチューニングを丸投げされる」 とか出ていて、SQLのチューニングは基本的にプログラマの仕事だと思ってるので、それを全うする一助になれば良いな、と。
さて、この本ですがタイトルの通り高速でわかりやすい、実践的なSQLを書くための本です。ただ単にSQLの話だけをするのではなく、実行計画をどのように読むのか? そしてその前提知識となるクエリ評価マネージャやバッファなど基本的なRDBのコンポーネントの解説、そしてインデックスの仕様など普段ブラックボックスとして利用しているRDBをホワイトボックスにするための本となっています。この辺りを抑える事でどのようなSQLを書いて何故速くなるのか? ということが理解できるようになりますし、NoSQLや分散RDBなどを利用したときにもその特性に目を向けやすくなると思います。
ちなみに、実はデータベースの本に関してはどれにするかかなり悩みました。というのも私もどれかの本を読んでステップアップしてきたと言うより、色んなドキュメントを読んだり人に教わって学んできたところが多かったので中級者向けのオススメ本、ということでパッと思いつくものがなかったのです。テーブル設計の本にするか、DB自身の本にするかというのもありました。そう思いながらツイッターに書き込んでると色々な本を教えてもらったので良ければそちらも見てみてください。
まとめ
さて、2年目3年目の若手エンジニア向けというテーマで本を選定し、その理由を書いていきましたがいかがだったでしょうか? この手の記事を書くのは若手の助けになれば、という気持ちがもちろん第一ですが、自分が何を大事にしているかを整理するという意味でもとても良いと思います。その意味では、今回の紹介した6つの本は私らしい良いラインナップになったんじゃないかなー、と。
それではHappy Hacking!
Discussion