勘と経験と読経

略すとKKD。ソフトウェア開発やITプロジェクトマネジメントに関するあれこれ。

技術書の無料試し読み(Kindle/GoogleBooks/他)

技術書を図書館で借りようというブログ記事を見た反応。個人的にも公立図書館はフル活用していて、至急性の高くない「読んでおきたい本」は借りるようにしている。が、最近技術書は他の手段でも試し読みできることが多いのでそっちで読むことが多い。というわけで無料試し読みの方法について整理してみる。なお出版業界の方には申し訳ないけど、物理書店は目的が達成できなかったり、余計な買い物をしてしまうリスクが大きいので最近行かないようにしている・・・・・・。

Bookstore cat

無料試し読みの方法について

出版社の方針などで書籍によって最適な方法は異なるのだけれども、自分が最近使っている手段はだいたい以下の通り。

  • Amazon Kindleでサンプルを読む
    • 専用アプリかKindle端末が必要。Web経由でもごにょごにょすれば閲覧できるという話もあるけれど割愛。
    • この方法だと、目次、まえがき、第1章くらいはだいたい読める
  • Kindle非対応の書籍の場合、出版社が独自で試し読みに対応していればそこで読む
  • Google Booksで読む
    • 規則性はよくわからないのだけど、おそらくGoogle Playの対象書籍が対象となっている
    • 翔泳社さんの本は最近どれも対応されていて、有難い

出版社別のワビサビを統合して効率よく試し読みができるサービスがあるといいのだけれども、現時点では未発見(ひょっとしたらあるかも)。

せっかくなので、いくつかの技術書ランキングに掲載されている書籍について実際に無料試し読みが出来るか調べてみた。

「新春座談会 このコンピュータ書がすごい! 2016年版 -2015年に出たコンピュータ書ならこれを読め!-」開催報告:レポート|gihyo.jp … 技術評論社

  1. たった1日で即戦力になるExcelの教科書
  2. 人工知能は人間を超えるか ディープラーニングの先にあるもの (角川EPUB選書)
  3. スッキリわかるJava入門 第2版 (スッキリシリーズ)
  4. リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)
    • 残念ながら試し読みできず
  5. 暗号技術入門 第3版 秘密の国のアリス
  6. 深層学習 (機械学習プロフェッショナルシリーズ)
  7. HTML5&CSS3デザインブック (ステップバイステップ形式でマスターできる)
    • 残念ながら試し読みできず
  8. 伝わるデザインの基本 よい資料を作るためのレイアウトのルール
  9. ハッカーの学校
  10. インフラ/ネットワークエンジニアのためのネットワーク技術&設計入門

ITエンジニアに読んでほしい!技術書・ビジネス書 大賞 2019

ビジネス書系は省略。

大賞
技術書部門 (上記と重複は省略)

調べてみた感想

  • オライリーさんはDRMフリーの電子書籍を発行していただけているのは大変あり難いのだけれども、試し読みビリティは低いのが残念
  • 技術評論社さんは、書籍によって対応が異なる。WEB+DB PRESS plusシリーズはNGなのが残念
  • というわけで電子試し読みできない本は、図書館か書店で見るしかなさそう

「ビヨンド ソフトウェア アーキテクチャ」あるいはパッケージソフトウェアの作り方

「ビヨンド ソフトウェア アーキテクチャ」に関する読書メモ。ソフトウェアアーキテクチャ全般に興味があるので手に取ったのだけれども、同書はざっくり言えばパッケージソフトウェアの作り方に関する本である。なんとなく、このタイトルでは必要な人の手に渡らないような気がするのだけれども。なお同書のKindle版は2/25まで50%オフのセール中なので興味のある方はお早めに判断を。

「ビヨンド ソフトウェア アーキテクチャ

翔泳社さんの書籍紹介は次のように書かれている。

アーキテクチャ」について技術的な観点から書かれている本は数多くありますが、ビジネスの視点からシステムを商品として見た時に考えるべきことを教えてくれる本が、実はありませんでした。本書は、アーキテクチャにおけるビジネス(マーキテクチャ)と技術(ターキテクチャ)をつなぐ架け橋として、情報システム部の方全員に読んでほしい本(情シス必読書)です。エンジニアにとっては、マーケティングの基礎を学ぶ上でも役に立ち、かつ、技術面でのアーキテクチャ論としても、経験豊富な著者の実体験に根ざす優れた考察に富んだ一冊となっています。

