Andy Hunt著 武舎広幸+武舎るみ訳 リファクタリング・ウェットウェア

近刊紹介

ハイパフォーマンス
Webサイト

あなたのサイトを高速、低負荷にする12の秘訣。ウェブアプリケーション開発者・管理者必携の1冊
武舎広幸+福地太郎+武舎るみ訳

DictJuggler.net

文章に携わる人のための辞書・検索サイトDictJuggler.netオープン
藤本直氏の類語辞典『類語玉手箱』と山岡洋一氏の翻訳者向け訳語辞典『翻訳訳語辞典』『経済・金融訳語辞典』『環境用語辞典』を無料公開中!

DHC-オンライン講座

テキスト公開中!
無料メルマガコースあり!

翻訳やプログラミングの基礎技術を学べる講座です。武舎広幸ほかマーリンアームズの技術陣が執筆、添削。 低料金で、ご自分のスケジュールに合わせた受講が可能です。

ウェットウェア(wetware)とは?
wet・ware || wet we(ə)r | 語源 wet + software
名詞、滑稽表現。人間の脳細胞もしくは人間の思考方法。特に、コンピュータシステムに類似するものとして、もしくはコンピュータシステムとの対比において見た場合に用いる。
つまり、コンピュータを基準にして類推した「人間の思考方法」。

この言葉が一般で使われるようになったきっかけは、ルーディ・ラッカーの『ウェットウェア』(黒丸 尚訳、ハヤカワ文庫SF)という本だそうです。こちらでこの本の解説がお読みいただけます

日本語版に寄せて

皆さん、こんにちは! 光栄なことに『Pragmatic Thinking and Learning』の日本語版『リファクタリング・ウェットウェア -- 達人プログラマーの思考法と学習法』に「まえがき」を書く機会をいただきました。

私にはすでに著書が数冊あり、私たちが創設したプラグマティック・ブックシェルフ社からも100冊前後を出版してきましたが、この本は別格です。自分自身の脳という、この上なく私的な「テクノロジー」を扱った本なのですから。日本の読者についてはさまざまなことを思い描いています -- おそらくプログラマーや技術分野の管理職で、私が現代のソフトウェア開発者として直面してきたのと同じ難問に直面しているだろう、いや、私とはまた違った経験をしているかもしれない、と。

この本の基盤となる考え方は「コンテキスト」。人間の思考方法の重大な欠点(バグ)は、コンテキストの重要性をないがしろにすることです。文化、地理、言語のすべてが、より広範なコンテキストの一環なのです。

この本を書いているとき、コンテキストにかかわる面白い違いを発見しました。そのひとつが、ヨーロッパでは小学校でマインドマップの使い方を教えているのに私の国アメリカでは教えておらず、小学校卒業後も教わる人がほとんどいないということです。また、この本の2章「脳の構造」では「GMが行っているのは美学の追究」というロバート・ルッツ氏の言葉を紹介しましたが、この「美学の追究」を最初に行ったのは日本です。単なる偶然の一致かもしれませんが、私の見る限り日本文化は他の国の文化よりデザイン、調和、バランスの問題に敏感です。

とはいえ、こうした文化や言語の違いがあっても人間の心身の構造は万人に共通なのですから、この本が皆さんの仕事にも生活にも役立ってくれることを願っています。

最後に、訳者のお二人にお礼を申し上げたいと思います。コンピュータ言語の学習なら私も得意で、あれこれマスターしてきましたが、母語の英語以外、自然言語は物にできずにきました。訳者がいなければ読者の皆さんは私のわかりにくい英語に四苦八苦させられたことでしょう。

この本を読んでくださってありがとうございます。ごきげんよう。

Andy Hunt
The Pragmatic Programmers, LLC
Raleigh, NC
April 2009

 

賞賛の声

読者の未来を変えてしまう「触媒」です。
― パトリック・エルダー(アジャイルソフトウェア開発者)

この本の具体的な手順に従えば、私たちの最高の財産―脳―の効率や創造性を高めることができます。著者の言うことを実践すれば、頭の回転が速くなり、仕事の効率も上がり、学習能力もかつてなく向上します。
― バート・ベイツ(「Head Firstシリーズ」の著者のひとり)

学習能力を磨くのに役立つ本を以前から探していましたが、この本ほど効果的なものは読んだことがありません。学びの「達人」になってさまざまな技能を向上させ、楽に素早く学ぶことによって仕事の効率を上げるのに有益な最良の方法が紹介されているのです。
― オスカー・デル・ベン(ソフトウェア開発者)

