リファクタリング・ウェットウェアを読んだよ

英名 Pragmatic Thinking and Learning: Refactor Your "Wetware"
著者 Andy Hunt
他の著作に 達人プログラマー -"The Pragmatic Programmer"- がある。

この本を紹介してくれたのはだれだったか覚えてないけど、1年くらい前に買った本。すごく面白かったので再読し、メモにまとめてブログに書くことにした。
ほとんど自分用の備忘録なので、気になったらamazonへGO!


ウェットウェアとは"人間の思考方法"

著者は指摘する。

バグの数はここ40年あまり変わっていません。プログラミング言語や、プログラミング技術、プロジェクト管理手法などの進歩にも関わらず、バグの発生率はほぼ横ばいのままなのです。これは恐らく我々プログラマーがお門違いのところに注力してきたということなのでしょう。

問題はやり方ではなく、人間にあった。

今、最も必要とされている能力とはなんなのか?

  • コミュニケーション能力
  • 学習・思考能力
    • ??

学習は個人に依存する能力。自分で学習しなくてはならない。「先生が教える」のではなく「生徒が学ぶ」もの。
この本は学習・思考能力を増強するもの。

コンテキスト(周囲の状況や文脈)を考慮する

全ての物事は組織の一部であり、コンテキストによって事態は変わる。現実は非線形で安易に答えを出すことは出来ない。全て物事や自称は互いに繋がっている。それぞれは無関係ではない。全てはシステムの一部。

達人への道

ドレイファスモデル

全ての仕事において、熟練度による5段階の評価ができる。

段階 特徴
初心者 マニュアルが必要 想定外の状況でパニック
中級者 全体像を見たがらない 他の仕事の繋がりが見えない
上級者 独力で問題解決 チームの指導者
熟練者 自己補正が可能 全体像を把握できる コンテキスト(状況)から判断できる
達人 全人口の1~5% 直感で動く 著作,講演活動

初心者はルールに、達人は直感に従う。ほとんどの人が中級者で生涯を終える。達人になるには最低10年努力する。認知科学的に、それは「本気の努力」でなくてはならず、以下の条件を満たす必要がある。

  • 明確なタスクがある
  • 過度なやり甲斐があり、実行可能である
  • フィードバックを得ることができる
  • 復習とエラー修正の機会がある
技能習得の秘訣
  1. 模倣
  2. 同化
  3. 確信

本当の世界一流とは上位0.2%の人。強いチームをつくるには

  • 強さ=ボトルネック。グループ全体の強さは、最も弱い部分の強さと等しくなる。
  • 一体感が重要なので、固定したメンバーで続ける。
  • リズム、習慣、タイミングが重要。バンドにおけるドラマーのように。
  • 安心出来る環境

が必要である。
ツールやモデルはあくまで道具にすぎない。思考に取って代わるものなどない。

脳の構造

LモードとRモード
Lモード Rモード
線形処理のLinear mode 非線形処理のRich mode
言語処理を司る 直感、問題解決、創造性を司る

意識外のRモードは支配できないが、備えることはできる。いつでもペンとメモを持ち、突然のRモードのひらめきに準備する。

「コンピュータは役に立たない。答えを出すだけ。」パブロ・ピカソ

コンピュータは問題提起ができない。ソフトウェアデザインには創造性が必須なのでRモードを使わなくてはならない。

全ての感覚に注意を払う

普段は使わない多感覚を利用する。視覚、聴覚、触覚、味覚、嗅覚。電話中にらくがきしたり、レゴのブロックでオブジェクト指向設計したり、色彩を多く使ったり。多感覚が理解力と記憶力を増大する。
また、環境を定期的に変えて、脳に栄養を与える。犬との散歩したり、星空を眺めたり、新鮮な空気を吸ったり、プールで泳だり。なんでもいい!

LモードとRモードのシンクロ

まず体を張って理解し(R)、次に事実を詰め込む(L)。ペアプログラミングは自分のLと他人のR(またはその逆)の協働。ドライバーが言語モード(L) ナビゲーターは非言語モード(R)。人への説明、ホワイトボードでの説明は思考の抽象度が増す。

比喩を使う

両立しない考えを結びつける。比喩=抽象的思考はプログラミングの基本。物事の関係性を特定して、それをねじ曲げるユーモアは思考、学習、創造性に不可欠。

創造力を高めるイメージストリーミング
  1. 10分間眼を閉じる
  2. イメージが浮かぶたびに声に出して説明する。
  3. 五感を総動員する。
自分の考えを記録するモーニングページ
  • 朝一番に想いのままに書く
  • どんな内容であれ、ただ書く。
  • 毎日やる
