home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

日記/2010/07/02/"Working Effectively with Legacy Code"読書メモ

日記/2010/07/02/"Working Effectively with Legacy Code"読書メモ

日記 / 2010 / 07 / 02 / "Working Effectively with Legacy Code"読書メモ
id: 691 所有者: msakamoto-sf    作成日: 2010-07-02 09:50:29
カテゴリ: 読書 

ようやく読み終えました。日本語訳が出る前に購入してしまっていたので、折角なので原著のまま読破しようと挑戦したのですが、暇を見てダラダラ読んでいた為時間が掛かってしまいました。読書会で読み切った人達マジパネェっす。

ということで、読書感想文を「やるやらコンビ」でお送りします。

         ___
       / ⌒  ⌒\
      / (⌒)  (⌒)\   やっと読み終えたお!
    /   ///(__人__)///\   いやー、購入してから一年以上
     |   u.   `Y⌒y'´    |   かけてダラダラ読んでしまったけど、
      \       ゙ー ′  ,/      長かったお!
     /       __|___     さすが400p越しはパネェッス。
    |   l..   /l legacy  `l
    ヽ  丶-.,/  |__ _code  |
    /`ー、_ノ / ̄ ̄ ̄ ̄/


   / ̄ ̄\
 / ノ  ヽ /\'ー、       ,, ..,、  ウム。
 |  ( ●)( /  .\` 、   . // /  では早速レビューに・・・
. |  (__人/     \ヽ、,.// ../  進みたいところだが、
  |    ` /       ``77   /  amazonのレビュー内容を参照
.  ヽ   /          / /   /  してくれれば問題ないだろJK。
   ヽ.. /      fヽ、/ / , -,./  実際msakamoto-sf自身の読感
   /./     r-、 ヽ ∨,ノ /    もamazonのレビューと大差ないしな。
   |. \   〈\.\,〉 `,  f
    | . \  (ヽ ヽ `..   |  只、若干msakamoto-sf自身「この本どうなの?」
    |    .\ \      ノ ってゆー点もあったようだが。

     ____
   /      \
  /  ─    ─\    三行でkwsk。