上記はちょっとミスリードがあると思っている。本書は「ソフトウェア製品開発に関わるアーキテクト」が想定読者になるのではないだろうか。そういう意味では、ユーザ企業の情報システム部門に所属する人(買い手)というよりは、ソフトウェア製品開発(作る人)に関わる人に読んでおいてほしい内容だと思う(あくまで個人的な感想)。

さて、本書の基本的な骨組みは上記紹介にも書かれている通りだが、

  • ソフトウェア製品は、「テクニカルアーキテクチャ(ターキテクチャ)」と関連する「マーケティングアーキテクチャ(マーケテクチャ)」を持つ。
  • マーケテクチャ検討上の重要な観点について論じる(第4章以降)

である。

本書では、ソフトウェアアーキテクチャという枠組みを越えてソリューションをうまく構築するために、幅広いビジネス課題とアーキテクチャ上の選択との関係について議論する
ビヨンド ソフトウェア アーキテクチャ Object Oriented Selection Classics まえがき、より

ソフトウェアアーキテクチャについて言及することもあるし、技術的な課題を議論する場合もある。だが、私が集中して議論したいのは、アーキテクチャを図示あるいは文章化する最善の方法や、堅牢で、分散化されたWebコンポーネントシステムに関連する深い設計原理などではない。
ビヨンド ソフトウェア アーキテクチャ Object Oriented Selection Classics まえがき、より

ビヨンド ソフトウェア アーキテクチャ Object Oriented Selection Classics 目次

  • 第1章:ソフトウェアアーキテクチャ
  • 第2章:プロダクト開発入門
  • 第3章:マーケテクチャとターキテクチャ
  • 第4章:ビジネスとライセンスモデルの共益関係
  • 第5章:インライセンステクノロジー
  • 第6章:可搬性
  • 第7章:デプロイメントアーキテクチャ
  • 第8章:統合と拡張
  • 第9章:ブランドとブランド要素
  • 第10章:ユーザビリティ
  • 第11章:インストール
  • 第12章:アップグレード
  • 第13章:コンフィギュレーション
  • 第14章:ログ
  • 第15章:リリース管理
  • 第16章:セキュリティ
  • 補遺A:リリースチェックリスト
  • 補遺B:戦略的プロダクトマネジメントのためのパターン言語

ソフトウェア開発の上で必要な「マーケテクチャ検討上の重要な観点」というのが曲者であり、また本書の整理が非常に有効なポイントである。
ソフトウェアを構築するために必要な意思決定の多くはアーキテクトが利害関係者との調整において合意形成するものだが、ソフトウェア製品については「顧客」という最も重要な利害関係者が不在なのである。ではどうするか?というのが本書の主眼であると思う。

また、世の中一般で最も多い「自社利用のシステム構築」と、「販売するためのシステム開発」では根本的に異なる点も多い。

  • どのようなライセンスモデルで販売するかと、そのライセンスモデルを実現するための機能要件は何か
  • 利用しているサードバーティ製品やOSSのライセンス管理はどうするのか
  • どのような環境をサポートするのか
  • オンプレミスかサービス提供か
  • 他システム連携の考慮はどうするか
  • インストール、アップグレード、コンフィグ設定はどうするか

こういった観点が、本書のような形でとりまとまっているのは本当に有難い。

個人的には、何年かごとに製品開発にも関わってきているので、本書は非常に参考となった。
プロダクトとしてソフトウェアを出荷するような形で仕事に関わる方におすすめ。

PoEAAも対象。Kindleで翔泳社さんの技術書が44%以上オフのセール中!

現在開催されている技術者イベント、デブサミ開催に連携して、翔泳社さんの技術書がKindleで大幅なセール中の模様。ほとんどセールにならない近著「ビヨンド ソフトウェア アーキテクチャ Object Oriented Selection Classics」も50%オフになっているので、興味のある人はいま買うのがおすすめ。なおイベント連携なのでセール期間は短いものと思われる。

【2/19 9:15追記】
翔泳社さんから連絡いただき、セールは2/25までの期間とのこと。
またよくチェックしてみたらPoEAAが対象になってる!(買った)。末尾に対象書籍で興味深いものをいくつか追記した。

