リファクタリング本 - 人気 / 新書 / 高評価 書籍一覧 | 技術書の本だな


リファクタリング 人気本 ランキング

人気 1位
本書の内容
「美しいコードを見ると感動する。優れたコードは見た瞬間に何をしているかが伝わってくる。そういうコードは使うのが楽しいし、
自分のコードもそうあるべきだと思わせてくれる。本書の目的は、君のコードを良くすることだ」(本書「はじめに」より)。

コードは理解しやすくなければならない。本書はこの原則を日々のコーディングの様々な場面に当てはめる方法を紹介します。
名前の付け方、コメントの書き方など表面上の改善について。コードを動かすための制御フロー、論理式、変数などループとロジックについて。
またコードを再構成するための方法。さらにテストの書き方などについて、楽しいイラストと共に説明しています。

日本語版ではRubyやgroongaのコミッタとしても著名な須藤功平氏による解説を収録。  
内容サンプル
 
User Voice
コメントとコードの2つについて書かれています。

コメントについては、必要・不必要の分類があって、必要なものについてそれぞれ解説がついています。例えば、頭の中で考えたことを書きなさいね!とか。
コードは、表記のルールつくれよ、とか、リファクタリングなど。

自分は、コードは我流でやってきたところがあるので結構勉強になりました。
特に、
・関数とか変数の名前は意味がわかるようにつける
・コメントにtodoを書く
・頭の中で考えたことはどんどんメモする
とか。

上に列挙したものについて「そんなの当たり前だよ。」っていう人は読む必要ないかもしれないすね。
このコードどうなの?と思い始めた人向けの本です。

業務で、他人が作ったコードを読め、動作するコードも書けています。
しかし、他人のコードは読みにくかったりしませんか?
また、自分のコードは見直して理解しやすいでしょうか?
そんな悩みの解決につながる内容になっています。
例えば以下の内容等があります。
・誤解されない変数名のつけ方
・コードを論理的な段落に分ける書き方
・returnを早めるガード節の考え方

どこかで聞いたことがあるかもしれません。それらの体系的な理解に役立ちます。
相手に伝わるコードが書けているかな?と悩みのある人にお薦めの本です。
以前知り合いに借りて読んだことがあるのですが、改めて読み直す機会があり購入しました。
エンジニアは一人一冊持っていて、間違えはないと思います。
ただ、英語でもOKという方はpdfが無料であるみたいなのでそちらのほうがいいかもしれません。
 
   
人気 2位
本書の内容

保守開発のためのリファクタリング!

本書は、システム保守の現場でありがちな、構造が複雑で理解できないようなコードに対する分析手法・対処手法について解説します。つまり、「コードを理解し、テストできるようにし、リファクタリングを可能にし、機能を追加できるテクニックを紹介している書籍です。

本書には、以下のことが記載されています。
●仕様が分からないコードの分析方法
●仕様が分からないコードの修正方法、またテストコードの追加方法
●コードの修正で、疎結合な設計に部分的に改善する方法

また、本書には、以下のことは記載されていません。
●COBOLなどで記述されているメインフレーム上のアプリケーションの改修方法

【 対象読者】
●現行のシステムが仕様が分からず保守作業に悩む、保守担当者
●現行のシステムの修正作業は可能であるもののデグレーションに悩む、保守担当者
●疎結合な設計手法を知りたい技術者

本書はJava、C、C++でサンプルを記述していますが、記載されているテクニックは言語依存するものではないため、他の言語(Delphi、Visual Basic、COBOL、FORTRAN)でも使えます。

※本電子書籍は同名出版物を底本として作成しました。記載内容は印刷出版当時のものです。
※印刷出版再現のため電子書籍としては不要な情報を含んでいる場合があります。
※印刷出版とは異なる表記・表現の場合があります。予めご了承ください。
※プレビューにてお手持ちの電子端末での表示状態をご確認の上、商品をお買い求めください。

 
内容サンプル
 
User Voice
レガシーコードと聞いてイメージしたのは「仕様書も無く、設計やコーディングもメチャクチャ、おまけに当時の開発者はすでにいない。しかし重要なシステムであるためトラブル対応や改造は続けなければいけないこの上なく保守しにくい、担当者泣かせのソースコード」というものでした。しかし、本の帯にもあるように、ここでは自動化テストのないコードを「レガシーコード」と定義しています。

私がイメージしていたような「レガシーコード」には私自身、実際に泣かされることも多いため、「銀の弾丸」的なテクニックが載っていないかと期待していましたが、残念ながらこの本からはそのようなテクニックは見つかりませんでした。
この本が主にターゲットとしているのは、「ある程度オブジェクト指向設計に基づいたソースコード」です。オブジェクト指向ではコーディングされにくいVB/VBAや、JavaやC#なのに活用されている言語機能はC言語止まり、といったコードにはあまり向いていないかもしれません。
こういうケースはやはり地道に解析するしかないんですかね・・・。

とはいえ、星は5つです。
改めて自動化テストの重要性を確認する事ができましたし、テストを優先してメソッドの可視性をあえて上げる、といった発想が新鮮でした。
この本で書かれているリファクタリング技法はマーティンファウラーの「リファクタリング」と重なる部分も多いですが、それでも「テストのためのリファクタリング」という視点が新しいと思います。
そして何より「既存のコード」への対処方法をメインに扱った書籍というのは前例がないと思います。この本を読めば間違いなく、これまでにはなかったプログラムに対する新しい視点を持つ事が出来るようになるでしょう。

P.S.
保守開発に苦労している方はこちらの本も参考になるかもしれません。
=> 
レガシーシステムとはテストの無いコードである。
→テストが無ければ安心してコードが変更できない。
→しかしテストで保護するには、多くの変更が必要になる。
→どうコードを変更し、いかにしてテスト可能にするか?

というストーリーで、テストを導入する方法を豊富な事例と共に紹介しています。
責務が多すぎるクラス、数百行に渡るモンスターメソッド、分岐だらけのロジックなど、現場では当たり前のように出てくる「残念なコード」に対し、解決策を提示しています。

サンプルコードはJavaとC++が大半ですが、私はPHPで実践しました。
オブジェクト指向言語ならこの考え方は汎用的に使えます。

特に役に立ったのは以下の考え方です。

* コードの保護が最優先。保護されたコードは後でいくらでも修正・改善できる。
* 保護するために一時的にコードが醜くなっても構わない。
* 既存のひどいコードを直すよりテストで保護されたパーツで置き換える方が、結局早いし、後々も楽である。
* 仕様が全く不明なコードでも、仕様を把握するためだけのテストを書けば理解が進む。

私は全くテストが無く、「不吉な匂い」で満たされたシステムを担当させられましたが、この本のやり方を知ることで自信を持ってエンハンスができるようになりました。

なお、この本の内容はTDD(テスト駆動開発)を未体験の人にはピンと来ないことが多いと思われます。
「テストを先に書いて後からコードを直す」という手法が当たり前のように使われるからです。
TDDのやり方を習得していないと、この本だけではどう実践していいかわからないかもしれません。
そのため、まずはTDDを習得してから読むことをお勧めします。
・自動テストが良い理由がわかった気がした。テストによって仕様が明確になり、安心して改変ができる。
・Java,C++関連がサンプルだが、他の言語(自分の場合はDelphiなんか)にも役に立つ考え方
・訳はあまり良くない。内容がわかっている人にとってはわかりやすいのかもしれないけど、やはり直訳的なものが目立ち、意味がわかりにくいところが多々あり。
・ある程度、開発に携わっている人でないと、初心者の勉強だとピンとこないところが多数だと思う。
・全く古さを感じさせず、現在でも十分に役に立つことが多数。
 
   
人気 3位
本書の内容
開発経験に基づくパターン実践の極意!
パターン誕生の背景/エッセンス/適用条件/サンプルを解説。

ゲームプログラミングを含むソフトウェア開発の現場で、デザインパターンをより的確に利用するための解説書。著者は、米国大手ゲーム会社エレクトロニック・アーツでゲーム開発に従事。その経験に基づき、GoFや著者独自のパターンについて考察。より容易に変更できる洗練されたアーキテクチャ、ゲームに求められる実行速度といった視点を重視しつつ、幅広く応用できるパターンやゲーム必須のパターンを取り上げています。本書は、『Game Programming Patterns』の翻訳書です。米国アマゾンで60以上のレビューを集め、その9割が星5つと評価されています(2015年8月)。

【以下、本書イントロダクションより抜粋】
私がこの本で提供したいのは、解決策のメニューのようなものです。この本の各々の章では、単独でコードに適応可能なアイデアを解説しています。役立つものをメニューから選んで組み合わせることができます。
 
内容サンプル
 
User Voice
デザインパターン(設計パターン)の本です。
これを読んだからといって、ゲームを作れなかった人が作れるようになる本ではありません。
すでに作れる人が、より良い設計(拡張性が高いとか、不具合が出にくいとか、実行効率が良いとか)にするための本です。
内容は広く浅くという感じです。
学生や若手プログラマーの人におすすめです。

元祖デザインパターンで定番のコマンドパターン、オブザーバパターン、シングルトンパターン、ステートパターンなども載っていますし、ゲーム独自の設計パターンも載っています。
この本の良いところは、サンプルコードや説明がゲームに特化していることです。
よくあるデザインパターンの本は「概要はわかった。でも何が嬉しいのかわからない。実際にいつ使えば良いのかわからない。」という例・解説が多い気がするんですが、この本はゲームに特化してるので、例も具体的で使用方法やメリットがすぐ理解できます。

また、「デザインパターン最高!これを使えば万事解決!」みたいな押しつけはなくて、デメリットを詳しく併記している点も好感が持てます。

「データ局所化(データ指向)」など、わりと高度なトピックも載っていて、このあたりを読むと最近UnityがEntity Component Systemを推し進めようとしている理由がわかります。

翻訳も良好で読みやすかったです。

サンプルコードはすべてC++なので、C++がわからないと厳しいです(といっても、クラスとポインタさえわかっていれば大丈夫です)。
デザインパターンの本といえば結城浩さんのデザインパターン入門が有名ですが、わかりやすいものの面白くなく、デザインパターン自体つまらないものなのかなと思っていました。

しかしこの本はゲーム開発歴が長い作者が実際のゲーム開発で遭遇する問題をデザインパターンで解決していくというスタイルで、すべて例がゲームなのでゲームプログラミング好きにはめちゃくちゃ面白いです。
ステートパターンの章は自分が経験したことのある問題を扱っていた章なので、忘れようがないぐらい吸収できました。
パターンのデメリットや限界、実装上の注意やパターンの変形などについても詳しく扱っていて、実際に実装しようと思った時にかなり役立ちそうな感じです。

設計一般の話も載っており、第一章にあったこの文などがためになりました。
「あるゲームのアイデアが使い物になるかどうか知りたい段階で、アーキテクチャの整ったコードを書くのは、一種の賭けになってしまいます。そのアイデアが実際に画面に展開されて評価を受けるまでに時間がかかるだけでなく、もしもそのアイデアが使い物にならないと結論されたら、そのコードを構造化するためにかけた時間はまったくの無駄になってしまうのです。」

言語はC++ですが、オブジェクト指向言語が一つわかってれば読めるように書かれています。
話題自体が若干高度なのである程度プログラミング経験ある人向けですが、基本的に解説に不親切なところはなく、名著と言っていい本だと思いました。
ゲーム以外のプログラム経験がある人が、趣味でUnityを使い始めて、少し大きなゲームに挑戦した辺りでぶつかる「あれ、このゲームのシステムってどういう風に設計するのが正解なんだろう。」というモヤモヤをスッキリさせてくれる書籍です。

いわゆるデザインパターンの活用方法が、「主人公の状態管理どうしよう。」「敵いっぱい作りたいんだけどパラメータのデータ構造どうしよう。」といったゲームを作るとほぼ確実に出会うであろう問題を例に解説されているので、すんなり頭に入ります。ゲームに寄った内容ですが、専門書が大好きな銀行口座や学生名簿の例よりもよほどわかりやすいので、デザインパターンの入門書としても良いと思います。

個人的には、脚注のユーモアがツボにハマり、読み物としても楽しめました。
 
   
人気 4位
本書の内容
ソフトウェア開発の名著、第2版登場!
リファクタリングは、ソフトウェアの外部的な振る舞いを保ったままで、内部の構造を改善する作業を指します。本書はリファクタリングのガイドブックであり、リファクタリングとは何か、なぜリファクタリングをすべきか、どこを改善すべきか、実際の事例で構成され、ソフトウェア開発者にとって非常に役立つものとなっています。
本第2版では、約20年前のオリジナル原稿の構成は変わらないものの、大幅に書き換えられているほか、サンプルコードがJavaからJava Scriptになるなど、現代的にアレンジされています。  
内容サンプル
 
User Voice
1版、Java版は蔵書としてあるのですが。所属している会社ではフロントエンド寄りの業務が多く、プログラムというとwebでJavaScriptのみ(たまにPHP)で完結することが多い環境にいる人です。

JSで1ファンクションが長くても100行、200行程度、ランディングページとかで継続的メンテナンスは求められない。
なのでどうしても「ベタ書き、とりあえず動けばいい、なるはやで」というコーディングが重宝される。
そんな環境です。(でした?かな。それだけではやっていけなくなっているので)

はい。”ブラックボックス”だらけです。大半のコードを書いた人たちはもう社内にいません、よくある話です。
・長大なファンクションを、入れ子ファンクションできりわける
・一時変数の特定、いらないやつは撲滅
・異常系の検出がおろそかだったので、オブジェクト自身に異常検出機能をつけてみた
などを、「夏休みの宿題・工作」みたいな感じでメンバといっしょに取り組んでいます。

本書について。
文章の言い回しは固くはないのですが、あつかっている処理ちょっと難しい話なので、誰でもがさらっとよめる本ではないようです。しかしサンプルがJavaScriptなので、とりあえず「記載されているコードの意味」はわかってもらえているようです。

最後に。
本書に盲従する必要はないとは思います。いろんなスタイルの一例です。
ただ、本書を通じることで、ある程度の共通認識を持ったうえで、コーディング職人の間での意見交換や価値観論争などは良いことかな、と思いました。

最後の最後に。
急激な変化を嫌う人もいるので、「押し売り」にならないように気を付けて。
自分はすでに数年開発経験があったので、ほとんど既知だったり常識だったりという内容でしたが、
コードの問題点とその解決法が具体的かつ豊富に載っているので、プログラミング経験数ヶ月から半年ぐらいの初心者はこの本を写経すると結構実力が付くんじゃないかな、と思いました。
もし自分が記憶を消してもう一度プログラミングを学ぶとしたら、間違いなく早い段階での必読書として選びます。
ほとんどの手法がIDEの機能を使えば簡単にできる…と言ってる人がいますが、それは半分間違っていると言わざるを得ません
テストコードがあることが前提として紹介されていますが、「レガシーコード改善ガイド」にも書いてあるように、テストコードが無い場合でも応用的に使える手法も紹介されています
読んで損は無い本です
 
   
人気 5位
本書の内容
■「ITエンジニア本大賞 2020」技術書部門大賞受賞!

レガシーコードとは、バグを多く含み、壊れやすく拡張が難しいコードを指します。
このようなコードの保守と管理には多大な労力がつぎ込まれることになります。
しかも一度作ってしまったレガシーコードの質を上げるには、初めから質の高いコードを作るよりも膨大なコストがかかります。

本書では、ソフトウェア開発において、初めからレガシーコードを作りださないためのプラクティスを9つ挙げて解説します。
プロダクトオーナーは目的を語り、やり方は開発者に任せること、小さなバッチで開発を進めること、継続的に統合すること、チームメンバーで協力することなど、日々の開発に取り入れる考え方と具体的な実践について各章で分かりやすく解説します。
信頼性や拡張性が高いソフトウェアをリリースしたい開発者、運用管理者、マネージャに必携の一冊です。  
内容サンプル
 
User Voice
ベストセラーになってますし、すでに読まれた方も多いと思います。間違いなく定番本の一つです。
著者がXP(エクストリームプログラミング)のコーチらしく、述べられているプラクティスの多くはXP由来となっています。
ただ、アジャイル開発手法に変わりはありませんので、スクラムでも適用できる内容です。ウォータフォール?そんな開発手法は存在しませんよ?
副題の9つのプラクティスは以下の通りです。

- やり方より先に目的、理由、誰のためかを伝える
- 小さなバッチで作る
- 継続的に統合する
- 協力しあう
- 「CLEAN」コードを作る
- まずテストを書く
- テストでふるまいを明示する
- 設計は最後に行う
- レガシーコードをリファクタリングする

自分のプロジェクトでも、これらのプラクティスは(ややアレンジはあるものの)実施しており、適切なシステム開発を行うためのミニマムセットになっています。
逆に、できてないものがある場合は、そのシステム開発は何らかの問題を抱えているということになります。
プロジェクト管理者はもちろん、システム開発に関わる全ての人が知っておくべき内容が詰まっています。
システム開発プロジェクトの新規参画者に対しては、オンボーディングで最初に読んでもらうのがいいと思います。
C言語やBASIC言語は学校の座学で知っている程度、営業職などを経て、ここ最近、実務でjQueryありきのJavaScriptコードを数年ほど扱っている末端コーディング人です。

読んだ後の感想。
「自社の財産」とされているコードの大半(率直にいうとほとんど全部)が、この本で言われている「レガシーコード」だと気づくことができました。
オーダーされて旧コードに「機能拡張」などもしているのですが、それがハック的に割り込みしているだけだと自覚できました。

雑談などでもしゃべりやすい同僚から先に、本書を布教しています。わりと共感してもらえて、半年後が楽しみです。

目先の目標としては
・マネージメントの人にも読んでもらう
・本書から共通認識として取り入れられそうなことを、チームとして共有してとりくむ
・会社の経費でオライリー本を買ってもらう

というところです。
今の私にとっては、得るものが多すぎる、とても良い本です。
ちと3千円という価格に躊躇したが買ってよかった。アジャイルでもwater fallでも情報はwebや本に溢れている。でもそれらは本質を得ているかと言うと、初心者のための入門書である。しかしプロジェクトに従事し、そのプロジェクトが継続的なプロジェクトになると話は違ってくる。コメントが書いてない誰が書いたかわからないコード、当然単体テストなんてものはないし、あったとしても単体テストがなにをやってるかわからない。コード品質にしても、なんでクラス関数が50個もあるの?クラス使ってる意味ないじゃん!みたいな組織は多いのではないか。そういったプロジェクトを管理する人には最適であり、日本語で読める唯一の本のような気がする。「レガシーコード改善ガイド」とかマーティンファウアーの本とかはいい本だが、コード書く人よりのガイドであるので、この本とはちょっと方向性が違う。数年間同じ製品を開発し、努力しても製品品質があがらないマネージャ向けだが、若い開発者も読んで損はない本だと思う。
 
   
人気 6位
本書の内容
歴史を変えた1冊、待望の改訂版誕生。

※この電子書籍は、「固定レイアウト型」で配信されております。説明文の最後の「固定レイアウト型に関する注意事項」を必ずお読みください。

※この電子書籍には付録DVDのデータは含んでおりません。電子書籍に記載のURLからPCでダウンロードしてお使い下さい。

「この本で初めてデザインパターンが理解できた」「UMLとイラストを交えた解説がとてもわかりやすい」と、多くの読者から絶賛された大ロングセラーの増補改訂版。原典『デザインパターン』で紹介された全23のパターンを、Javaによる実装を含めて解説。

2001年6月の初版刊行以来、「最もわかりやすいデザインパターン解説書」と、多くの読者から支持されてきた前著の増補改訂版です。改訂にあたっては、前著の内容を全面的に見直して、文章や表記をより適切な表現に改めています。また、デザインパターンについて、読者が誤解しやすい点、間違いやすい点を、「Q&A」として追加しています。デザインパターンについて学び、実践で利用したいプログラマはもちろん、オブジェクト指向の本質を理解したい人に最適の1冊です。

●目次
はじめに
UMLについて
デザインパターンを学ぶ前に
デザインパターンに慣れる
第1章 Iterator ― 1つ1つ数え上げる
第2章 Adapter ― 一皮かぶせて再利用
サブクラスにまかせる
第3章 Template Method ― 具体的な処理をサブクラスにまかせる
第4章 FactoryMethod ― インスタンス作成をサブクラスにまかせる
インスタンスを作る
第5章 Singleton ― たった1つのインスタンス
第6章 Prototype ― コピーしてインスタンスを作る
第7章 Builder ― 複雑なインスタンスを組み立てる
第8章 Abstract Factory ― 関連する部品を組み合わせて製品を作る
分けて考える
第9章 Bridge ― 機能の階層と実装の階層を分ける
第10章 Strategy ― アルゴリズムをごっそり切り替える
 ほか

固定レイアウト型に関する注意事項(必ずお読みください)
この電子書籍は、全ページ画像の「固定レイアウト型」で配信されております。以下の点にご注意し、購入前にプレビュー表示をご確認の上、ご購入ください。

■使用できない機能
・文字拡大(ピンチイン・ピンチアウトは可能ですが、画面におさまらない場合は画面をスワイプ)/文字のコピー/マーク/ハイライト/文字列検索/辞書の参照/Web検索/引用

■推奨環境
・タブレットなど大きいディスプレイを備えた端末
・Wi-Fiネットワーク経由でのダウンロード(Kindle端末の場合)
 
内容サンプル
 
User Voice
拙者プログラミング初心者、
デザインパターンのデの字しか知らないのに、
友人たちがシングルトンが好きだのファクトリーだというから悔しくなって
デザインパターン本を買ってみた

古めの本にもかかわらず、
ランキングで高い位置に居るだけ合って内容はとてもわかりやすく、
サクサク読み進めることができた。

卍デザインパターン完全に理解した卍

とてもおすすめです。
Javaを仕事で使用していて、それなりの規模のプログラムを開発するとき、デザインパターンの知識は必須です。
特に、既存のプログラムの保守や拡張をするとき、既存のプログラムがデザインパターンを利用しているかどうか見分けて、そのパターンの意図を理解できないといけません。
逆に、パターンを知っていると、コード内にパターンを示す命名や使われていたり、コメントが残されていると、それだけで何をしているコードなのか理解も推測もしやすいです。
この本はまずパターンを利用するプログラム例を解説し、その後で抽象的な説明となっています。
内容としては上手くまとめられていて非常にわかりやすく,object指向のプログラミングを学びたい方にお勧めできる一冊となっています。
ただしjavaという言語に触れたことのない方が読んで理解するのは難しいと思います。そのような方はこの本の作者である結城浩先生が書かれた,"Java言語プログラミングレッスン"の上下巻を読んでからこの本に入った方がよいかもしれないです。私がそうでしたがプログラミングを多少やっている方ならサクサク読み進めることができます。
 
   
人気 7位
本書の内容
リファクタリングの入門書の決定版。

