nobu blog

プログラミングやゲームの話など。

*



【オライリー本感想】リファクタリング・ウェットウェア はエンジニアが成長するための勉強方法や考え方に関して説明された本

   

概要

今回はオライリー本の、「リファクタリング・ウェットウェア」に関しての感想を書きます。
特定の技術分野に説明した本ではなく、エンジニアとしての考え方や勉強方法などの思考に関してまとめた本です。
エンジニアとして自己の勉強方法に関して、知りたいという方は読んでみると良いかも。

アジャイルなソフトウェア開発の実践において、プログラムの改善にリファクタリングは欠かせません。同様に、プロジェクトを本当の意味で改善するためには、開発にかかわる人間の脳(ウェットウェア)をリファクタリングすることが重要だと思いませんか?そこで、認知科学、神経科学、学習理論、行動理論などを駆使し、人間の脳がどのように機能するかを明らかにします。
本書は、より効率的、そしてより生産的なプログラマーになりたいと願うソフトウェア開発者に向けて、アジャイルソフトウェア開発手法の先駆者として知られる二人により執筆されました。経験を積み、生産性を高め、ソフトウェア開発の全体をより良く理解するための、実践的なアプローチが解説されています。先見性と普遍性に富んだ本書は、入門者には手引きとなり、ベテランでも読み直すたびに得るものがある、座右の一冊です。

スポンサーリンク

書籍概要

どんな本?

アジャイルなソフトウェア開発の実践において、プログラムの改善にリファクタリングは欠かせません。
同様に、プロジェクトを本当の意味で改善するためには、開発にかかわる人間の脳(ウェットウェア)をリファクタリングすることが重要だと思いませんか?そこで、認知科学、神経科学、学習理論、行動理論などを駆使し、人間の脳がどのように機能するかを明らかにします。本書で紹介するテクニックを実践すれば、読者の学習スキルおよび思考スキルは向上、日々の生産性を20%から30%改善できると著者は主張します。
名著『達人プログラマー』の著者、アンディ・ハントが語る「あなたの脳をリファクタリングする」方法です。

  • Andy Hunt 著、武舎 広幸、武舎 るみ 訳
  • 2009年04月 発行
  • 304ページ
  • 定価3,080円(税込)

著者のAndy Huntさんは、「達人プログラマー」といった開発者向けの実践ノウハウを集めた本でも有名な人です。

本書は、より効率的、そしてより生産的なプログラマーになりたいと願うソフトウェア開発者に向けて、アジャイルソフトウェア開発手法の先駆者として知られる二人により執筆されました。経験を積み、生産性を高め、ソフトウェア開発の全体をより良く理解するための、実践的なアプローチが解説されています。先見性と普遍性に富んだ本書は、入門者には手引きとなり、ベテランでも読み直すたびに得るものがある、座右の一冊です。

スポンサーリンク

内容のまとめと感想

効率的な学習方法や達人プログラマとなるための、心理学的手法をまとめた一風変わった本です。
通常の学習本でしたら、手に取らなかったかもしれませんが、オライリーから出たエンジニア視点で語られた本ということで手に取ってみました。

実際読んでみると、普段意識せずに実施している学習方法や行動に関して納得ができたり、やってみたいと思わせる考え方やプラクティスに関して知ることができました。

本書の感想に関しても早速本書に書かれていた内容を一部参考にして取り込んでみてます。
最近は積読が大量に溜まっているので、次々に読まなければという思いが先行していましたが、こうやってじっくりと何度も読んで考えを整理するのも非常に重要で、定着には最適だなと思います。
(全部の本でこれを続けていたら時間がいくらあっても足りないので、バランスが重要だとも思いました・・・。)

たまには、こういった類の自己啓発本を読んでモチベーションや学習方法の見直しを行うのも大切だと思いました。

自己学習を試みているエンジニアは一度読んでみて、自身の学習方法などに関して棚卸しするのに有用な本だと思います。

スポンサーリンク

読書ノート(個人的なまとめ)

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

技能習得におけるモデルとして、「ドレファイスモデル」を挙げて説明を行なっています。
エンジニアにこのモデルを適応させたときに、どうやってチームのメンバーを上位のレベルへ引き上げていくかが説明されています。
初心者には、考えなくても対応できるようなルールが必要だが、上級者や達人といったレベルの人材には逆に足枷になるといった点はあるあるという点ですね。
そういう意味でも画一的だったり一方的なルールとかって運用が難しいですよね・・・。

  • ドレファイスモデル
    • 技能習得のモデル
    • 特定の技能ごとに5段階に分類を行う。(初心者、中級者、上級者、熟練者、達人)
    • 初心者はルールに従い、達人は直感に従う
    • 殆どの人は中級者止まり
  • ドレファイスモデルの効果的な利用方法
    • 中級者を上級者に引き上げるにはお手本となる存在を近くに配置して、まねさせる
    • そのためにも長期の安定したチーム環境を構築する必要がある
    • 初心者にはコンテキストで変わらないような画一的なルールが必要だが、達人には逆に不要で縛り付けてしまう。要はモデルに応じて柔軟性が必要。

スポンサーリンク

第2章 脳の構造

