目次
過去2年間で45冊の技術書を読みながら得た核心的なインサイトを共有し、ソフトウェアエンジニアとしての考え方の形成に与えた影響、とりわけAI時代と効率的な開発プロセスへの深い理解を振り返る。
ポッドキャスト紹介と2周年の振り返り
Book Overflow紹介
- ソフトウェアエンジニア向けの技術書ポッドキャストで、毎週優れた技術書を読みながらスキルを高めることを目標としている。
2周年記念エピソードの企画
-
ポッドキャスト2周年を迎え、過去2年間に読んだすべての本を振り返り、それぞれの本から最も記憶に残り、現在まで影響を与えている唯一のインサイトを共有する。
-
単に本の内容を覚えていることを超えて、ソフトウェアエンジニアとしての考え方を形成するうえでどのような影響を与えたのかに焦点を当てる。
過去2年間の変化
-
ポッドキャストのホストであるカーターとネイサンは、過去2年間で私生活に大きな変化を経験した。
-
ネイサンは別の国へ移住し、2人とも大学院課程を修了し、ネイサンは間もなく生まれる子どもを待っている。
-
職業面でも変化があった。ネイサンはフルタイムのコンサルティングへ移行し、カーターはビッグテックからスタートアップへ転職した。
-
-
こうした個人的な変化の中でもポッドキャストを続けられたのは、リスナーの支援と関心のおかげであり、それに感謝を示している。
主要な技術書ごとの核心的インサイト
The Practice of Programming (Brian Kernighan, Rob Pike)
-
核心的インサイト: Go言語の基盤となるプログラミング哲学を含んでおり、一部の内容は時代遅れになっているものの、核となるアイデアはいまも有効である。
-
GoプログラマーとしてRob Pikeのファンであるためこの本を覚えており、優れたプログラミングの核心的なアイデアはこの本から出てきたと振り返る。
-
CSVパーサーのように、一部の内容は時代遅れであることにも言及されている。
-
A Philosophy of Software Design (John Ousterhout)
-
核心的インサイト: 「二度設計する(Design It Twice)」という概念で、最初から完璧に設計しようとするのではなく、システムを構築しながら学び改善していく過程を通じて、より良い設計ができることを強調する。
-
AI時代にはLLMを活用することで、二度設計するために必要な労力が減り、より効率的な設計が可能になる。
-
この本は2018年に出版されたにもかかわらず、いまなお大きな影響を与えており、多くの本で引用されている。
-
-
追加の洞察
-
複雑性をカプセル化するアプローチ、インターフェース設計、エラー処理について強力なアイデアを提示している。
-
著者John Osterhoutへのインタビューを通じて、TDDに関する彼の見解と批判を聞くことができた。
-
Refactoring: Improving the Design of Existing Code (Martin Fowler)
-
核心的インサイト: リファクタリングはいつ中断してもよく、コードの出力を変更せずに設計を改善する作業であるため、小さな単位で継続的に進められる。
- リファクタリングをコード全体の書き直しだと誤解することは多いが、Fowlerの定義は非常に狭い範囲に限られる。
-
実際の適用例
-
最近、roborobato.comの性能最適化のためにNext.jsとReactの使い方を改善する過程で、本当の意味でのリファクタリングを適用した。
-
機能やUIを変更せずにコード構造を再構成し、5つのコミットに分けることで、容易にレビューして適用できた。
-
What Is ChatGPT Doing and Why Does It Work? (Stephen Wolfram)
-
核心的インサイト: LLMの動作方式、とくに次トークン予測メカニズム、温度(temperature)の概念を理解する助けになった。
- LLMに内在するランダム性が強力さを生み出していることを説明している。
-
本の価値
-
複雑なテーマを分かりやすく説明する、よく構成された分析を提供している。
-
LLMへの理解を助ける基礎的な語彙とフレームワークを提供しており、これは今でも重要な知識である。
-
Fundamentals of Software Architecture (Mark Richards, Neal Ford)
-
核心的インサイト: アーキテクチャのビジョンを技術系・非技術系のステークホルダーに売り込む能力の重要性を強調し、それをアーキテクチャの根本的な要素と見なしている。
- 絶えずコミュニケーションし、自分の価値を証明しなければならず、「私の言う通りになる」という態度は望ましくない。
-
追加の原則
-
象牙の塔にとどまらず、コードとチームに寄り添い、設計を直接体験し、数歩先を行きながら潜在的な問題を予測しなければならない。
-
ADR(Architectural Design Document)の役割を強調し、意思決定プロセスを記録し進化させることが重要だと述べている。
-
「グラウンドホッグデー現象」を避けるために、意思決定を記録して共有することが不可欠である。
-
The Clean Coder (Robert C. Martin, "Uncle Bob")
-
核心的インサイト: 真のプロフェッショナリズムとは何かを探求し、特に締め切りや見積もりの提示に関するUncle Bobのラディカルな見解を示している。
- エンジニアリング文化では見積もりと締め切りを混同することがよくあるが、プロフェッショナリズムのためにはこれらを明確に区別しなければならない。
-
本の特徴
-
多くのエピソードが含まれており、Uncle Bobという人物についてより深く知ることができる。
-
本はよく書かれていて読みやすく、カバーからカバーまで通読するのに適している。
-
Working Effectively with Legacy Code (Michael Feathers)
-
核心的インサイト: 変更しにくい、あるいは変更するのが怖いコードは設計が悪いものであり、誰でもコードを変更しやすくできる。
-
レガシーコードは、テストカバレッジがない、または動作方式を理解していないコードとして定義される。
-
グリーンフィールドプロジェクトではない場合や、コードベースへの統制力が不足している場合に、どのように始めるべきかについて指針を提供している。
-
-
本の価値
- 各セクションが独立しているため参照用として活用しやすく、カバーからカバーまで読むよりも必要な部分を探して読むほうが効果的である。
Web Scalability for Startup Engineers (Artur Ejsmont)
-
核心的インサイト: スタートアップの初期段階では、過度な最適化や高い可用性を追求するより、素早く動くことが重要であり、適切なタイミングで投資すべきである。
- 初期スタートアップは、顧客が少ない段階で完璧なフォールトトレランスや高可用性を備えようとすべきではない。
-
時代的な限界と提言
-
本で扱われている内容は2010年代に重要だったテーマであり、現在ではSaaSおよびPaaS企業が解決してくれた部分が多い。
-
最新版は、初めての創業者や技術リーダー向けのハンドブックとして更新される必要がある。
-
Recoding America (Jennifer Pahlka)
-
核心的インサイト: 政府ソフトウェアの非効率性と改善可能性を示し、政府ソフトウェアも十分に高品質に作れる可能性を提示している。
-
政府ソフトウェアはチェックリストの完了可否で評価されるため、実際に機能を果たすかどうかは重要視されない。
-
アジャイルの核心原則である「顧客との緊密な協力」と「動くソフトウェアの継続的な提供」が、政府ソフトウェア開発に適用される際の重要性を強調している。
-
Building Evolutionary Architectures (Neal Ford, Rebecca Parsons, Patrick K. Kua, Pramod Sadalage)
-
核心的インサイト: 「フィットネス関数(Fitness Functions)」という概念を通じて、システムが期待通りに動作しているかを客観的に評価し、進化するアーキテクチャを構築する方法を提示している。
-
フィットネス関数は、システムの進化過程を追跡し、設計上の判断が意図通りに機能しているかを確認するうえで不可欠である。
-
Conwayの法則のように、組織構造がソフトウェアアーキテクチャに与える影響を考慮して、チームを構成しシステムを設計しなければならない。
-
Looks Good to Me (Adrian Bergeron)
-
核心的インサイト: 本の具体的な助言は覚えていないが、プルリクエスト(PR)の重要性をあらためて思い出させてくれた。
-
最近、会社で進めたマイグレーションの過程でPRレビューが不十分だったことを反省し、この本を改めて読み返す必要性を感じている。
-
本の価値
-
チーム内の社会的契約と標準の定義について、優れた指針を提供している。
-
技術書は、必要なときに読み返してアイデアを発展させるのに役立つ。
-
Slow Productivity (Cal Newport)
-
核心的インサイト: 「少なく働き、意味のある仕事に集中せよ」というメッセージを通じて、疑似生産性(pseudo-productivity)に警鐘を鳴らし、価値の高い活動に集中すべきだと強調している。
-
Cal Newportの深い思考様式を示す本であり、ポッドキャスト運営のような重要な仕事に集中するため、不要な活動を減らした。
-
キャリアを重ねるほど、最も高いレバレッジと価値を持つ活動に集中すべきであり、疑似生産性はそれを妨げる。
-
The Unicorn Project (Gene Kim)
-
核心的インサイト: DevOpsプロセスの重要性をソフトウェアエンジニアリングの観点から説明し、根本的な問題を解決して開発速度を高める必要があると強調している。
- リリースマネージャに依存するシステムは非効率であり、自動化されたプロセスを通じて誰でもリリースを管理できるようにすべきだ。
-
本の構成と影響力
-
前著『The Phoenix Project』とは異なり、ソフトウェアエンジニアリングの観点からDevOpsを説明しているため、より多くの開発者に適用できる。
-
寓話形式で技術的な内容をわかりやすく伝え、技術書に物語を組み合わせるトレンドを牽引した。
-
Tidy First (Kent Beck)
-
核心的インサイト: コード構造の「オプショナリティ(Optionality)」、つまり柔軟性と拡張性の価値を強調しており、これは時間価値と同様に将来の潜在的利益を生み出す。
- コードを最初に書くとき、将来必要になる機能を予測するのは難しいため、柔軟に変更できる形で書くことが重要だ。
-
本の特徴と価値
-
短く簡潔な本だが、深い洞察を提供し、ソフトウェア開発の楽しさを感じさせてくれる。
-
オプション取引のような他業界のアイデアをソフトウェアに適用することは、成熟した開発の証である。
-
Unix: A History and a Memoir
-
核心的インサイト: Unixの中核的なビルディングブロックの一つである「パイプ(pipes)」の動作原理と重要性を理解できた。
- 各プログラムが入力を受け取り出力を返すというUnix哲学のおかげで、パイプ演算子を通じてプログラム間の出力を容易に接続できる。
-
Doug McIlroyの役割
- Doug McIlroyは、パイプを通じてUnixのアイデアを統合するうえで重要な役割を果たし、Unix哲学の形成に貢献した。
The Twelve-Factor App
-
核心的インサイト: クラウドネイティブアプリケーション構築のための12の原則を提示しており、これらの原則を誤って適用すると、かえって複雑性を増やす可能性がある。
-
Heroku時代に作られた原則であり、基本的な原則を見るとうなずけるものが多い。
-
Kubernetesのように、特定の技術を理解せずに適用する場合と同様に、これらの原則も誤用される可能性がある。
-
The Agile Manifesto
-
核心的インサイト: アジャイルはウォーターフォールモデルへの反作用であり、動くソフトウェアを素早く届け、顧客フィードバックを迅速に反映することを目指している。
- アジャイルの核心は、顧客やステークホルダーと緊密に協力しながら、ソフトウェアを反復的に改善することだ。
-
現代的な適用と批判
-
アジャイルの本質は多くの開発者にとって馴染み深いものだが、意識的な努力なしにはその意味を失いやすい。
-
現代のソフトウェア開発に深く根付いているため、新しいことを学ぶというより、既存のやり方を振り返らせる。
-
ウォーターフォールモデルへの反発として非常に効果的であり、ソフトウェアの複雑性ゆえに、長期的な計画よりも小さな単位で価値あるものを届けることが重要だと強調している。
-
The Software Engineer's Guidebook (Jorge Orozco)
-
核心的インサイト: キャリアの発展とともに、レバレッジの高い仕事に集中し、自分のキャリアを主体的に管理する必要がある。
- マネージャーとスポンサーの重要性を強調しており、マネージャーは昇進のためにあなたを支援し、あなたはその期待に応えるべく努力すべきだ。
-
本の特徴
-
『The Pragmatic Engineer』ニュースレターと同様に、キャリア管理に関する実践的な助言を提供している。
-
複雑なキャリアパスを理解し、自分を積極的にアピールするために必要なフレームワークを提供している。
-
Hypermedia Systems (Carson Gross, et al.)
-
核心的インサイト: HTMXのような技術を使えば、サーバーサイドレンダリングでも十分に動的なWebアプリケーションを構築でき、複雑なJavaScriptクライアントの必要性を減らせる。
- Web本来の発想であるハイパーメディアシステムの利点を活かし、バックエンド技術に関係なく、優れた仕様さえあれば多くの機能をサーバーサイドで実装できる。
-
HTMXの利点と限界
-
HTMXで書かれたコードは単純で保守しやすく、最新フレームワークより長く使われ続ける可能性が高い。
-
HTMXがWeb開発の未来ではないかもしれないが、こうした反対意見はエンジニアとしてより良い判断を下す助けになる。
-
Team Topologies (Matthew Skelton, Manuel Pais)
-
核心的インサイト: チームは、調整すべき相互依存関係を最小化するように構成されるべきであり、チーム構造はソフトウェアアーキテクチャに直接影響する。
-
チームトポロジーは、チーム間の調整を減らしてフローを最適化することに重点を置いている。
-
チーム構造がソフトウェア構造を決めるため、チーム編成には慎重であるべきだ。
-
Ace the System Design Interview (Alex Xu)
-
核心的インサイト: システム設計面接では、「ざっくり計算(back-of-the-napkin math)」を活用して、規模や性能要件を見積もることが重要だ。
-
一般的な時間やデータサイズなどの数値を覚えて活用し、システム要件を具体化すれば、推測ではなく根拠に基づいた設計ができる。
-
たとえば、1時間あたりのツイート数を処理する必要がある場合、1ツイートあたりのバイト数とツイートの長さがわかれば、必要なストレージ容量とスループットを計算できる。
-
-
面接での活用法
-
面接官と一緒に声に出して考え、計算プロセスを共有すれば、フィードバックを得てより良い設計ができる。
-
単に最新技術を並べるのではなく、なぜ特定の技術を選んだのかという根拠を示すことが重要だ。
-
The Good News Factory (Kent Beck)
-
核心的インサイト: ソフトウェアチームが継続的に「良い知らせ」を届ける「良い知らせ工場」になるためには、クリーンコードと拡張可能なシステムの構築が不可欠だ。
- チームが前向きな成果を継続的に示せなければ、外部で否定的な物語が作られる可能性がある。
-
本の特徴
- 短く簡潔なレポート形式の本で、核心的なメッセージを効果的に伝えている。
Thinking in Systems (Donella Meadows)
-
核心的インサイト: 「ストックとフロー(stocks and flows)」の概念を通じてシステムの動的な特性を理解し、複雑なシステムを分析するのに役立つフレームワークを提供している。
- GDP(フロー)と時価総額(ストック)の違いを理解するように、システムの現在状態と変化率を区別することが重要だ。
-
本の価値
- 抽象的ではあるが、戦略的思考やシステム思考を行ううえで、高いレベルの洞察を提供している。
Grokking Concurrency (Karol Bobrov)
-
核心的インサイト: 並行性モデルを「適切なサイズに調整する(right-sizing)」ことが重要であり、細かくしすぎても広範にしすぎても欠点がある。
- 並列化したり並行タスクに分けたりできる作業単位を理解し、システムをチューニングする方法を提示している。
Rework (Jason Fried, David Heinemeier Hansson)
-
核心的インサイト: 小さく、知られていない状態をむしろ利点として活用し、反復と再発明を通じて成功を作り出せる。
- 有名になる前の不利な状況が、むしろ革新の機会になり得るため、成功の利点を逃さないようにそれを活用すべきだ。
-
本の特徴と影響力
- 論理的でよく書かれた本であり、ブートストラップや主流の成功概念に合わないものを築こうとする人々にインスピレーションを与える。
-
Basecampと37signalsの成功事例を通じて、彼らの哲学が時を経ても有効であることを証明している。
In the Plex (Steven Levy)
-
核心的インサイト
-
Googleのエンジニアたちがオークション理論のような複雑な概念を独自に再発明する能力は、賢い人材を採用し、信頼したときに得られる成果である。
-
スタートアップの成功は保証されていないため、絶えず努力し、会社の未来のために貢献しなければならない。
-
-
著者とのつながり
-
著者のSteven Levyは優れた作家であり、彼の別の著書『Crypto』も推薦に値する。
-
本に登場する人物が現在CEOを務める会社の面接を受けることになった経験は、とても興味深かった。
-
Thinking Like a Large Language Model (Mukund Sundararajan)
- 核心的インサイト: この本についての具体的な記憶は薄れているが、LLMの考え方を理解する助けになった。
The DevOps Handbook
-
核心的インサイト
-
CI/CDパイプライン、自動ロールバック、向上したオブザーバビリティなど、実践的なDevOps実装の指針を提供し、チームのソフトウェアエンジニアリング能力を大きく向上させた。
-
「新しい検索機能」のような新機能をデプロイする際、実トラフィックの一部を新しいAPIに送り、結果を観察する「シャドウトラフィック」手法を紹介している。
-
デプロイとリリースを分離する重要性を強調しており、機能フラグを使うことで、マイグレーション中に起こり得るリグレッションに迅速に対処できる。
-
-
本の著者と価値
- Gene Kim、Jess Humble、Patrick Dubois、Nicole Forsgren、John Willisなど著名な著者が参加しており、『Unicorn Project』と『The Phoenix Project』を補完する内容を含んでいる。
Just for Fun: How Linus Torvalds Started an Accidental Revolution
-
核心的インサイト: Linus Torvaldsは楽しさを感じることに集中することでLinuxを作り、それが世界を変える結果をもたらした。
- 楽しさを感じることに集中することが、最も懸命に働く動機となり、予期しない大きな成功につながり得る。
-
オープンソースソフトウェアの革新
- Linus Torvaldsはオープンソースソフトウェアで収益を生み出し、原則を守る非伝統的な方法を切り開き、これはサーバー運用やコードコミットのあり方に大きな影響を与えた。
Made to Stick
-
核心的インサイト: 記憶に残るアイデアは特定のパターンに従っており、創造的な天才でなくても、こうしたパターンを活用してアイデアを効果的に伝えられる。
- 「楽しいことに集中し、最も楽しいことに最も懸命に取り組むことになると信じよ」というメッセージは、個人のキャリア上の意思決定に大きな影響を与えた。
Staff Engineer (Will Larson)
-
核心的インサイト: Staff Engineerのレベルでは、優先度と影響力の高い仕事に集中すべきであり、これはキャリア全体にわたって適用される重要な指標である。
- Staff Engineerになる道に決まったルートはなく、多様な背景を持つ人々が複雑な問題を解決する。
Finite and Infinite Games (James P. Carse)
-
核心的インサイト: 「有限ゲーム」は勝敗が明確だが、「無限ゲーム」はゲームそのものを楽しむことが目的であり、人生で無限ゲームを追求することが重要である。
- Linus TorvaldsがLinuxを作ったとき、最も人気のあるOSを作るという有限ゲームではなく、最高のOSを作り、コミュニティを築くという無限ゲームを追求した。
Radical Candor (Kim Scott)
-
核心的インサイト: 直接的で率直なフィードバックこそが相手のためになる道であり、「破滅的な共感(ruinous empathy)」を避けるべきである。
-
相手の幸福を心から気にかけているからこそ直接的なフィードバックを行うのであり、それは無礼とは異なる。
-
フィードバックを与える際は相手の感情を考慮しつつ、核心を明確に伝えることが重要である。
-
Mastering OpenTelemetry and Observability (Steve Flanders)
-
核心的インサイト: ベンダーロックインを避け、OpenTelemetryを使うべきだが、AI時代にはベンダーロックインの重要性が変わり得るという点を再考するきっかけになった。
- DataDogのようなツールの便利さゆえにベンダーロックインは魅力的に見えることもあるが、価格変更やM&Aなどのリスクを考慮する必要がある。
Beyond Vibe Coding (Addy Osmani) & Advanced React (Nadia Makarevich)
-
核心的インサイト
-
『Beyond Vibe Coding』は、生産的なエンジニアがコーディングエージェントと協力してコードを書く「拡張AI(augmented AI)」の概念を紹介している。
-
『Advanced React』は参考資料として活用しやすい。
-
The Tao of Programming (Jeffrey James)
-
核心的インサイト: OSの構築では技術的な正確性だけが重要だが、給与システムのように現実世界をモデル化することは、ステークホルダーなど複雑な問題を含むため、より難しい。
- これはプログラマーにとって直感的ではない場合があり、現実世界をソフトウェアでモデル化することには本質的な複雑さがあることを示唆している。
-
「Worse Is Better」エッセイとの関連性
- 『The Tao of Programming』と「Worse Is Better」は、短いながらも深い思考を促す、似たタイプの文章である。
Mastering the Behavioral Interview (Austin McDonald)
-
核心的インサイト: シリコンバレー式の技術面接で、自分の経験を「孤高のハッカー」のようなアーキタイプに合わせて語る方法を学べる。
- 面接でストーリーを効果的に伝える技術は非常に重要であり、この本はその方法を具体的に示している。
Designing Data-Intensive Applications (Martin Kleppmann)
-
核心的インサイト: 信頼性、レイテンシ対スループット、レジリエンス対高速復旧など、分散システムの基本概念を深く扱っている。
- データプライバシーや注意力の搾取といったテーマも扱っており、高需要システムを構築する際に、より多くの内省を促すだろう。
Reflections on Trusting Trust (Ken Thompson) & Coding Machines (Lawrence Kesteloot)
- 核心的インサイト: AIがコードを生成する時代に、生成されたコードへの信頼の問題と、潜在的な悪意(例:ステガノグラフィ)について深く考えさせられる。
Frictionless (Nicole Forsgren, Abby Noda)
-
核心的インサイト: この本は主に大企業のリーダーを対象に、開発者体験(DevEx)イニシアチブの実装に焦点を当てているため、現在のキャリア段階では大きな影響は受けなかった。
- DevExについて優れた内容を含んでいるが、シリーズC以降の段階の企業にとって、より重要かもしれない。
Project Hail Mary (Andy Weir)
-
核心的インサイト: 未来は恐れる対象ではなく、解決すべき問題であり、人類とテクノロジーの役割に対する楽観的な見方を示している。
- 困難な状況でも集中と革新を通じて驚くべきことを成し遂げられるという、希望に満ちたメッセージを伝えている。
2件のコメント
Ask機能があるので、すべての内容をまとめていただかなくても問題なさそうです。むしろ、これを共有してくださった理由がいちばん気になりましたし、内容は3行要約でも十分だと思います。サイトのURLは以下の通りです。
https://bookoverflow.io/