※この電子書籍は、「固定レイアウト型」で配信されております。説明文の最後の「固定レイアウト型に関する注意事項」を必ずお読みください。

どうすれば、きれいで読みやすいコードになるのか? 『Java言語で学ぶデザインパターン入門』の結城浩が、リファクタリングの本質と手順をやさしく解説。Javaによる実例満載したリファクタリング入門書の決定版。

●目次
第0章 リファクタリングとは
リファクタリングと「不吉な匂い」
リファクタリング・カタログ
リファクタリングのエッセンス
リファクタリングQ&A
(第1章~第4章では、コードを整える小規模のリファクタリングを学びます)
第1章《シンボリック定数によるマジックナンバーの置き換え》
第2章《制御フラグの削除》
第3章《アサーションの導入(表明の導入)》
第4章《ヌルオブジェクトの導入》
(第5章~第10章では、クラスを整える中規模のリファクタリングを学びます)
第5章《メソッドの抽出》
第6章《クラスの抽出》
第7章《クラスによるタイプコードの置き換え》
第8章《サブクラスによるタイプコードの置き換え》
第9章《State/Strategyによるタイプコードの置き換え》
第10章《例外によるエラーコードの置き換え》
(第11章~第15章では、クラスの関係を整える大規模のリファクタリングを学びます)
第11章《Factory Methodによるコンストラクタの置き換え》
第12章《観察されるデータの複製》
第13章《委譲による継承の置き換え》
第14章《委譲の隠蔽》
第15章《継承の分割》

固定レイアウト型に関する注意事項(必ずお読みください)
この電子書籍は、全ページ画像の「固定レイアウト型」で配信されております。以下の点にご注意し、購入前にプレビュー表示をご確認の上、ご購入ください。

■使用できない機能
・文字拡大(ピンチイン・ピンチアウトは可能ですが、画面におさまらない場合は画面をスワイプ)/文字のコピー/マーク/ハイライト/文字列検索/辞書の参照/Web検索/引用

■推奨環境
・タブレットなど大きいディスプレイを備えた端末
・Wi-Fiネットワーク経由でのダウンロード(Kindle端末の場合)
 
内容サンプル
 
User Voice
マーチンファウラーの「リファクタリング」より本書の方が読みやすく感じられました。訳書独特の言い回しは必要以上に難解に感じられると、本書を読んで改めて感じました。JDK5に対応している点もポイントです。

一通りプログラムが書けるようになったら読み、また、その後も何度でも読み返して考えを新たにする、そういう内容だと思います。

Javaプログラマーでなくても十分に通じる思想だと思いますし、多くのプログラマーに読んでもらいたいと思います。

本書と、もう一冊「デザインパターン入門」があればJavaプログラミングの勉強に関して他はあまり必要性を感じません。

ただ、個人的には「リファクタリング」という単語は小難しい印象があって、少なからず読者を遠ざけているのではないかと思うこともあります。
 結城さんの本の最新版です。当然買いました。同著「JAVA言語で学ぶデザインパターン」は,

今でも手放せません。この本も実に丁寧に作れていると感じます。リファクタリングとデザインパターンは切り離しては考えられません。そしてどちらもオブジェクト指向を身につけるのに必須なのではないでしょうか。高品質なコードを書くには高品質なコードを読んでは書きを繰り返し、体で覚えることが大事です。そういう意味でもこの本は最適だと思います。
多くの開発者はあたりまえだと思っていることが書かれているかもしれない。ただ、「やさしいJava」を読んだ後Android開発を行った私からしてみたらとても良い本だった。人に魅せるコードとまでは行かないものの不愉快にならないコードを書けるようになった気がする。
 
   
人気 8位
本書の内容
(概要)
「コミュニケーションにおける不確実性を減らすには?」
「技術的負債を解消する方法とは?」
「経営陣とエンジニア間の認識のずれを解消するには?」
エンジニアリングにおける課題を解決する思考の整理方法やメンタリング手法を,さまざまな企業の技術組織アドバイザリーを務めている著者が解説。若手を戦力として育て上げ,成長する組織を設計・運営するためにおすすめの1冊です。

(こんな方におすすめ)
・開発チームの生産性を上げたいエンジニア
・社内組織を改善したい経営者

(目次)
Chapter 1 思考のリファクタリング

1-1 すべてのバグは,思考の中にある
1-2 不確実性とエンジニアリング
1-3 情報を生み出す考え方
1-4 論理的思考の盲点
1-5 経験主義と仮説思考
1-6 全体論とシステム思考
1-7 人間の不完全さを受け入れる
Chapter 2 メンタリングの技術

2-1 メンタリングで相手の思考をリファクタリング
2-2 傾聴・可視化・リフレーミング
2-3 心理的安全性の作り方
2-4 内心でなく行動に注目する
Chapter 3 アジャイルなチームの原理

3-1 アジャイルはチームをメンタリングする技術
3-2 アジャイルの歴史
3-3 アジャイルをめぐる誤解
3-4 アジャイルの格率
Chapter 4 学習するチームと不確実性マネジメント

4-1 いかにして不確実性を管理するか
4-2 スケジュール予測と不確実性
4-3 要求の作り方とマーケット不安
4-4 スクラムと不安に向き合う振り返り
Chapter 5 技術組織の力学とアーキテクチャ

5-1 何が技術組織の“生産性”を下げるのか
5-2 権限委譲とアカウンタビリティ
5-3 技術的負債の正体
5-4 取引コストと技術組織
5-5 目標管理と透明性
5-6 組織設計とアーキテクチャ
 
内容サンプル
 
User Voice
システム思考という物の考え方がある。
この本はソフトウェア開発の文脈でシステム思考を獲得するための本であり、
そのような前提が無いとこの本は何も語っていないように見えるかもしれない。

システム思考とは、組織のような複数の要素が絡み合う場における問題解決の際に
その原因を特定の要素(誰それが悪い、仕様の品質が低いなど)に見出すのではなく
「システム」全体の構造に見出すことによって全体最適化を達成するという考え方である。
優秀なマネージャはほぼこの考え方を持っているといえると思う。

しかしシステム思考をうまく稼働させるためには
今現場で起きていることを高い解像度で認識することが必須となる。
表面的に見えている問題(プロジェクトの遅延、品質の低下など)の裏で起きている
本当の問題を透視するための言わば解剖図や骨格標本のような知識が必要になるのだ。

本書はそのようなソフトウェア開発の現場で起きる問題を理解するための
骨格を様々な角度から見事に言語化してくれた。
これは過去他のどの書籍も行っていないことだと思う。

何か即効性のあるアクションを求めているのならこの本を読んでも期待はずれに終わると思う。
問題を深く正しく理解するためのツールを求めているであればこの本は最適だろう。
組織の成長のため、仕組みの作り方とメンバーのメンタリングについて書いている。実践方法よりも考え方を変えるためのインプットとしてよさそう。
読む前は、職制とか命令指揮系統、ソフトウェア開発手法、のような内容が書いてあると思ってた。それよりも概念的というか考え方を知りたいときに読むのがよいと思う。
既にレビューに挙がっていない点について書きます。批判的に書きましたが、次回に向けての改善提案をしたいだけの良い本であり、エンジニアと名のつく仲間にはぜひ読んでほしい一冊です。

1. (良)ソフトウェアエンジニアだけではない
ソフトウェアエンジニアリングとその組織を題材に扱っているものの、何らかのエンジニアリングを伴うプロダクト開発を行う組織ならばハード中心でも適用できる知見が数多く書かれています。

2. (悪)図が非常に分かりにくい、出展が不明
この本の最も悪いところは、図が非常に分かりにくく、本文を読まない限りは誤解すら生じるところです。筆者以外の、理解が及んでいない人が描いたとしか思えません。また、図も本文も同様ですが出展が示されている箇所が非常に少ないです。原典にあたろうとしてもそれが出来ない。熱心な読者にアクセシビリティと、引用・オリジナルを明記する真摯さを表して欲しかったです。

3. (要望) 筆者の知る Best practice を示して欲しかった

紙面が足りないのかもしれないが、良い実践例を具体的に多く示して欲しかった。筆者の経歴から推測するに、まだ良い実践例のサンプル数が多くないということなのかもしれません。
バズワードを丁寧に日本語で表現し直されていて、そこはとても勉強になりました。だからこそ、一歩先を行って欲しかったです。
 
   
人気 9位
本書の内容
初めて学ぶ方、過去に挫折した経験のある方、知識を確固たるものにしたい方を対象に、イラストや写真を使ってやさしく楽しく解説する人気のHead Firstシリーズのデザインパターン編。
刺激的なレイアウト、思わず膝を叩く見事なたとえ、引き込まれる小話、楽しいクイズやパズルで飽きることなく読み進むことができます。
複雑難解なデザインパターンの概念が面白いほどよくわかる、目からウロコの画期的な書籍です。  
内容サンプル
 
User Voice
典型的な初心者が書くコードとデザインパターンを導入したコードを比較することでどのような効果を得られたのか理解できるようになっている。並行して、アーキテクチャの説明がなされている。スクリプト言語のユーザーであればオブジェクト生成に関連するパターンを一通りやっておけばよいだろう。2009年に GoF のメンバーのインタビュー (Design Patterns 15 Years Later) によれば、GoF のカタログの改定版には Null Object、Type Object、Dependency Injection、と Extension Object/Interface が追加され、Singleton が削除された。
息子に薦められて購入。全部で13章あり3章の途中まで読んだ。これは面白い!デザインパターンというコトバ、聞いたことはあったが内容は今まで知らなかった。期せずして随所に「再利用」というコトバが登場していて心強い。デザインパターンを適用して課題を解決していく例題はJavaで記述され説明されている。自分にはJavaの経験はないのだが、オブジェクト指向プログラムの考え方(概念)を例題で学ぶことにもなっている。
重要なデザインパターンとその背景にある考え方を分かりやすい実例を通して学べる良書です。
Java初心者の私にも簡単に読めました。
 
   
人気 10位
本書の内容
※このKindle本はプリント・レプリカ形式で、Kindle Paperwhiteなどの電子書籍リーダーおよびKindle Cloud Readerではご利用いただけません。Fireなどの大きいディスプレイを備えたタブレット端末や、Kindle無料アプリ (Kindle for iOS、Kindle for Android、Kindle for PC、Kindle for Mac) でのみご利用可能です。また、文字列のハイライト、検索、辞書の参照、引用については、一部機能しない場合があります。文字だけを拡大することはできません。
※プリント・レプリカ形式は見開き表示ができません。
※この電子書籍は紙版書籍のページデザインで制作した固定レイアウトです。

ソフトウェア開発の名著、第2版登場!
 リファクタリングは、ソフトウェアの外部的な振る舞いを保ったままで、内部の構造を改善する作業を指します。本書はリファクタリングのガイドブックであり、リファクタリングとは何か、なぜリファクタリングをすべきか、どこを改善すべきか、実際の事例で構成され、ソフトウェア開発者にとって非常に役立つものとなっています。
 本第2版では、約20年前のオリジナル原稿の構成は変わらないものの、大幅に書き換えられているほか、サンプルコードがJavaからJava Scriptになるなど、現代的にアレンジされています。


第2版翻訳にあたって
初版の「本書に寄せて」
はじめに
Chap.1 リファクタリング-最初の例
Chap.2 リファクタリングの原則
Chap.3 コードの不吉な臭い
Chap.4 テストの構築
Chap.5 カタログの紹介
Chap.6 リファクタリングはじめの一歩
Chap.7 カプセル化
Chap.8 特性の移動
Chap.9 データの再編成
Chap.10 条件記述の単純化
Chap.11 APIのリファクタリング
Chap.12 継承の取り扱い
文献リスト 
訳者あとがき
索引  
内容サンプル
 
User Voice
1版、Java版は蔵書としてあるのですが。所属している会社ではフロントエンド寄りの業務が多く、プログラムというとwebでJavaScriptのみ(たまにPHP)で完結することが多い環境にいる人です。

JSで1ファンクションが長くても100行、200行程度、ランディングページとかで継続的メンテナンスは求められない。
なのでどうしても「ベタ書き、とりあえず動けばいい、なるはやで」というコーディングが重宝される。
そんな環境です。(でした?かな。それだけではやっていけなくなっているので)

はい。”ブラックボックス”だらけです。大半のコードを書いた人たちはもう社内にいません、よくある話です。
・長大なファンクションを、入れ子ファンクションできりわける
・一時変数の特定、いらないやつは撲滅
・異常系の検出がおろそかだったので、オブジェクト自身に異常検出機能をつけてみた
などを、「夏休みの宿題・工作」みたいな感じでメンバといっしょに取り組んでいます。

本書について。
文章の言い回しは固くはないのですが、あつかっている処理ちょっと難しい話なので、誰でもがさらっとよめる本ではないようです。しかしサンプルがJavaScriptなので、とりあえず「記載されているコードの意味」はわかってもらえているようです。

最後に。
本書に盲従する必要はないとは思います。いろんなスタイルの一例です。
ただ、本書を通じることで、ある程度の共通認識を持ったうえで、コーディング職人の間での意見交換や価値観論争などは良いことかな、と思いました。

最後の最後に。
急激な変化を嫌う人もいるので、「押し売り」にならないように気を付けて。
自分はすでに数年開発経験があったので、ほとんど既知だったり常識だったりという内容でしたが、
コードの問題点とその解決法が具体的かつ豊富に載っているので、プログラミング経験数ヶ月から半年ぐらいの初心者はこの本を写経すると結構実力が付くんじゃないかな、と思いました。
もし自分が記憶を消してもう一度プログラミングを学ぶとしたら、間違いなく早い段階での必読書として選びます。
ほとんどの手法がIDEの機能を使えば簡単にできる…と言ってる人がいますが、それは半分間違っていると言わざるを得ません
テストコードがあることが前提として紹介されていますが、「レガシーコード改善ガイド」にも書いてあるように、テストコードが無い場合でも応用的に使える手法も紹介されています
読んで損は無い本です
 
   
人気 11位
本書の内容
オブジェクト指向ソフトウェア設計の際に繰り返し現れる重要な部品をデザインパターンとして記録し、カタログ化。改訂版ではこれにCD−ROMを添付、現場でブラウザを通して即利用できるパターンカタログデジタル版を収録。特別付録として、原書にはないJavaのサンプルコードを追加。
【技術書翻訳名著シリーズ】
ソフトウェア開発のバイブル群! 弊社がこれまでに刊行した翻訳技術書の中から、長年読者から支持され続けている名著を厳選したのが、本シリーズです。移り変わりの激しいコンピュータ業界で、普遍性を保ち続ける定番をお届けします。ソフトウェア開発の上流から下流まで、入門書からエキスパート向けまで、技術者に求められる選りすぐりの情報がここにあります。
 
内容サンプル
 
User Voice
確かにこの本は予備知識なしに読むのは難しいですね。
まず、"デザインパターン"とは何かということを、そしてその記述の仕方(パターン名、問題、解決、結果)を第1章で説明されていますが、事前に知っておいたほうが読みやすいと思います。
第2章ではLexiというTexに似たドキュメントエディタのなかにどんなデザインパターンが使われているか書かれています。個人的にもデザインパターンを説明するにはテキストエディタや描画エディタが最適だと思い、2章も押さえておくと以降も理解しやすいです。
第3章以降でやっとそれぞれ(生成、構造、振る舞い)のデザインパターンが紹介されています。"生成"、"構造"、"振る舞い"というのが何を意味しているのか初めはよくわかりませんでしたが、各パターンを見ていくうちにこの区別の仕方が理解できます。
ただし各章を順番どおりに読んでいくのではなく、後へ先へページを何度もめくっていく中で理解していくことができるでしょう。
「デザインパターン」を学ぶ上で、結城浩氏の「Java言語で学ぶデザインパターン入門」やW.J. ブラウンの「アンチパターン―ソフトウェア危篤患者の救出」もお勧めです。
この本は、SEがプログラムの詳細まで指示をして、末端に極力考えさせないようにする日本のIT土方には全く不要だと思う。
ではSEならば初期のスクラッチモデルを作るとき、この本が役に立つかというと、それもそうではない気がする。

いまの日本ではデザインパターン自体を直接プログラム製造に生かす機会は少ないのではないだろうか。
スクリプトもマシンの力業でパターンを使わずに作れる。

この本の用途としては、オブジェクトに対する感覚といった、プログラムのセンスを磨くための本であると私は考えている。例えばFlyweightにあるIntrinsicとExtrinsicのように、プログラムの全体要素を多数と少数の部分に切り分けるといった、全体の中の大小のトレードオフをする感覚といったものを(今となっては)磨くことができるのではないだろうか。あとライブラリを作る時にも参考になると思う。
ウェブサイトでまとめてある物では何故その設計思考に至ったのかが書かれていなかったり、
どの様なときに使うべきかなどが曖昧だったりする場合が多く、表面だけ真似て批判する人も多いので、この本を買った。
予想通り、何故この様な設計に至ったのかが書かれていてよかった。
現代では言語仕様に組み込まれている場合もあり、意味のないデザインパターンも存在するが、考え方を学ぶには良さそうです。
設計の話を巻き起こした原点とも言えるので一読の価値あり。
 
   
人気 12位
本書の内容
本書は、統合開発環境、デザインパターン、エクストリーム・プログラミング、テスト駆動開発、リファクタリング、継続的インテグレーションなどのモダンな開発スタイルを組込み開発に適用する方法を解説します。  
内容サンプル
 
User Voice
組込み系開発では、このご時世になってもC言語が主流です。
そのため、C言語に関する書籍は数多く出版されていますが、着目する箇所が他の書籍と異なります。
特に、以下の点です。
・環境構築法の記載
・オブジェクト指向的な実装方法
・ツールを活用した開発方法

・環境構築法の記載
環境構築の方法がしっかり記述されていることに驚きました。
書籍によって、各自で構築というケースも少なくないため、手間取ることも多かったと思います
本書では、様々なツールの導入方法がキャプチャ画像付きでしっかり記述されていました。
非常に助かりました。

・オブジェクト指向的な実装方法
エンプラ系では、オブジェクト指向が主流のご時世ですが、C言語でうまく実装できないか悩んでいました。
本書では、多態性や継承、デザインパターンなどをC言語で記述する方法がしっかり記述されています。
特に、C言語を極めたいエンジニアには良いと感じました。

・ツールを活用した開発方法
一番勉強になった点は、ツールの活用方法がしっかりかかれている点でした。
特に、googletest、カバレッジ測定、Valgrindの使い方は、組み込み系エンジニアなら役に立つはずです。
著者の目の付け所がすごいです。

一通り読んでみて、C言語を使いつづけるエンジニアには、読むべき書籍です。
著者の10年分の知識が、一瞬で身に付きます。

なお、対象はC言語中級レベルだとスラスラ読めます。
2回通して読みました。自分には大当たりの技術書です。

C言語、という書名ですが、C言語に固有の本ではありません。
ソフト設計に共通して当てはめられる本質的な考え方やノウハウが、
Cを例に使って説明されてる、というのが正しいです。(実際この著者はJavaの本も書いてるようです)

恐らく、10年以上 真剣に設計に向き合ったソフト屋しか知り得ないようなノウハウが
惜しげもなく詰め込まれています。
いくつかは、世のベテランも独自に会得して、いざという時の秘策や切り札にしているような知識まであるのでは…。

理論倒れでなく、開発の現場で地に足を着けて苦労の末に気づく本質、
あるいは余程のことがなければ他人には教えないような秘訣も、書いてしまっているようです。

年寄りと見なされつつ、経験とノウハウで必死に若い理解力や柔軟性に負けじと踏ん張る身としては
こんなことまで教えてしまったら困る、という思いさえ心をよぎらずには居れません。
数千円で、誰でも買えてしまって良いものか。

そう言う自分自身も、今まで洞察しえなかった知識を多く得て、何というか、
著者には感謝のような思いも感じます

良書、と言ってよいと思います。
昔日の日々、C言語とは文法を覚えて書くだけ(まあコンパイルされたアセンブラレベルとかわかるとすごーい、なんて言われてたり)、それだけでプロとして認識された。
しかし学生ではなく職業としてコードを書く人の求められるスキルレベルは現在非常に高い。デザインパターンを知らないコード書きはありえない。継続的インテグレーションをちゃんと理解してないコード書きもありえない。もちろん現代のリファクタリングテクニックはXPにおいて必須である。
でもそんなの知らずにコード書いてる人がたくさんいるのは、事実であり日々むかつく。そんな昭和なコード書きに投げつけてやりたい本である。
 
   
人気 13位
本書の内容
ソフトウエア開発の方法論を幅広く網羅した入門書。上巻は設計やプログラミング、下巻はテストやデバッグを扱う。1993年発行の第1版を、Webアプリケーションの普及などを踏まえて大幅に改定した。著者はソフトウエア工学の第一人者で、知識体系「SWEBOK」の構築を主導する。計1200ページを超える大部だが、ソフト開発プロセスを建築設計にたとえるなど、難解になりがちな内容を分かりやすくまとめている。
本書は効果的なコンストラクションプラクティスについての知識を集めた、実践的なプログラミング解説書です。ソフトウェア開発プラクティスは目覚しい進歩を遂げていますが、一般のプログラマにはなかなか浸透しません。本書は、業界の第一人者らの知識と、一般の商用プラクティスとの橋渡しをします。10年前の第1版とコンセプトは同じですが、第2版は、全体を通じてオブジェクト指向の考え方が反映されたものになっています。また、「リファクタリング」の章が追加され、サンプルコードはC++、C#、Java、Visual Basicなどにアップデートされています。本書は、ソフトウェア開発の総合ガイドを求めている経験豊富なプログラマ、経験の浅いプログラマを教育する技術指導者、正式なトレーニングを受けたことのない独学プログラマ、これから社会に出る学生や新人プログラマなどを特に対象としています。本書で説明されている研究成果や過去の経験は、高品質なソフトウェアを作成し、問題を少なく抑えて作業をより短期間で行うのに役立ちます。また、大きなプロジェクトを制御し、要求の変更に応じてソフトウェアの保守や修正を適切に行うのにも役立ちます。  
内容サンプル
 