私はコンテキストの重要性を説明してくれる本が大好きですが、この本もそういう本で、コンテキストがなぜ重要なのかがわかります。(私にとっては何度も「目からウロコ」となった)ドレイファスモデルから、経験による訓練が功を奏する理由(ロッククライミングの話)まで、著者はユーモアとデリカシーをもって解説しているので、読みながら学ぶとともに、学んだ内容や自分の考えを整理することができます。
― ジョアンナ・ロスマン(コンサルタント、著述家、講演者)

さまざまな分野の読者に役立つ、わかりやすく合理的な本。とても面白かった!
― パトリシア・ベナー(カリフォルニア大学サンフランシスコ校行動科学・社会科学部教授)

昨夜β版を読み終えました。以前に同じ内容で著者が行ったNFJS(No Fluff Just Stuff)でのプレゼン(とサラブレッドを群れで動かす話)がとても面白かったので、それが本になるなんてすばらしいことです。どれも私の人生を劇的に変えてくれました!
― マット・マクナイト(ソフトウェア開発者)

楽しみながら読み、多くのことを学びました。申し分のない本です。
― リンダ・ライジング(国際的に活躍している講演者、コンサルタント、オブジェクト指向の専門家)

 

まえがき(部分)

ようこそ!

この本をお買い求めくださり、ありがとうございます。これから皆さんと一緒に認知科学、神経科学、そして心理学の概念が飛び交う世界へと旅立ちます。我々の脳の驚くべき働きを知り、学習・思考能力を向上させるために、脳をどう「攻略」していけばよいかを見ていきましょう。

この本のねらいは、皆さんの「ウェットウェア」の「リファクタリング」 — つまり、頭脳の再設計と再配線 — によって仕事の能率アップを図ることです。ですから、この本はプログラマにも管理職にも「知的労働者」にも「オタク」にも「思索家」にも、あるいは単にもっと頭がよくなりたいと思っている人にも、役に立つでしょう。

私はプログラマーですから、この本に出てくる例の多くはソフトウェア開発の世界に関わるものですが、プログラマー以外の方々も心配はいりません。実は、プログラミングは「難しくてわけのわからない言語を用いてソフトウェアを書いていく作業」とはほとんど関係はないのです(もっとも、我々プログラマーはそうした作業に妙な愛着を持っていますが)。

プログラミングとは、要するに問題解決なのです。創造性、創意工夫、発明の才能が必要とされる作業です。どんな職業でも独創的な問題解決を迫られる場面はあるでしょう。しかし、プログラマーが人間の豊かで柔軟な思考力を、杓子定規で融通の利かないコンピュータのデジタル世界に落とし込もうとすると、人間とコンピュータ、双方の「能力」が発揮されるだけでなく、双方の「最悪の欠点」まで表面化させてしまうのです。

プログラマーであれ、ソフトウェアに不満たらたらの一般利用者であれ、すでにこう感じているのではないでしょうか―ソフトウェア開発というものは、人間がこれまでに考え、実行してきた試みの中でも最大級の難関に違いない、と。複雑なソフトウェア開発に、プログラマーは日々最大限の努力を強いられていますし、問題が発生した場合には、騒ぎが大きくなり、マスコミを賑わすことにさえなりかねないものです。宇宙船をはるかかなたの惑星に衝突させてしまったり、莫大な費用をかけて開発し貴重な測定装置や実験材料を満載したロケットを爆発させてしまったり、なんと「0 ドル」を請求する督促状を自動発行して消費者に迷惑をかけたり、はたまた、飛行機が客を空港に残したまま出発してしまったり。

とはいえ、(ある意味)うれしいニュースもあります。上で紹介したような事態は、どれも我々プログラマーの仕業なのです。プログラマーはプログラミングを必要以上に難しくしてしまいがちです。コンピュータ業界がこれまでたどってきた発展の経緯も災いして、ソフトウェア開発者に必要な、もっとも基本的でもっとも重要な技術を我々は見失ってしまっているのです。

うれしいニュースとは、そうした事態はただちに改善できるという事実です。どう改善すればよいのか、それを手助けするのがこの本の役割です。プログラマーがプログラムを作る過程で図らずも作り出してしまう欠陥や誤り、すなわち「バグ」の数は、ここ 40 年あまり変わっていません。プログラミング言語や、プログラミング技術、プロジェクト管理手法などの進歩にも関わらず、バグの発生率はほぼ横ばいのままなのです。

これは恐らく、我々プログラマーがお門違いのところに注力してきたということなのでしょう。前述のとおり、技術的側面が大きく変化してきたにも関わらず、常に変わらずにいたものがあります。我々開発者、すなわち人間です。