【2/19 10:45】
要望したら対象外だった「レガシーコード改善ガイド」がセール対象になった!即刻購入!

オススメ+気になっているものをピックアップ

つい先日読了して、近々ブログ記事にレビューを書く予定。ソフトウェア製品を作る上でのアーキテクチャ考慮点について書かれた本といった感じ。製品開発やサービス開発に携わるアーキテクトやエンジニア向け。

達人に学ぶ SQL徹底指南書

達人に学ぶ SQL徹底指南書

実は未読。評判は良い印象。

達人に学ぶDB設計 徹底指南書

達人に学ぶDB設計 徹底指南書

既読。オススメ。

エリック・エヴァンスのドメイン駆動設計

エリック・エヴァンスのドメイン駆動設計

良書。

実践ドメイン駆動設計

実践ドメイン駆動設計

現在読んでいるところ。良い本という評判。

組織パターン

組織パターン

既読。なかなかに難解な本だけど、エンジニア組織やプロジェクトをマネージしている人にはオススメかも。

アジャイルソフトウェア要求

アジャイルソフトウェア要求

どちらも良書

SCRUM BOOT CAMP THE BOOK

SCRUM BOOT CAMP THE BOOK

実は未読。評判は良い印象。

マネジメント向け、またはマネジメントに説明するためのスクラム解説本。

エッセンシャル スクラム

エッセンシャル スクラム

実は未読。

おそらく他にもいろいろセールになっていると思われる。

2/19 9:15追記

エンタープライズアプリケーションアーキテクチャパターン

エンタープライズアプリケーションアーキテクチャパターン

名著。以前に読んだかもしれないけれど手元にないので改めて購入。

ユースケース駆動開発実践ガイド

ユースケース駆動開発実践ガイド

これもけっこう古いものだけれども、ユースケース駆動の開発プロセスICONIXについての解説書。
最近やユーザーストーリー駆動の開発が主流になるつつあるけれども、学ぶところは多いはず。

未読。価格を考えると購入のチャンス・・・!

ヘネシー&パターソン コンピュータアーキテクチャ 定量的アプローチ 第5版

ヘネシー&パターソン コンピュータアーキテクチャ 定量的アプローチ 第5版

未読。ちょっと手を出すのが怖いんだけど……

2/19 10:45追記

レガシーコード改善ガイド

レガシーコード改善ガイド

要望したらセール対象に追加されたッ。即刻購入……(いつ読むんだ)

デス・マーチ著者Ed Yourdonさんの『ソフトウェア工学で大切な10の考え方』を再読する(後編)

前々回前回記事の続き。デス・マーチ著者のEd Yourdonさんが先日(2016/1/22)亡くなったとのこと。合掌。これを機会に同氏が2009年に公開し平鍋さんが和訳を公開している『ソフトウェア工学で大切な10の考え方』を再読してみた。この後編では「9.一貫性は才能+デスマーチに勝る」から後に関して記載。勉強不足により誤読、勘違いをしているかもしれない。指摘やフィードバックは大歓迎。

9.一貫性は才能+デスマーチに勝る

グローバルな不況は、少なくともここ数年、デスマーチプロジェクトを増加させるだろう……
SEI-CMM, ISO-9000, six-Sigma, ITIL, etc, etc.のようなアプローチに注目せよ。

「個人の才能よりもプロセスやチームに着目せよ」ということだと理解。また、デスマーチを防止するには規律を重視した(特にリスク)マネジメントは重要だろう(ただし、失敗しないことと、成功することは同じことではない)

少し古いデータだけれども、マコネルの「ソフトウェア見積り」では10万LOC規模のソフトウェア開発における見積りに影響する人的要因(COCOMO2)を以下と紹介している(第5章 見積りに影響するもの)

  • 要求アナリストのスキル (影響度2.00)
  • プログラマの(一般的)スキル (影響度1.76)
  • 要員の継続性(離職率) (影響度1.59)
  • アプリケーション(業務領域)の経験 (影響度1.51)
  • 使用言語とツールの経験 (影響度1.43)
  • プラットフォームの経験 (影響度1.40)
  • チームの結束 (影響度1.29)

