memocon プログラミングのメモや物欲日記、雑記等

シェル芸本で気になったリファクタリング・ウェットウェアのサンプルを読んでみた

2014年08月23日 14時45分

シェル芸本の最初の方にお勧め文献として紹介されていたリファクタリング・ウェットウェア。
調べてみたらちょうど読みたかった第一章がサンプルとして公開されていたので読んでみました。

「初心者にはコンテキストに依存しないルールが必要だが、達人はコンテキストに依存した直感を使う」

ところどころ当てはまりすぎてぐぬぬってなってしまう。
サンプル読んだら後の章も気になってきたので買ってしまおうかと思案中。

サンプルは本の紹介ページに存在します。
O’Reilly Japan リファクタリング・ウェットウェア――達人プログラマーの思考法と学習法

以下、ドレイファスモデルについてのまとめ。

ドレイファスモデルについて

技能習得の「初心者」から「達人」への通過しなくてはならない階段を5つにまとめたモデル

ドレイファスモデルの5段階

初心者

  • 技能分野における経験をほとんど持っていない。
    ※ここでの経験とは技術を使うことにより、考え方に変化がもたされたもの
  • うまくやり遂げる能力が自分にあるかどうかいつも気にする
  • 学びたいという意欲より当面の目標を達成したいという願望を強く持つ
  • ミスにどう対処するべきかを知らず、状況に応じて柔軟に対応することが難しい
  • コンテキスト(状況)に左右されない、従うべきルールを与えればある程度効果的に仕事をこなす

中級者

  • ほんの少しだけ決まったルールから離れて仕事にあたることができる
  • 情報を素早く入手したがる
  • 最近経験した類似場面を参考に、コンテキストを考慮したアドバイスが活用できるようになる
  • 多くに当てはまる原則を見いだせるようになるものの、そこに「全体像」はない。
    「全体像」を説明すればそれは「まだ私には関係ない」という態度をとる

上級者

  • 問題領域の概念モデルを発展させ、そのモデルを使って効果的に作業ができる
  • 初心者・中級者は物事に対して決まり切った反応をするが、上級者は問題を探し出し解決する
  • 自らを振り返り、補正するには十分な能力が備わっていない

熟練者

  • 技能を取り巻くさらに大きな概念の枠組みを模索し、理解しようとする
  • 単純化しすぎた情報には苛立ちさえ覚える
  • 自らの行いを振り返り、次回のパフォーマンスを改善する為に取り組みを修正できる
  • 熟練者としてのケーススタディを読み、他の人達の行いを見ることにより効果的に学ぶことができる
  • 「格言」を理解しうまく適用する能力も備わってくる
    ※格言とはレシピと異なり、特定の状況において特定の解釈がなされて適応される
  • 「ソフトウェアパターン」も効果的に適用することができる
  • アジャイル手法のリフレクションとフィードバックを目一杯活用できる

達人

  • 絶えず物事を行うよりよい方法を模索している
  • 何かをするのに、「理由があってそうする」のではなく、直感に従って行う
  • 無意識レベルで本質に関係のない部分と重要な部分の区別ができる

現場でのドレイファスモデル

  • 達人を仲間全員と同じルールで縛るのは愚行。「サラブレッドを群れで動かすようなもの」
  • 初心者は「番をしてもらう」必要があり、曖昧さがない明確な指示を与え、小さな成功体験を積ませることが必要

技能レベルの変化による違い

  • よりどころとする対象がルールから直感に移行する
  • 問題を一様な関連性を有する小部分の集合として認識するのではなく、ひとつの完全かつ無類の統一体として認識し、特定の小部分にのみ力点を置くようになる
  • 問題から遊離して存在する観察者から、システム自身の一部としてそれに関与する存在へと変化する

達人 != 先生

  • 達人は自ら結論に達した道筋を理路整然と表現できない

効果的な学習法

  • 明確に定義されたタスクがある
  • タスクには適度な難度(やりがい)が必要だが、実行可能でなければならない
  • 周囲から、行動のよりどころとなるような有益なフィードバックが提供されなければならない
  • 復習のための繰り返しの機会が与えられ、またエラーを修正する機会も提供されるべきである
  • 中級者の周囲に優れたお手本を配置すること(経験の伴わない専門技能は存在しない)

道具のワナに注意

ツールや形式モデル、モデリングなどの役割については最終的な目的ではなく、あくまでも目的を達成する為の道具だということを忘れてはいけない。

形式的モデルに過度に依存する危険性

  • モデルを現実と混同
  • 形式化できない特徴を低く評価
  • 個人の自主性を否定する行動を許可
  • 初心者に味方して、経験豊富な熟練者を疎外
  • 説明が細かすぎる(無限後退の可能性)
  • 複雑な状況の過度な単純化(いかなるプロジェクトも現実はより複雑なもの。「必要なのは……だけ」「これさえすれば……」と切り出す人がいたらそれは間違っている可能性が高い
  • 極端な画一化の要求
  • コンテキストの微妙な違いに対する配慮不足
  • ルールに従うべき時とそれを破るべき時の判断の誤り
  • 標語化
    exp)「我々は顧客中心の組織です!」というスローガン

基準となるルールの確率は技能レベルの低い者にとっては有用かもしれないが、ルールは判断の代用にならない。
判断力が向上するにつれて、ルールへの依存度をゆるめ、それとともに制度上の強制も少なくする方向に移行していく必要がある。

達人への道しるべ

  • さらなる直感力の育成
  • コンテキストの重要性の認識、およびコンテキストのパターンに対する重要性の認識
  • 自分自身の経験のさらなる活用

追記:参考文献も大変役立つシェル芸本とはこの本ですよ。