#amazon||> ||< ようやく読み終えました。日本語訳が出る前に購入してしまっていたので、折角なので原著のまま読破しようと挑戦したのですが、暇を見てダラダラ読んでいた為時間が掛かってしまいました。読書会で読み切った人達マジパネェっす。 ということで、読書感想文を「やるやらコンビ」でお送りします。 #more|| #yaruo||>          ___        / ⌒  ⌒\       / (⌒)  (⌒)\   やっと読み終えたお!     /   ///(__人__)///\   いやー、購入してから一年以上      |   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 ||<