ただし500万LOC規模になると、プロセスの成熟度 (影響度1.94)やチームの結束(影響度1.59)などの影響が増大する。

プロジェクトの計画とコントロールの観点からこれが意味することは、小・中規模のプロジェクトでは、個人の力量で成功の大部分は決まるということである。大きなプロジェクトでも個人の力量はやはり必要だ。しかし、大きなプロジェクトでは、どれだけプロジェクトがマネジメントされるか(特にリスクマネジメントに関して)、どれだけ組織が成熟しているか、そしてどれだけ個人がチームに溶け込むかといった要素のほうが重要になる。
ソフトウェア見積り 人月の暗黙知を解き明かす

というわけで「個人の才能よりもプロセスやチームに着目せよ」というのは重要だと思うのだ。

10.車輪を再発明しない

ベストプラクティス (ボトムアップ!)
ワーストプラクティス (233 もブログがある!)
SWBOK

読んで字の通り。なお紹介されている「アンチパターン」はとてもオススメの本なのだけれども絶版なのが悲しい。

アンチパターンは、ソフトウェアの開発や導入が成功するためには何を避けるべきか、という教えの集大成です。そういう、やってはいけないことを現にやっている、あるいは、このままだとやりそうだ、ということに早期に気づくこと、…アンチパターンは、その自覚と早期発見がきわめて重要です。本書はソフトウェア開発に関連したさまざまなアンチパターンを詳しく解説し、ソフトウェアの設計(デザイン)、アーキテクチャ、およびプロジェクト管理の各面に見られる多くのアンチパターンを、ユーモアに富んだ軽い文章で指摘してくれます。しかし本書が読み物としてどれだけおもしろくても、それらのアンチパターンの発生を、私たちは必死で防がなければならないのです。
アンチパターン―ソフトウェア危篤患者の救出

ソフトウェアの失敗が普遍的なのは、なぜだろうか。われわれはひとつの結論に達した:実践されているデザインパターンよりは、実践されているアンチパターンのほうが圧倒的に多いのだ。
アンチパターン―ソフトウェア危篤患者の救出

なお同書に掲載されている多くのアンチパターンWikipediaでも紹介されている。

そしてSWEBOKも「ソフトウェア開発に関するベストプラクティスをまとめた知識体系」であり、注意を払うべきだろう。最新版の概略はIPA/SECの発行するSECジャーナルの記事が良いまとめなので紹介しておく。

11.透明性を重視。何も隠さないこと

2009年2月18日のTwitterでの会話をありがとう、Kent Beck, Ron Jeffries, その他のみなさん。
Kent Beck: “ソフトウェア工学は、ソーセージ工場に顧客が入るのを拒むのではなく、招きいれたときに、改善される。
Ron Jeffries: “隠すこと、について完全に同意。何も隠さないこと。透明性がすべてを決定する。”
Ward Cunningham: “きれいなコードにも技術的負債 (Technical Debt)があり、それは良いことなのだ。 なぜ か、このビデオをみよ。

書かれている以上のことはわからないのだけれども、当時の会話(?)を発掘したので貼り付けておく。

Ward Cunninghamさんに関するスライドの記述は上記とは関係無くて、技術的負債に関する1992年の発表のことを指している。Wikipediaの説明がわかりやすい。またYoutubeへのリンクも下記ページから。

12.結論

技術は中心課題ではない。
フレデリックブルックス(Fred Brooks): “銀の弾丸などない”
マーガレット・ミードの “地球時代の文化論”
新しいことを無視してはいけない。-例えば, Chandler

ソフトウェア工学で大切な10の考え方』の結びなのに「技術は中心課題ではない」ということなのだけれども・・・「銀の弾丸などない」ことについてはWikipediaが詳しい。

人月の神話【新装版】

人月の神話【新装版】

ここで、マーガレット・ミードさんの「地球時代の文化論」が登場するのだけれども教養不足・情報不足のために文脈が読み取れない。Webで見れる各種の書評などから察するに、同書では今後社会や文化は「大人世代が若者世代をモデルとする」未来志向型になる、ということが書かれているようなのだけれども、ソフトウェア工学についても新しい世代に目を向けたらよいということを言いたかったのだろうか……