達人が使用している直感がどのようなものであるかを脳科学的な話から説明している章です。
正直に言えば、ちょっとうさんくさい感じもしたのですが、説明としては確かにと思うところもあります。
確かにコードを書いている時に、なんとなく直感的にコードを書いて形を作っていくといった作業は言語化が難しい感覚だなぁと思いました。

  • 脳のモードは2種類ある
    • リニア(L)モード
      • 論理的な思考や言語処理を担当(左脳)
      • 今日、テストや仕事で使われるのはこちら
    • リッチ(R)モード
      • 非言語的で、イメージ、感情、記憶的な処理を堪能(右脳)
      • 非同期で、急に浮かぶ直感的なアイディア
      • 過去の体験や記憶をずっと裏でパターンマッチングしているので遅い
      • 脳とは共通のバスを利用するのでLモードが懸命に働いているとRモードが動かせない。
  • あまり使われていないRモードを多く使えるようにすることで、本来得られる脳のパワーを全て使うことができる。
    • ソフトウェアのアーキテクチャやデザインを考える上でRは必要なスキル
  • Rモードを有効に利用する方法
    • いつでもメモできる環境を作る(メモ帳やアプリなど)
    • 専門的な作業を常に続けること(プログラムならばプログラミング)

    スポンサーリンク

    第3章 Rモードへの転換

    2章で説明したRモードを有効に引き出すための方法や考え方に関して説明している章です。
    ちょっとした気分転換とか、普段と違う考えや行動を行なって感覚的な思考を行う訓練に関して色々と書かれています。
    全てを試すのは難しいですが、イメージストリーミングとかはお手軽で試してみても良さそうです。

    • 関与する感覚の増加
      • 絵やレゴなどを使って設計してみる
      • 散歩や窓を開けたりとか環境を変えてみる
    • RモードからLモードへの流れを作る
      • 先に体験してから、詰め込み的な学びを行う
      • 学習の最初は暗記しようとせずに、全体像を捉える(慣れる)
      • 比喩を行う能力を鍛える(関係のない2ワードのたとえを考えてみる)
    • Rモードが提供するヒントを受け取る方法(訓練)
      • 10分目を閉じて浮かんできたイメージを声で説明する。(イメージストリーミング)
      • 朝起きたら3ページ思いついたことをひたすら手書きで書きだす。(モーニングページ)
      • 今ある問題に対して1つのテーマだけに絞って、そのことだけを考える散歩を行う

    第4章 頭をデバッグ

    直感は人間の感覚的な部分に多く依存するため、認知的な問題(バグ)によって望ましくない結果を起こすので、それらの問題を認知して取り除く(デバッグ)する方法が説明されています。
    正直、専門的すぎたりどうにもならない部分が多くてこの章は参考にはならない(ちょっと読んだだけでどうにかなるレベルではない)と思いましたが、最後の自己テスト(アサーション)に関しては簡単で取り組めそうだと思いました。

    • 認知バイアス(先入観)
    • PJ初期段階は不確定要素が多いので結論を先延ばしする
    • 世代的な傾向を認識する
    • 性格的な傾向(内向的、外交的など)
    • 本能的な問題(感情的は反応は抑えて一呼吸)
    • 何故なのか?を自己テスト(アサーション)してみる。

    第5章 意識的な学び

    成功するために、必須となる「学ぶ」能力に関して説明を行う章です。
    これまで説明してきた、LとRをバランスよく使いつつ効率的な学習方法を説明しています。
    やはり何かを学ぶ時は目的や具体的なアウトプットが無いと身につかないので、この章の説明はしっくりきました。

    • 規格化された受動的な教育は役に立たない
      • 自主的な学びが必要
      • 経験の伴わない、知識の習得ではだめ
      • 目的やフィードバックのない無計性はだめ(SMARTな目標が必要)
    • SMARTな目標
      • S:具体的
      • M:測定可能
      • A:達成可能
      • R:適切
      • T:期限を定める
    • 効率的な学習技術
      • SQ3Rで意識的に読む
        • 調査(S):全体の要旨を掴むために目次と各章の概要を流し読む
        • 質問(S):質問点を書き出す
        • 読書(R):全文を読む
        • 要約(R):要約し、ポイントを自分の言葉でまとめる
        • まとめ(R):もう一度読み、さらに書き出す。他人と議論する。
      • マインドマップによる視覚化/li>
      • 他人に教える

    第6章 経験の積み重ね

    学びの際の経験を意味のあるものにするためのノウハウが記載されている章になります。
    個人的にはこの章はあまり参考にならずにさっと読み流しました。

    • 学ぶための遊び
      • 実際に技術やアイディアに直的に触れて色々と試してみる
      • 実際に楽しむ
    • 既存知識の応用
      • 問題を分割する
      • 以前の解決点の類似点を探す

    スポンサーリンク

    第7章 集中のコントロール,8章 達人になってから

    7章はタイトルの通り、この章では学習や思考するために必要となる「集中する」ための方法をまとめています。
    8章は、最後に筆者からの実践するための簡単なアドバイスが綴られています。

    • 瞑想訓練によって集中力が持続する(瞑想中以外でも)
    • 何もしない事で、無意識下でアイディアが練られる。早急に結論を出さず、考えずにリラックスしてみる。
    • 既存知識の応用
      • 問題を分割する
      • 以前の解決点の類似点を探す

     - 技術書, 読書感想