【達人プログラマー】新装版から見えるプログラミング20年の歴史

pragmatic-programmer

書籍『達人プログラマー』。すべてのプログラマーが読むべきエッセンスが込められた名著です。

初版は1999年の古典ですが、20周年を記念した新装版が、新たに出版されています。

第2版では、ほぼ3分の1は新たに書き下ろし。また残りの部分も書き直されたりしています。

  • 第1版を読んだあなた…第2版であなたの知識をアップデートしましょう。
  • 第2版から読んだあなた…レガシーな雰囲気を体感しつつ、過去から教訓を学びましょう。
目次

『達人プログラマー』第1版と第2版の主な違い

書籍『達人プログラマー』。エンジニアの間では、必読といわれる名著です。

第1版と第2版、本質的な内容は変わらないのですが、それでも20年の歴史の中で改版されている箇所がいくつもあります。その差から、プログラミングにおける20年間の変化が見えてきます。

主な違いを見てみましょう。

第1版第2版
目次第1章 達人の哲学
第2章 達人のアプローチ
第3章 基本的なツール
第4章 妄想の達人
第5章 曲げるか壊すか
第6章 コーディング段階
第7章 プロジェクトを始める前に
第8章 達人のプロジェクト
第1章 達人の哲学
第2章 達人のアプローチ
第3章 基本的なツール
第4章 妄想の達人
第5章 柳に雪折れ無し
第6章 並行性
第7章 コーディング段階
第8章 プロジェクトを始める前に
第9章 達人のプロジェクト
Tips数70個100個
第1版と第2版の違い

構成は大きく変わりません。ただ第2版では章が追加されたり、Tipsが増えたりと、内容が増えています。

また同じ名前の章でも、現在の方法論やテクノロジーに合わせて、内容が大幅に見直されています。単に言葉の使い方を直したといったレベルではない、本気度が垣間見える新装版になっています。

それぞれの章ごとに、第1版と第2版の違いを見ていきましょう。

1章 達人の哲学 の違い

達人が持つべき基本的な考え方、の章です。

変わらないこと

内容はほぼ変わっていません。達人の哲学は、年月を経ても不変なのですね。

重要なのは「あなた」が主体的に判断すること。印象的なTipsをいくつか紹介しましょう。

いい加減な言い訳よりも対策を用意すること

他人や他の何かを非難したり言い訳をしない。そのソリューションを提供するのは他ならぬ「あなた」です。

見聞きしたものごとを批判的な目で分析すること

インターネットの検索エンジンの結果が最適とは限らない、書店の特設棚に置かれた書籍が良書とは限らない。「あなた」自身が批判的に分析しましょう。

変わったこと

あえていうなら、第2版で以下のTipsが追加されています。

あなたには現状を打破する力がある

ここで挙げられている、マーティンファウラー氏の言葉が、痛快。

あなたは組織を変えることができる、あるいは組織を変わることもできる

職場環境が悪い、仕事が退屈極まりない…そんな時は、なんとか改善しようと努力する。でもいつまでも続けてもいけない。他の手も考える。

積極的に行動を起こす大事さが、述べられています。

2章 達人のアプローチ の違い

達人が、もとごとにどう関わっていくか、の章です。

変わらないこと

大きく内容は変わっていません。DRY原則、直交性、可逆性…。いろいろな物事のベースとなる考えが詰まっています。

印象的なのは、曳光弾(えいこうだん)の内容でしょう。

目標を見つけるには曳光弾を使うこと

弾道が光の筋をえがく、特殊な弾丸。暗闇の中で照準をあきらかにします。

ソフトウェア開発でいえば、最終形態イメージが見えるようなコードを、早い段階で作るようなことです。この暗闇を照らすコードは、目標を捉えるのに絶大な効果があります。

変わったこと

第2版では、冒頭に「よい設計の本質」の記載が加えられています。

よい設計は悪い設計よりも変更しやすい

アプローチの基本は、ETC原則(Easier To Change)。変化に対応できるよう、変更をしやすくするという考えです。

あらゆるアプローチの基本となる考え方が、さらに丁寧に語られています。

3章 基本的なツール の違い

達人が使う、質の高い道具とは何か?の章です。

変わらないこと

テキスト、シェル、エディターの3種の神器は、時を経ても不変です。

知識はプレインテキストに保存すること

コマンドシェルの力を使うこと

エディターに精通すること

いつの時代も、基本的な道具を徹底的に使いこなすことが、達人への道なのかもしれません。

変わったこと

第1版にあった「コードジェネレータ」は、第2版ではまるごと削除されています。

コードジェネレータとは、コードを生成するコードのこと。現在では、エディターが便利なスニペットでコードを補完してくれたり、さらにはAIが自動でコードを生成する時代。さすがに時代錯誤な内容ではありました。

4章 妄想の達人 の違い

分かりにくいタイトルですね。原題”Pragmatic paranoia”(パラノイアの達人)のほうが、意味が通じるかもしれません。

あなたは完璧なソフトウェアを作ることができない」という、漠然とした恐れ(妄想)に対し、達人がどう向かっていくのか?という章です。

変わらないこと

本質的な内容は変わりません。基本は、予期しない出来事の先を見越し、脱出できない状況に陥らないこと。

誰も、自分自身でさえも完璧ではないという事実を知ることこれがこの章のテーマです。

変わったこと

第2版では、最後に「ヘッドライトを追い越そうとしない」が追加されています。

深夜に走るスポーツカー。ヘッドライトが照らせる距離には限界があり、それを超えたスピードで走れば事故を起こす。というエピソードから語られます。