User Voice
よりよいプログラミングを目指して書かれた書籍。分厚い。大量の文献が引用されており,読み応えが十分。
上下巻に分かれており,この上巻では主にプログラミングでの名前について解説されているのが印象的だった。

関数(ルーチン)の名前はどうすればいいか?変数名はどう書けばいいか?データ型やステートメントはどう使い分けるのがいいかなど,実際のプログラミングで誰しも一度は悩むような項目を扱っている。
たとえば,TotalDataとするか,DataTotalとしたほうがいいのか。

クリーンコードやリーダブルコードなど他のコーディングに関する本でもこうした項目に言及しているが,この本ほど網羅的で徹底的に議論されてはいない。おそらく,この本以上にコーディングについて徹底的に考察された本はないのではないかと思える内容だった。

p. 317の「11章 変数名の力」の冒頭の以下の言葉がこの本の本気度を伺わさせる。
「効果的なプログラミングにとって、よい名前というテーマは重要であるにもかかわらず、よい名前の作り方を10項目以上にわたって取り上げた本を読んだことはない。プログラミングに関する文献の多くは、省略形の選択に段落をいくつか割き、決まり文句でお茶を濁し、読者が自力で何とかやっていくことを期待する。本書はこれに真っ向から対抗し、良い名前に関する情報を使い切れないほど提供しようと考えている。」

値段は少々高いが,大量の文献,考察が書かれており,2005年出版とやや古いが,今でも通用するかなり有益な本だった。是非手元においておきたいと思える本だった。プログラミングするなら読んで損はしないと思う。
題名の通り、完璧なプログラミングコードを書くための指針をまとめたシリーズの上巻。
良いコードを書くために守るべき習慣(プラクティス)が次々と述べられており、自分で実践したくなることはもちろん、開発者仲間にも教えたくなるような事柄が満載である。
プログラミング言語は特に指定されておらず、例外は多少あるものの、基本的にどのプログラミング言語を使うときにでも共通に使用できるテクニックが中心に述べられている。
例として上げられている言語はVisual BasicとC/C++、それにJAVAが多いが、コードは簡単かつ明瞭に書かれているため、これらのプログラミング言語を使ったことがなくても、問題なく理解できるだろう。
非常にボリュームが豊富なため、読み切るのに苦労するかもしれない。
しかし、多くの内容が理路整然とわかりやすくまとめられているため、量が多くて苦痛になるという感覚はあまり感じなかった。
また、経験豊富な開発者なら、既に知っている内容も多く含まれているかもしれない。
だが、既知のテクニックを再確認できるという点で、読む価値は十分あるだろう。
完全な初心者には向かないかもしれないが、もっときれいで読みやすいコードを書きたい全ての開発者、プログラマの方々に是非手にとって欲しい1冊である。
自分もエンジニア歴3年目くらいに上下巻読みましたが、想像以上に役に立ちました。下記の言葉の通り、商用プラクティスと学術的な研究成果を結びつけるための本であり、第一人者の研究成果をコードベースで学ぶことができます。少し高い本ですが、読んで損はない1冊だと思います。
「ソフトウェアエンジニアリングのベストプラクティスと、平均的なプラクティスとの差は非常に大きい」Fred Brooks
 
   
人気 14位
本書の内容

【本電子書籍は固定レイアウトのため7インチ以上の端末での利用を推奨しております。文字列のハイライトや検索、辞書の参照、引用などの機能が使用できません。ご購入前に、無料サンプルにてお手持ちの電子端末での表示状態をご確認の上、商品をお買い求めください】

実践的なプログラミング技法の基礎から実装まで!

デザインパターンを「使うことができる」ためには、デザインパターンの構造や仕組みを知っているだけでは充分ではありません。「どのような状況」で「どんなふう」に使うのが効果的なのかを充分に理解している必要があります。そこで本書では、パターンの使いどころと効果をわかりやすく示すことで、どのようなときにどんなふうにデザインパターンを使えばよいのかを理解できるようにしています。

※本電子書籍は同名出版物を底本として作成しました。記載内容は印刷出版当時のものです。
※印刷出版再現のため電子書籍としては不要な情報を含んでいる場合があります。
※印刷出版とは異なる表記・表現の場合があります。予めご了承ください。
※プレビューにてお手持ちの電子端末での表示状態をご確認の上、商品をお買い求めください。

 
内容サンプル
 
User Voice
デザインパターンの名著といえば、
本書ですが,C++ベースでのデザインパターンの入門書レベルの内容で,
C++を使う者にとっては大変有難いのですが,残念ながら以下の理由から
初版の内容ではお勧めし辛いです。

まず最初に UMLの表記に関する簡単な解説と,オブジェクト指向の概念についての
説明があり, その後,デザインパターンの使用頻度別(高・中・低)に分けて,
各パターンが以下の構成で紹介されています。

・パターン適用前のソースコード
・パターン適用後のソースコード(大半は複数)
・パターン適用後のクラス図

各パターンの紹介で使用しているプログラムは,実処理が無い簡単なコードですが,
それにも拘らず,メソッド名やクラス名の平凡な間違いが非常に多く,コンパイルが
通らないことが多々あります。★-1

また,パターン適用後のコードが各ページに部分ごとに散在しており見辛いです。
当然,実際に動作させてみる場合も,読者が自分で散在したコードをまとめ上げる
必要があり,結構労力を要します。巻末もしくはせめてWeb上に,コード一覧を
早急に用意して欲しいです。★ -1

なお,「パターン適用後のクラス図」の説明についても一部誤植がありましたが,
こちらは初版のため仕方ないか…というレベルでした。

本書に掲載されているプログラム自体は,「独習C++」で勉強したことがある読者
であれば読みこなせる内容で,C++ベースのデザインパターンの入門レベルとしては
良いと思いますので,早期の訂正とコード一覧の掲載を強く望みます。
分かりにくいのですが、そもそもデザインパターンを分かりやすく説明するのも難しいかなと思います。
そういう意味ではまだ分かりやすい方だと思います。

いずれにせよデザインパターンは自分で使ってみないと・・・。
でも参考になりました。
 
   
人気 15位
本書の内容
「デザインパターン(パターン)」を目指して「リファクタリング」する手法を解説し、パターンとリファクタリングの両方が学べる実践的な教科書です。リファクタリングは、ソフトウエアの持つ機能はそのままに、構造を見直す作業であり、開発過程で複雑になっていくプログラムを改善し、バグを減らし、機能拡張にも有効です。そのリファクタリングの際、「パターン」を取り入れたり近づけたりするようにプログラムを改善していくのが、本書で紹介する「パターン指向リファクタリング」です。リファクタリングの道しるべとして「パターン」をとらえることで、リファクタリングの幅が広がる一方で、デザインパターンがどういったものかは理解しつつも、なかなか実際のソフトウエアの設計でうまく生かせない方には、パターンの有効な使い方が学べます。「まえがき」は、『リファクタリング』の著者マーチン・ファウラーと、『デザインパターン』の著者ラルフ・ジョンソンが執筆。本書『Refactoring to Patterns』は、米Software Development誌、2005年Jolt Productivity Awardを受賞。
 
内容サンプル
 
User Voice
リファクタリング時に、こういう論拠で、こうしたら、
デザインパターンになりました、という具合に、
具体的なサンプルを通じて解説してくれます。
先人のノウハウの固まりだから、設計の段階から、
うだうだせずにデザインパターンを使おう、という意見に、
何となく違和感を感じている人には、
特に、読む価値のある一冊だと思います。
ぼくはこのアプローチが好きです。多くの人にとって最適ではないかと思ってます。パターンは、たしかに、システムによっては大げさすぎ、野暮ったい。シンプルであるべきという理念からは外れてしまいます。アジャイル、エクストリームプログラミングとは相容れません。

しかし、少し大げさでも、パターンを適用したコードを書いて、あとから、コードを、システムの性質に合わせてリファクタリング(シンプルにする)ことは、いい方法の1つであろうと思います。経験を活かしつつ、あらゆるシチュエーションに対応するにはいいアイデアです。
 
   
人気 16位
本書の内容
(概要)
Lisp・関数型プログラミングのメリットとは何か――副作用のないプログラミングがまず挙げられます。これでバグが圧倒的に少なくなります。さらにはコードの再利用がしやすいこと,並列処理が得意であるということも。それだけではありません。動的な型付けも特徴ですし,ラムダ計算もクロージャも,さらにはオブジェクト指向までできます。数十年の時を越えて現代にも通用する普遍的なアイデアがLispにはあります。本書はさまざまなLispプログラム(ハノイの塔,エイトクイーン,オンライン書店など)を解説し,さらにリファクタリングまでいっきに学びます。本書で関数型プログラミングのエッセンスを得ることができます。


(こんな方におすすめ)
・オブジェクト指向プログラマ
・昔からのLispプログラマ

(目次)
第1章 関数型プログラミングとは何か――そして,それがなぜ難しいのか?

第2章 関数型プログラミングを学ぶためのLisp超入門

第3章 関数型プログラミングの基本

第4章 プログラミングパラダイムの比較

第5章 関数型プログラミングの演習

第6章 関数型プログラムの評価とリファクタリング  
内容サンプル
 
User Voice
待望のLispの良書が出た!という感じです。
Lispというとその大きな特徴にマクロがあり、そのことに偏重する本が近年、多かったと思います。
この本ではもっと広く、Lispの魅力を伝えつつ、関数型プログラミングを平易に説明していると思います。
往年のLispファンにとっても読みごたえたありますし、これからLispをやってみようという人にも魅力的な一冊だと思います。
著者はかつて、日本のメーカーにてLispマシンやLisp処理系の実装経験があるというLispを語るには最適の人材。しかしその才能が仇となってか、「はじめての」読者の気持ちがよく分かっていないように見えた。例えば「はじめに」や第一章でいきなり「副作用」という言葉が出てくる。「風邪薬を飲むと眠くなる」副作用しか知らない関数型プログラミング言語初学者は何のことかと思う。そしてプログラミングの学習には欠かせない「コード写経」をするための環境構築の記述が少ない。サンプルも、高階関数からはじまりカリー化、フィボナッチ数列を求める関数、nクイーン問題など数学好きには興味のある問題が出てくるのだが、入門書の例題を飛ばして読んでしまう私のような不真面目な読者には、それが手続き型プログラミング言語をどう革新してくれるのか想像できなかった。
キャリアだけ見れば適材中の適材であるはずの著者が、なぜ本を書くというと、社内ドキュメント以上のものが出てこないのか?日本には優れた技術書を書く人材がいないわけがなく、これは出版社の構造的な問題に感じる。編集者の意識がマニュアル本以上の「読める技術書」を作ろう、作らせようという意識がないのだと思う。優れた技術書とは何か?オライリーの好評価の本を数冊読めば自明の筈なのに…。
日本人が日本語で書いたLisp入門書が2016年に出た、という価値により星3つ。
Listや関数型でプログラミングする際の基本的なコンセプトが説明されていて良書だと感じました。
特にコンスセルを基礎にした設計感覚が理解できた気がします。
他にも、末尾最適化の説明は、意外とWEB上でも情報が少ないのですが、とても分かり易かったです。

ただ「はじめての」と名うってはいるものの、初見では理解が難しい部分も少なからずありましたが(特に演習の部分)、そこは本文中でも時間を掛けて咀嚼するべし、と記載があったので、実際にコードを書いてみて段階的に読み直してみようかと思います。

あとはラムダ計算はじめ目次的に惹かれるものの、実際には読み飛ばして良い内容が少なからずあるのが少し残念です。構成を少し見直してくれるともっと良くなると思います。
 
   
人気 17位
本書の内容
《本書は旧版です。改訂版が発売中です。》

※この商品はタブレットなど大きいディスプレイを備えた端末で読むことに適しています。また、文字だけを拡大することや、文字列のハイライト、検索、辞書の参照、引用などの機能が使用できません。

プログラムに潜む扱いにくい部分を見つけ出し、その動作を変えずに内部の構造を改善していくためのテクニックを整理したマーティン・ファウラー氏によるソフトウェア開発の名著『リファクタリング プログラミングの体質改善テクニック』(“Refactoring:Improving the Design of Existing Code”)が、オリジナルの訳者による丁寧な見直しと現代的なJava開発環境による「再リファクタリング」を施した書き下ろし付録を収録して再発行!
旧版の価値を知るベテランはもちろん、これからソフトウェア開発に携わる新人にも必読の一冊です。  
内容サンプル
 
User Voice
基本的な内容は「リファクタリング―プログラムの体質改善テクニック」とほぼ同様ですが、
オリジナルの訳者による丁寧な見直しが新装版にも反映されています。
まだ全て読み終わってはいませんが・・・
(旧版との比較を厳密にしながら読み進めているわけではないですが・・・)

旧版はもう販売していませんので、多くの方に購入する機会をとの考えで新装版を発売されたそうです。
新装版の目玉は、付録「 Java のバージョンアップに伴うリファクタリングをめぐる環境の変化」です。
旧版出版以降のJavaとそのテスティングフレームワークの進歩の記載があります。
対象となるJavaは7までとなっています。

Javaとそのテスティングフレームワークの進歩の記載の後に、その進歩を反映して、
本書に含まれるコードを再びリファクタリングしています。実際にはジェネリック等が取り扱われています。
この部分が新装版の最も注目されるべき箇所であると思います。

本書が全面的にJava7に対応されていないことについては不満がありますが
今後は、Oracleは今までと違ってJavaの言語仕様の強化に注力して行くことが見えていますし
既にJava8でかなりの変更があったといえ、付録の再リファクタリングで十分に新装版の意味はあると考えます。
オブジェクト指向の応用的な内容であると同時にオブジェクト指向の利点が分かるようになっている。オブジェクト指向を学んだor学んでいる最中だがオブジェクト指向の利点が分からない、というときに読むと理解の助けになる。また、本書の内容がほとんどそのままオブジェクト指向の利用法になっているので、理解できるだけでなくそのままオブジェクト指向を活用する第一歩になっている。リファクタリングという横文字でなんだか小難しいものだと思って敬遠していたけど、カタログ部分はオブジェクト指向プログラミングにおける「あるある」ネタを集めて、それに対処するための小ネタを集めたようになっているので、気楽につまみ食いするように読める。ただし、ある程度のオブジェクト指向の知識は必要で、一部UML図も使われている。といっても、オブジェクト指向の基本が分かれば十分理解できるレベルなので、オブジェクト指向の勉強の一環として読めば非常に有益な本だった。
リファクタリングの勉強するなら、この一冊は必要不可欠でしょう。 この本の対象となる読者は、職業プログラマ及びオブジェクト指向言語です。 解説はすべて、Java言語で行われていますが、他のオブジェクト指向言語を 理解していれば、問題なく読み進めることができます。 リファクタリングの重要性についてはもちろん、テクニックを細かく解説してあり、 実践に役に立ちます。 この本の核となる部分は第6章からリファクタリング・カタログです。 「名前、要約、動機、手順、例」の順で全てが書かれていて、 非常に読みやすいです。
 
   
人気 18位
本書の内容
アジャイルなソフトウェア開発の実践において、プログラムの改善にリファクタリングは欠かせません。
同様に、プロジェクトを本当の意味で改善するためには、開発にかかわる人間の脳(ウェットウェア)をリファクタリングすることが重要だと思いませんか?
そこで、認知科学、神経科学、学習理論、行動理論などを駆使し、人間の脳がどのように機能するかを明らかにします。

本書で紹介するテクニックを実践すれば、読者の学習スキルおよび思考スキルは向上、日々の生産性を20%から30%改善できると著者は主張します。
名著『達人プログラマー』の著者、アンディ・ハントが語る「あなたの脳をリファクタリングする」方法です。  
内容サンプル
 
User Voice
「達人プログラマー」の共著者であるAndy Huntの渾身の一作といえるかもしれない。
個人的にはかなりの当たり本だと思う。

内容は仕事の上達論、右脳左脳の話、意識的な学びの方法、など
知識労働者(エンジニア特にプログラマー、あるいは作家など)であれば、
一読して損はない内容だと思う。

Andy Huntはソフトウェアエンジニア出身とあって、
比喩や事例などはほとんどプログラマー向けのコンテクストで、
他の分野の人が読んでもピンと来ないのではないかと思う(笑)。

この本の対象は職業プログラマー、その中でも
「プログラマーは現代の職人である」とい思いを持っていて、
自ら職業としてその道をつっぱしりたい人には、非常に参考になる内容が書かれている。

冒頭で紹介される技能の上達に関するドレイファスモデルなどは、
まさに「達人プログラマー」になるための個人向けCMMみたいなものだ。
初心者/中級者/上級者/熟達者/達人の5段階がある。
引用されている「ベナー看護論」はぜひ読んでみたい一冊だ。

印象に残ったところで、
初心者クラスのプログラマーが学んだばかりデザインパターンのほとんどを、
小さなコードにつめこんだ話が出てくるが、あまりにありがちで笑うに笑えない。

初心者はあらゆる可能性を検討してしまうが、
達人クラスは、直感を使って必要にして十分な最適解をいきなり出してしまう。ということを書いている。

これなどは、将棋の羽生さんの「直感力」に書かれていることと同じだ。
将棋を指す際に、できるだけ手を読むのではなく、その局面において明らかに読まなくて
良い手はまず除く。できるだけ不要な手を読まない。というスタンス。

この「検討しなくて良いこと」が何かが判断できるためには、知識や経験を積むしかない。
つまり、ドライファスモデルに従って、一段ずつ地道にあがるのが正しい。

この本には、その階段を上がるための基礎体力を鍛える方法が惜しみなく書かれている。
 技能には、初心者、中級者、上級者、熟練者、達人の5段階があるというドレイファスモデルを紹介し、上級者と達人の間の非連続的なギャップを明らかにする。全8章からなるこの本の第1章の初心者から達人への道という章に共感できるかどうかが、この本の評価を分けることになる。上級者はえてして、その上のレベルがあることに気付かず、そこで満足しがちであるという現場で起きている現象を鮮やかに説明しきっている。
 さらに上を目指す上級者のためのレシピが残りの7章である。脳の構造とLモードとRモード(よく言われている左脳・右脳の働きをモードとして表現した用語)で説明し、達人への道としてRモードへの転換の必要性を示す。そのための具体的トレーニングも説明している。いろんな例と丁寧な説明でわかりやすい。
 ここで書かれているレシピが適切なものかどうかは別にして、ドレイファスモデルについて記述された第1章を読むためだけに購入しても価値がああると思う。
 本書のメッセージは、初心者、中級者、上級者、熟練者、達人の夫々の習熟度の段階において、必要とするツールが異なるということだ。初心者には、定型的な手順書が必要であり(その代わり臨機応変な判断を期待しない)、達人には臨機応変に行動するための柔軟な環境が必要である。
 ここで問題は、どうすれば初心者から中級車、そして上級者、最後に達人と習熟度を上げていけるか?という方法であり、本書はこの方法について述べている。
 世の中のHow to 本が、初心者向けのツール(定型的な手順:例えば「重要なものから先に実行せよ」など)を提供しているのと比べ、本書は初心者から達人になるための方法を記している点が特徴である。キーワードは、「学び方を学ぶ」である。
 
   
人気 19位
本書の内容
(概要)
業務でVBAプログラムを組んでいる人の多くは,部署で一番パソコンやExcelに詳しいからという理由で任されていることも多く,プログラミングの基本的な素養や知識を知らない方も多いでしょう。このため,動けばOKといった,その場しのぎのコードを書いてしまいがちです。そういったコードは,あとから見直したり再利用する際にトラブルを起こしやすく,またどこになにが書いてあるかわかりにくいので,せっかくの生産性や効率性を落としがちです。本書は,そのようなVBAではじめてプログラムを組んだという人たちにプログラミングの基礎を示し,あとから見て読みやすく,変更や再利用に強いVBAプログラムの書き方を身につけるための本です。

(こんな方におすすめ)
・業務や趣味で初めて触ったプログラミング言語がVBAという人,VBA以外プログラミングしたことがない人
・独学でVBAプログラミングをやってきたけど,自分の書き方でよいのか自信のない人

(目次)
第1章 良いVBAのコードとは
1-1 そのVBAのコード,半年後の自分が理解できますか?
1-2 “良いコード”とはなんだろう?
1-3 本書の読み進め方

第2章 見た目にこだわる
2-1 理解しやすいコードは見た目も美しい
2-2 コードのまとまりをインデントしよう
2-3 まとまりごとに空行を入れよう
2-4 1行が長いコードは適度に改行しよう

第3章 適当な名前を付けない
3-1 読みやすいコードは名前もわかりやすい
3-2 プロシージャは機能がわかる名前を付けよう
3-3 変数や定数は用途がわかる名前を付けよう
3-4 変数名を変えてみよう
3-5 変数名の暗黙の了解

第4章 コメントを入れよう
4-1 たかがコメント,されどコメント
4-2 サンプルにコメントを入れてみよう
4-3 ポイントとなる箇所にコメントを入れよう

第5章 変数は必ず宣言して使おう
5-1 なぜ変数を宣言するのか
5-2 本書サンプルで変数を宣言してみよう
5-3 変数を宣言したことによる補完機能
5-4 変数宣言時にデータ型も指定しよう
5-5 本書サンプルでデータ型を指定してみよう
5-6 覚えておきたいオブジェクト変数のデータ型

第6章 数値や文字列は定数に置き換えよう
6-1 なぜ数値や文字列を直接記述してはいけないのか
6-2 定数定義のキホンをおさらい
6-3 サンプルで数値を定数化しよう
6-4 定数を定義して数値を置き換えよう
6-5 文字列も定数化して変化に強くしよう
6-6 定数を定義して文字列を置き換えよう
6-7 知っておきたい定数の知識やノウハウ

第7章 共通するコードはまとめよう
7-1 何度も登場するオブジェクトをまとめよう
7-2 サンプルの重複するオブジェクトを変数にまとめよう
7-3 Withステートメントで重複をまとめる
7-4 共通する処理はくくり出してまとめる
7-5 共通する処理をSubプロシージャにくくり出す
7-6 Subプロシージャの引数でちょっとした違いを吸収する
7-7 戻り値が必要ならFunctionプロシージャの出番
7-8 長いコードは機能別に小分けにしよう
7-9 変数を利用して賢くコードを分割しよう

第8章 変化やトラブルにもっと強いコードにする
8-1 表のデータの増減に自動対応可能にしよう
8-2 表の移動に自動対応可能にしよう
8-3 コードを整理してスッキリさせよう
8-4 予期しづらいトラブルの受け皿を用意しておく  
内容サンプル
 