ソフトウェアは、統合開発環境などの道具ツールによって設計されるのではなく、プログラマーの頭の中で考え出され、作り出されるものなのです。アイディアや概念は、チームのメンバーの間で共有され、それに関して意見の交換が行われます。そして、このチームには、ソフトウェアの開発を依頼した人々も含まれています。我々はこれまで長年にわたって、言語やツール、開発手法といった基本技術に投資してきました。この年月は有益な時間ではありましたが、別の段階に進むべき時は来ています。

目を向けるべき時が来ているのです。チーム内、チーム間の社会的相互作用という難問に、そして、昔ながらの平凡な思考法というさらなる難問に対して。孤島のように周囲から独立したプロジェクトなど、ひとつもありません。ソフトウェアは孤立した状態では構築も実行もできません。

フレデリック・ブルックスは画期的な論文『銀の弾などない―ソフトウェアエンジニアリングの本質と偶有的事項』で、こう論じています。「ソフトウェア製品は、アプリケーション、ユーザー、法律、プラットフォームといった文化的基盤に深く組み込まれている。こうした文化基盤はどれも絶えず変化するため、ソフトウェア製品も変化せざるを得ない」。

ブルックスのこの見解に従うと、我々は社会という大渦巻きの真っ只中に放り込まれることになります。この社会では多数の当事者間、多数の勢力間で複雑な相互作用が起こり、絶え間なく変化が続いています。このような状況で、今もっとも必要とされている能力は次の二つだと考えられます。

コミュニケーション能力を向上させる取り組みはコンピュータ業界でもいくらかは行われています。特に、アジャイルな手法(コラムを参照)は、チームの構成員間、および顧客・開発チーム間のコミュニケーションの改善に力を入れています。

また、簡便で効果的なコミュニケーションに対する自覚が高まり『Presentation Zen: Simple Ideas on Presentation Design and Delivery』のようなコミュニケーションの重要性を説いた本が突然ベストセラーになったりしています。悪くない滑り出しと言えるでしょう。

しかし、学習・思考能力についてはどうでしょう。コミュニケーションの能力に比べると難題です。

プログラマーには学習が欠かせません。耳にタコができるほどよく聞かされる新技術に関するものだけでなく、アプリケーションの対象分野、移り気なユーザーの動向、チームメンバーの習癖、変化の激しいコンピュータ業界の動向、進行中のプロジェクトの動向といったことも知っていなければなりません。学習、さらに再学習が、絶えず必要なのです。そうした学習の成果を、新旧の問題への取り組みに日々生かさなければなりません。

「学習能力の改善」「思考能力の向上」と言葉で唱えるのは簡単なのですが、学習も思考も、その能力は、人から教えてもらえるわけではなく、自分で学習しなければなりません。「改善」や「向上」の可否は「個人に依存する」能力なのです。どう学習すればよいのか、批判的思考法、創造性、発明の才能といった「思考」にまつわる能力はどう身につければよいのか。こうした「意識を拡張する技術」「アタマをよくする技術」は、自分で「学習」しなければなりません。一般的には、先生と生徒の関係を「先生が教えるもの」として捉えることが多いのですが、本当は「先生が教える」のではなく「生徒が学ぶ」のです。学習は常に生徒に依存するものなのです。

この本が読者の皆さんの学習能力と実践的な思考能力の増強に大いに役立つと信じています。

 

本書の狙い

どんな旅でも、首尾よく目的地に着くためには、まず地図が必要です。この本の地図(マインドマップ)は本の見返しにあります(このサポートページではこちらをご覧ください)。1 章から 8 章まで流れを持たせてはありますが、「地図」に記載したテーマの数々は、見ればわかるとおり、相互に絡まり合い関連し合っています。

なにしろ、どんなこともほかのすべてとつながっているのです。こうした考え方は、この本を 1 章から 8 章まで順に読んでも、なかなか実感できないでしょう。本文には「~を参照」という注がいくつもありますが、そのとおりに参照したところで、必ずしも相互関係がはっきり捉えられるわけではありません。図を見ていただければ、何が何に関係しているかが、いくらかわかりやすいと思います。

1章 初心者から達人への道

この本では、まず最初の数章で、なぜ脳が脳として機能するのかを見ていきます。1章で検討するのが、専門的知識を体系化される際によく引き合いに出される「ドレイファス兄弟の技能習得モデル」です。

このモデルは、なぜ脳が脳として機能するのかを見ていきます。 「ドレイファス兄弟の技能習得モデル」は、人間の技能習得過程を「初心者」に始まり、最高の「達人」レベルに至るまで、5段階に分類したものです。このモデルを紹介し、特に達人になるためのコツ―自分なりの経験を活用・応用し、コンテキストを理解し、直感に頼るという方法―を見ていきます。