つまり、より遠くを見通そうとすればするほど、予測を見誤る。ということです。

少しづつ進めること—常に

こんなエピソードも追加されています。

初版出版時には「デスクトップGUI戦争の勝者はMotifかOpenLockか」という論争が花盛りでした。こんな名前など聞いたことがないと思われるかもしれません。いまはブラウザーを中心にしたウェブが世界を牛耳ることになったからです。

プログラミングの技術は日進月歩。これから起こるできごとは、いまの常識の範疇をはるかに超えたものであるかも。変化に対応できるようにしておくことが重要です。

5章 柳に雪折れ無し の違い

タイトルの意味は、「しなやかな柳の枝は、雪が降ってもその重みに耐え、折れることはない」。

「柔軟性の高いコードを書けば、変化に対応しやすくなる」という章です。

第1版では「曲げるか壊すか」。タイトルが変われど、いわんとする内容は同じ。ちなみに原題は、第2版でも “Bend, or Break” です。

大きく変わったこと

第2版でほぼ内容が一新しています。目的は変わらないものの、そのテクニックは、20年の月日で大きく様変わりしました

そのボリュームは膨大。第2版での新装部分を抜粋。

「実世界を救う」:イベント処理について。第1版ではおもにGUIイベントについての記載でした。第2版ではもっと広域な、レスポンシブアプリケーションを見据えてパワーアップしてます。

「インヘリタンス(相続)税」:オブジェクト指向での特徴的な仕掛け、継承。かつては画期的な技術ともてはやされましたが、今ではその問題点が数多く指摘されています。第2版で、注意すべきことが詳しく語られています。

第1版の知識で止まっているなら、急いで知識のアップデートを図った方がよいでしょう。

6章 並行性 の違い

複数のコアを搭載したCPU、複数のCPUを搭載したコンピューター。複数のコンピュータを接続したシステム。これらを同時に使うときの考え方が示される章です。

新しく追加されたこと

第2版で、新たに追加された章です。「すべては並行処理」という出だしで語られています。

このようなTipsが追加されています。

無秩序なエラーはしばしば並行処理によって引き起こされる

共有状態を持たないアクターを並行処理で使用する

20年の歴史における変遷を象徴する章です。昔のモノリシックシステムから、いまのサービス指向アーキテクチャへの変化で、コンカレントプログラミング(並行プログラミング)の重要性が高くなっています。

7章 コーディング段階 の違い

プログラマーは、機械的にコーディングしているわけではない、という内容の章です。

変わらないこと

偶発的プログラミングを避けること、リファクタリングすること、テストすること…。コーディングの基本は、第1版のころから変わっていません。

変わったこと

第2版では、冒頭にひとつ内容が追加されています。

爬虫類脳に耳を傾ける

本能に耳を傾け、問題が襲い掛かる前に察知して避けよう、という内容。経験を積んだプログラマーならば、無意識のうちに「これは何かが間違っている」と感じます。そこから何かをつかみとるための方法です。

抽象的で難しい内容ですが、プログラミングの経験を積んでいったそのときに、実感するでしょう。

8章 プロジェクトを始める前に の違い

プロジェクトが始まる前に解決しておくべき課題、という内容の章です。

変わらないこと

プロジェクトを始めるときの課題として、「ユーザーからの要求を学ぶこと」「難しい問題への対処を考えること」といった内容が語られています。解決すべき本質は変わりません。

変わったこと

その方法論は、第2版で大きく様変わりしています。

最も大きな変化は、アジャイルソフトウェア開発が主眼になったでしょう。

第1版では、要求分析や問題解決の形式的方法論について、是非が問う内容が大半です。いっぽう第2版では、アジャイル開発そのものの考え方に重点が置かれています。

第2版で、重要なTipsが追加されています。

Agileという言葉は名詞ではなく、ものごとの進め方を形容する形容詞である

「アジャイルな手法」といった名詞は存在しません。これを実行すればアジャイルになる、などという方法はないのです。さまざまな決断をアジャイルにすることが重要で、そしてそれはあなたが決断しなければならない。

第2版で、この大事な考え方が示唆されています。

9章 達人のプロジェクト の違い

ここまでの章の集大成です。実際にプロジェクトをどう進めていくか、の章です。

変わらないこと

ここで語られるのは、「チームの作り方」「バージョン管理」「テスト」「自動化」など。このあたりも本質は変わりません。

変わったこと

前までの章での違いは、この章にも影響しています。

そのほか、第2版で新たに追加されたTipsがあります。

流行を追いかけるのではなく、効き目があるものごとを実行すること

ユーザーが必要としたタイミングで調達すること

プロジェクトを進めるとき、過去の成功体験、他で実績ある方法論、こういったものを真似ることがよくあります。しかしそれを盲目的に行ってはいけません。

第2版で語られる重要なエッセンスです。

  • ゴールは「スクラムを実行する」や「アジャイルを実行する」「リーンを実行する」といった類のものではない。
  • 真のゴールは、ユーザーから要求された新機能を、ちゃんと機能するソフトウェアとしてただちに調達できるようにすること
  • ただちにとは、週単位、月単位、年単位ではなく「今」
  • そして、それを正しい方向に向けるために舵を切り続けること

まとめ

20周年を記念して出版された、「達人プログラマー新装版」。

一見すると、第1版からの変更点は目立ちません。しかし読み解いていくと、その改訂内容に驚くべき熱量を感じます。まったく新しく生まれ変わった、といっても過言ではないでしょう。

特に、第1版を愛読していた熟練プログラマーのかた。第2版は、知識を改めることができる内容がたくさんあります。新たに読んでも損はないでしょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次