そしてChandlerであるが、これはデスマーチ化そして停滞したことで有名なOSSプロジェクトのことである。

その経緯は書籍化もされている。以前に読んだのだけれどもすっかり詳細は忘れてしまった。断片的なメモだけ残っているので貼っておく。

斧を研いだりヤクの毛を刈ったりする作業がどの時点でプロジェクトの本来の目的から逸れるかを見きわめ、プログラマーを楽しい道具の手入れの脇道から本来の仕事に呼び戻すことは、ソフトウェアマネジャーにとって厳しい試練である。
プログラマーのジレンマ 夢と現実の狭間

シェーファーは椅子の背によりかかり、ふくよかな腹をさすって言った。「昔からこう言うんだ。早く作るか、安く作るか、うまく作るか。どれか二つだけ選ぶことができる、と」
プログラマーのジレンマ 夢と現実の狭間

ソフトウェア工学で大切な10の考え方』を読み終えて

自分なりにいろいろと関連書籍などを参照しながら『ソフトウェア工学で大切な10の考え方』を読んでみたのだけれども、原文がslideshareから削除されてしまっていたり、Yourdonさんのブログ記事なども軒並みアクセスできない状況で行間を読むのが大変であった(または、読めていない)。

提示されている12のキーワードは何れも文字通りの「大切な考えた方」であって、これから何度も振り返って再考していくことになるのだろうと思う。

私は、過去から学ぶこと、そして、自分たちのやり方を作っていくこと。両方大事なんだ、と信じています。
Memories of Ed Yourdon | an Agile Way

Ed Yourdonさんのご冥福をお祈り申し上げます。

デス・マーチ著者Ed Yourdonさんの『ソフトウェア工学で大切な10の考え方』を再読する(中編)

前回記事の続き。デス・マーチ著者のEd Yourdonさんが先日(2016/1/22)亡くなったとのこと。合掌。これを機会に同氏が2009年に公開し平鍋さんが和訳を公開している『ソフトウェア工学で大切な10の考え方』を再読してみた。今回は「5.欠陥が下流に「漏れる」と修正コストが増加する」からを取り扱う。勉強不足により誤読、勘違いをしているかもしれない。指摘やフィードバックは大歓迎。

5.欠陥が下流に「漏れる」と修正コストが増加する

コストはライフサイクルのフェーズを1つ越えるごと に10倍になる。
1980年代前半の、Barry Boehmによる文書
Agileの人たちは不賛成であり、継続的なリファクタリングを強調している。
しかし、 Boehmは同意していない
それはプロジェク トサイズに依存している 『アジャイルと規律』(2004)

ソフトウェアの修正コスト曲線に関する話である。ソフトウェア開発のライフサイクル(設計→実装→テスト→運用)の後ろに行くほど修正にかかるコストが指数関数的に増加していくというもの。

初期のAgile界隈からの反論はおそらくXPエクストリームプログラミング懐疑編―XPはソフトウェア開発の救世主たりえるのか (The XP Series)に書かれているものを指していると思われる。残念ながら同書は未読なのだけれども、だいたい書かれていることは

で読める。

そして、変更コスト曲線の話については(Yourdonさんのスライドにも書かれている通り)『アジャイルと規律』で改めてBoehmがアップデートを書いている。同書でBoehmが言っていることを要約すると次の通り。

  • 大規模プロジェクトにおいては再検証してみても、やはり「納品後のソフトウェアの変更は要求フェーズでの変更より100倍も高くつく」傾向にある
  • 変更コストの80%はシステム全体に影響を及ぼす20%の変更からもたされれる。よって早期のリスク軽減や、変更の影響を局所化するアーキテクチャの設計をすることで、大規模システムでも「高価な20%」の変更コストを大幅に削減できる可能性がある。
  • 一般的に大規模プロジェクトは、変更コスト曲線の勾配がきつくなる傾向にあるので、XPを採用するのにふさわしい候補ではない。
  • 小規模なアジャイルプロジェクトについても、データを見る限りストーリー番号が増加するに従って変更コストは増加している。"これは、些細なものだとすませられる増加率ではないし、アジャイルの専門家がエピソードとして語る経験値ほど良くないことも明らかである"

とはいえ、その後Boehmは「すべてを先に決めないといけない」という考え方は誤りであることを認めている(2008年)。このあたりは平鍋さんの下記ブログも参考に。