User Voice
Excel VBAのプログラミングをする際の、メンテしやすいソースコードを書くための具体的なノウハウが詰まっています。インデントや改行、空白行の挿入といった基本的なことも、ここまで詳しく書いてある本は他にはないと思います。

そして変数や定数、サププロシージャの名前の付け方もとても具体的で、プロはここまでやるのかと勉強になりました。特に定数については非常に詳しく、自分はまだまだ定数をつかいこなせていなかったと痛感しました。

Functionプロシージャやサブプロシージャを使ってプログラムを整理するやり方も具体的でわかりやすく、勉強になりました。第8章の表のセル位置などが変わった場合に対応する方法も、特にセルの名前の定義を使う箇所は具体的で実践的です。

よりわかりやすくメンテしやすいプログラミングをしたい方におすすめです。
筆者はVBA解説者の泰斗のひとり。中級者を対象にした、更に上を目指そうという方々への熱意を感じる解説に惹かれた。プロシージャを次々に書き換えて、より良いプログラムにしていくという立山流メソッドは懇切丁寧であり、次はどうなるんだろう、自分ならこう書き換えるのだが、という期待感と疾走感を感じて、一気に読破できた。

また、変数に比べてイマイチ脚光を浴びない(?)定数にも章立てして丁寧に解説されていたのも良かった。
まさしくオススメの一冊である。次回作は中級者泣かせの配列について立山流で解説したのを是非、執筆願いたいと思った。
 
   
人気 20位
本書の内容
新品未使用品です。店頭陳列しておりましたので、表紙にスレ傷などございますが、商品には問題ございません。一部ヤケ、スレなどがある場合がございますので、完全に新品が良い方はご遠慮下さいませ。ご注文後、Amazon.co.jp 配送センターより迅速に発送されます  
内容サンプル
 
User Voice
VB.NETで書かれた案件では、中途半端なオブジェクト指向に遭遇することがあります。
可読性の悪いコードでも、辛抱して改修や機能追加をしてきましたが、
この本を読んで、「まずはリファクタリングしてから取り掛かる」価値を知りました。
実際にやってみると、確かにそのとおり。
今では可読性の悪いコードに遭遇しても、気が重くなることはなくなりました。

また実装中には、常にリファクタリングの習慣が働くのでコードの無駄が減りました。
それに以前は、複雑な動作を設計段階で定義しようとして工数を割いていましたが、
今では設計で定義し辛い部分は適当に切り上げ、
実装で解決して設計ドキュメントに戻すやり方でプロジェクトの進捗が早くなりました。
良い設計や実装は、クラスの構造やメソッドの動作を理解していなくても、
「コードの形」を真似るだけで機能追加や変更ができるのは、皆さん周知のところと思いますが、
この本に従って作業すると、そのようなコード部分が増えて生産性が向上するのが実感できます。

値段で購入をためらっていましたが読んでみて、それだけの価値がある本だと感じています。
この本は著者のXPでのリファクタリングの経験をカタログ形式でまとめたもので、ソフトウェアを少しずつ日々改善し、ソフトウェアが肥大化が修正を困難にしないようにする小さな手法の集まりを紹介しています。ソフトウェアの構造に日々手を加える(部分的な再設計の)ための、問題点の発見の仕方、直し方がカタログ化されています。
書いてあることの個々の内容は比較的単純なものばかりですが、まずい設計が示唆する問題点、改善による効果、リファクタリングが可能な条件、リファクタリング時に見落としがちな点の指摘などが十分に書かれていて、リスクと効果をよく考えながらリファクタリングが出来るようによく配慮された内容になっています。プログラミング初級者にとって、とても勉強になる内容だと思いますが、経験を積んだプログラマにも日々のプログラミングのチェックリストとして非常に役に立つのではないかと思います。
JAVAでかかれているため、C++を使っている人には多少違和感がありそうですが、.NETプログラミングにはうってつけの内容だと思います。
これはイイです。
なんというか、プログラミングのベストプラクティスが載っているわけではありません。
しかし、
「最初からすげぇプログラムなんてできるわけないじゃん。とりあえず作って、後から体質改善すれば~?」
みたいなノリでプログラムってやっていいんだ。って感じです。
体質改善の為の基本的な処方箋が、ここにはあります。
ケント・ベック著の「テスト駆動開発入門」も、あわせて読めば、効果的かも。
 
   
人気 21位
本書の内容
Rubyを使うエンジニア必読の書!
Martin Fowlerの名著『リファクタリング』のRuby対応全面改訂版が、ついに復刊!

Ruby初級者~中級者におすすめ。リファクタリングを網羅的にまとめた名著でありながら、絶版になり古書価も高騰していました。
読者の方々の熱い声に応えての復刊です。

※本書は、2010年・アスキー・メディアワークス刊『リファクタリング: Rubyエディション』を復刻するものです。  
内容サンプル
 
User Voice
名著の誉れ高い「リファクタリング」をrubyベースで書き直したもの(オリジナル版はjavaベース)。

内容はすばらしく、リファクタリング自体についてはもちろん、rubyの使いこなしに関しても学ぶところが満載。リファクタリングの切り口の多くはオリジナル版と重複するようだが、そのサンプルでは、rubyでこそ可能と思われる高い抽象度を追求している。

しかし(それ故)、そのテクニックにはトリッキーの一歩手前と言いたくなるものも含まれる。平均的rubyプログラマにとっては理解困難ではないか? 筆者には、ここで使われているテクニックを集めて、是非「Effective Ruby」を書いて欲しい。

リファクタリング前後のコードを載せるため、コードの重複が多いところは気に入らない。
 
   
人気 22位
本書の内容
リファクタリングは、システムデザインの改善や保守性、拡張性、パフォーマンスの向上
など、開発での幅広い有効性が証明されてきました。本書は、データベースシステムのために設計された強力なリファクタリング・テクニックを紹介しています。テーブル構造やデータ、トリガーなどをほんの少し手直しするだけで、どんなデータベースデザインも強化でき、無駄な再作業や余分なコストを省くことができるようになります。また、一連の決まったプラクティスの概略が述べられており、データベースの設計・開発にたいして、アジャイルな手法をどう取り入れるべきかが明確に示されています。不可能だといわれていたデータベースのリファクタリング・テクニックを確立したのは、アジャイル手法の第一人者スコット・アンブラーと高名なコンサルタントピラモト・サダラージ。彼らのおかげで、エンタープライズアプリケーションアーキテクチャに携わる開発者やデータベースの専門家は、自信を持って、しかも安全にデータベース設計に変化を取り入れることができるようになるでしょう。  
内容サンプル
 
User Voice
とは、プログラムの外部から見た動作を変えずに
ソースコードの内部構造を整理するためのテクニックです。
リファクタリングとユニットテストによって、アジャイルのような
ユーザ要件の変化に合わせて段階的に設計・実装を行うスタイルの開発が可能になりました。

しかし、本書の前書きにあるとおり、リファクタリングが有名になっても
データベースに対してリファクタリング手法を適用することは一般的ではありませんでした。
稼働中のデータベース内に存在する大量の「データ」を失う訳にはいかないからです。

本書では、データベースのリファクタリングをデータの移行手順まで踏まえた上で紹介しています。
本書を読み進め、データベースリファクタリングのパターンを理解していくことで
データベース開発においても、アジャイルさを得ることができるかも知れません。

ちなみに、本家リファクタリングのプラクティスがEclipse等で自動化されているように、
本書で紹介されているデータベースリファクタリングもLiquibaseというツールで自動化されています。
実際に、本書のプラクティスを適用する際には、このようなツールを探してみるのも一考です。
サンプルDBでおなじみの銀行口座を例にあげて、DBとアプリの一貫性を損なわないよう細心の注意を払いながらDBを再編する技法を詳細に解説している。永らく使われてきたDBの保守を受身でなく前向きに取り組む上での心構えを含めて考えさせられる本である。
日本でも、銀行とその系列のノンバンクに波及する合併・再編は普通の出来事となり、それに伴って、銀行の情報システムのトラブルもマスコミで数多く取り上げられている。
銀行をはじめとする金融分野に限らず、既存システムの再構築にあたってSEが読むべき本として推奨したい。
データベースもアジャイルに作ろう!
そのために必要な、データベースの変更に関する
各種テクニックを紹介した本です。

表の変更、列を追加する、表の名前を変える、
参照整合性を追加する・・・などなどの
データベースに関する変更が対象となっています。
物理的な設計、実装が対象となっています。

変更内容ごとに、
変更するためのSQL、移行の方法、移行に必要なSQL、
AP側の処理の変更、移行等で利用するストアードプロシージャ
等が紹介されています。
SQLやストアードは、Oracleのものです。

別にアジャイルでなくても、アプリケーション開発や保守
を行っていれば、必ず直面する問題だし、
DBAをやっていれば、同じような解決策をとってるような
印象を受ける内容が多かったです。

これからDBAとして、腕を磨くぞ!という本でしょうか。
 
   
人気 23位
本書の内容
本書はAdaptive Code via C#: Agile coding with design patterns and SOLID principles(Microsoft Press, 2014)の日本語版で、変化に容易に適応できるソフトウェア開発を実現するために、
アジャイル開発、デザインパターン、SOLID原則を、C#でどのように実践するかを解説する書籍です。方法論と実践の間の橋渡しをする解説書で、サンプルコードはVisual Studio 2013ベース。
C#の基本をひととおり理解した開発者が、ワンランク上を目指すために読んでおきたい1冊です。


 
内容サンプル
 
User Voice
■ 何故プログラマーには本書が重要か

○ ソフトウェアは変化し続ける

ソフトウェア開発は、常に追加・変更し続けるのが特徴だ。一気に全体が出来上がる訳ではない。最初の1行を書いてから、段々と機能が足され、また、改良されていく。変更し続けるのが特徴なので、なるべく変化を受け入れやすい作り方をする方が良い。

本書には、そういう「Adaptive Code (適応力のあるコード)」を書くための原則とそれを実践するための方法としてベストプラクティスが書かれている。

○ 原則は重要

ソフトウェア開発において、原則は重要だ。

C# 等のプログラミング言語の文法を覚えればそれだけでソフトウェアが書けるかというと、そうではない。また、いつもいつも日進月歩の開発技術を一から習得しなさないといけないかというと、それも違う。経験があり優秀な技術者は、新しいプログラミング言語、新しい開発基盤でも実力を発揮するものだ。

そこには、個々の開発技術にそれほど依存せず、新しい技術が出てきたときにも使える知恵があるだろう。つまり、プログラミング言語や技術のトレンド等の枠を超えて重要な、開発手法や原則、パターン、アンチパターン、ベストプラクティスというものがあるのだ。

それは、偉大な先人の知恵が集まったものだ。経験のあるプログラマーが長年掛かって身に付ける暗黙知のような技術を、先人が形式知として習得しやすくしてくれたのだ。そうした知恵は広くソフトウェア開発に応用が効き、また、ドッグイヤーと言われるソフトウェア開発の技術革新の中でも古びない。また、プログラマー同士がコミュニケーションするときの語彙としてもずっと重要なものだ。プログラマーとしては是非とも知っておきたい。

「原則だのパターンだのは、実務では役に立たない」というのを聞いたことがある。それは違うと思う。パターンをどこにでも適用しさえすれば良い、ということではない。サンプルコードそのものをコピー & ペーストして使え、という話でも断じてない。原則やパターン等は、「守破離」でいう「守」だ。基礎なのだ。

確かに、単にそれらの開発手法や原則、パターン、アンチパターン、ベストプラクティスを並べただけでは、中々理解が難しい場合もある。 実務への応用が易しくない場合もあるだろう。抽象的な知識は、広く使えて古びないが、具体的な知識と違って、深く理解しないと現場で活かしづらい。

本書は、単なる原則論にとどまっておらず、豊富な C# のサンプルコードや Visual Studio 等のツールの使い方の例によって、具体的に実践方法をあげている。ここが、とても重要なところだと思う。

■ プログラマーの必読書

過去にこうした知恵が書かれたプログラマーの必読書としては、次のようなものがあった:

-『達人プログラマー ―システム開発の職人から名匠への道』 (2000/11)
-『達人プログラマー ―ソフトウェア開発に不可欠な基礎知識 バージョン管理/ユニットテスト/自動化』 (2005/3)
-『アジャイルソフトウェア開発の奥義』 (2004/6/30)
-『アジャイルソフトウェア開発の奥義 第2版 オブジェクト指向開発の神髄と匠の技』 (2008/7/1)

本書『C#実践開発手法』は、C#プログラマーにとって、そうした本に並ぶものだと思う。

より新しい内容も含まれているし、何より Visual Studio と C# による実装レベルにまで具体的に噛み砕いている。 中堅のC#プログラマーに必読だろう。
本書は、開発言語にC#を用いる開発現場で、一歩進んだ技術力・開発力を見に付けたい個人やチームに、非常に強い味方になると思います。

これまでマイクロソフトの技術では、アジャイルソフトウェア開発があまり浸透してきませんでした。Java方面では早い時期から(本書のコピーでもある)デザインパターンやSOLID原則など、オブジェクト指向開発の手法が広まったのですが、C# 1.0がJavaと比較的良く似ている言語であったにも関わらず、このような方面での技術の掘り下げは殆ど行われてきませんでした。更に、ソフトウェア開発手法と組み合わせて、網羅的・実践的に解説した邦訳書など、皆無と言って良いと思います。

この本のユニークな点は、ソフトウェア開発手法の一つである「スクラム」での考え方と、スクラムを日々実践する上でC#のコードにどのように落とし込みを行うのか、その考え方や手法という点で、ソフトウェア開発の上から下までを通貫して網羅している事です。アジャイルソフトウェア開発だけ、あるいはC#の言語解説だけ、というように取り上げた書籍と違い、両者を結び付ける具体的な方法が記されています。しかもC#を軸として、です。そのため、「両方とも知識として知ってはいるけど、具体的にどう実践すれば良いのか」と言う事が良く分からないという方にも、お勧め出来ます。

なお、本書は特定の技術(例えばユニバーサルWindowsアプリやASP.NET)の解説書ではありません。これらを横断的に扱う、普遍的な開発手法・技術の書籍です。多くの開発現場で、ビジネス価値を前提とした、柔軟性のある、強引な手法に頼らない開発が浸透して欲しいと思います。
要求が変化したとき、問題が発生したときに、できるだけコードを書き直さずにそれらに対処する方法と実践方法を学べる本です。

たとえば、変更があった時バグ修正などの特殊な場合を除いて既存のメソッドを書き直すのではなく、メソッドに拡張ポイントを設けておくことによって実現し、拡張ポイントを用意する方法について複数の方法が紹介されています。

変化に適応できるコードを本書では「Adaptive Code」と呼び、Adaptive Codeを書けるようになるための考え方、さらに実際のサンプルコードが載っています。サンプルコードはC#で書かれ、Webページからダウンロードできます。

全体は3部構成になっており、第1部でアジャイルの基礎、第2部でSOLIDコードの記述、第3部でオンラインチャットアプリケーションの作成を例として実際に開発現場に適応していく様子を学習します。

サンプルコードが豊富で、必要に応じてUML図で整理して説明されているので、内容が高度な割に理解しやすくなっています。
特に第2部では、SOLIDの原則について1つずつ説明があり、それらの原則がどのように役立つのか説明とコードを読みながら理解できます。

理論自体の説明よりもどのように役立つかに説明の重点が置かれ、開発手法が身近に感じられる本です。
 
   
人気 24位
本書の内容
 
内容サンプル
 
User Voice
 GoFデザインパターン解説書の体裁をとった「オブジェクト指向設計」入門。コンパクトにまとめられた良書だと思う。

 対象読者は、Javaの文法を一通り理解しており、プログラミングにも慣れてきた頃のJavaプログラマ。GoF本のデザインパターン23種類を順に取り上げ、各パターンの目的・効果・背景・サンプルプログラム・注意点を簡潔に述べていく。ただし、デザインパターンをすぐに使いこなせるように読者を導くことが本書の狙いではなく、デザインパターンを教材として「良いクラス設計とは何か」の指針を与えることに主眼を置いている。

 そのため、各パターンの解説では、そのエッセンスだけを簡潔に伝えることに注力されている。サンプルプログラムは全てJavaで記述されているが、どれも「Hello, World!」レベルなので、Javaプログラマでなくても内容を理解できると思う(巻末に、サンプルプログラムを理解するために最低限必要なJava言語仕様が25ページ程度にまとめられている)。

 開発の現場から生まれた本、という印象を受けた。各パターンの解説の最後に置かれた「注意点」が秀逸で、「そのパターンを用いる場合、何に注意しなければならないか」「そのパターンを用いない方がいいのはどのような場合か」「そもそも、デザインパターンを適用することで解決できるような問題はそれほど多くない」といった類の指摘に説得力がある。また、デザインパターン万能論とも言える数々の「誤解」について述べた最終章「デザインパターンの難しさを理解する」も面白い。
デザインパターンの入門書はたくさんありますが、どれもそのパターンが生まれた経緯など、理屈ばっかりなところが多くわかりづらいと感じていました。
一方、この本では、どんな時に使うパターンかが一言、そのパターンを使うと何がよいか、簡単なサンプルコードという構成で完結にまとめられていて、非常にわかりやすいです。

他の本を数冊読んだので、すでにパターン使えるようになっていましたが、最初にこれを読んでおけば遠回りしなかったのかな・・・と思いました。
デザインパターンを初めて勉強する人向けには★5つです!
「徹底攻略」とタイトルにあるが、どちらかというとデザインパターンとはどういうものかを解説した入門書に近いものがある。したがって、初めてデザインパターンを学ぶ方には適していると思われる。サンプルソースはごく平易なものを採用しているが、やはり基本的なJava知識は必須。また、デザインパターンに対する過剰意識(誤解)なども後半にまとめられているのも嬉しい。実践に繋げていくためには、本書を読破するだけでは難しいが、発想の手助けになってくれる一冊である。
 
   
人気 25位
本書の内容
 
内容サンプル
 
User Voice
 
   
人気 26位
本書の内容
 
内容サンプル
 
User Voice
 
   
人気 27位
本書の内容
 
内容サンプル
 
User Voice
 
   
人気 28位
本書の内容
 
内容サンプル
 
User Voice
 
   
人気 29位
本書の内容
 
内容サンプル
 
User Voice
 
   
人気 30位
本書の内容
 
内容サンプル
 
User Voice
 
   
人気 31位
本書の内容
 
内容サンプル
 
User Voice
 
   

リファクタリング 新書一覧

本書の内容
Rubyを使うエンジニア必読の書!
Martin Fowlerの名著『リファクタリング』のRuby対応全面改訂版が、ついに復刊!

Ruby初級者~中級者におすすめ。リファクタリングを網羅的にまとめた名著でありながら、絶版になり古書価も高騰していました。
読者の方々の熱い声に応えての復刊です。

※本書は、2010年・アスキー・メディアワークス刊『リファクタリング: Rubyエディション』を復刻するものです。  
内容サンプル
 
User Voice
名著の誉れ高い「リファクタリング」をrubyベースで書き直したもの(オリジナル版はjavaベース)。

内容はすばらしく、リファクタリング自体についてはもちろん、rubyの使いこなしに関しても学ぶところが満載。リファクタリングの切り口の多くはオリジナル版と重複するようだが、そのサンプルでは、rubyでこそ可能と思われる高い抽象度を追求している。

しかし(それ故)、そのテクニックにはトリッキーの一歩手前と言いたくなるものも含まれる。平均的rubyプログラマにとっては理解困難ではないか? 筆者には、ここで使われているテクニックを集めて、是非「Effective Ruby」を書いて欲しい。

リファクタリング前後のコードを載せるため、コードの重複が多いところは気に入らない。
 
   
本書の内容
※このKindle本はプリント・レプリカ形式で、Kindle Paperwhiteなどの電子書籍リーダーおよびKindle Cloud Readerではご利用いただけません。Fireなどの大きいディスプレイを備えたタブレット端末や、Kindle無料アプリ (Kindle for iOS、Kindle for Android、Kindle for PC、Kindle for Mac) でのみご利用可能です。また、文字列のハイライト、検索、辞書の参照、引用については、一部機能しない場合があります。文字だけを拡大することはできません。
※プリント・レプリカ形式は見開き表示ができません。
※この電子書籍は紙版書籍のページデザインで制作した固定レイアウトです。

ソフトウェア開発の名著、第2版登場!
 リファクタリングは、ソフトウェアの外部的な振る舞いを保ったままで、内部の構造を改善する作業を指します。本書はリファクタリングのガイドブックであり、リファクタリングとは何か、なぜリファクタリングをすべきか、どこを改善すべきか、実際の事例で構成され、ソフトウェア開発者にとって非常に役立つものとなっています。
 本第2版では、約20年前のオリジナル原稿の構成は変わらないものの、大幅に書き換えられているほか、サンプルコードがJavaからJava Scriptになるなど、現代的にアレンジされています。


第2版翻訳にあたって
初版の「本書に寄せて」
はじめに
Chap.1 リファクタリング-最初の例
Chap.2 リファクタリングの原則
Chap.3 コードの不吉な臭い
Chap.4 テストの構築
Chap.5 カタログの紹介
Chap.6 リファクタリングはじめの一歩
Chap.7 カプセル化
Chap.8 特性の移動
Chap.9 データの再編成
Chap.10 条件記述の単純化
Chap.11 APIのリファクタリング
Chap.12 継承の取り扱い
文献リスト 
訳者あとがき
索引  
内容サンプル
 
User Voice
1版、Java版は蔵書としてあるのですが。所属している会社ではフロントエンド寄りの業務が多く、プログラムというとwebでJavaScriptのみ(たまにPHP)で完結することが多い環境にいる人です。

JSで1ファンクションが長くても100行、200行程度、ランディングページとかで継続的メンテナンスは求められない。
なのでどうしても「ベタ書き、とりあえず動けばいい、なるはやで」というコーディングが重宝される。
そんな環境です。(でした?かな。それだけではやっていけなくなっているので)

はい。”ブラックボックス”だらけです。大半のコードを書いた人たちはもう社内にいません、よくある話です。
・長大なファンクションを、入れ子ファンクションできりわける
・一時変数の特定、いらないやつは撲滅
・異常系の検出がおろそかだったので、オブジェクト自身に異常検出機能をつけてみた
などを、「夏休みの宿題・工作」みたいな感じでメンバといっしょに取り組んでいます。

