techに薦めている書籍
お久しぶりです。CADDiの河合、もとい@vaaaaanquishです。
数ヶ月前、CADDi社内で「オススメ書籍」というものを書きました。
私は前職の上司の影響でビジネス書を多く読むようになったのですが、ゴリゴリの技術書でない書籍というのはどうしてもエンジニアにとって読みにくい物も多いなと思っています(悪いと言っている訳ではなく飲み込みのために行動や知識を求められるよねという意です)。
また、エンジニア向けの書籍でも、少し概念的に古く、現代に適応しにくいものもあったりします(名著は名著である事には変わりないですがエンジニアリングもIT分野も年々進化し続けているので一部現代で扱いづらい概念が出てくるのは当たり前だよねとも思います)。
なので、なるべく「エンジニアが読みやすく」「比較的新しい環境で使える」をテーマに書籍を選び、比較的本を読む数の多くないエンジニアでも読めるようにポイント毎に紹介しています。
この取り組みのウケが比較的良く、同僚が書籍を読んで感想をくれるだけでなく、技術アドバイザーとして入っている企業からも評判が良かったようなので、少し広く公開してみる記事です。
多いとダルいので一旦全力で5冊に絞りました。最後にギリギリリストに入れなかった物も箇条書きで書いておきます。私自身がMachine LearningのTech Leadですので、一部AIな文脈に依ってしまう部分もあるかもしれませんがご了承下さい。
Googleのソフトウェアエンジニアリング
鈍器の形をしていますが、周囲の人と輪読会をするなどして絶対読んで欲しいです。エンジニアとしてかくあるべきか、ソフトスキル、リーダーシップ、開発、設計、テストの指針とソフトウェアエンジニアリングの全てが詰まっています。特にテストに関しては120ページに渡って書き殴られている強気の本でもあります。
類似の書籍としては『Team Geek』や『リーダーの作法』、古典的には『伽藍とバザール』や『ハッカーと画家』、その他設計や開発手法系の書籍もあります。
そういった書籍のギークなミームやGoogle文化、開発手法については当然丁寧にかいつまんで引用してくれていますし、分厚いだけあって背景もしっかり書かれているので、薄めの書籍に比べると納得感があるなと思います。
もちろん類似書籍も非常にためになるので比較しながら読んでも良いですが、この書籍が新しい書籍かつ、私が読んだ中では一冊で最も広く深くエンジニアとして必要とされるスキルが凝縮された書籍であると思うので強くオススメしています。
ソフトウェアアーキテクチャの基礎
近年のマイクロサービスアーキテクチャ等に至るまでの歴史、ソフトウェアアーキテクトとしての振る舞い、組織の在り方が書かれた書籍です。
CADDiでは、エンジニアの評価指標の1つに「delivery」という軸があります。これはサービスを顧客に提供し、技術を価値に変える振る舞いをソフトウェアエンジニアとして取れているかどうかの指標です。これらが高いエンジニアがどういった体系的知識から行動しているのか理解するためにオススメしています。
類似の書籍として『システム運用アンチパターン』なんかもあります。システム運用アンチパターンは「業務時間外にデプロイしてしまう…」「学ぶ時間がない…」「対応劣後気味のアラートがある…」「チームのパフォーマンスが微妙…」みたいな思い当たるフシがあったら是非読むべきです。どちらかと言えば課題ベースで読んだ方が実感がありそうです。
他にも『プロになるためのWeb技術入門』もオススメです。こちらはより"技術"の側面で、HTTPの成り立ちから解説されており、システム運用を理解する上で非常に良い本です。(社内にオススメ書籍を展開するまで知らなかったんですが著者はCADDi社員らしいです)
類似書籍と比較してソフトウェアアーキテクトの基礎が優れている点として、抽象度の高さがあります。特に経験が十分でないアルゴリズムや機械学習、フロントエンドなどアーキテクトとの関わりが直接的でないものを扱う職種では「なんでこのインフラ構成になっているんだろう」と思うシーンが少なからずあると思います。そういったシーンを確実に埋めてくれる書籍になっており、それらを実現するための振る舞いまで含まれているので、読んだ日から実践できる内容が多いです。私の中では、アーキテクト本の現時点でのベストだと思っています。
リーダブルコード
語り継がれる名著です。名著故に「多くのシニアエンジニアが読んでいるので絶対に読んでおいたほうが良いです」と言って薦めています。良いか悪いかはさておき、この書籍の内容がレビューや議論の暗黙の前提となっているシーンは少なからずあると感じています。この本を読まず、感覚的に「リーダブルでない」等と発言してしまい議論が炎上してしまうシーンを何度か見ています。それくらいベースラインになっているなと感じます。
類似の書籍として、比較的新しい概念にも追いつきたい場合は、2022年に出た『良いコード/悪いコードで学ぶ設計入門』がオススメです。こちらはより具体的に「このコードってなんで良くないんだっけ?」という所を章立て丸々使って分かりやすいストーリーで解説してくれています。近年読んだ本の中でもオススメの1冊です。
その他、特にAI関連の職種の方には『自走プログラマー』『独学プログラマー』の2冊をオススメしています。こちらは中身がPythonで書かれているので飲み込みやすい実践本になっているだけでなく、『クリーンアーキテクチャ』や『テスト駆動開発』といった名著から実際のWeb開発でよく使われる良い所を良い感じにとってきて、その名の通り"実践"できるような書籍になっています。AI文脈だとエンジニアでもCS出身でなかったりする場合も多いので、「専門性に加えてリーダブルコードとこの2冊を読めば、CADDi AI Labでは活躍できます」と明言しています。
より良いコードを書くことは、ソフトウェアエンジニアの仕事をする以上重要な項目の1つでもあるので、必要な技能であり磨く必要があります。
エラスティックリーダーシップ or SOFT SKILLS
ジュニアかこれから成長していくメンバーにはSOFT SKILLSを、ソフトウェアエンジニアとして技術面が成長してきたメンバーにはELASTIC LEADERSHIPをオススメしています。
Googleのソフトウェアエンジニアにも書かれている内容ですが、エンジニアとしての振る舞い方という側面が求められるシーンはどんどん増えてきます。ある種自己啓発でもありますが、一方でビジネス書ビジネス書したものは冒頭の通り、エンジニアには少し飲み込みづらい部分があります。これらの書籍は、筆者もエンジニア出身で、受け取りやすくなっています。
類似の読み物系だと古くは『達人プログラマー』『情熱プログラマー』も良いですし、『エンジニアの知的生産術』『プリンシプル オブ プログラミング』『ユニコーン企業のひみつ』『LeanとDevOpsの科学』が新しい近代の働き方を加味して書かれているのでオススメです。『Work in Tech!』『Coders 凄腕ソフトウェア開発者が新しい世界をビルドする』もポエム感は増しますが熱いので私は好きです。
類似書籍と比べたときには、SOFT SKILLS、ELASTIC LEADERSHIPは広く汎用的なシーンで扱える内容であるのでオススメしています。「自分のキャリア、チームをより上手く回すためにどうしたら良いか」と思った時に手に取ると良いと思います。
技術者のためのテクニカルライティング入門講座
近年では、テクニカルライティングに関するWebの記事が充実しているのでそちらでも良いですが、これは実際読んだ人の文章が一発で変わるので良いです。
Webの記事はWhenとWhatに言及しているものは多いですが「動詞を使って文章を短文に分ける」「否定系に注意する」「弱い表現を使わない」といったHowを広く深くまとめたものは少ないです。この書籍は、そういった項目が実例付きで書かれているので、リーダブルコードに近い感覚で良い技術文章が書けるようになります。
イベントレポートをHRが書いてみる、という施策があった時に「これはテクニカルライティングが全く出来てないので全然伝わらないですね…」となったことをきっかけにWebの記事や『成果を生み出すテクニカルライティング』等を読み漁って行き着いたのがこの書籍です。実際にこの書籍を読んでもらって、追加でtextlintを導入した所、前後で見違えるようになったのが私の中で一番オススメできるエピソードになっています。
おわりに
一旦5冊に全力で絞って、汎用的に読めるオススメの書籍を書きました。
最近は教科書的なものをゴリ推しするのではなく、適材適所に成長できるように良い本を推薦するようにしています(例えば一旦The Art of Computer Programmingを読もうぜ的な事は言わないようにしています)。大学のCSの講義やら著名な組織の研修資料も公開されている昨今ではなかなか難しいですが、何とかやれている気がしています。そういう話を一緒に出来る方いれば、やりたいので是非リプライなり何なりください。
後は蛇足ですが、他にもCADDi社内に展開しているオススメの本を箇条書きで上げておこうかなと思います。ここからは蛇足なのでここでおしまいでOKです。
# ギリギリ入らなかった書籍
## テクノロジー
- 教養としてのコンピュータサイエンス
- CSの大学3年生くらいまでが学ぶ事を凝縮して書かれている
- CS出身でない人でより他部署とのコミュニケーションを強めたい時に
- 翻訳がちょっと微妙だったりするがこれ以上に広く丁寧な本はない
- ゼロからのOS自作入門
- mikanOSを作る本、Linuxに対する敷がかなり下がる
- CLI等に苦手意識ある方オススメ
- 結構各言語での自作事例もネットに出揃っているので長期休みの宿題的に
- ガベージコレクション 自動的メモリ管理を構成する理論と実装
- 突然フォロワーから送られてきたにも関わらず異常な厚さと引用文献で死んだ
- 2ヶ月くらいかかったが疑似コードや図示も多く、頭の中にヒープが浮かぶようになる
- JVM系言語やPython等書いてる人に輪読オススメ
- 時系列で書かれている、という点を考慮しないとやや混乱するかも
- Web API: The Good Parts
- WebAPI設計のベストプラクティスを集めた本
- あれ、このAPIどう実装すると良いんだろうというときの指針になる
- もう少し広くGraphQLやサービスメッシュまで扱った書籍ないかな〜
- 達人が教えるWebパフォーマンスチューニング 〜ISUCONから学ぶ高速化の実践
- ISUCONやってなくても普通に使える事書いてあるのでオススメ
- インフラ苦手な人にも結構トレーニングとして良い
- 実践Rust入門
- Rust本は何冊かあるが、結局これが一番良いと思う
- 図が分かりやすく、実装順序も丁寧
- もっともっとチュートリアル的なのが良いなら『高効率言語 Rust』
- こちらはPythonのExampleも一緒に書いてあるのでPython読み書きできたら読める
- AI Lab向き
- 機械学習のエッセンス
- 機械学習における数学的な知識のベースになる本
- 非常に優しく、かつ機械学習への応用に絞って大学数学が説明されている
- 機械学習のOSSドキュメント、論文に書かれている数式は7割近く読み書き出来るように
- 応用も効きやすいので、数理系の何かを初学する前に必ず読むべき
- Kaggle Grandmasterに学ぶ 機械学習 実践アプローチ
- 『Kaggleで勝つデータ分析の技術』と迷う
- コンペや実務でも汎用的に使えるCVや評価の話をどれだけ書いてあるかがポイントだなと
- 分析モデル入門
- 数式めっちゃわかりやすいし広く色んなモデルを学べる
- これ読んだ後はもう少し専門の書籍を読むのが良い
## PM
- INSPIRED / EMPOWERED
- それぞれプロダクトマネージメント、チームマネジメントのバイブル
- 1エンジニアにはやや実践しにくい面も
- PMの動きを理解出来るのがメリット、歩み寄り
- PLG プロダクト・レッド・グロース
- AI Lab林オススメ
- プロダクトマネージメントするなら読んだほうが良い事例が詰まっている
- イシューからはじめよ
- 言葉尻強めのプロダクトマネージメント本
- PdMや役員が結構みんな読んでるので、共通言語として読んでおくと良い感ある
- UXデザインの教科書
- 前職のデザイナーに推されて買った
- 「UXは工学である」という事がはっきり分かる
- が実践までが遠い...
- 行動を変えるデザイン
- ほんとはエンジニアも読んだら良いと思うけどUI/UXについて考えてる人向け
- フロントエンドには刺さるかも
- プロダクトマネジャーの教科書
- 実質ドリルみたいなとこある。起業したい人向け感
## ビジネス書
- HIGH OUTPUT MANAGEMENT
- TL/EM/PdM/CTOには必読レベルだが組織のレイヤが高くないと分からない事も多い
- バイブルではある
- 『チームトポロジー』とかも同じ
- 採用基準
- 河合の働き方におけるリーダーシップの全てがここにある
- リーダーシップ本は『elastic leadership』とこれ読んでおけば間違いない
- リーンスタートアップ
- 必読書かというくらい皆読んでるので共通言語として読んでおくと良い
- 内容はベンチャーITにいれば割と普通かもしれない
- HARD THNGS
- めっちゃ良いけどザ・ビジネス書って感じ、啓発
- ビジネスマンに多く読まれているのでベースラインとして
- 『THINK AGAIN 発想を変える、思い込みを手放す』もよい、ネジ外す系
- 心理的安全性の作り方
- ヌルい職場ではなくちゃんと困難を乗り越えるチームにするための色々が書いてある
- チームを強固にしたい時読むとよい、どちらかというと輪読に向いている
- Scaling Teams 開発チーム 組織と人の成長戦略
- 目標の達成と制度、仕組みが連動していないといけない話が事例込みで書かれている
- 特に組織のヤバイ兆候の検知に敏感になれる
- WORK RULES
- OKR達成を浸透させるための仕組みや評価制度に関する本
- OKR立てて達成しましょう、では駄目で仕組みを常に作り続けなる
- googleの人事が書いているのでややパワープレイ感あるが正解でもある
- Scaling LEADERSHIP
- リーダーに求められる事が全て大規模アンケートの定量分析から得られた情報を元に書かれている
- 論理的でエンジニア向けではある
- 「前著(翻訳されていない)で書いた〜〜」が多めだが前著は英語のみ
- VISION DRIVEN
- OKRをフレームワークとしてではなく必要性から理解したい時
- なぜ大きな目標を立てるのか理解したい時に読むとよい