さらにBoehmは2010年、Making Software ―エビデンスが変えるソフトウェア開発においてこの議論を総括している。

第10章 アーキテクティング:いつ、どれだけ? バリー・ベーム(Barry Boehm)
この章では、プロジェクトや組織がソフトウェア開発に際して、どのような時にアジャイル手法とアーキテクティングアプローチのどちらを使うべきかを判断する助けとなる研究を紹介します。ソフトウェアプロジェクトやソフトウェア主導なプロジェクトの管理者たちがアーキテクティングの重要性を十分に認識しているとしても、彼らの手持ち資源は常に有限であるため、「どれだけアーキテクティングを行えば十分なのか?」と自問することはよくあります。
Making Software ―エビデンスが変えるソフトウェア開発

詳細は同書を確認していただくとして、「すべてを先に決めないといけない」というわけではないながらも、プロジェクトの規模や特色によって慎重に検討する必要があるといった事が書かれている。少なくとも、欠陥が下流に「漏れる」と修正コストが増加することは否定されていないという点に注意が必要である。

なお本書はオライリーでPDFを購入することができる(私はそっちを買った)。

6.トレードオフ非線形

人と時間のトレードオフは、3次多項式
Capers Jones ( 『ソフトウェア見積もりのすべて』) によると、 欠陥 = k*ファンクショ ンポイント**1.25
頭で計算することは困難!
小さくないプロジェクトでちゃんとした交渉をするためには、十分に強力な見積もりツ ールが必要 (例えば.,SLIM,Costar)

人と時間のトレードオフ非線形であることは以前に以下の記事でも取り上げている。

なにはともあれ、直感的な見積りほど信用ならないものはない。
この記事でも紹介しているけど以下の本がおすすめ。

7.再利用は重要

コードの再利用だけでなく、設計、仕様、プロセス、計画、 予算テンプレート、チーム、などの再利用。
再度: 技術はビジネス/文化的な問題よりも重要ではない
再利用のコストを無視してはいけない

かなり古典だけれどもソフトウエア開発 55の真実と10のウソで詳しく取り上げられている問題ではある(その後に発表された技術書で本テーマを扱ったものをあまり知らない)。

  • 15.小規模な再利用(例えば、ライブラリやサブルーチン)は50年前に始まり、既に解決済みの問題である。
  • 16.大規模な再利用(コンポーネント単位)は、誰もがその重要性を認識し、なくてはならないと感じているが、今なお未解決である。
  • 17.大規模な再利用は、類似システム間ではうまくいく可能性が高い。応用分野の類似性に依存するため、大規模流用の適用範囲は狭くなる。
  • 18.再利用には、2つの「3つの法則」がある。
    • 再利用可能なコンポーネントを作るのは、単一のプログラムで使うモジュールの開発に比べ3倍難しい
    • 再利用可能なコンポーネントはライブラリに取り込む前に、3つの異なるプログラムでテストする必要がある。
  • 19.プログラムを再利用する場合、流用母体の変更はバグの原因になる。20-25%も変更する必要があるなら、最初から作った方が効率が上がるし、品質も良い。
  • 20.デザインパターン方式の再利用は、ソースコードの再利用における問題を解決する一手段である。

ソフトウエア開発 55の真実と10のウソ

コードの再利用に関してはこのとおりであって付け加えるものはあまりない認識。
ビジネスレベル、文化レベル(プロセスレベル)の再利用を考えるべきということではないかと考えている。

8.リスクマネジメントが鍵

リスクマネジメントの共有が肝
再度: 議論の中心は文化的な問題であり、政治であり、技術ではない。(2007-2008 の銀行危機と同じように)

有名なのはこの本だけど、現在はリスクマネジメント技法は標準化されているのでそれに従えばいいと思っている。

どちらにしても、技術の問題ではない。

後編に続く。

デス・マーチ著者Ed Yourdonさんの『ソフトウェア工学で大切な10の考え方』を再読する(前編)

デス・マーチ著者のEd Yourdonさんが先日(2016/1/22)亡くなったとのこと。合掌。これを機会に同氏が2009年に公開し平鍋さんが翻訳した『ソフトウェア工学で大切な10の考え方』を再読してみた。同資料のサブタイトルには「この困難な時代だからこそ」である。年月は経ったが引続き困難な時代は続いている。