本書について。
文章の言い回しは固くはないのですが、あつかっている処理ちょっと難しい話なので、誰でもがさらっとよめる本ではないようです。しかしサンプルがJavaScriptなので、とりあえず「記載されているコードの意味」はわかってもらえているようです。

最後に。
本書に盲従する必要はないとは思います。いろんなスタイルの一例です。
ただ、本書を通じることで、ある程度の共通認識を持ったうえで、コーディング職人の間での意見交換や価値観論争などは良いことかな、と思いました。

最後の最後に。
急激な変化を嫌う人もいるので、「押し売り」にならないように気を付けて。
自分はすでに数年開発経験があったので、ほとんど既知だったり常識だったりという内容でしたが、
コードの問題点とその解決法が具体的かつ豊富に載っているので、プログラミング経験数ヶ月から半年ぐらいの初心者はこの本を写経すると結構実力が付くんじゃないかな、と思いました。
もし自分が記憶を消してもう一度プログラミングを学ぶとしたら、間違いなく早い段階での必読書として選びます。
ほとんどの手法がIDEの機能を使えば簡単にできる…と言ってる人がいますが、それは半分間違っていると言わざるを得ません
テストコードがあることが前提として紹介されていますが、「レガシーコード改善ガイド」にも書いてあるように、テストコードが無い場合でも応用的に使える手法も紹介されています
読んで損は無い本です
 
   
本書の内容
(概要)
業務でVBAプログラムを組んでいる人の多くは,部署で一番パソコンやExcelに詳しいからという理由で任されていることも多く,プログラミングの基本的な素養や知識を知らない方も多いでしょう。このため,動けばOKといった,その場しのぎのコードを書いてしまいがちです。そういったコードは,あとから見直したり再利用する際にトラブルを起こしやすく,またどこになにが書いてあるかわかりにくいので,せっかくの生産性や効率性を落としがちです。本書は,そのようなVBAではじめてプログラムを組んだという人たちにプログラミングの基礎を示し,あとから見て読みやすく,変更や再利用に強いVBAプログラムの書き方を身につけるための本です。

(こんな方におすすめ)
・業務や趣味で初めて触ったプログラミング言語がVBAという人,VBA以外プログラミングしたことがない人
・独学でVBAプログラミングをやってきたけど,自分の書き方でよいのか自信のない人

(目次)
第1章 良いVBAのコードとは
1-1 そのVBAのコード,半年後の自分が理解できますか?
1-2 “良いコード”とはなんだろう?
1-3 本書の読み進め方

第2章 見た目にこだわる
2-1 理解しやすいコードは見た目も美しい
2-2 コードのまとまりをインデントしよう
2-3 まとまりごとに空行を入れよう
2-4 1行が長いコードは適度に改行しよう

第3章 適当な名前を付けない
3-1 読みやすいコードは名前もわかりやすい
3-2 プロシージャは機能がわかる名前を付けよう
3-3 変数や定数は用途がわかる名前を付けよう
3-4 変数名を変えてみよう
3-5 変数名の暗黙の了解

第4章 コメントを入れよう
4-1 たかがコメント,されどコメント
4-2 サンプルにコメントを入れてみよう
4-3 ポイントとなる箇所にコメントを入れよう

第5章 変数は必ず宣言して使おう
5-1 なぜ変数を宣言するのか
5-2 本書サンプルで変数を宣言してみよう
5-3 変数を宣言したことによる補完機能
5-4 変数宣言時にデータ型も指定しよう
5-5 本書サンプルでデータ型を指定してみよう
5-6 覚えておきたいオブジェクト変数のデータ型

第6章 数値や文字列は定数に置き換えよう
6-1 なぜ数値や文字列を直接記述してはいけないのか
6-2 定数定義のキホンをおさらい
6-3 サンプルで数値を定数化しよう
6-4 定数を定義して数値を置き換えよう
6-5 文字列も定数化して変化に強くしよう
6-6 定数を定義して文字列を置き換えよう
6-7 知っておきたい定数の知識やノウハウ

第7章 共通するコードはまとめよう
7-1 何度も登場するオブジェクトをまとめよう
7-2 サンプルの重複するオブジェクトを変数にまとめよう
7-3 Withステートメントで重複をまとめる
7-4 共通する処理はくくり出してまとめる
7-5 共通する処理をSubプロシージャにくくり出す
7-6 Subプロシージャの引数でちょっとした違いを吸収する
7-7 戻り値が必要ならFunctionプロシージャの出番
7-8 長いコードは機能別に小分けにしよう
7-9 変数を利用して賢くコードを分割しよう

第8章 変化やトラブルにもっと強いコードにする
8-1 表のデータの増減に自動対応可能にしよう
8-2 表の移動に自動対応可能にしよう
8-3 コードを整理してスッキリさせよう
8-4 予期しづらいトラブルの受け皿を用意しておく  
内容サンプル
 
User Voice
Excel VBAのプログラミングをする際の、メンテしやすいソースコードを書くための具体的なノウハウが詰まっています。インデントや改行、空白行の挿入といった基本的なことも、ここまで詳しく書いてある本は他にはないと思います。

そして変数や定数、サププロシージャの名前の付け方もとても具体的で、プロはここまでやるのかと勉強になりました。特に定数については非常に詳しく、自分はまだまだ定数をつかいこなせていなかったと痛感しました。

Functionプロシージャやサブプロシージャを使ってプログラムを整理するやり方も具体的でわかりやすく、勉強になりました。第8章の表のセル位置などが変わった場合に対応する方法も、特にセルの名前の定義を使う箇所は具体的で実践的です。

よりわかりやすくメンテしやすいプログラミングをしたい方におすすめです。
筆者はVBA解説者の泰斗のひとり。中級者を対象にした、更に上を目指そうという方々への熱意を感じる解説に惹かれた。プロシージャを次々に書き換えて、より良いプログラムにしていくという立山流メソッドは懇切丁寧であり、次はどうなるんだろう、自分ならこう書き換えるのだが、という期待感と疾走感を感じて、一気に読破できた。

また、変数に比べてイマイチ脚光を浴びない(?)定数にも章立てして丁寧に解説されていたのも良かった。
まさしくオススメの一冊である。次回作は中級者泣かせの配列について立山流で解説したのを是非、執筆願いたいと思った。
 
   
本書の内容
■「ITエンジニア本大賞 2020」技術書部門大賞受賞!

レガシーコードとは、バグを多く含み、壊れやすく拡張が難しいコードを指します。
このようなコードの保守と管理には多大な労力がつぎ込まれることになります。
しかも一度作ってしまったレガシーコードの質を上げるには、初めから質の高いコードを作るよりも膨大なコストがかかります。

本書では、ソフトウェア開発において、初めからレガシーコードを作りださないためのプラクティスを9つ挙げて解説します。
プロダクトオーナーは目的を語り、やり方は開発者に任せること、小さなバッチで開発を進めること、継続的に統合すること、チームメンバーで協力することなど、日々の開発に取り入れる考え方と具体的な実践について各章で分かりやすく解説します。
信頼性や拡張性が高いソフトウェアをリリースしたい開発者、運用管理者、マネージャに必携の一冊です。  
内容サンプル
 
User Voice
ベストセラーになってますし、すでに読まれた方も多いと思います。間違いなく定番本の一つです。
著者がXP(エクストリームプログラミング)のコーチらしく、述べられているプラクティスの多くはXP由来となっています。
ただ、アジャイル開発手法に変わりはありませんので、スクラムでも適用できる内容です。ウォータフォール?そんな開発手法は存在しませんよ?
副題の9つのプラクティスは以下の通りです。

- やり方より先に目的、理由、誰のためかを伝える
- 小さなバッチで作る
- 継続的に統合する
- 協力しあう
- 「CLEAN」コードを作る
- まずテストを書く
- テストでふるまいを明示する
- 設計は最後に行う
- レガシーコードをリファクタリングする

自分のプロジェクトでも、これらのプラクティスは(ややアレンジはあるものの)実施しており、適切なシステム開発を行うためのミニマムセットになっています。
逆に、できてないものがある場合は、そのシステム開発は何らかの問題を抱えているということになります。
プロジェクト管理者はもちろん、システム開発に関わる全ての人が知っておくべき内容が詰まっています。
システム開発プロジェクトの新規参画者に対しては、オンボーディングで最初に読んでもらうのがいいと思います。
C言語やBASIC言語は学校の座学で知っている程度、営業職などを経て、ここ最近、実務でjQueryありきのJavaScriptコードを数年ほど扱っている末端コーディング人です。

読んだ後の感想。
「自社の財産」とされているコードの大半(率直にいうとほとんど全部)が、この本で言われている「レガシーコード」だと気づくことができました。
オーダーされて旧コードに「機能拡張」などもしているのですが、それがハック的に割り込みしているだけだと自覚できました。

雑談などでもしゃべりやすい同僚から先に、本書を布教しています。わりと共感してもらえて、半年後が楽しみです。

目先の目標としては
・マネージメントの人にも読んでもらう
・本書から共通認識として取り入れられそうなことを、チームとして共有してとりくむ
・会社の経費でオライリー本を買ってもらう

というところです。
今の私にとっては、得るものが多すぎる、とても良い本です。
ちと3千円という価格に躊躇したが買ってよかった。アジャイルでもwater fallでも情報はwebや本に溢れている。でもそれらは本質を得ているかと言うと、初心者のための入門書である。しかしプロジェクトに従事し、そのプロジェクトが継続的なプロジェクトになると話は違ってくる。コメントが書いてない誰が書いたかわからないコード、当然単体テストなんてものはないし、あったとしても単体テストがなにをやってるかわからない。コード品質にしても、なんでクラス関数が50個もあるの?クラス使ってる意味ないじゃん!みたいな組織は多いのではないか。そういったプロジェクトを管理する人には最適であり、日本語で読める唯一の本のような気がする。「レガシーコード改善ガイド」とかマーティンファウアーの本とかはいい本だが、コード書く人よりのガイドであるので、この本とはちょっと方向性が違う。数年間同じ製品を開発し、努力しても製品品質があがらないマネージャ向けだが、若い開発者も読んで損はない本だと思う。
 
   
本書の内容
 
内容サンプル
 
User Voice
 
   
本書の内容
(概要)
「コミュニケーションにおける不確実性を減らすには?」
「技術的負債を解消する方法とは?」
「経営陣とエンジニア間の認識のずれを解消するには?」
エンジニアリングにおける課題を解決する思考の整理方法やメンタリング手法を,さまざまな企業の技術組織アドバイザリーを務めている著者が解説。若手を戦力として育て上げ,成長する組織を設計・運営するためにおすすめの1冊です。

(こんな方におすすめ)
・開発チームの生産性を上げたいエンジニア
・社内組織を改善したい経営者

(目次)
Chapter 1 思考のリファクタリング

1-1 すべてのバグは,思考の中にある
1-2 不確実性とエンジニアリング
1-3 情報を生み出す考え方
1-4 論理的思考の盲点
1-5 経験主義と仮説思考
1-6 全体論とシステム思考
1-7 人間の不完全さを受け入れる
Chapter 2 メンタリングの技術

2-1 メンタリングで相手の思考をリファクタリング
2-2 傾聴・可視化・リフレーミング
2-3 心理的安全性の作り方
2-4 内心でなく行動に注目する
Chapter 3 アジャイルなチームの原理

3-1 アジャイルはチームをメンタリングする技術
3-2 アジャイルの歴史
3-3 アジャイルをめぐる誤解
3-4 アジャイルの格率
Chapter 4 学習するチームと不確実性マネジメント

4-1 いかにして不確実性を管理するか
4-2 スケジュール予測と不確実性
4-3 要求の作り方とマーケット不安
4-4 スクラムと不安に向き合う振り返り
Chapter 5 技術組織の力学とアーキテクチャ

5-1 何が技術組織の“生産性”を下げるのか
5-2 権限委譲とアカウンタビリティ
5-3 技術的負債の正体
5-4 取引コストと技術組織
5-5 目標管理と透明性
5-6 組織設計とアーキテクチャ
 
内容サンプル
 
User Voice
システム思考という物の考え方がある。
この本はソフトウェア開発の文脈でシステム思考を獲得するための本であり、
そのような前提が無いとこの本は何も語っていないように見えるかもしれない。

システム思考とは、組織のような複数の要素が絡み合う場における問題解決の際に
その原因を特定の要素(誰それが悪い、仕様の品質が低いなど)に見出すのではなく
「システム」全体の構造に見出すことによって全体最適化を達成するという考え方である。
優秀なマネージャはほぼこの考え方を持っているといえると思う。

しかしシステム思考をうまく稼働させるためには
今現場で起きていることを高い解像度で認識することが必須となる。
表面的に見えている問題(プロジェクトの遅延、品質の低下など)の裏で起きている
本当の問題を透視するための言わば解剖図や骨格標本のような知識が必要になるのだ。

本書はそのようなソフトウェア開発の現場で起きる問題を理解するための
骨格を様々な角度から見事に言語化してくれた。
これは過去他のどの書籍も行っていないことだと思う。

何か即効性のあるアクションを求めているのならこの本を読んでも期待はずれに終わると思う。
問題を深く正しく理解するためのツールを求めているであればこの本は最適だろう。
組織の成長のため、仕組みの作り方とメンバーのメンタリングについて書いている。実践方法よりも考え方を変えるためのインプットとしてよさそう。
読む前は、職制とか命令指揮系統、ソフトウェア開発手法、のような内容が書いてあると思ってた。それよりも概念的というか考え方を知りたいときに読むのがよいと思う。
既にレビューに挙がっていない点について書きます。批判的に書きましたが、次回に向けての改善提案をしたいだけの良い本であり、エンジニアと名のつく仲間にはぜひ読んでほしい一冊です。

1. (良)ソフトウェアエンジニアだけではない
ソフトウェアエンジニアリングとその組織を題材に扱っているものの、何らかのエンジニアリングを伴うプロダクト開発を行う組織ならばハード中心でも適用できる知見が数多く書かれています。

2. (悪)図が非常に分かりにくい、出展が不明
この本の最も悪いところは、図が非常に分かりにくく、本文を読まない限りは誤解すら生じるところです。筆者以外の、理解が及んでいない人が描いたとしか思えません。また、図も本文も同様ですが出展が示されている箇所が非常に少ないです。原典にあたろうとしてもそれが出来ない。熱心な読者にアクセシビリティと、引用・オリジナルを明記する真摯さを表して欲しかったです。

3. (要望) 筆者の知る Best practice を示して欲しかった

紙面が足りないのかもしれないが、良い実践例を具体的に多く示して欲しかった。筆者の経歴から推測するに、まだ良い実践例のサンプル数が多くないということなのかもしれません。
バズワードを丁寧に日本語で表現し直されていて、そこはとても勉強になりました。だからこそ、一歩先を行って欲しかったです。
 
   
本書の内容
《本書は旧版です。改訂版が発売中です。》

※この商品はタブレットなど大きいディスプレイを備えた端末で読むことに適しています。また、文字だけを拡大することや、文字列のハイライト、検索、辞書の参照、引用などの機能が使用できません。

プログラムに潜む扱いにくい部分を見つけ出し、その動作を変えずに内部の構造を改善していくためのテクニックを整理したマーティン・ファウラー氏によるソフトウェア開発の名著『リファクタリング プログラミングの体質改善テクニック』(“Refactoring:Improving the Design of Existing Code”)が、オリジナルの訳者による丁寧な見直しと現代的なJava開発環境による「再リファクタリング」を施した書き下ろし付録を収録して再発行!
旧版の価値を知るベテランはもちろん、これからソフトウェア開発に携わる新人にも必読の一冊です。  
内容サンプル
 
User Voice
基本的な内容は「リファクタリング―プログラムの体質改善テクニック」とほぼ同様ですが、
オリジナルの訳者による丁寧な見直しが新装版にも反映されています。
まだ全て読み終わってはいませんが・・・
(旧版との比較を厳密にしながら読み進めているわけではないですが・・・)

旧版はもう販売していませんので、多くの方に購入する機会をとの考えで新装版を発売されたそうです。
新装版の目玉は、付録「 Java のバージョンアップに伴うリファクタリングをめぐる環境の変化」です。
旧版出版以降のJavaとそのテスティングフレームワークの進歩の記載があります。
対象となるJavaは7までとなっています。

Javaとそのテスティングフレームワークの進歩の記載の後に、その進歩を反映して、
本書に含まれるコードを再びリファクタリングしています。実際にはジェネリック等が取り扱われています。
この部分が新装版の最も注目されるべき箇所であると思います。

本書が全面的にJava7に対応されていないことについては不満がありますが
今後は、Oracleは今までと違ってJavaの言語仕様の強化に注力して行くことが見えていますし
既にJava8でかなりの変更があったといえ、付録の再リファクタリングで十分に新装版の意味はあると考えます。
オブジェクト指向の応用的な内容であると同時にオブジェクト指向の利点が分かるようになっている。オブジェクト指向を学んだor学んでいる最中だがオブジェクト指向の利点が分からない、というときに読むと理解の助けになる。また、本書の内容がほとんどそのままオブジェクト指向の利用法になっているので、理解できるだけでなくそのままオブジェクト指向を活用する第一歩になっている。リファクタリングという横文字でなんだか小難しいものだと思って敬遠していたけど、カタログ部分はオブジェクト指向プログラミングにおける「あるある」ネタを集めて、それに対処するための小ネタを集めたようになっているので、気楽につまみ食いするように読める。ただし、ある程度のオブジェクト指向の知識は必要で、一部UML図も使われている。といっても、オブジェクト指向の基本が分かれば十分理解できるレベルなので、オブジェクト指向の勉強の一環として読めば非常に有益な本だった。
リファクタリングの勉強するなら、この一冊は必要不可欠でしょう。 この本の対象となる読者は、職業プログラマ及びオブジェクト指向言語です。 解説はすべて、Java言語で行われていますが、他のオブジェクト指向言語を 理解していれば、問題なく読み進めることができます。 リファクタリングの重要性についてはもちろん、テクニックを細かく解説してあり、 実践に役に立ちます。 この本の核となる部分は第6章からリファクタリング・カタログです。 「名前、要約、動機、手順、例」の順で全てが書かれていて、 非常に読みやすいです。
 
   
本書の内容
(概要)
Lisp・関数型プログラミングのメリットとは何か――副作用のないプログラミングがまず挙げられます。これでバグが圧倒的に少なくなります。さらにはコードの再利用がしやすいこと,並列処理が得意であるということも。それだけではありません。動的な型付けも特徴ですし,ラムダ計算もクロージャも,さらにはオブジェクト指向までできます。数十年の時を越えて現代にも通用する普遍的なアイデアがLispにはあります。本書はさまざまなLispプログラム(ハノイの塔,エイトクイーン,オンライン書店など)を解説し,さらにリファクタリングまでいっきに学びます。本書で関数型プログラミングのエッセンスを得ることができます。


(こんな方におすすめ)
・オブジェクト指向プログラマ
・昔からのLispプログラマ

(目次)
第1章 関数型プログラミングとは何か――そして,それがなぜ難しいのか?

第2章 関数型プログラミングを学ぶためのLisp超入門

第3章 関数型プログラミングの基本

第4章 プログラミングパラダイムの比較

第5章 関数型プログラミングの演習

第6章 関数型プログラムの評価とリファクタリング  
内容サンプル
 
User Voice
待望のLispの良書が出た!という感じです。
Lispというとその大きな特徴にマクロがあり、そのことに偏重する本が近年、多かったと思います。
この本ではもっと広く、Lispの魅力を伝えつつ、関数型プログラミングを平易に説明していると思います。
往年のLispファンにとっても読みごたえたありますし、これからLispをやってみようという人にも魅力的な一冊だと思います。
著者はかつて、日本のメーカーにてLispマシンやLisp処理系の実装経験があるというLispを語るには最適の人材。しかしその才能が仇となってか、「はじめての」読者の気持ちがよく分かっていないように見えた。例えば「はじめに」や第一章でいきなり「副作用」という言葉が出てくる。「風邪薬を飲むと眠くなる」副作用しか知らない関数型プログラミング言語初学者は何のことかと思う。そしてプログラミングの学習には欠かせない「コード写経」をするための環境構築の記述が少ない。サンプルも、高階関数からはじまりカリー化、フィボナッチ数列を求める関数、nクイーン問題など数学好きには興味のある問題が出てくるのだが、入門書の例題を飛ばして読んでしまう私のような不真面目な読者には、それが手続き型プログラミング言語をどう革新してくれるのか想像できなかった。
キャリアだけ見れば適材中の適材であるはずの著者が、なぜ本を書くというと、社内ドキュメント以上のものが出てこないのか?日本には優れた技術書を書く人材がいないわけがなく、これは出版社の構造的な問題に感じる。編集者の意識がマニュアル本以上の「読める技術書」を作ろう、作らせようという意識がないのだと思う。優れた技術書とは何か?オライリーの好評価の本を数冊読めば自明の筈なのに…。
日本人が日本語で書いたLisp入門書が2016年に出た、という価値により星3つ。
Listや関数型でプログラミングする際の基本的なコンセプトが説明されていて良書だと感じました。
特にコンスセルを基礎にした設計感覚が理解できた気がします。
他にも、末尾最適化の説明は、意外とWEB上でも情報が少ないのですが、とても分かり易かったです。

ただ「はじめての」と名うってはいるものの、初見では理解が難しい部分も少なからずありましたが(特に演習の部分)、そこは本文中でも時間を掛けて咀嚼するべし、と記載があったので、実際にコードを書いてみて段階的に読み直してみようかと思います。

あとはラムダ計算はじめ目次的に惹かれるものの、実際には読み飛ばして良い内容が少なからずあるのが少し残念です。構成を少し見直してくれるともっと良くなると思います。
 
   
本書の内容

保守開発のためのリファクタリング!

本書は、システム保守の現場でありがちな、構造が複雑で理解できないようなコードに対する分析手法・対処手法について解説します。つまり、「コードを理解し、テストできるようにし、リファクタリングを可能にし、機能を追加できるテクニックを紹介している書籍です。

本書には、以下のことが記載されています。
●仕様が分からないコードの分析方法
●仕様が分からないコードの修正方法、またテストコードの追加方法
●コードの修正で、疎結合な設計に部分的に改善する方法

また、本書には、以下のことは記載されていません。
●COBOLなどで記述されているメインフレーム上のアプリケーションの改修方法

【 対象読者】
●現行のシステムが仕様が分からず保守作業に悩む、保守担当者
●現行のシステムの修正作業は可能であるもののデグレーションに悩む、保守担当者
●疎結合な設計手法を知りたい技術者

