■ 1. ソフトウェアエンジニアリングの核心は人間的側面にある
- 業界創世記の約束「コンピューターを完全に理解すればすべてうまくいく」は誤りだったというのがベックの中心的主張
- 実際のボトルネックは人間同士の相互作用(共感、コミュニケーション、説得、信頼構築)にある
- ベックは自身を「自閉スペクトラム的」であるとし、これらのスキルを10年遅れの立場から学んだと語る
- ダリオ・アモデイの「コーディングはソフトウェアエンジニアリングの他の何よりも先に消え去る」という発言に対し、ソフトウェアエンジニアリングを理解していない発言だと反応
- コーディングは活動全体の一部に過ぎず、残りは自信、つながり、理解の構築である
- 「コードよりも信頼を蓄積するペースが遅い」状態にあると指摘
- ドメイン概念の理解、コードでの表現、理解を証明するテストの作成、他者との共同作業が信頼構築の要素であり、完成したコードのみを返す仕組みではこれらを自動化できない
■ 2. Smalltalkのるつぼ: パターン、ツール、プログラミング哲学
- ベックの形成期は1980年代のテクトロニクス、ウォード・カニンガムとのSmalltalkでの活動
- Smalltalkは3つのプリミティブ(メッセージ送信、変数代入、値の返却)のみで構築され、組み込みの制御構造を持たない
- 条件分岐もBooleanオブジェクトのライブラリメソッドとして実装
- 主流言語(C++、Javaなど)は多数のプリミティブ、言語キーワードによる制御構造、コンパイル+リンク工程を持つ
- Smalltalkは編集後即時実行が可能でコンパイル工程がない
- Smalltalkではユーザーがセッション中にデバッガを変更できるのに対し、主流言語ではツールが分離され変更が困難
- Smalltalkの主な対象者はパーソナルコンピューティングと創造的精神、主流言語はエンタープライズとチーム規模の開発
- このミニマリズムがプログラマーに自らすべてを構築させ、深い理解とツール構築の文化を生んだ
- ベックとカニンガムは10Hzで矩形を動かせるグラフィカルエディタ「Hot Draw」を開発
- 物理的なシソーラスを用いて「Figure」「Handle」などの概念を命名し、命名をプログラミングの中核スキルと位置づけた
- このコラボレーションから一連の技術レポートと、クリストファー・アレグザンダーの建築理論に触発されたデザインパターンの基礎が生まれた
- パターンは制約であり、既に下した決定から生じる制約に基づいて特定のタイミングで特定の決定を下すものであるとベックは述べている
■ 3. TDD: 馬鹿げたアイデアから業界標準、そして議論の的へ
- ベックは二つの流れを組み合わせてテスト駆動開発を考案した
- 子供時代に読んだ「プログラムを書く前に期待される出力を手動でタイプせよ」という教え
- 最初のユニットテストフレームワークSUnit(3クラス12メソッド)の開発経験
- 最初のTDDコード(スタックの実装)を書いた際、アイデアが馬鹿げているように思え声を出して笑ったが、その後不安を感じずにスタックを完成させた
- フレームワークはSmalltalkを通じて広まり、その後ベックとエーリッヒ・ガンマがウィーンからワシントン・ダレスへのフライト中にJUnitを執筆
- バッテリー2時間半、インターネットなし、3.5インチフロッピーディスクという環境で作成
- 翌日のOOPSLAでマーティン・ファウラーがフロッピーを配布し、需要が生まれた
- TDD衰退の要因は二つ
- ベック自身が他のトピックに移ったこと
- 他者がTDDを「道徳的な棍棒」(TDDを使わなければプロフェッショナルではないという主張)として用いたこと
- ベックはこのフレーミングを拒否し、TDDの採否は道徳的決定ではなく実践的決定であるとする
- TDDの最適領域は、実行と学習を急速に交互に行う場合(最初の一歩は分かるが正確な道筋が不明な時)
- まっすぐに実装できる場合や、構築せずに学びたいだけの場合はTDDが役立たないとする
■ 4. エクストリーム・プログラミング: 命名、タイミング、そしてパンク精神
- XPは1996年のクライスラーC3プロジェクト(Y2K対応給与システム)から生まれた
- ベックはパフォーマンスコンサルタントとして招かれ、プロジェクトが正しい答えを計算できていないことを発見
- 全員を2週間帰宅させ、既存のコードをすべて破棄
- 給与専門家がテストケースを指定する3週間サイクルで再スタート
- ペアプログラミング、継続的インテグレーション、リファクタリング、同一言語でのテストを統合
- 「エクストリーム・プログラミング」という名称は、誰にも盗まれないよう意図的に魅力的でなく選ばれた
- グラディ・ブーチが同じことをしていると主張できないようにするための命名
- ベックはエクストリームスポーツとのアナロジーを用い、初心者が雪崩の頂上でスノーボードに飛び乗ることはなく最高の準備とスキルが必要であるとした
- XPのタイミングはドットコムバブル最盛期と重なり、企業がウォーターフォールとカウボーイコーディングの双方に代わる規律ある選択肢を必要としていた時期と合致
- 書籍は2000年に出版
■ 5. アジャイルマニフェスト: 創造、「アジャイル」という誤り、そして似非科学産業
- 2001年のスノーバード会議には様々な軽量方法論(XP、スクラム、FDDなど)を代表する17人が集まった
- ベックは重度の副鼻腔炎の薬を服用しており会議の内容をほとんど覚えていない
- マーティン・ファウラーとジム・ハイスミスが休憩中に残り、4つの価値の構造を起草
- ベックが原則に唯一貢献したのは「ユーザーとの日々の交流」というフレーズ中の「日々の」という言葉
- 署名順はアルファベット順であり、ベックが最初なのは姓がBで始まるため
- ベックは当時「アジャイル」という言葉に反対しており、現在も好んでいない
- 誰も「硬直した開発を好む」とは言わないため、実際の実践に関わらず誰もが自分はアジャイルだと主張できてしまう点を問題視
- 「エクストリーム」という語にはこの問題がなく、基礎スキルへの投資なしにそれを主張することはできなかったとする
- アジャイルを巡り成長した似非科学産業(技術的基盤なしに「半分の時間で2倍の仕事」を約束し、何百万ドルで販売されるスケールドフレームワーク)はベックが恐れていた事態そのものであった
- ベックは、信頼性の高いソフトウェアを少しずつ書くこと、漸進的に設計すること、独自のツールを構築することといった技術的スキルが前提条件であると主張
- それがない状態でのアジャイル導入は、初心者を雪崩の頂上でスノーボードに乗せる行為と同様であるとする
■ 6. Facebook時代: TDDなしでスケールする方法を学ぶ
- ベックは2011年、50歳で最初のリモートエンジニアの一人としてFacebookに入社
- 当時のFacebookは700人のエンジニア、総従業員2,000人の規模
- 5人の子供の大学学費のための安定収入と、深い好奇心が入社動機
- Facebookはスケール、成長、イノベーションを同時に達成しており、これは自身の理論では不可能とされていた事態であった
- 最初の貢献の試みはハッカソンでのTDDクラスであったが、参加者はゼロ
- 前後のクラス(アルゼンチンタンゴ、上級Excel)は満員であった
- ベックは自身が知っていると思っていたことをすべて忘れ、ゼロから学ぶことを決めた
- ユニットテストの不在を補う多層的なフィードバックシステムが存在することを見出した
- 開発者マシン: ローカルでサイト全体を実行し、変更を数秒で確認(PHP)
- コードレビュー: すべての変更に対するピアフィードバック
- 内部ドッグフーディング: 全員が個人的およびビジネス目的でFacebookを使用
- 段階的ロールアウト: 影響範囲を数百万人のユーザーに限定
- 自動ロールバック: システムレベルのシグナルが巻き戻しをトリガー
- 「スター」システム: エンジニアを評価し、低スターの著者はプッシュ不可
- 可観測性: デプロイ後のメトリクス取得
- インシデントレビュー: 毎週の上級レビューがあり、責任転嫁は解雇対象
- 最初の機能にユニットテストを書いたにもかかわらず、見つけられなかった結合コードパスによりサイトインシデントを引き起こした
- システムは好みの方法論の「おかげで」ではなく「にもかかわらず」機能していたと分析
- ユニークなインセンティブ構造も観察
- IPO前、中間管理職は権利確定したストックオプションで世代を超える富を得ており、会社の価値最大化のため他チームへの異動を勧めるなどグローバル最適化を実践
- 50/50ゴールシステムでは、目標の半分達成でA+、全達成はサボタージュ(わざと低い目標を設定した証拠)とみなされ、未達成は解雇となる仕組みであった
- ブートキャンプ中に写真配信コードを並列化し、偶然にも年間500万ドルを節約
- 「Good to Great」コーチングプログラム(200人の1対1の生徒、訓練されたコーチを通じてさらに数千人)は、マッチングされたコホートと比較し翌年に昇進する可能性が2倍高いエンジニアを生み出した
- ベックは2017年にFacebookを退社
■ 7. 現在の状況: AIが虎の巻を白紙に戻した
- ベックの現在の主張は、20年以上の「抽出」フェーズで蓄積されたソフトウェアエンジニアリングの虎の巻がAIによって白紙に戻されたというもの
- ジーニーを使った開発の正しい方法は誰も知らないとする
- 「虎の巻を知っている」というアイデンティティを持っていた人々は恐怖を感じている
- 製品開発の3つのフェーズ(3Xモデル)を提示し、それぞれ異なる規律を必要とするとした
- Explore: 無相関な実験を安価に多数試す段階、虎の巻は存在せず「誰も知らない」が正直な答えとなる
- Expand: 機能する一つのことに集中し他をすべて捨て、次々と障害を乗り越える段階
- Extract: 予測可能な成長と規模の経済が働く段階、小さな調整が大きな違いを生み、虎の巻が存在し教えられる
- 20年間、業界の大部分は「抽出」フェーズにいたが、AIの登場により全員が再び「探索」フェーズに置かれているとする
- 虎の巻を書くスキルと適用するスキルは全く異なるものであり、1990年代に成功した人々(Smalltalk、パターン、XP)は虎の巻の書き手であった
- ベックは自身がこの得意分野(虎の巻を書くこと)にいると述べている
- 開発のペースは加速したがビジネスのペースは加速していないと警告
- スイッチングコストに依存して利益を守ってきた企業は、そのコストがゼロになる事態に直面する
- 例として、あるSaaS製品に年間200万ドルを費やしていたクライアントの代替品が「バイブコーディング」により1ヶ月で作成された事例を挙げている
- ベンダーのカスタマーサービスから製品へのチェーンは5年の応答時間を想定して設計されており、残された時間は1ヶ月しかない状況が生じる
- 「氷山問題」についても警告している
- バイブコーディングは複雑なシステム(例: グロスからネットへの給与計算)の目に見える先端部分を置き換えるが、水面下のコンプライアンスやレポート要件は手つかずのまま残る
- 氷山の残りの部分を捨てることでトラブルに巻き込まれる人が出ると指摘
■ 8. 今、ケント・ベックを興奮させるもの
- ベックは新しいSmalltalkをゼロから構築中
- オブジェクト指向データベース「Arlo」を開発
- Rustの標準Bツリーを一部の操作で上回るパフォーマンスを示すB+ツリーをRustで構築(Rustのエキスパートではないにもかかわらず)
- これらすべてにAI(ジーニー)を使用しており、鍵となる行動はためらわずにやり直すことであるとしている
- 以前は大きすぎるか退屈すぎて実行できなかったアイデアが40年分あると見積もっている
- ジーニーが「愚かな細部」(バージョンの競合、依存関係地獄、環境設定)を取り除いたことがものづくりの妨げの解消につながったとする
- 迅速な反復を行っている(プロジェクト、プロジェクト2、プロジェクト3、新規プロジェクト、新規プロジェクト2、ワイプ、異なる実装順序でのやり直し)
■ 9. テーマ横断的な統合
- ベックのキャリア全体をつなぐ3つの糸が存在する
- 安価に試される馬鹿げたアイデアの価値: TDD、XP、現在のAI実験はすべて彼が笑い飛ばしたアイデアとして始まった
- 技術に対する人間の優位性: 彼が作成または貢献した主要な方法論はすべて、コードそのものではなく最終的に人間のコミュニケーションと信頼を可能にすることに関するものであった
- やり直す意志: クライスラーC3の再スタートからGitHubプロジェクトのワイプまで、埋没費用を捨て新たな理解と共に再び始めるパターンが一貫している
- 未解決の緊張関係として、現在のAIの状況がオブジェクト指向プログラミングと同じ軌跡(一貫した虎の巻が現れるまでに15年の実践を要した経緯)をたどるのか、それとも今回の変化速度が根本的に異なるのかという論点が挙げられている
- ベックの見立ては前者であり、マニフェストは時期尚早でありほとんどの質問に対する唯一の正直な答えは「誰も知らない」であるとしている