なお、そもそも『ソフトウェア工学で大切な10の考え方』が非常に難しい。自分の勉強不足で誤読、勘違いをしている可能性もあるのでご注意いただきたい。指摘やフィードバックは大歓迎。

0.イントロダクション

ほとんどのキーとなるソフトウェア工学のアイディアは、新しいものではない
しかし、それは一貫性をもって実施されていない
世代が新しくなるたびに、基礎を再発見する運命にある

以前に本ブログでも紹介したのだけれども、ソフトウェア工学のアイデアや課題の多くは1968年に発表された「ソフトウェア工学の諸問題に関するNATO報告書」ですでに書かれており、かつその多くは解消していない。という意味では「新しいものではない」のはその通りである。

もちろん研究は進んでおり、様々な解決策が発明・発見されてはいる。しかしそれが実際の開発現場まで浸透しているかというと、そうではない。有名な「Code Complete」の序文でもこの状況について言及がある。

本書を執筆する上で私が最も配慮したのは、業界の第一人者や教授らの知識と、一般的な商用プラクティスとの差を縮めることである。多くの強力なプログラミングテクニックは、一般のプログラミングに浸透するまで何年もの間、専門誌や学術論文に埋もれている。 近年、最先端のソフトウェア開発プラクティスが目覚ましい進歩を遂げている。しかし、一般的なプラクティスの方はそうではない。多くのプログラムは依然としてバグだらけだし、スケジュールは遅れ、予算をオーバーし、ユーザーのニーズに応えていない。(中略)いくつかの調査で、研究開発が商用プラクティスとして普及するには、一般に5~15年、あるいはそれ以上かかることがわかっている。本書は、そのプロセスを短縮し、重大な発見を平均的なプログラマに提供しようとするものである。
Code Complete 第2版 上 完全なプログラミングを目指して (はじめに、より引用)

1.計測できないものは制御できない

これはデマルコの名著「品質と生産性を重視したソフトウェア開発プロジェクト技法」に書かれている有名な言葉。その後、デマルコ自身が誤りを認めたという話もある(ただしこの話は、メトリクスによる管理が不要と言っているわけではない点に注意が必要)

では、Yourdonさんは何を言わんとしていたのか。これがスッキリと理解することは出来ていない。いったんの個人的理解は次の通り。

開発者による見積りと、そのデータを活用した生産量のコントロールは現在は主にアジャイル開発のプラクティスとしても定着しつつあるという認識。

2.ピープルウェア

人は(いつの時代でも)プロジェクトにおける最大の生産性要因である。
最もよい人材を採用して、Googleの人材管理をまねよ。

書かれている通りで、異論なし。
基本的には「十分に優秀な人を採用しろ」ということだという理解。

少し古いけれど、http://local.joelonsoftware.com/wiki/%E6%8E%A1%E7%94%A8%E9%9D%A2%E6%8E%A5%E3%82%B2%E3%83%AA%E3%83%A9%E3%82%AC%E3%82%A4%E3%83%89(version_3.0)なども参考に。

なぜ私はこのことに関してそんなに強行なのか? それはいい候補者を落とす方が、まずい候補者を採用するよりもずっとましだからだ。まずい候補者にはたくさんの金と労力がかかり、彼らのバグを直すために他の人の時間が奪われることになる。
http://local.joelonsoftware.com/wiki/%E6%8E%A1%E7%94%A8%E9%9D%A2%E6%8E%A5%E3%82%B2%E3%83%AA%E3%83%A9%E3%82%AC%E3%82%A4%E3%83%89(version_3.0)

Googleのやり方というと、「ワーク・ルールズ!―君の生き方とリーダーシップを変える」ではなく「How Google Works (日本経済新聞出版)」が詳しいが、読む時間がなければ最近話題になった以下のブログ記事が参考になるかと。

3.インクリメンタル開発 (vs ビッグバン開発)

プロトタイプは貴重である。
「デイリービルド」、継続的インテグレーションアプローチを使え。
変更管理を奨励し、スコープクリープとスコープ変更を警戒せよ。