自然石構築法(ジェラルド・ワインバーグ
  • ただ書いてみること
  • きれいな石を拾って集めていく
  • いざ壁を作るときに、集めた石を眺めてぴったり来るものをはめる
歩くこと
  • 問題を書き出したら散歩する
  • ひらめいたら書き留める
  • 考えながら歩かない
  • 心には留めておくが、それには集中しない

問題には必ず複数の正解があるもの

正解が一つしか無いときは疑うべき。問題がパターンに陥ったら、まったく別の視点から見ること。同じ問題を意図的に生じさせる方法を考える。最悪のレイアウトと最悪のワークフローを考えてみる。

イデアをもて遊ぶこと

イデアは遊ぶことで身についていく。

必要は発明の母。遊びは発明の父。 ロジャー・フォン・イーク

脳をデバッグ

人は不完全な記憶とその時点での感情によって意思決定し、問題を解決している。

人間の脳のバグ
  • 認知バイアス 考えが横道にそれる
  • 世代類似性 時代の影響を受ける
  • 性格的傾向 性格によって思考が影響される
  • ハードウェアのバグ 古い脳が優秀な部分より優位に立つ
認知バイアス
  • 人間の行動はコンテキストに対する反応
  • 誰しもシステムの一部
  • 不確実は選択の可能性でもある。不確実なのは悪いことではない。
  • 自分の価値観を人に求める
  • なじみだけでそれを選択する
  • 人は観察されていると行動を変える。
  • 想像上の出来事を事実と混同する
  • 簡単なシンボル化したがる。名前をつけても解決しない。
  • 人は覚えるのが苦手。「どんなに薄い墨でも最良の記憶力に勝る」記憶より記録を信用すること。
  • 産まれた世代が異なるだけで人の価値観に影響を与える。

多様性に目を向ける。

論拠は理論でしょうか。感情でしょうか。それとも単に慣れの問題でしょうか。このコンテキストに限って考えて、自分の論拠は正しいものでしょうか。他の観点を本当に考慮に入れましたか?他の支店を考慮に入れましたか?ひとつの論拠に賭けるのではなく、いろいろな観点を採用することでリスクの分散を図りましょう。

他人は恐らく自分とは違うバグを持っている。直感を信じる。ただし検証・フィードバックを得ること

意識的に学ぶこと

>>精神とは何かで満たされるべき器ではなく、燃え上がらせるべき炎である。プルタルコス<<
重要なのは技術ではなく、学び続けること。

  • 学びとは人に対して行われることではない。人が行うことである。
  • 経験の伴わない、知識のみの習得は効果がない。
  • 目的やフィードバックの無い無計画なやり方は、一貫性のない結果を招く
SMARTな目標
  • Specific 具体的
  • Measurable 測定可能
  • Achievable 達成可能
  • Relevant 適切
  • Time-boxed 期限

小さな事からコツコツと。
暇な時間はない。時間は作るものではなく、配分するもの。

計画の作成
  • 具体的な計画
  • 多様性を持たせる
    • 多くの事に投資する。
    • 知識への投資にはすべて何らかの価値がある
  • 定期的に投資する
    • 最低限の時間を定期的に投資すると決める。
意識的に読書する
  • 調査
  • 質問
  • 読書
  • 復唱
  • まとめ
視覚的に学ぶ

メモもマインドマップも手書きに価値がある。

ドキュメントを残す

ドキュメントそのものより、ドキュメント作成に意味がある。作ることにより頭の中で情報が整理され、ひらめきが生まれる。

教えることによって学ぶ

誰かにバグの状況を説明してて、教えることによって学ぶことができる。
机の上にアヒルちゃんを置いて話しかけてみよう。見る。やってみる。教えてみる。誰かにバグの状況を説明してて、答えが浮かぶのはよくあること。机の上にアヒルちゃんを置いて話しかけてみよう。

経験の積み重ねが成長の鍵。

素材を探求すること、あるいはそれで遊ぶことが事実を記憶することよりも先でなければならりません。

本当に身になる学習は経験と認識から生まれる。既存の経験に基づいて自分が学んだ事柄を自らの知識として組み立てていくこと。もっと学ぶにはもっと遊ぶ。

問題に直面したら

以前の解決方法との類似点を探す。学ぶ必要がある分だけ、忘れることが必要

成功するための必須条件は失敗すること
  • 最終的にうまく行くことが重要
  • 探求とは馴染みのない領域で遊んでみること
  • 自由に動き回り、リスクは小さくする
  • 積極的に取り組める環境を作る
試行
  • 解決策が2つあるなら、2つ試してみる。それが試行。
  • 失敗しても安全な状態に戻せること
  • フィードバックなくして前進は有り得ない。
  • 問題の多くは環境にあり、個人に帰属するものではない。

学習能力向上の鍵となるのは失敗につながる障壁を減らし、フィードバックを利用する。指示からではなくて発見からより多くのことを学ぶ事ができる。
気づく意識をする。すぐに答えを求めない。審判を下さない。非難しない。まずは見る。そして行動する。ただ闇雲に動かないで立ち止まる。まず最初にやらなければいけないのは、何が起こっているかを把握すること。

創造力を阻害するもの
  • プレッシャーは認識力を損なう。
  • 頑張り過ぎると決まって失敗する。
  • 探究心、創造性、工夫が失われる。心は次々に遮断していく。
  • 時間的なプレッシャーを感じると、人はもっとも創造性に乏しくなる。
  • パニックになったら休養する時間が絶対に必要。
  • プレッシャーは和らげなければならない。
  • 間違ってしまっても構わないと思えばミスを犯したことにならない。
  • 失敗しても構わないと思えば失敗しないもの。
  • 失敗が許される範囲を規定する。
経験を積む

想像することで頭の中で経験することもできる。その道の達人のまねをしなさい。

所属するどのバンドでも、常に一番下手なメンバーでいなさい。一番上手くなったら違うバンドに移らなければいけない。

思考をコントロールする

時間が足りないのではない。注意力が足りない。
リラックスした高度な集中状態を保つにはどうするか。
瞑想・ヨガが効果的。

瞑想

試しに瞑想を始めた。効果が直ぐ出るわけではないのでまだわからない。なにもせず息をするだけなんて簡単だと思ってたら、かなり難しい。"なにも考えない"なんて簡単にはできない。

創造性を支配する

創造性はタイムカードを押して働いているわけではない。
問題を意識の領域から追い出し、思考というマリネ液に漬けてしばらく寝かせておく必要がある。
なにもしないことをしている。 doing nothing
プログラマーはタイピングしている時だけ働いているのか?ギタリストは弦を弾いている時だけ働いているのか?
ある問題の解決策が3つ挙げられていないなら、まだ考えが足りない。

マルチタスクの犠牲

マルチタスク処理は生産性が大いに犠牲になる。

  • 生産性が20〜40%犠牲になる。
  • 没入している作業に対する割り込みから戻るには20分かかる
  • 一度に複数のことに注意を払おうとすると、おのおのに対する注意が散漫になるという点で科学者の意見が一致している。
  • 人は複数のことを同時に扱うのが非常に苦手であり、さまざまな刺激に気を散らされやすい。
作業の効率化

GTDを活用する。

  • 入力キューのスキャンを1回に
  • タスクを順番を決めて処理する
  • タスクリストを頭に留めない
  • 1日の特定の時間帯を、割り込みお断りの作業時間と決める。
  • メールの黄金律 送信を減らせば受信も減る

一定期間の大まかな計画を立て、その実現を目指して努力する。
無為無策が敵。失敗は恐れない。
習慣として定着するには3週間かかる。余裕を持ってとりかかる。
信じれば実現する。
実現できそうなちょっとした目標を掲げる。

大胆さの中に、創造的な才能と力と魔力とがあるのだ。今、始めたまえ。ゲーテ

達人になってから

  • 達人にとって致命的なのは達人のごとく振舞うこと
  • 初心は多くの可能性をはらんでいるが、達人の心には可能性がほとんどない 鈴木俊隆老師
  • 常に初心を忘れないこと
  • 驚きに満ちた子供時代の飽くなき好奇心をまねる
  • 学びには先入観、思い込み、固定観念を抜きにして臨む。

はじめよう

  • 責任を負う
  • 割り込みを避けるように
  • 投資計画を作り、SMARTの基準で目標を決める
  • 先に進むにはなにが必要かを考える。
  • 練習を積む
  • もっと失敗をしでかすだろうと考える。
  • ノートにいたずら書きをしたりマインドマップを作成したりする。
  • 美的感覚や付加的な感覚からの入力を受け入れる。
  • 面白いと感じられることを個人用wikiに書く
  • ブログを始める。
  • 思考にふけりながら散歩する
  • 読書グループを始める
  • モニタをもうひとつ買う。

imaginator

誰であれ失敗の最大の原因は、人間が物事を自動操縦装置に委ねてしまいがちだということ。

人は、目に入っていても見ていない、聞こえてはいるが聴いていない、味わわず食べ、感じること無く触れ、考えずに話している。レオナルド・ダ・ヴィンチ


最後まで読んでくれてありがとう。
ここは素晴らしく複雑で、豊かで微妙なニュアンスに満ちた世界。