2章 脳の構造

ソフトウェア開発でもっとも重要な道具は、もちろん皆さん自身の脳です。2章では、認知科学と神経科学の基礎知識のうち、我々知的労働者に直接関わる事柄を紹介します。たとえば、デュアル CPU で共有バスを持つ脳のモデルや「自分で自分の脳を手術する方法」といったものです。

3章 R モードへの転換

脳についての理解を深めたところで、創造性と問題解決能力を養い、経験を生かした学習がよりよくできるよう、思考能力のうち、まだ十分活用できていない面を活用する方法を紹介します。

また、直感の源についても紹介します。達人の特徴である直感は、実は狡猾な獣でもあります。必要なものですし、頼りにもなりますが、闇雲に絶えず頼るのは好ましくないと思っている人もいるでしょう。自分の直感も人の直感も「非科学的だ」として、疑いの目で見ている人もいるでしょう。そうした考えを正し、直感を自由に解き放つ方法を紹介します。

4章 アタマをデバッグ

直感は、的外れなものでさえなければ、すばらしい道具です。人間の思考には「既知の欠陥(バグ)」がいくつもあります。人間の認識には生まれつき偏りがありますし、生まれてから今までに経験してきたことの影響や、世代的な影響、生まれながらの個性、さらには「ハードウェアの配線」的な問題さえあります。こうした「システムのバグ」のせいで、判断力が鈍ったり、不適切(というか破滅的)な決断を下すはめに陥ったりしてしまうことが多いのです。こうした、よくありがちな「バグ」を知っておくことは、バグそのものを減らすとともに影響を小さくするための第一歩です。

5章 意識的な学び

ここまでで脳の働きを詳しく紹介した後、この章から脳というシステムを活用する方法について細かく見ていきます。まずは学習(学び)についてです。

ここでは、学習という言葉をもっとも広い意味で使っています。新技術やプログラミング言語といったものだけでなく、皆さんのチーム内の力関係や開発中のソフトウェアの特徴やその変化についての学習なども含みます。今の時代、学習は常に欠かせません。

とはいえ、どう学習したらよいかを教えてもらったことのある人などほとんどいませんから、皆いわばぶっつけ本番でなんとかやっているわけです。そこで、学習能力を高めるための具体的な手法をいくつか紹介します。たとえば、計画の立て方、マインドマップ、読書法のSQ3R、教えることによって学ぶといった手法です。こうした手法を身につければ、新しい情報をより速く、より容易に吸収できるようになり、物事を見抜く目が磨かれ、新しく得た知識を忘れてしまうことも減ります。

6章 経験の積み重ね

経験は、学習し成長する上で重要なカギとなります。人間は実地の経験を通して学ぶのです。もっとも、経験するだけでは必ずしも成功につながりません。経験から学ばなければ得るものもないのですが、それを妨げ困難にする要素があり、その中でもよくありがちなものがいくつかあります。無理矢理経験しようとすることも禁物です。頑張りすぎは、お決まりのことを繰り返しているだけの場合と比べて(より悪いわけではないにしても)同じくらい好ましくないのです。そこで、フィードバックを活用し、楽しみ、失敗を糧にしながら、効率のよい学習環境を作り出すには何が必要かを紹介するとともに、締め切りの脅威の回避や、心理的な習慣づけによって経験を重ねる方法についても見ていきます。

7章 集中のコントロール

次なる重要なステップは集中のコントロールです。ここでは、経験を積み、それを糧にする上で役に立つ膨大な量の知識、情報、見解を整理するためのワザやコツ、ヒントを紹介します。情報の氾濫する現代、日々の仕事に追いまくられて仕事の質を高める暇などまったくないというケースはざらです。そんな状況を改善し、集中して仕事に取り組めるようにしたいものです。

コンテキストを最適化する方法、うるさい横やりをうまく処理する方法、そうした横やりが衝突事故のように感じられてしまうわけを説明します。また、一番大事な仕事に集中し、知識をより意識的に管理するためには、故意に集中を「ぼかす」必要がありますが、その理由についても見ていきましょう。

8章 達人になってから

最終章では、変化ということが、いざ実行に移すとなると意外に難しいわけを考え、まずは明日からでも始められることを紹介します。そして、達人のレベルに達してからの状態(と私が考えているもの)と、そうした境地に達するための方法を見ていきます。

こんな具合ですので、お気に入りの飲み物を手に、ゆったりと腰かけてください。そして何が出てくるのか、見てようではありませんか。