異論はないし、継続的インテグレーションのアプローチは現在では主流になりつつあると理解している。
ただ、Yourdonさんの資料で「実践 行動経済学」が紹介されている理由がよく理解できていない。
いろいろ調べていたら以下の記事を発見したのだけれど、「(バイアスなどに左右される特性により)人間は正しく判断することは難しい」という前提にたってスコープ変更を管理せよ、ということなのだろうか・・・。

4.反復

古典を見よ(“有史前”, インターネット前) 1970年の論文「Managing the Development of Large Software Systems: Concepts and Techniques」
大きな誤りを後でするよりも、小さな誤りを早期に。
コンセプトの適用は、「all or nothing」である必要はない。
最近のオブジェクト指向バージョン: “refactoring ”
近代的なツールを使う (高速な協調的なイテレーションのためにTwitter, wiki, などを使う)

Wikipediaでも解説があるのだけれど、ウォーターフォール型開発モデルの原典とされている論文では(実は)反復型開発を推奨しているという話がある。

この論文から始まりウォーターフォールモデルがどう誤解されていったのか、についての論文(日本語)が非常に興味深い。

結局は「ロイスの論文を読んだ人がほとんどいなく、単純な一度きりのライフサイクルだと思われている」「一度で終わらせるウォーターフォールは、説明したり記憶したりするのが簡単である」といった経緯から、一回限りのウォーターフォール開発プロセスが広まってしまったということらしい。

なお、非ウォーターフォール型開発についてはIPA/SECで充実した資料が提供されているのでこちらもお勧め。

かなり長くなってしまったので、ここでいったん区切ることにする。次回は「5.欠陥が下流に「漏れる」と修正コストが増加する」から「8.リスクマネジメントが鍵」までを取り上げるつもり。

IPA/SEC情報処理システム高信頼化教訓がバージョンアップ

以前にこのブログで紹介したこともあるIPA/SECさんの「情報処理システム高信頼化教訓」がバージョンアップして、都度アップデートされるWebコンテンツになった(以前は分厚い報告書体裁のPDFだった)。これは何ぞと言うと「トラブルの原因や防止策が業界内で共有できていないやんけ!」という突っ込みに対する対策である。隣家の障害は蜜の味・・・じゃなかった、教訓だけではなくてトラブル事例そのものも共有されていて勉強になるので一読をオススメ。

http://www.flickr.com/photos/27458630@N03/4622386383
photo by dren88

今回追加された新ネタ「RDBMSのクエリ最適化機能に関する教訓」を読んでみる。

さて、2015年12月に新たに「RDBMSのクエリ最適化機能に関する教訓」というものが追加されたので読んでみた。
詳細は上記リンクから辿っていただきたいが、こんな事例である。

  • 安定運用されていたシステムで、ある時点からタイムアウトが頻発して使い物にならなくなる
  • データ蓄積量が増大するに従ってDBの性能が劣化していくことは予測できていたが、それより早い段階で急速に性能劣化が発生
  • DBの統計情報は日次で更新されていた
  • 原因は、ある時点でRDBMSの選択する実行計画がフルスキャンを行うものに切り替わったことによるもの
  • 対策は「インデックス追加」「一部統計情報の凍結」「全統計情報の凍結」でメリット、デメリットを比較して決定

個人的には上記のような状況に当たったことは(幸運にも)無い。システム設計をする際にも性能が線形劣化するのか、非線形劣化するのかを検証することはあるけど、RDBMSの実行計画の切替までは意識することはあまり無い印象。というわけで個人的にはこの追加事例はとても勉強になった。知っていると、実際に問題に当たったときの初動は相当にラクになるだろうと思う。

統計情報の設計については、以前に読んだ「達人に学ぶDB設計 徹底指南書」が詳しかったと記憶している。読み返してみようかな・・・

では、どのような場合に、統計情報の凍結を行うのが望ましいのでしょうか?それは、現状のものから実行計画を変化させたくない場合です。現在使われている経路が、将来にわたってもデータへの最短ルートであり、現状維持が最適な選択だ、とわかっている、そういう場合に、統計情報を凍結します。具体的には、システムのサービス終了時のデータを想定した状態での統計情報が存在する場合です。
達人に学ぶDB設計 徹底指南書

達人に学ぶDB設計 徹底指南書

達人に学ぶDB設計 徹底指南書