本書はJava、C、C++でサンプルを記述していますが、記載されているテクニックは言語依存するものではないため、他の言語(Delphi、Visual Basic、COBOL、FORTRAN)でも使えます。

※本電子書籍は同名出版物を底本として作成しました。記載内容は印刷出版当時のものです。
※印刷出版再現のため電子書籍としては不要な情報を含んでいる場合があります。
※印刷出版とは異なる表記・表現の場合があります。予めご了承ください。
※プレビューにてお手持ちの電子端末での表示状態をご確認の上、商品をお買い求めください。

 
内容サンプル
 
User Voice
レガシーコードと聞いてイメージしたのは「仕様書も無く、設計やコーディングもメチャクチャ、おまけに当時の開発者はすでにいない。しかし重要なシステムであるためトラブル対応や改造は続けなければいけないこの上なく保守しにくい、担当者泣かせのソースコード」というものでした。しかし、本の帯にもあるように、ここでは自動化テストのないコードを「レガシーコード」と定義しています。

私がイメージしていたような「レガシーコード」には私自身、実際に泣かされることも多いため、「銀の弾丸」的なテクニックが載っていないかと期待していましたが、残念ながらこの本からはそのようなテクニックは見つかりませんでした。
この本が主にターゲットとしているのは、「ある程度オブジェクト指向設計に基づいたソースコード」です。オブジェクト指向ではコーディングされにくいVB/VBAや、JavaやC#なのに活用されている言語機能はC言語止まり、といったコードにはあまり向いていないかもしれません。
こういうケースはやはり地道に解析するしかないんですかね・・・。

とはいえ、星は5つです。
改めて自動化テストの重要性を確認する事ができましたし、テストを優先してメソッドの可視性をあえて上げる、といった発想が新鮮でした。
この本で書かれているリファクタリング技法はマーティンファウラーの「リファクタリング」と重なる部分も多いですが、それでも「テストのためのリファクタリング」という視点が新しいと思います。
そして何より「既存のコード」への対処方法をメインに扱った書籍というのは前例がないと思います。この本を読めば間違いなく、これまでにはなかったプログラムに対する新しい視点を持つ事が出来るようになるでしょう。

P.S.
保守開発に苦労している方はこちらの本も参考になるかもしれません。
=> 
レガシーシステムとはテストの無いコードである。
→テストが無ければ安心してコードが変更できない。
→しかしテストで保護するには、多くの変更が必要になる。
→どうコードを変更し、いかにしてテスト可能にするか?

というストーリーで、テストを導入する方法を豊富な事例と共に紹介しています。
責務が多すぎるクラス、数百行に渡るモンスターメソッド、分岐だらけのロジックなど、現場では当たり前のように出てくる「残念なコード」に対し、解決策を提示しています。

サンプルコードはJavaとC++が大半ですが、私はPHPで実践しました。
オブジェクト指向言語ならこの考え方は汎用的に使えます。

特に役に立ったのは以下の考え方です。

* コードの保護が最優先。保護されたコードは後でいくらでも修正・改善できる。
* 保護するために一時的にコードが醜くなっても構わない。
* 既存のひどいコードを直すよりテストで保護されたパーツで置き換える方が、結局早いし、後々も楽である。
* 仕様が全く不明なコードでも、仕様を把握するためだけのテストを書けば理解が進む。

私は全くテストが無く、「不吉な匂い」で満たされたシステムを担当させられましたが、この本のやり方を知ることで自信を持ってエンハンスができるようになりました。

なお、この本の内容はTDD(テスト駆動開発)を未体験の人にはピンと来ないことが多いと思われます。
「テストを先に書いて後からコードを直す」という手法が当たり前のように使われるからです。
TDDのやり方を習得していないと、この本だけではどう実践していいかわからないかもしれません。
そのため、まずはTDDを習得してから読むことをお勧めします。
・自動テストが良い理由がわかった気がした。テストによって仕様が明確になり、安心して改変ができる。
・Java,C++関連がサンプルだが、他の言語(自分の場合はDelphiなんか)にも役に立つ考え方
・訳はあまり良くない。内容がわかっている人にとってはわかりやすいのかもしれないけど、やはり直訳的なものが目立ち、意味がわかりにくいところが多々あり。
・ある程度、開発に携わっている人でないと、初心者の勉強だとピンとこないところが多数だと思う。
・全く古さを感じさせず、現在でも十分に役に立つことが多数。
 
   
本書の内容
開発経験に基づくパターン実践の極意!
パターン誕生の背景/エッセンス/適用条件/サンプルを解説。

ゲームプログラミングを含むソフトウェア開発の現場で、デザインパターンをより的確に利用するための解説書。著者は、米国大手ゲーム会社エレクトロニック・アーツでゲーム開発に従事。その経験に基づき、GoFや著者独自のパターンについて考察。より容易に変更できる洗練されたアーキテクチャ、ゲームに求められる実行速度といった視点を重視しつつ、幅広く応用できるパターンやゲーム必須のパターンを取り上げています。本書は、『Game Programming Patterns』の翻訳書です。米国アマゾンで60以上のレビューを集め、その9割が星5つと評価されています(2015年8月)。

【以下、本書イントロダクションより抜粋】
私がこの本で提供したいのは、解決策のメニューのようなものです。この本の各々の章では、単独でコードに適応可能なアイデアを解説しています。役立つものをメニューから選んで組み合わせることができます。
 
内容サンプル
 
User Voice
デザインパターン(設計パターン)の本です。
これを読んだからといって、ゲームを作れなかった人が作れるようになる本ではありません。
すでに作れる人が、より良い設計(拡張性が高いとか、不具合が出にくいとか、実行効率が良いとか)にするための本です。
内容は広く浅くという感じです。
学生や若手プログラマーの人におすすめです。

元祖デザインパターンで定番のコマンドパターン、オブザーバパターン、シングルトンパターン、ステートパターンなども載っていますし、ゲーム独自の設計パターンも載っています。
この本の良いところは、サンプルコードや説明がゲームに特化していることです。
よくあるデザインパターンの本は「概要はわかった。でも何が嬉しいのかわからない。実際にいつ使えば良いのかわからない。」という例・解説が多い気がするんですが、この本はゲームに特化してるので、例も具体的で使用方法やメリットがすぐ理解できます。

また、「デザインパターン最高!これを使えば万事解決!」みたいな押しつけはなくて、デメリットを詳しく併記している点も好感が持てます。

「データ局所化(データ指向)」など、わりと高度なトピックも載っていて、このあたりを読むと最近UnityがEntity Component Systemを推し進めようとしている理由がわかります。

翻訳も良好で読みやすかったです。

サンプルコードはすべてC++なので、C++がわからないと厳しいです(といっても、クラスとポインタさえわかっていれば大丈夫です)。
デザインパターンの本といえば結城浩さんのデザインパターン入門が有名ですが、わかりやすいものの面白くなく、デザインパターン自体つまらないものなのかなと思っていました。

しかしこの本はゲーム開発歴が長い作者が実際のゲーム開発で遭遇する問題をデザインパターンで解決していくというスタイルで、すべて例がゲームなのでゲームプログラミング好きにはめちゃくちゃ面白いです。
ステートパターンの章は自分が経験したことのある問題を扱っていた章なので、忘れようがないぐらい吸収できました。
パターンのデメリットや限界、実装上の注意やパターンの変形などについても詳しく扱っていて、実際に実装しようと思った時にかなり役立ちそうな感じです。

設計一般の話も載っており、第一章にあったこの文などがためになりました。
「あるゲームのアイデアが使い物になるかどうか知りたい段階で、アーキテクチャの整ったコードを書くのは、一種の賭けになってしまいます。そのアイデアが実際に画面に展開されて評価を受けるまでに時間がかかるだけでなく、もしもそのアイデアが使い物にならないと結論されたら、そのコードを構造化するためにかけた時間はまったくの無駄になってしまうのです。」

言語はC++ですが、オブジェクト指向言語が一つわかってれば読めるように書かれています。
話題自体が若干高度なのである程度プログラミング経験ある人向けですが、基本的に解説に不親切なところはなく、名著と言っていい本だと思いました。
ゲーム以外のプログラム経験がある人が、趣味でUnityを使い始めて、少し大きなゲームに挑戦した辺りでぶつかる「あれ、このゲームのシステムってどういう風に設計するのが正解なんだろう。」というモヤモヤをスッキリさせてくれる書籍です。

いわゆるデザインパターンの活用方法が、「主人公の状態管理どうしよう。」「敵いっぱい作りたいんだけどパラメータのデータ構造どうしよう。」といったゲームを作るとほぼ確実に出会うであろう問題を例に解説されているので、すんなり頭に入ります。ゲームに寄った内容ですが、専門書が大好きな銀行口座や学生名簿の例よりもよほどわかりやすいので、デザインパターンの入門書としても良いと思います。

個人的には、脚注のユーモアがツボにハマり、読み物としても楽しめました。
 
   
本書の内容
本書はAdaptive Code via C#: Agile coding with design patterns and SOLID principles(Microsoft Press, 2014)の日本語版で、変化に容易に適応できるソフトウェア開発を実現するために、
アジャイル開発、デザインパターン、SOLID原則を、C#でどのように実践するかを解説する書籍です。方法論と実践の間の橋渡しをする解説書で、サンプルコードはVisual Studio 2013ベース。
C#の基本をひととおり理解した開発者が、ワンランク上を目指すために読んでおきたい1冊です。


 
内容サンプル
 
User Voice
■ 何故プログラマーには本書が重要か

○ ソフトウェアは変化し続ける

ソフトウェア開発は、常に追加・変更し続けるのが特徴だ。一気に全体が出来上がる訳ではない。最初の1行を書いてから、段々と機能が足され、また、改良されていく。変更し続けるのが特徴なので、なるべく変化を受け入れやすい作り方をする方が良い。

本書には、そういう「Adaptive Code (適応力のあるコード)」を書くための原則とそれを実践するための方法としてベストプラクティスが書かれている。

○ 原則は重要

ソフトウェア開発において、原則は重要だ。

C# 等のプログラミング言語の文法を覚えればそれだけでソフトウェアが書けるかというと、そうではない。また、いつもいつも日進月歩の開発技術を一から習得しなさないといけないかというと、それも違う。経験があり優秀な技術者は、新しいプログラミング言語、新しい開発基盤でも実力を発揮するものだ。

そこには、個々の開発技術にそれほど依存せず、新しい技術が出てきたときにも使える知恵があるだろう。つまり、プログラミング言語や技術のトレンド等の枠を超えて重要な、開発手法や原則、パターン、アンチパターン、ベストプラクティスというものがあるのだ。

それは、偉大な先人の知恵が集まったものだ。経験のあるプログラマーが長年掛かって身に付ける暗黙知のような技術を、先人が形式知として習得しやすくしてくれたのだ。そうした知恵は広くソフトウェア開発に応用が効き、また、ドッグイヤーと言われるソフトウェア開発の技術革新の中でも古びない。また、プログラマー同士がコミュニケーションするときの語彙としてもずっと重要なものだ。プログラマーとしては是非とも知っておきたい。

「原則だのパターンだのは、実務では役に立たない」というのを聞いたことがある。それは違うと思う。パターンをどこにでも適用しさえすれば良い、ということではない。サンプルコードそのものをコピー & ペーストして使え、という話でも断じてない。原則やパターン等は、「守破離」でいう「守」だ。基礎なのだ。

確かに、単にそれらの開発手法や原則、パターン、アンチパターン、ベストプラクティスを並べただけでは、中々理解が難しい場合もある。 実務への応用が易しくない場合もあるだろう。抽象的な知識は、広く使えて古びないが、具体的な知識と違って、深く理解しないと現場で活かしづらい。

本書は、単なる原則論にとどまっておらず、豊富な C# のサンプルコードや Visual Studio 等のツールの使い方の例によって、具体的に実践方法をあげている。ここが、とても重要なところだと思う。

■ プログラマーの必読書

過去にこうした知恵が書かれたプログラマーの必読書としては、次のようなものがあった:

-『達人プログラマー ―システム開発の職人から名匠への道』 (2000/11)
-『達人プログラマー ―ソフトウェア開発に不可欠な基礎知識 バージョン管理/ユニットテスト/自動化』 (2005/3)
-『アジャイルソフトウェア開発の奥義』 (2004/6/30)
-『アジャイルソフトウェア開発の奥義 第2版 オブジェクト指向開発の神髄と匠の技』 (2008/7/1)

本書『C#実践開発手法』は、C#プログラマーにとって、そうした本に並ぶものだと思う。

より新しい内容も含まれているし、何より Visual Studio と C# による実装レベルにまで具体的に噛み砕いている。 中堅のC#プログラマーに必読だろう。
本書は、開発言語にC#を用いる開発現場で、一歩進んだ技術力・開発力を見に付けたい個人やチームに、非常に強い味方になると思います。

これまでマイクロソフトの技術では、アジャイルソフトウェア開発があまり浸透してきませんでした。Java方面では早い時期から(本書のコピーでもある)デザインパターンやSOLID原則など、オブジェクト指向開発の手法が広まったのですが、C# 1.0がJavaと比較的良く似ている言語であったにも関わらず、このような方面での技術の掘り下げは殆ど行われてきませんでした。更に、ソフトウェア開発手法と組み合わせて、網羅的・実践的に解説した邦訳書など、皆無と言って良いと思います。

この本のユニークな点は、ソフトウェア開発手法の一つである「スクラム」での考え方と、スクラムを日々実践する上でC#のコードにどのように落とし込みを行うのか、その考え方や手法という点で、ソフトウェア開発の上から下までを通貫して網羅している事です。アジャイルソフトウェア開発だけ、あるいはC#の言語解説だけ、というように取り上げた書籍と違い、両者を結び付ける具体的な方法が記されています。しかもC#を軸として、です。そのため、「両方とも知識として知ってはいるけど、具体的にどう実践すれば良いのか」と言う事が良く分からないという方にも、お勧め出来ます。

なお、本書は特定の技術(例えばユニバーサルWindowsアプリやASP.NET)の解説書ではありません。これらを横断的に扱う、普遍的な開発手法・技術の書籍です。多くの開発現場で、ビジネス価値を前提とした、柔軟性のある、強引な手法に頼らない開発が浸透して欲しいと思います。
要求が変化したとき、問題が発生したときに、できるだけコードを書き直さずにそれらに対処する方法と実践方法を学べる本です。

たとえば、変更があった時バグ修正などの特殊な場合を除いて既存のメソッドを書き直すのではなく、メソッドに拡張ポイントを設けておくことによって実現し、拡張ポイントを用意する方法について複数の方法が紹介されています。

変化に適応できるコードを本書では「Adaptive Code」と呼び、Adaptive Codeを書けるようになるための考え方、さらに実際のサンプルコードが載っています。サンプルコードはC#で書かれ、Webページからダウンロードできます。

全体は3部構成になっており、第1部でアジャイルの基礎、第2部でSOLIDコードの記述、第3部でオンラインチャットアプリケーションの作成を例として実際に開発現場に適応していく様子を学習します。

サンプルコードが豊富で、必要に応じてUML図で整理して説明されているので、内容が高度な割に理解しやすくなっています。
特に第2部では、SOLIDの原則について1つずつ説明があり、それらの原則がどのように役立つのか説明とコードを読みながら理解できます。

理論自体の説明よりもどのように役立つかに説明の重点が置かれ、開発手法が身近に感じられる本です。
 
   
本書の内容

【本電子書籍は固定レイアウトのため7インチ以上の端末での利用を推奨しております。文字列のハイライトや検索、辞書の参照、引用などの機能が使用できません。ご購入前に、無料サンプルにてお手持ちの電子端末での表示状態をご確認の上、商品をお買い求めください】

実践的なプログラミング技法の基礎から実装まで!

デザインパターンを「使うことができる」ためには、デザインパターンの構造や仕組みを知っているだけでは充分ではありません。「どのような状況」で「どんなふう」に使うのが効果的なのかを充分に理解している必要があります。そこで本書では、パターンの使いどころと効果をわかりやすく示すことで、どのようなときにどんなふうにデザインパターンを使えばよいのかを理解できるようにしています。

※本電子書籍は同名出版物を底本として作成しました。記載内容は印刷出版当時のものです。
※印刷出版再現のため電子書籍としては不要な情報を含んでいる場合があります。
※印刷出版とは異なる表記・表現の場合があります。予めご了承ください。
※プレビューにてお手持ちの電子端末での表示状態をご確認の上、商品をお買い求めください。

 
内容サンプル
 
User Voice
デザインパターンの名著といえば、
本書ですが,C++ベースでのデザインパターンの入門書レベルの内容で,
C++を使う者にとっては大変有難いのですが,残念ながら以下の理由から
初版の内容ではお勧めし辛いです。

まず最初に UMLの表記に関する簡単な解説と,オブジェクト指向の概念についての
説明があり, その後,デザインパターンの使用頻度別(高・中・低)に分けて,
各パターンが以下の構成で紹介されています。

・パターン適用前のソースコード
・パターン適用後のソースコード(大半は複数)
・パターン適用後のクラス図

各パターンの紹介で使用しているプログラムは,実処理が無い簡単なコードですが,
それにも拘らず,メソッド名やクラス名の平凡な間違いが非常に多く,コンパイルが
通らないことが多々あります。★-1

また,パターン適用後のコードが各ページに部分ごとに散在しており見辛いです。
当然,実際に動作させてみる場合も,読者が自分で散在したコードをまとめ上げる
必要があり,結構労力を要します。巻末もしくはせめてWeb上に,コード一覧を
早急に用意して欲しいです。★ -1

なお,「パターン適用後のクラス図」の説明についても一部誤植がありましたが,
こちらは初版のため仕方ないか…というレベルでした。

本書に掲載されているプログラム自体は,「独習C++」で勉強したことがある読者
であれば読みこなせる内容で,C++ベースのデザインパターンの入門レベルとしては
良いと思いますので,早期の訂正とコード一覧の掲載を強く望みます。
分かりにくいのですが、そもそもデザインパターンを分かりやすく説明するのも難しいかなと思います。
そういう意味ではまだ分かりやすい方だと思います。

いずれにせよデザインパターンは自分で使ってみないと・・・。
でも参考になりました。
 
   
本書の内容
ソフトウエア開発の方法論を幅広く網羅した入門書。上巻は設計やプログラミング、下巻はテストやデバッグを扱う。1993年発行の第1版を、Webアプリケーションの普及などを踏まえて大幅に改定した。著者はソフトウエア工学の第一人者で、知識体系「SWEBOK」の構築を主導する。計1200ページを超える大部だが、ソフト開発プロセスを建築設計にたとえるなど、難解になりがちな内容を分かりやすくまとめている。
本書は効果的なコンストラクションプラクティスについての知識を集めた、実践的なプログラミング解説書です。ソフトウェア開発プラクティスは目覚しい進歩を遂げていますが、一般のプログラマにはなかなか浸透しません。本書は、業界の第一人者らの知識と、一般の商用プラクティスとの橋渡しをします。10年前の第1版とコンセプトは同じですが、第2版は、全体を通じてオブジェクト指向の考え方が反映されたものになっています。また、「リファクタリング」の章が追加され、サンプルコードはC++、C#、Java、Visual Basicなどにアップデートされています。本書は、ソフトウェア開発の総合ガイドを求めている経験豊富なプログラマ、経験の浅いプログラマを教育する技術指導者、正式なトレーニングを受けたことのない独学プログラマ、これから社会に出る学生や新人プログラマなどを特に対象としています。本書で説明されている研究成果や過去の経験は、高品質なソフトウェアを作成し、問題を少なく抑えて作業をより短期間で行うのに役立ちます。また、大きなプロジェクトを制御し、要求の変更に応じてソフトウェアの保守や修正を適切に行うのにも役立ちます。  
内容サンプル
 
User Voice
よりよいプログラミングを目指して書かれた書籍。分厚い。大量の文献が引用されており,読み応えが十分。
上下巻に分かれており,この上巻では主にプログラミングでの名前について解説されているのが印象的だった。

関数(ルーチン)の名前はどうすればいいか?変数名はどう書けばいいか?データ型やステートメントはどう使い分けるのがいいかなど,実際のプログラミングで誰しも一度は悩むような項目を扱っている。
たとえば,TotalDataとするか,DataTotalとしたほうがいいのか。

クリーンコードやリーダブルコードなど他のコーディングに関する本でもこうした項目に言及しているが,この本ほど網羅的で徹底的に議論されてはいない。おそらく,この本以上にコーディングについて徹底的に考察された本はないのではないかと思える内容だった。

p. 317の「11章 変数名の力」の冒頭の以下の言葉がこの本の本気度を伺わさせる。
「効果的なプログラミングにとって、よい名前というテーマは重要であるにもかかわらず、よい名前の作り方を10項目以上にわたって取り上げた本を読んだことはない。プログラミングに関する文献の多くは、省略形の選択に段落をいくつか割き、決まり文句でお茶を濁し、読者が自力で何とかやっていくことを期待する。本書はこれに真っ向から対抗し、良い名前に関する情報を使い切れないほど提供しようと考えている。」

値段は少々高いが,大量の文献,考察が書かれており,2005年出版とやや古いが,今でも通用するかなり有益な本だった。是非手元においておきたいと思える本だった。プログラミングするなら読んで損はしないと思う。
題名の通り、完璧なプログラミングコードを書くための指針をまとめたシリーズの上巻。
良いコードを書くために守るべき習慣(プラクティス)が次々と述べられており、自分で実践したくなることはもちろん、開発者仲間にも教えたくなるような事柄が満載である。
プログラミング言語は特に指定されておらず、例外は多少あるものの、基本的にどのプログラミング言語を使うときにでも共通に使用できるテクニックが中心に述べられている。
例として上げられている言語はVisual BasicとC/C++、それにJAVAが多いが、コードは簡単かつ明瞭に書かれているため、これらのプログラミング言語を使ったことがなくても、問題なく理解できるだろう。
非常にボリュームが豊富なため、読み切るのに苦労するかもしれない。
しかし、多くの内容が理路整然とわかりやすくまとめられているため、量が多くて苦痛になるという感覚はあまり感じなかった。
また、経験豊富な開発者なら、既に知っている内容も多く含まれているかもしれない。
だが、既知のテクニックを再確認できるという点で、読む価値は十分あるだろう。
完全な初心者には向かないかもしれないが、もっときれいで読みやすいコードを書きたい全ての開発者、プログラマの方々に是非手にとって欲しい1冊である。
自分もエンジニア歴3年目くらいに上下巻読みましたが、想像以上に役に立ちました。下記の言葉の通り、商用プラクティスと学術的な研究成果を結びつけるための本であり、第一人者の研究成果をコードベースで学ぶことができます。少し高い本ですが、読んで損はない1冊だと思います。
「ソフトウェアエンジニアリングのベストプラクティスと、平均的なプラクティスとの差は非常に大きい」Fred Brooks
 
   
本書の内容
 
