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