/    (●)  (●) \
|       (__人__)    |
./     ∩ノ ⊃  /
(  \ / _ノ |  |
.\ “  /__|  |
  \ /___ /


               /7
                 //
             //   1.(英語の)文章が読みづらい感じがする。
       __    //    2.技法の名前紹介と詳細説明が相前後
.    /ノ ヽ\ .//       しているため、真面目に追おうとすると
.   / (●)(●〉/        行ったり来たりしてしまう。
  l    (__人_,//l      3.とにかくページ数が多い。
.  |    `⌒// ノ
   l       // ./
.   ヽ r-‐''7/)/
    / と'_{'´ヽ
    /  _.、__〉 ト,
    {  、__}  |.i
    ヽ _,.フ  .|.|


        / ̄ ̄\    「1.(英語の)文章が読みづらい感じがする」
       / ヽ、_   \  についてだが、実際amazon.com側のレビュー
     . ( (● )    |  でもお星様2つのレビューで「Hard to read, 
     . (人__)      |  annoying editorial errors」とあるから、
     r-ヽ         |  英語ネイティブの人でも読みづらい感が
     (三) |        |  あることは確かなようだ。誤植もあるようだし。
     > ノ       /
    /  / ヽ     /  とはいえ、「テストコードの書きづらさ」という人間の
   /  / へ>    <  主観や感情部分の記述も混ざるので、技術文書
   |___ヽ  \/  )  の竹を割ったような英語しか読まない
       |\   /|  msakamoto-sfには少しレベルが高すぎたかも知れない。
       |  \_/ |


   / ̄ ̄\
 /   _ノ  \   「2.」の相前後している、という点については
 |    ( ー)(ー)  構成上仕方ない点もある。テストコードを書く為の
. |     (__人__)  リファクタリング技法の詳細をPartIIIにもってきて、
  |     ` ⌒´ノ   状況別のcase studyをPartIIに持ってきた以上、
.  |       nl^l^l  PartII側でPartIIIに出てくる技法名を紹介するのは
.  ヽ      |   ノ  仕方ない。
   ヽ    ヽ く  しかし、最初から順を追って理解していきたい人には
   /     ヽ \ 読みづらさとして受け取られかねないな。


      ___
    /     \   「1」と「2」は分かったけど、
   /  _ノ '' 'ー \  「3.とにかくページ数が多い。」っていうのは
 /  (●)  (●)  \  msakamoto-sfの単なるひがみじゃないかお?
 |      (__人__)    |  本自体の評価とは関係ない気がするお・・・
 \      ` ⌒´   /


   / ̄ ̄\
 /   _ノ  \  読みやすい文章でページ数が多いのは構わない
 |    ( ●)(●)  んだけどな。「1」でも挙げたが、読みづらい文章で
. |     (__人__)  ページ数が多いのは正直辛い。
  |     ` ⌒´ノ
.  |         }  なまじ豊富なPartIIのcase studyが仇となって、本書中
.  ヽ        }   もっとも「サクサク読める」PartIIIのリファクタリング技法
   ヽ     ノ  mm  の解説が325pから、というのは精神的に
   /    ̄ ̄ ̄ つノ  辛かったぞ。
   |    | ̄ ̄ ̄


    / ̄ ̄ ̄\
  /        \  なるほど、正直確かにそんな感じはあったお。
 /    ─   ─ ヽ
 |    (●)  (●) |
 \  ∩(__人/777/
 /  (丶_//// \



          ___
        /     \ ・・・でも、それ以上にmsakamoto-sfが
        /  _ノ  ヽ、_ \  気になる点があった。
      /  /⌒)   ‐=・=- \  それを隠せると思ったかお?
     |::::::::/ /(__人__):::::::::::::|
     \:/ /:::::トェェェイ`::::::::/
          `―‐'



       / ̄ ̄\
     /   ⌒  \   ・・・バレたか。
     |  ミィ赱、i .i_r赱
.     | ::::::⌒ (__人__)
.     |     トエエエイ
.     ヽ     `""´}
      ヽ     ノ
       /    く


         / ̄ ̄\
       /   _ノ  \
       |    ( ⌒)(⌒)  確かに内容は素晴らしいんだよ、この本。
          |     (__人__)  レガシーコードをxUnitに組み込む手法や
        |      ` ⌒´ノ case studyが、著者の実体験を元に書かれている
          ,|         }  のも評価出来る。
       / ヽ       }
     く  く ヽ     ノ  現場の技術者が、この本を読んでテストコードを
       \ `'     く  書くきっかけや意欲を持つのも無理ないだろ。
        ヽ、      |
            |       |


.        ___
.       / ―\   けど、
     ./ノ  (●)\
     |  ( ●)   ⌒)l  「テストコードを書くのはこれほど大変なのか」
     }   (_ノ ̄  i
     |         /  という点が一番の障害だと思えるんだよな。
     \      _ノ  オブジェクト指向に限らず、言語の機能を熟知し、
      /´     `、  インターフェイスを上手く分離して・・・って。
      / ,___  ,. i   はっきり言って「入門者向き」のテクニックじゃない。
     ( 、__⌒) ノ
      ヽ、 i⌒i⌒i
         i  i  i_
   .       \_)_)


            / ̄ ̄\
          / _ノ  .ヽ、\  そんな、技術も知識も経験も必要な
          |  (●)(●) |   「レガシーコードの改善」を、
          |  (__人__) .|  一技術者のモチベーションだけでどこまで
            |   ` ⌒´  ノ   現場で広め、やり通すことができるのか?
    r─一'´ ̄`<ヽ      }
    `ー‐ァ   ,    )     , -'~⌒ヽ、  本当に難しいのは、そっちだろうな。
      ノ   {.   ,ヘ    ,l. ゝ、_ .'ヽ).
     /, 、 _   /. |    . ',  . ..  .ヽ、
   (/ / // / / ...|      ...|\..\\ \_)
      / // / /         . . \_\_)、_)
      ー' {_/ノ              ."´


              / ̄ ̄\   1.まずテストコードを書かなくてはならない。
         rヽ  / ノ  \ \  2.テストコードを書く習慣を広める。
         i !  |  (●)(●) |  3.テストコードを書けるように組織の技術者の
      r;r‐r/ |.  |  (__人__)  |    レベルを底上げする。
      〈_L (`ヽ .}  |   ` ⌒´  ノ  4.テストコードを書く作業を組織の開発
     l` ( ``/ .  |        }   プロセスに組み込む。
     ヽ   l  .  ヽ       }  5.テストコードによる改善作業を「継続」する。
      |,.   l   /⌒   ー‐  ィ ヽ


       ___
    /     \
   / ヽ  /  丶   ウッ・・・確かにそう考えると、「実際の現場」
  /  (●) (●) ヽ  「実際の組織」で浸透させるのが何よりも難しそうだお。
  l::::⌒(__人__)⌒:::u:l
  \  |r┬-|   /  ベンチャーや少人数の組織で、独立性が高い場合は
  /   `ー'´   ヽ  ともかく、大規模なプロジェクトで適用するのは
  し、       ト、ノ  大変そうだお。
    |   _    l
    !___/´ ヽ___l


         / ̄ ̄\
       /   ⌒   \  まぁアジャイルにせよ、XPにせよ、その辺の事情
      ( へ)( へ)  |  は変わらないだろう。
      .(__人__)      |
       l` ⌒´    .|msakamoto-sf個人としては、むしろプログラミングの
       {          .| イロハとしてTDDを教えてしまった方が良いと思うんだな。
       {       _ |
      (ヽ、ヽ   /  )|
       | ``ー―‐'| ..ヽ|
       ゝ ノ    ヽ  ノ
  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄


           ___   ━┓
         / ―  \  ┏┛
        /  (●)  \ヽ ・   「イロハ」で教えるのかお?
       /   (⌒  (●) /  さっき「技術も経験も必要になる」って
       /      ̄ヽ__) /  言ったばかりじゃないかお?
.    /´     ___/
    |        \
    |        |



       ., ──‐、   「TDD」やテストコードを書きやすいプログラムというのは
      /     \  「インターフェイス」や「委譲」がキーになるんだが、
.     .|     _ノ  ヽ  実際問題、インターフェイスや適切に委譲されている
     |     ( ●) (●)  ソフトというのは一般的に「良い設計」と考えられる。
     |       (__人__) , -―ーっ
      |     ` ⌒´ノ ( ゝ彡 ̄ インターフェイスや委譲、abstractやvirtual、
.      ン         } ゙| ̄'|  関数ポインタの入れ換えやRuby/Python/JavaScript
    /⌒ヽ、     ノ  .|,  | で使えるOpenClassというのは、知識単独で学ぶと
__/   ノ \_ィ ´ー‐ィ'   ∫ 「どこで使うの?」ってなるんだが、
| |  /   /    r_____ ∬   テストコードを書く時にフル活用することになる。
| | /   /      |i    ┌‐┐
| | ( 〆⌒'──r─≒、.((|   |
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄└‐┘ ̄ ̄ ̄ ̄ ̄ ̄


         / ̄ ̄\   OOPの習得が難しい、というのには、
       / ヽ、. _ノ \  より良いOOPを書く練習が難しい点にあると
       |  (●)(●) |  msakamoto-sfは考えている。
       |  (__人__) |
          |   ` ⌒´  |  ある程度フレームワークやライブラリを自分で
        |        }  作ってみないと、「インターフェイス」や「委譲」による
        ヽ       }    OOPの効果を実感出来ない。
        人_____ノ"⌒ヽ
      /           \ しかし現場でテストコードを書くことでも、
     /            へ  \  そうしたOOPのコツを掴めるようになる筈だ。
     (  ヽγ⌒)     |  \   \
  ̄ ̄ ̄\__/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
           {;;;;;;;}
            L;;;;」


      ____
    /  ⌒  ^\  なるほど、テストコードを書くことは、
   /  ( ●)  (●)   OOPを勉強する良い実地練習ということかお!
 /  ::::::⌒(_人__)⌒ヽ
 |       |r┬-|   |  それならイロハとして教えちゃうのも納得だお!
 \        `ー'´  /


         / ̄ ̄\   もちろん、新人一人に任せるのではなくて
       /   ⌒   \  ペアプログラミングというのが前提だろ。
      ( ●)( ●)  |
      .(__人__)      |  UIやI/O、Socketが絡む部分などで依存性を
       l` ⌒´    .| 断ち切ってxUnitに組み込むなど、「匙加減」や
       {          .| 「経験と勘」が必要な部分はあるからな。
       {       _ |
      (ヽ、ヽ   /  )| そういう所は経験者がサポートして、ペアで
       | ``ー―‐'| ..ヽ|  進めていくと良いだろ。
       ゝ ノ    ヽ  ノ
  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄


       / ̄ ̄\
     /   ⌒  \   OOPの勉強になるし、
     |  ミィ赱、i .i_r赱   依存性の低いインターフェイスはどちらにせよ
.     | ::::::⌒ (__人__)  使いやすいことは間違いない!
.     |     トエエエイ
.     ヽ     `""´}  組織の技術レベルとソフトウェアの品質、
      ヽ     ノ   どちらも高めることができる一石二鳥の策だろ!!
       /    く


   / ̄ ̄\
 /   _ノ  ヽ   .____    いつまでも悲観的になっていても仕方ないお!
 |   ( ⌒)(⌒)/⌒  ⌒\
. |     (__人__) .(●) ( ●)\  新しいメリットも見出せたことだし、徐々に
  |     ` ⌒ノ ⌒(__人__)⌒:::::\  TDDが浸透していくと期待するだろ、JK・・・
.  ヽ       } .   |r┬-|    . |
   .ゝ_,.   ノ____`ー'´___./
 -(___.)-(__)___.)─(___)─


             ____
           /⌒  ⌒\   というわけで、TDDへのwktk感が止まらない
          /( ●)  (●)\   そこの君、今すぐこのページTOPの
         |:::::⌒(__人__)⌒::|   amazonリンクをクリック、
           |   「匸匸匚| '"|ィ'  レッツBUY!だろ!
    , ヘー‐- 、 l  | /^''⌒|  |   常識的に考えて!!!
  -‐ノ .ヘー‐-ィ ヽ  !‐}__,..ノ  ||
 ''"//ヽー、  ノヽ∧ `ー一'´ / |
  //^\  ヾ-、 :| ハ   ̄ / ノ |
,ノ   ヽ,_ ヽノヽ_)ノ:l 'ーー<.  /  |.
/    <^_,.イ `r‐'゙ :::ヽ  \ `丶、  |
\___,/|  !  ::::::l、  \  \|


      ____
    /ヽ  /\
   /(●) (●)丶  そこにオトスかお・・・。
  /::⌒(__人__)⌒:::uヽ
  l    |r┬-|     l
  \   `ー'´   /
  /         ヽ
  し、       ト、ノ
    |   _    l
    !___/´ ヽ___l




プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2010-07-02 09:55:59
md5:5545516fb78ac8428078243114e4d724
sha1:02e9b6c6f47f5d2aebf8c7d99f63fb37edb1efe6
コメント
コメントを投稿するにはログインして下さい。