内容サンプル
 
User Voice
 
   
本書の内容
歴史を変えた1冊、待望の改訂版誕生。

※この電子書籍は、「固定レイアウト型」で配信されております。説明文の最後の「固定レイアウト型に関する注意事項」を必ずお読みください。

※この電子書籍には付録DVDのデータは含んでおりません。電子書籍に記載のURLからPCでダウンロードしてお使い下さい。

「この本で初めてデザインパターンが理解できた」「UMLとイラストを交えた解説がとてもわかりやすい」と、多くの読者から絶賛された大ロングセラーの増補改訂版。原典『デザインパターン』で紹介された全23のパターンを、Javaによる実装を含めて解説。

2001年6月の初版刊行以来、「最もわかりやすいデザインパターン解説書」と、多くの読者から支持されてきた前著の増補改訂版です。改訂にあたっては、前著の内容を全面的に見直して、文章や表記をより適切な表現に改めています。また、デザインパターンについて、読者が誤解しやすい点、間違いやすい点を、「Q&A」として追加しています。デザインパターンについて学び、実践で利用したいプログラマはもちろん、オブジェクト指向の本質を理解したい人に最適の1冊です。

●目次
はじめに
UMLについて
デザインパターンを学ぶ前に
デザインパターンに慣れる
第1章 Iterator ― 1つ1つ数え上げる
第2章 Adapter ― 一皮かぶせて再利用
サブクラスにまかせる
第3章 Template Method ― 具体的な処理をサブクラスにまかせる
第4章 FactoryMethod ― インスタンス作成をサブクラスにまかせる
インスタンスを作る
第5章 Singleton ― たった1つのインスタンス
第6章 Prototype ― コピーしてインスタンスを作る
第7章 Builder ― 複雑なインスタンスを組み立てる
第8章 Abstract Factory ― 関連する部品を組み合わせて製品を作る
分けて考える
第9章 Bridge ― 機能の階層と実装の階層を分ける
第10章 Strategy ― アルゴリズムをごっそり切り替える
 ほか

固定レイアウト型に関する注意事項(必ずお読みください)
この電子書籍は、全ページ画像の「固定レイアウト型」で配信されております。以下の点にご注意し、購入前にプレビュー表示をご確認の上、ご購入ください。

■使用できない機能
・文字拡大(ピンチイン・ピンチアウトは可能ですが、画面におさまらない場合は画面をスワイプ)/文字のコピー/マーク/ハイライト/文字列検索/辞書の参照/Web検索/引用

■推奨環境
・タブレットなど大きいディスプレイを備えた端末
・Wi-Fiネットワーク経由でのダウンロード(Kindle端末の場合)
 
内容サンプル
 
User Voice
拙者プログラミング初心者、
デザインパターンのデの字しか知らないのに、
友人たちがシングルトンが好きだのファクトリーだというから悔しくなって
デザインパターン本を買ってみた

古めの本にもかかわらず、
ランキングで高い位置に居るだけ合って内容はとてもわかりやすく、
サクサク読み進めることができた。

卍デザインパターン完全に理解した卍

とてもおすすめです。
Javaを仕事で使用していて、それなりの規模のプログラムを開発するとき、デザインパターンの知識は必須です。
特に、既存のプログラムの保守や拡張をするとき、既存のプログラムがデザインパターンを利用しているかどうか見分けて、そのパターンの意図を理解できないといけません。
逆に、パターンを知っていると、コード内にパターンを示す命名や使われていたり、コメントが残されていると、それだけで何をしているコードなのか理解も推測もしやすいです。
この本はまずパターンを利用するプログラム例を解説し、その後で抽象的な説明となっています。
内容としては上手くまとめられていて非常にわかりやすく,object指向のプログラミングを学びたい方にお勧めできる一冊となっています。
ただしjavaという言語に触れたことのない方が読んで理解するのは難しいと思います。そのような方はこの本の作者である結城浩先生が書かれた,"Java言語プログラミングレッスン"の上下巻を読んでからこの本に入った方がよいかもしれないです。私がそうでしたがプログラミングを多少やっている方ならサクサク読み進めることができます。
 
   
本書の内容
リファクタリングの入門書の決定版。

※この電子書籍は、「固定レイアウト型」で配信されております。説明文の最後の「固定レイアウト型に関する注意事項」を必ずお読みください。

どうすれば、きれいで読みやすいコードになるのか? 『Java言語で学ぶデザインパターン入門』の結城浩が、リファクタリングの本質と手順をやさしく解説。Javaによる実例満載したリファクタリング入門書の決定版。

●目次
第0章 リファクタリングとは
リファクタリングと「不吉な匂い」
リファクタリング・カタログ
リファクタリングのエッセンス
リファクタリングQ&A
(第1章~第4章では、コードを整える小規模のリファクタリングを学びます)
第1章《シンボリック定数によるマジックナンバーの置き換え》
第2章《制御フラグの削除》
第3章《アサーションの導入(表明の導入)》
第4章《ヌルオブジェクトの導入》
(第5章~第10章では、クラスを整える中規模のリファクタリングを学びます)
第5章《メソッドの抽出》
第6章《クラスの抽出》
第7章《クラスによるタイプコードの置き換え》
第8章《サブクラスによるタイプコードの置き換え》
第9章《State/Strategyによるタイプコードの置き換え》
第10章《例外によるエラーコードの置き換え》
(第11章~第15章では、クラスの関係を整える大規模のリファクタリングを学びます)
第11章《Factory Methodによるコンストラクタの置き換え》
第12章《観察されるデータの複製》
第13章《委譲による継承の置き換え》
第14章《委譲の隠蔽》
第15章《継承の分割》

固定レイアウト型に関する注意事項(必ずお読みください)
この電子書籍は、全ページ画像の「固定レイアウト型」で配信されております。以下の点にご注意し、購入前にプレビュー表示をご確認の上、ご購入ください。

■使用できない機能
・文字拡大(ピンチイン・ピンチアウトは可能ですが、画面におさまらない場合は画面をスワイプ)/文字のコピー/マーク/ハイライト/文字列検索/辞書の参照/Web検索/引用

■推奨環境
・タブレットなど大きいディスプレイを備えた端末
・Wi-Fiネットワーク経由でのダウンロード(Kindle端末の場合)
 
内容サンプル
 
User Voice
マーチンファウラーの「リファクタリング」より本書の方が読みやすく感じられました。訳書独特の言い回しは必要以上に難解に感じられると、本書を読んで改めて感じました。JDK5に対応している点もポイントです。

一通りプログラムが書けるようになったら読み、また、その後も何度でも読み返して考えを新たにする、そういう内容だと思います。

Javaプログラマーでなくても十分に通じる思想だと思いますし、多くのプログラマーに読んでもらいたいと思います。

本書と、もう一冊「デザインパターン入門」があればJavaプログラミングの勉強に関して他はあまり必要性を感じません。

ただ、個人的には「リファクタリング」という単語は小難しい印象があって、少なからず読者を遠ざけているのではないかと思うこともあります。
 結城さんの本の最新版です。当然買いました。同著「JAVA言語で学ぶデザインパターン」は,

今でも手放せません。この本も実に丁寧に作れていると感じます。リファクタリングとデザインパターンは切り離しては考えられません。そしてどちらもオブジェクト指向を身につけるのに必須なのではないでしょうか。高品質なコードを書くには高品質なコードを読んでは書きを繰り返し、体で覚えることが大事です。そういう意味でもこの本は最適だと思います。
多くの開発者はあたりまえだと思っていることが書かれているかもしれない。ただ、「やさしいJava」を読んだ後Android開発を行った私からしてみたらとても良い本だった。人に魅せるコードとまでは行かないものの不愉快にならないコードを書けるようになった気がする。
 
   
本書の内容
本書は、統合開発環境、デザインパターン、エクストリーム・プログラミング、テスト駆動開発、リファクタリング、継続的インテグレーションなどのモダンな開発スタイルを組込み開発に適用する方法を解説します。  
内容サンプル
 
User Voice
組込み系開発では、このご時世になってもC言語が主流です。
そのため、C言語に関する書籍は数多く出版されていますが、着目する箇所が他の書籍と異なります。
特に、以下の点です。
・環境構築法の記載
・オブジェクト指向的な実装方法
・ツールを活用した開発方法

・環境構築法の記載
環境構築の方法がしっかり記述されていることに驚きました。
書籍によって、各自で構築というケースも少なくないため、手間取ることも多かったと思います
本書では、様々なツールの導入方法がキャプチャ画像付きでしっかり記述されていました。
非常に助かりました。

・オブジェクト指向的な実装方法
エンプラ系では、オブジェクト指向が主流のご時世ですが、C言語でうまく実装できないか悩んでいました。
本書では、多態性や継承、デザインパターンなどをC言語で記述する方法がしっかり記述されています。
特に、C言語を極めたいエンジニアには良いと感じました。

・ツールを活用した開発方法
一番勉強になった点は、ツールの活用方法がしっかりかかれている点でした。
特に、googletest、カバレッジ測定、Valgrindの使い方は、組み込み系エンジニアなら役に立つはずです。
著者の目の付け所がすごいです。

一通り読んでみて、C言語を使いつづけるエンジニアには、読むべき書籍です。
著者の10年分の知識が、一瞬で身に付きます。

なお、対象はC言語中級レベルだとスラスラ読めます。
2回通して読みました。自分には大当たりの技術書です。

C言語、という書名ですが、C言語に固有の本ではありません。
ソフト設計に共通して当てはめられる本質的な考え方やノウハウが、
Cを例に使って説明されてる、というのが正しいです。(実際この著者はJavaの本も書いてるようです)

恐らく、10年以上 真剣に設計に向き合ったソフト屋しか知り得ないようなノウハウが
惜しげもなく詰め込まれています。
いくつかは、世のベテランも独自に会得して、いざという時の秘策や切り札にしているような知識まであるのでは…。

理論倒れでなく、開発の現場で地に足を着けて苦労の末に気づく本質、
あるいは余程のことがなければ他人には教えないような秘訣も、書いてしまっているようです。

年寄りと見なされつつ、経験とノウハウで必死に若い理解力や柔軟性に負けじと踏ん張る身としては
こんなことまで教えてしまったら困る、という思いさえ心をよぎらずには居れません。
数千円で、誰でも買えてしまって良いものか。

そう言う自分自身も、今まで洞察しえなかった知識を多く得て、何というか、
著者には感謝のような思いも感じます

良書、と言ってよいと思います。
昔日の日々、C言語とは文法を覚えて書くだけ(まあコンパイルされたアセンブラレベルとかわかるとすごーい、なんて言われてたり)、それだけでプロとして認識された。
しかし学生ではなく職業としてコードを書く人の求められるスキルレベルは現在非常に高い。デザインパターンを知らないコード書きはありえない。継続的インテグレーションをちゃんと理解してないコード書きもありえない。もちろん現代のリファクタリングテクニックはXPにおいて必須である。
でもそんなの知らずにコード書いてる人がたくさんいるのは、事実であり日々むかつく。そんな昭和なコード書きに投げつけてやりたい本である。
 
   
本書の内容
 
内容サンプル
 
User Voice
 
   
本書の内容
「美しいコードを見ると感動する。優れたコードは見た瞬間に何をしているかが伝わってくる。そういうコードは使うのが楽しいし、
自分のコードもそうあるべきだと思わせてくれる。本書の目的は、君のコードを良くすることだ」(本書「はじめに」より)。

コードは理解しやすくなければならない。本書はこの原則を日々のコーディングの様々な場面に当てはめる方法を紹介します。
名前の付け方、コメントの書き方など表面上の改善について。コードを動かすための制御フロー、論理式、変数などループとロジックについて。
またコードを再構成するための方法。さらにテストの書き方などについて、楽しいイラストと共に説明しています。

日本語版ではRubyやgroongaのコミッタとしても著名な須藤功平氏による解説を収録。  
内容サンプル
 
User Voice
コメントとコードの2つについて書かれています。

コメントについては、必要・不必要の分類があって、必要なものについてそれぞれ解説がついています。例えば、頭の中で考えたことを書きなさいね!とか。
コードは、表記のルールつくれよ、とか、リファクタリングなど。

自分は、コードは我流でやってきたところがあるので結構勉強になりました。
特に、
・関数とか変数の名前は意味がわかるようにつける
・コメントにtodoを書く
・頭の中で考えたことはどんどんメモする
とか。

上に列挙したものについて「そんなの当たり前だよ。」っていう人は読む必要ないかもしれないすね。
このコードどうなの?と思い始めた人向けの本です。

業務で、他人が作ったコードを読め、動作するコードも書けています。
しかし、他人のコードは読みにくかったりしませんか?
また、自分のコードは見直して理解しやすいでしょうか?
そんな悩みの解決につながる内容になっています。
例えば以下の内容等があります。
・誤解されない変数名のつけ方
・コードを論理的な段落に分ける書き方
・returnを早めるガード節の考え方

どこかで聞いたことがあるかもしれません。それらの体系的な理解に役立ちます。
相手に伝わるコードが書けているかな?と悩みのある人にお薦めの本です。
以前知り合いに借りて読んだことがあるのですが、改めて読み直す機会があり購入しました。
エンジニアは一人一冊持っていて、間違えはないと思います。
ただ、英語でもOKという方はpdfが無料であるみたいなのでそちらのほうがいいかもしれません。
 
   
本書の内容
 
内容サンプル
 
User Voice
 
   
本書の内容
 
内容サンプル
 
User Voice
 
   
本書の内容
アジャイルなソフトウェア開発の実践において、プログラムの改善にリファクタリングは欠かせません。
同様に、プロジェクトを本当の意味で改善するためには、開発にかかわる人間の脳(ウェットウェア)をリファクタリングすることが重要だと思いませんか?
そこで、認知科学、神経科学、学習理論、行動理論などを駆使し、人間の脳がどのように機能するかを明らかにします。

本書で紹介するテクニックを実践すれば、読者の学習スキルおよび思考スキルは向上、日々の生産性を20%から30%改善できると著者は主張します。
名著『達人プログラマー』の著者、アンディ・ハントが語る「あなたの脳をリファクタリングする」方法です。  
内容サンプル
 
User Voice
「達人プログラマー」の共著者であるAndy Huntの渾身の一作といえるかもしれない。
個人的にはかなりの当たり本だと思う。

内容は仕事の上達論、右脳左脳の話、意識的な学びの方法、など
知識労働者(エンジニア特にプログラマー、あるいは作家など)であれば、
一読して損はない内容だと思う。

Andy Huntはソフトウェアエンジニア出身とあって、
比喩や事例などはほとんどプログラマー向けのコンテクストで、
他の分野の人が読んでもピンと来ないのではないかと思う(笑)。

この本の対象は職業プログラマー、その中でも
「プログラマーは現代の職人である」とい思いを持っていて、
自ら職業としてその道をつっぱしりたい人には、非常に参考になる内容が書かれている。

冒頭で紹介される技能の上達に関するドレイファスモデルなどは、
まさに「達人プログラマー」になるための個人向けCMMみたいなものだ。
初心者/中級者/上級者/熟達者/達人の5段階がある。
引用されている「ベナー看護論」はぜひ読んでみたい一冊だ。

印象に残ったところで、
初心者クラスのプログラマーが学んだばかりデザインパターンのほとんどを、
小さなコードにつめこんだ話が出てくるが、あまりにありがちで笑うに笑えない。

初心者はあらゆる可能性を検討してしまうが、
達人クラスは、直感を使って必要にして十分な最適解をいきなり出してしまう。ということを書いている。

これなどは、将棋の羽生さんの「直感力」に書かれていることと同じだ。
将棋を指す際に、できるだけ手を読むのではなく、その局面において明らかに読まなくて
良い手はまず除く。できるだけ不要な手を読まない。というスタンス。

この「検討しなくて良いこと」が何かが判断できるためには、知識や経験を積むしかない。
つまり、ドライファスモデルに従って、一段ずつ地道にあがるのが正しい。

この本には、その階段を上がるための基礎体力を鍛える方法が惜しみなく書かれている。
 技能には、初心者、中級者、上級者、熟練者、達人の5段階があるというドレイファスモデルを紹介し、上級者と達人の間の非連続的なギャップを明らかにする。全8章からなるこの本の第1章の初心者から達人への道という章に共感できるかどうかが、この本の評価を分けることになる。上級者はえてして、その上のレベルがあることに気付かず、そこで満足しがちであるという現場で起きている現象を鮮やかに説明しきっている。
 さらに上を目指す上級者のためのレシピが残りの7章である。脳の構造とLモードとRモード(よく言われている左脳・右脳の働きをモードとして表現した用語)で説明し、達人への道としてRモードへの転換の必要性を示す。そのための具体的トレーニングも説明している。いろんな例と丁寧な説明でわかりやすい。
 ここで書かれているレシピが適切なものかどうかは別にして、ドレイファスモデルについて記述された第1章を読むためだけに購入しても価値がああると思う。
 本書のメッセージは、初心者、中級者、上級者、熟練者、達人の夫々の習熟度の段階において、必要とするツールが異なるということだ。初心者には、定型的な手順書が必要であり(その代わり臨機応変な判断を期待しない)、達人には臨機応変に行動するための柔軟な環境が必要である。
 ここで問題は、どうすれば初心者から中級車、そして上級者、最後に達人と習熟度を上げていけるか?という方法であり、本書はこの方法について述べている。
 世の中のHow to 本が、初心者向けのツール(定型的な手順:例えば「重要なものから先に実行せよ」など)を提供しているのと比べ、本書は初心者から達人になるための方法を記している点が特徴である。キーワードは、「学び方を学ぶ」である。
 
   
本書の内容
リファクタリングは、システムデザインの改善や保守性、拡張性、パフォーマンスの向上
など、開発での幅広い有効性が証明されてきました。本書は、データベースシステムのために設計された強力なリファクタリング・テクニックを紹介しています。テーブル構造やデータ、トリガーなどをほんの少し手直しするだけで、どんなデータベースデザインも強化でき、無駄な再作業や余分なコストを省くことができるようになります。また、一連の決まったプラクティスの概略が述べられており、データベースの設計・開発にたいして、アジャイルな手法をどう取り入れるべきかが明確に示されています。不可能だといわれていたデータベースのリファクタリング・テクニックを確立したのは、アジャイル手法の第一人者スコット・アンブラーと高名なコンサルタントピラモト・サダラージ。彼らのおかげで、エンタープライズアプリケーションアーキテクチャに携わる開発者やデータベースの専門家は、自信を持って、しかも安全にデータベース設計に変化を取り入れることができるようになるでしょう。  
内容サンプル
 
User Voice
とは、プログラムの外部から見た動作を変えずに
ソースコードの内部構造を整理するためのテクニックです。
リファクタリングとユニットテストによって、アジャイルのような
ユーザ要件の変化に合わせて段階的に設計・実装を行うスタイルの開発が可能になりました。

しかし、本書の前書きにあるとおり、リファクタリングが有名になっても
データベースに対してリファクタリング手法を適用することは一般的ではありませんでした。
稼働中のデータベース内に存在する大量の「データ」を失う訳にはいかないからです。

本書では、データベースのリファクタリングをデータの移行手順まで踏まえた上で紹介しています。
本書を読み進め、データベースリファクタリングのパターンを理解していくことで
データベース開発においても、アジャイルさを得ることができるかも知れません。

ちなみに、本家リファクタリングのプラクティスがEclipse等で自動化されているように、
本書で紹介されているデータベースリファクタリングもLiquibaseというツールで自動化されています。
実際に、本書のプラクティスを適用する際には、このようなツールを探してみるのも一考です。
サンプルDBでおなじみの銀行口座を例にあげて、DBとアプリの一貫性を損なわないよう細心の注意を払いながらDBを再編する技法を詳細に解説している。永らく使われてきたDBの保守を受身でなく前向きに取り組む上での心構えを含めて考えさせられる本である。
日本でも、銀行とその系列のノンバンクに波及する合併・再編は普通の出来事となり、それに伴って、銀行の情報システムのトラブルもマスコミで数多く取り上げられている。
銀行をはじめとする金融分野に限らず、既存システムの再構築にあたってSEが読むべき本として推奨したい。
データベースもアジャイルに作ろう!
そのために必要な、データベースの変更に関する
各種テクニックを紹介した本です。

表の変更、列を追加する、表の名前を変える、
参照整合性を追加する・・・などなどの
データベースに関する変更が対象となっています。
物理的な設計、実装が対象となっています。

変更内容ごとに、
変更するためのSQL、移行の方法、移行に必要なSQL、
AP側の処理の変更、移行等で利用するストアードプロシージャ
等が紹介されています。
SQLやストアードは、Oracleのものです。

別にアジャイルでなくても、アプリケーション開発や保守
を行っていれば、必ず直面する問題だし、
DBAをやっていれば、同じような解決策をとってるような
印象を受ける内容が多かったです。

これからDBAとして、腕を磨くぞ!という本でしょうか。
 
   
本書の内容
 
内容サンプル
 
User Voice
 
   
本書の内容
初めて学ぶ方、過去に挫折した経験のある方、知識を確固たるものにしたい方を対象に、イラストや写真を使ってやさしく楽しく解説する人気のHead Firstシリーズのデザインパターン編。
刺激的なレイアウト、思わず膝を叩く見事なたとえ、引き込まれる小話、楽しいクイズやパズルで飽きることなく読み進むことができます。
複雑難解なデザインパターンの概念が面白いほどよくわかる、目からウロコの画期的な書籍です。  
内容サンプル
 
User Voice
典型的な初心者が書くコードとデザインパターンを導入したコードを比較することでどのような効果を得られたのか理解できるようになっている。並行して、アーキテクチャの説明がなされている。スクリプト言語のユーザーであればオブジェクト生成に関連するパターンを一通りやっておけばよいだろう。2009年に GoF のメンバーのインタビュー (Design Patterns 15 Years Later) によれば、GoF のカタログの改定版には Null Object、Type Object、Dependency Injection、と Extension Object/Interface が追加され、Singleton が削除された。
息子に薦められて購入。全部で13章あり3章の途中まで読んだ。これは面白い!デザインパターンというコトバ、聞いたことはあったが内容は今まで知らなかった。期せずして随所に「再利用」というコトバが登場していて心強い。デザインパターンを適用して課題を解決していく例題はJavaで記述され説明されている。自分にはJavaの経験はないのだが、オブジェクト指向プログラムの考え方(概念)を例題で学ぶことにもなっている。
重要なデザインパターンとその背景にある考え方を分かりやすい実例を通して学べる良書です。
Java初心者の私にも簡単に読めました。
 
   
本書の内容
「デザインパターン(パターン)」を目指して「リファクタリング」する手法を解説し、パターンとリファクタリングの両方が学べる実践的な教科書です。リファクタリングは、ソフトウエアの持つ機能はそのままに、構造を見直す作業であり、開発過程で複雑になっていくプログラムを改善し、バグを減らし、機能拡張にも有効です。そのリファクタリングの際、「パターン」を取り入れたり近づけたりするようにプログラムを改善していくのが、本書で紹介する「パターン指向リファクタリング」です。リファクタリングの道しるべとして「パターン」をとらえることで、リファクタリングの幅が広がる一方で、デザインパターンがどういったものかは理解しつつも、なかなか実際のソフトウエアの設計でうまく生かせない方には、パターンの有効な使い方が学べます。「まえがき」は、『リファクタリング』の著者マーチン・ファウラーと、『デザインパターン』の著者ラルフ・ジョンソンが執筆。本書『Refactoring to Patterns』は、米Software Development誌、2005年Jolt Productivity Awardを受賞。
 
内容サンプル
 
User Voice
リファクタリング時に、こういう論拠で、こうしたら、
デザインパターンになりました、という具合に、
具体的なサンプルを通じて解説してくれます。
先人のノウハウの固まりだから、設計の段階から、
うだうだせずにデザインパターンを使おう、という意見に、
何となく違和感を感じている人には、
特に、読む価値のある一冊だと思います。
ぼくはこのアプローチが好きです。多くの人にとって最適ではないかと思ってます。パターンは、たしかに、システムによっては大げさすぎ、野暮ったい。シンプルであるべきという理念からは外れてしまいます。アジャイル、エクストリームプログラミングとは相容れません。

しかし、少し大げさでも、パターンを適用したコードを書いて、あとから、コードを、システムの性質に合わせてリファクタリング(シンプルにする)ことは、いい方法の1つであろうと思います。経験を活かしつつ、あらゆるシチュエーションに対応するにはいいアイデアです。
 
   
本書の内容
 
内容サンプル
 
User Voice
 
   
本書の内容
 
内容サンプル
 
User Voice
 
   
本書の内容
オブジェクト指向ソフトウェア設計の際に繰り返し現れる重要な部品をデザインパターンとして記録し、カタログ化。改訂版ではこれにCD−ROMを添付、現場でブラウザを通して即利用できるパターンカタログデジタル版を収録。特別付録として、原書にはないJavaのサンプルコードを追加。
【技術書翻訳名著シリーズ】
ソフトウェア開発のバイブル群! 弊社がこれまでに刊行した翻訳技術書の中から、長年読者から支持され続けている名著を厳選したのが、本シリーズです。移り変わりの激しいコンピュータ業界で、普遍性を保ち続ける定番をお届けします。ソフトウェア開発の上流から下流まで、入門書からエキスパート向けまで、技術者に求められる選りすぐりの情報がここにあります。
 
内容サンプル
 
User Voice
確かにこの本は予備知識なしに読むのは難しいですね。
まず、"デザインパターン"とは何かということを、そしてその記述の仕方(パターン名、問題、解決、結果)を第1章で説明されていますが、事前に知っておいたほうが読みやすいと思います。
第2章ではLexiというTexに似たドキュメントエディタのなかにどんなデザインパターンが使われているか書かれています。個人的にもデザインパターンを説明するにはテキストエディタや描画エディタが最適だと思い、2章も押さえておくと以降も理解しやすいです。
第3章以降でやっとそれぞれ(生成、構造、振る舞い)のデザインパターンが紹介されています。"生成"、"構造"、"振る舞い"というのが何を意味しているのか初めはよくわかりませんでしたが、各パターンを見ていくうちにこの区別の仕方が理解できます。
ただし各章を順番どおりに読んでいくのではなく、後へ先へページを何度もめくっていく中で理解していくことができるでしょう。
「デザインパターン」を学ぶ上で、結城浩氏の「Java言語で学ぶデザインパターン入門」やW.J. ブラウンの「アンチパターン―ソフトウェア危篤患者の救出」もお勧めです。
この本は、SEがプログラムの詳細まで指示をして、末端に極力考えさせないようにする日本のIT土方には全く不要だと思う。
ではSEならば初期のスクラッチモデルを作るとき、この本が役に立つかというと、それもそうではない気がする。

いまの日本ではデザインパターン自体を直接プログラム製造に生かす機会は少ないのではないだろうか。
スクリプトもマシンの力業でパターンを使わずに作れる。

この本の用途としては、オブジェクトに対する感覚といった、プログラムのセンスを磨くための本であると私は考えている。例えばFlyweightにあるIntrinsicとExtrinsicのように、プログラムの全体要素を多数と少数の部分に切り分けるといった、全体の中の大小のトレードオフをする感覚といったものを(今となっては)磨くことができるのではないだろうか。あとライブラリを作る時にも参考になると思う。
ウェブサイトでまとめてある物では何故その設計思考に至ったのかが書かれていなかったり、
どの様なときに使うべきかなどが曖昧だったりする場合が多く、表面だけ真似て批判する人も多いので、この本を買った。
予想通り、何故この様な設計に至ったのかが書かれていてよかった。
現代では言語仕様に組み込まれている場合もあり、意味のないデザインパターンも存在するが、考え方を学ぶには良さそうです。
設計の話を巻き起こした原点とも言えるので一読の価値あり。
 
   
本書の内容
 
内容サンプル
 
User Voice
 
   
本書の内容
 
内容サンプル
 
User Voice
 GoFデザインパターン解説書の体裁をとった「オブジェクト指向設計」入門。コンパクトにまとめられた良書だと思う。

 対象読者は、Javaの文法を一通り理解しており、プログラミングにも慣れてきた頃のJavaプログラマ。GoF本のデザインパターン23種類を順に取り上げ、各パターンの目的・効果・背景・サンプルプログラム・注意点を簡潔に述べていく。ただし、デザインパターンをすぐに使いこなせるように読者を導くことが本書の狙いではなく、デザインパターンを教材として「良いクラス設計とは何か」の指針を与えることに主眼を置いている。

 そのため、各パターンの解説では、そのエッセンスだけを簡潔に伝えることに注力されている。サンプルプログラムは全てJavaで記述されているが、どれも「Hello, World!」レベルなので、Javaプログラマでなくても内容を理解できると思う(巻末に、サンプルプログラムを理解するために最低限必要なJava言語仕様が25ページ程度にまとめられている)。

 開発の現場から生まれた本、という印象を受けた。各パターンの解説の最後に置かれた「注意点」が秀逸で、「そのパターンを用いる場合、何に注意しなければならないか」「そのパターンを用いない方がいいのはどのような場合か」「そもそも、デザインパターンを適用することで解決できるような問題はそれほど多くない」といった類の指摘に説得力がある。また、デザインパターン万能論とも言える数々の「誤解」について述べた最終章「デザインパターンの難しさを理解する」も面白い。
デザインパターンの入門書はたくさんありますが、どれもそのパターンが生まれた経緯など、理屈ばっかりなところが多くわかりづらいと感じていました。
一方、この本では、どんな時に使うパターンかが一言、そのパターンを使うと何がよいか、簡単なサンプルコードという構成で完結にまとめられていて、非常にわかりやすいです。

他の本を数冊読んだので、すでにパターン使えるようになっていましたが、最初にこれを読んでおけば遠回りしなかったのかな・・・と思いました。
デザインパターンを初めて勉強する人向けには★5つです!
「徹底攻略」とタイトルにあるが、どちらかというとデザインパターンとはどういうものかを解説した入門書に近いものがある。したがって、初めてデザインパターンを学ぶ方には適していると思われる。サンプルソースはごく平易なものを採用しているが、やはり基本的なJava知識は必須。また、デザインパターンに対する過剰意識(誤解)なども後半にまとめられているのも嬉しい。実践に繋げていくためには、本書を読破するだけでは難しいが、発想の手助けになってくれる一冊である。
 
   
本書の内容
新品未使用品です。店頭陳列しておりましたので、表紙にスレ傷などございますが、商品には問題ございません。一部ヤケ、スレなどがある場合がございますので、完全に新品が良い方はご遠慮下さいませ。ご注文後、Amazon.co.jp 配送センターより迅速に発送されます  
内容サンプル
 
User Voice
VB.NETで書かれた案件では、中途半端なオブジェクト指向に遭遇することがあります。
可読性の悪いコードでも、辛抱して改修や機能追加をしてきましたが、
この本を読んで、「まずはリファクタリングしてから取り掛かる」価値を知りました。
実際にやってみると、確かにそのとおり。
今では可読性の悪いコードに遭遇しても、気が重くなることはなくなりました。

また実装中には、常にリファクタリングの習慣が働くのでコードの無駄が減りました。
それに以前は、複雑な動作を設計段階で定義しようとして工数を割いていましたが、
今では設計で定義し辛い部分は適当に切り上げ、
実装で解決して設計ドキュメントに戻すやり方でプロジェクトの進捗が早くなりました。
良い設計や実装は、クラスの構造やメソッドの動作を理解していなくても、
「コードの形」を真似るだけで機能追加や変更ができるのは、皆さん周知のところと思いますが、
この本に従って作業すると、そのようなコード部分が増えて生産性が向上するのが実感できます。

値段で購入をためらっていましたが読んでみて、それだけの価値がある本だと感じています。
この本は著者のXPでのリファクタリングの経験をカタログ形式でまとめたもので、ソフトウェアを少しずつ日々改善し、ソフトウェアが肥大化が修正を困難にしないようにする小さな手法の集まりを紹介しています。ソフトウェアの構造に日々手を加える(部分的な再設計の)ための、問題点の発見の仕方、直し方がカタログ化されています。
書いてあることの個々の内容は比較的単純なものばかりですが、まずい設計が示唆する問題点、改善による効果、リファクタリングが可能な条件、リファクタリング時に見落としがちな点の指摘などが十分に書かれていて、リスクと効果をよく考えながらリファクタリングが出来るようによく配慮された内容になっています。プログラミング初級者にとって、とても勉強になる内容だと思いますが、経験を積んだプログラマにも日々のプログラミングのチェックリストとして非常に役に立つのではないかと思います。
JAVAでかかれているため、C++を使っている人には多少違和感がありそうですが、.NETプログラミングにはうってつけの内容だと思います。
これはイイです。
なんというか、プログラミングのベストプラクティスが載っているわけではありません。
しかし、
「最初からすげぇプログラムなんてできるわけないじゃん。とりあえず作って、後から体質改善すれば~?」
みたいなノリでプログラムってやっていいんだ。って感じです。
体質改善の為の基本的な処方箋が、ここにはあります。
ケント・ベック著の「テスト駆動開発入門」も、あわせて読めば、効果的かも。
 
   

リファクタリング 高評価のおすすめ本 ランキング

人気 1位
本書の内容
※このKindle本はプリント・レプリカ形式で、Kindle Paperwhiteなどの電子書籍リーダーおよびKindle Cloud Readerではご利用いただけません。Fireなどの大きいディスプレイを備えたタブレット端末や、Kindle無料アプリ (Kindle for iOS、Kindle for Android、Kindle for PC、Kindle for Mac) でのみご利用可能です。また、文字列のハイライト、検索、辞書の参照、引用については、一部機能しない場合があります。文字だけを拡大することはできません。
※プリント・レプリカ形式は見開き表示ができません。
※この電子書籍は紙版書籍のページデザインで制作した固定レイアウトです。

ソフトウェア開発の名著、第2版登場!
 リファクタリングは、ソフトウェアの外部的な振る舞いを保ったままで、内部の構造を改善する作業を指します。本書はリファクタリングのガイドブックであり、リファクタリングとは何か、なぜリファクタリングをすべきか、どこを改善すべきか、実際の事例で構成され、ソフトウェア開発者にとって非常に役立つものとなっています。
 本第2版では、約20年前のオリジナル原稿の構成は変わらないものの、大幅に書き換えられているほか、サンプルコードがJavaからJava Scriptになるなど、現代的にアレンジされています。


第2版翻訳にあたって
初版の「本書に寄せて」
はじめに
Chap.1 リファクタリング-最初の例
Chap.2 リファクタリングの原則
Chap.3 コードの不吉な臭い
Chap.4 テストの構築
Chap.5 カタログの紹介
Chap.6 リファクタリングはじめの一歩
Chap.7 カプセル化
Chap.8 特性の移動
Chap.9 データの再編成
Chap.10 条件記述の単純化
Chap.11 APIのリファクタリング
Chap.12 継承の取り扱い
文献リスト 
訳者あとがき
索引  
内容サンプル
 
User Voice
1版、Java版は蔵書としてあるのですが。所属している会社ではフロントエンド寄りの業務が多く、プログラムというとwebでJavaScriptのみ(たまにPHP)で完結することが多い環境にいる人です。

JSで1ファンクションが長くても100行、200行程度、ランディングページとかで継続的メンテナンスは求められない。
なのでどうしても「ベタ書き、とりあえず動けばいい、なるはやで」というコーディングが重宝される。
そんな環境です。(でした?かな。それだけではやっていけなくなっているので)

はい。”ブラックボックス”だらけです。大半のコードを書いた人たちはもう社内にいません、よくある話です。
・長大なファンクションを、入れ子ファンクションできりわける
・一時変数の特定、いらないやつは撲滅
・異常系の検出がおろそかだったので、オブジェクト自身に異常検出機能をつけてみた
などを、「夏休みの宿題・工作」みたいな感じでメンバといっしょに取り組んでいます。

本書について。
文章の言い回しは固くはないのですが、あつかっている処理ちょっと難しい話なので、誰でもがさらっとよめる本ではないようです。しかしサンプルがJavaScriptなので、とりあえず「記載されているコードの意味」はわかってもらえているようです。

最後に。
本書に盲従する必要はないとは思います。いろんなスタイルの一例です。
ただ、本書を通じることで、ある程度の共通認識を持ったうえで、コーディング職人の間での意見交換や価値観論争などは良いことかな、と思いました。

最後の最後に。
急激な変化を嫌う人もいるので、「押し売り」にならないように気を付けて。
自分はすでに数年開発経験があったので、ほとんど既知だったり常識だったりという内容でしたが、
コードの問題点とその解決法が具体的かつ豊富に載っているので、プログラミング経験数ヶ月から半年ぐらいの初心者はこの本を写経すると結構実力が付くんじゃないかな、と思いました。
もし自分が記憶を消してもう一度プログラミングを学ぶとしたら、間違いなく早い段階での必読書として選びます。
ほとんどの手法がIDEの機能を使えば簡単にできる…と言ってる人がいますが、それは半分間違っていると言わざるを得ません
テストコードがあることが前提として紹介されていますが、「レガシーコード改善ガイド」にも書いてあるように、テストコードが無い場合でも応用的に使える手法も紹介されています
読んで損は無い本です
 
   
人気 2位
本書の内容
C言語開発をモダンにしよう!

本書は、統合開発環境、デザインパターン、エクストリーム・プログラミング、テスト駆動開発、リファクタリング、継続的インテグレーションなどのモダンな開発スタイルを組込み開発に適用する方法を解説します。  
内容サンプル
 
User Voice
組込み系開発では、このご時世になってもC言語が主流です。
そのため、C言語に関する書籍は数多く出版されていますが、着目する箇所が他の書籍と異なります。
特に、以下の点です。
・環境構築法の記載
・オブジェクト指向的な実装方法
・ツールを活用した開発方法

・環境構築法の記載
環境構築の方法がしっかり記述されていることに驚きました。
書籍によって、各自で構築というケースも少なくないため、手間取ることも多かったと思います
本書では、様々なツールの導入方法がキャプチャ画像付きでしっかり記述されていました。
非常に助かりました。

・オブジェクト指向的な実装方法
エンプラ系では、オブジェクト指向が主流のご時世ですが、C言語でうまく実装できないか悩んでいました。
本書では、多態性や継承、デザインパターンなどをC言語で記述する方法がしっかり記述されています。
特に、C言語を極めたいエンジニアには良いと感じました。

・ツールを活用した開発方法
一番勉強になった点は、ツールの活用方法がしっかりかかれている点でした。
特に、googletest、カバレッジ測定、Valgrindの使い方は、組み込み系エンジニアなら役に立つはずです。
著者の目の付け所がすごいです。

一通り読んでみて、C言語を使いつづけるエンジニアには、読むべき書籍です。
著者の10年分の知識が、一瞬で身に付きます。

なお、対象はC言語中級レベルだとスラスラ読めます。
2回通して読みました。自分には大当たりの技術書です。

C言語、という書名ですが、C言語に固有の本ではありません。
ソフト設計に共通して当てはめられる本質的な考え方やノウハウが、
Cを例に使って説明されてる、というのが正しいです。(実際この著者はJavaの本も書いてるようです)

恐らく、10年以上 真剣に設計に向き合ったソフト屋しか知り得ないようなノウハウが
惜しげもなく詰め込まれています。
いくつかは、世のベテランも独自に会得して、いざという時の秘策や切り札にしているような知識まであるのでは…。

理論倒れでなく、開発の現場で地に足を着けて苦労の末に気づく本質、
あるいは余程のことがなければ他人には教えないような秘訣も、書いてしまっているようです。

年寄りと見なされつつ、経験とノウハウで必死に若い理解力や柔軟性に負けじと踏ん張る身としては
こんなことまで教えてしまったら困る、という思いさえ心をよぎらずには居れません。
数千円で、誰でも買えてしまって良いものか。

そう言う自分自身も、今まで洞察しえなかった知識を多く得て、何というか、
著者には感謝のような思いも感じます

良書、と言ってよいと思います。
昔日の日々、C言語とは文法を覚えて書くだけ(まあコンパイルされたアセンブラレベルとかわかるとすごーい、なんて言われてたり)、それだけでプロとして認識された。
しかし学生ではなく職業としてコードを書く人の求められるスキルレベルは現在非常に高い。デザインパターンを知らないコード書きはありえない。継続的インテグレーションをちゃんと理解してないコード書きもありえない。もちろん現代のリファクタリングテクニックはXPにおいて必須である。
でもそんなの知らずにコード書いてる人がたくさんいるのは、事実であり日々むかつく。そんな昭和なコード書きに投げつけてやりたい本である。
 
   
人気 3位
本書の内容
■「ITエンジニア本大賞 2020」技術書部門大賞受賞!

レガシーコードとは、バグを多く含み、壊れやすく拡張が難しいコードを指します。
このようなコードの保守と管理には多大な労力がつぎ込まれることになります。
しかも一度作ってしまったレガシーコードの質を上げるには、初めから質の高いコードを作るよりも膨大なコストがかかります。

本書では、ソフトウェア開発において、初めからレガシーコードを作りださないためのプラクティスを9つ挙げて解説します。
プロダクトオーナーは目的を語り、やり方は開発者に任せること、小さなバッチで開発を進めること、継続的に統合すること、チームメンバーで協力することなど、日々の開発に取り入れる考え方と具体的な実践について各章で分かりやすく解説します。
信頼性や拡張性が高いソフトウェアをリリースしたい開発者、運用管理者、マネージャに必携の一冊です。  
内容サンプル
 
User Voice
ベストセラーになってますし、すでに読まれた方も多いと思います。間違いなく定番本の一つです。
著者がXP(エクストリームプログラミング)のコーチらしく、述べられているプラクティスの多くはXP由来となっています。
ただ、アジャイル開発手法に変わりはありませんので、スクラムでも適用できる内容です。ウォータフォール?そんな開発手法は存在しませんよ?
副題の9つのプラクティスは以下の通りです。

- やり方より先に目的、理由、誰のためかを伝える
- 小さなバッチで作る
- 継続的に統合する
- 協力しあう
- 「CLEAN」コードを作る
- まずテストを書く
- テストでふるまいを明示する
- 設計は最後に行う
- レガシーコードをリファクタリングする

自分のプロジェクトでも、これらのプラクティスは(ややアレンジはあるものの)実施しており、適切なシステム開発を行うためのミニマムセットになっています。
逆に、できてないものがある場合は、そのシステム開発は何らかの問題を抱えているということになります。
プロジェクト管理者はもちろん、システム開発に関わる全ての人が知っておくべき内容が詰まっています。
システム開発プロジェクトの新規参画者に対しては、オンボーディングで最初に読んでもらうのがいいと思います。
C言語やBASIC言語は学校の座学で知っている程度、営業職などを経て、ここ最近、実務でjQueryありきのJavaScriptコードを数年ほど扱っている末端コーディング人です。

読んだ後の感想。
「自社の財産」とされているコードの大半(率直にいうとほとんど全部)が、この本で言われている「レガシーコード」だと気づくことができました。
オーダーされて旧コードに「機能拡張」などもしているのですが、それがハック的に割り込みしているだけだと自覚できました。

雑談などでもしゃべりやすい同僚から先に、本書を布教しています。わりと共感してもらえて、半年後が楽しみです。

目先の目標としては
・マネージメントの人にも読んでもらう
・本書から共通認識として取り入れられそうなことを、チームとして共有してとりくむ
・会社の経費でオライリー本を買ってもらう

というところです。
今の私にとっては、得るものが多すぎる、とても良い本です。
ちと3千円という価格に躊躇したが買ってよかった。アジャイルでもwater fallでも情報はwebや本に溢れている。でもそれらは本質を得ているかと言うと、初心者のための入門書である。しかしプロジェクトに従事し、そのプロジェクトが継続的なプロジェクトになると話は違ってくる。コメントが書いてない誰が書いたかわからないコード、当然単体テストなんてものはないし、あったとしても単体テストがなにをやってるかわからない。コード品質にしても、なんでクラス関数が50個もあるの?クラス使ってる意味ないじゃん!みたいな組織は多いのではないか。そういったプロジェクトを管理する人には最適であり、日本語で読める唯一の本のような気がする。「レガシーコード改善ガイド」とかマーティンファウアーの本とかはいい本だが、コード書く人よりのガイドであるので、この本とはちょっと方向性が違う。数年間同じ製品を開発し、努力しても製品品質があがらないマネージャ向けだが、若い開発者も読んで損はない本だと思う。
 
   

Copyrights hogehoge