勘と経験と読経

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

デス・マーチ著者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設計 徹底指南書

ブロックチェーン系記事ナナメ読みメモ

年末年始にブックマークに突っ込んでいた記事をまとめて読んだので感想を記録しておくメモ記事。
http://www.flickr.com/photos/19396658@N00/11727531923
photo by ♔ Georgie R

金融機関がどうしてブロックチェーン技術に注目するのかを非常に分かりやすく説明。ブロックチェーン構築プラットフォーム「mijin」を開発・提供するテックビューロ株式会社のCEOが書いているという点では若干盛られている懸念もあるけれども、様々なトピックを線でつないで現状を分析しておりとても分かりやすかった。

BIS決済委員会が2015年11月に発表したデジタル通貨に関する報告書のポイント解説と、関連する諸国金融機関の議論に関するまとめ。BIS決済委員会報告に掲載された図の和訳版が非常にわかりやすい。なお内容としては分散元帳としてのブロックチェーンではなく電子通貨の側面に着目しているもの。

昨年度後半に行われた研究会の報告まとめ。本編はヘビーなので参考として掲載されている概要まとめから読むのがお勧め。とはいえやはり制度面を中心に語られているので、面白いかというと面白いものではない。国内規制の現状と課題がざっくりとわかるのは良いかも。

MITメディアラボ伊藤穰一所長へのインタビュー。興味深いけれど、2016年3月に創刊される日経Fintechの宣伝記事という側面も強いと思う。

僕は金融の人にテクノロジーを教えるのは無理だと思っています。むしろ技術者に金融の知識を植え付けるほうが簡単なのではないでしょうか。金融を理解している技術者が、これまでになかった新しいFinTechのインフラを創造していくのです。

全文読むには要会員登録の記事。技術としてのブロックチェーンに焦点を当て、各関係者のコメントなどもまとめていてわかりやすい。

Code Readingが紙も電書も販売終了? / 電子書籍化されても買えなくなる事がある

いつか読もうと思って購入予定リストに入れていた「Code Reading―オープンソースから学ぶソフトウェア開発技法」が2015/12/31で販売終了になっていた。

Code Reading―オープンソースから学ぶソフトウェア開発技法

Code Reading―オープンソースから学ぶソフトウェア開発技法

Amazonで中古の紙書籍は流通しているようだが、Kindle版のページは消滅。達人出版会など他ストアでも購入できなくなっているようだ。エエーッ。ショック!

紙の書籍であれば発行部数が少なかったり廃刊になってしまうリスクはあるので絶対に欲しい本は市場に流通しているうちに購入する必要がある。これが電子書籍化されれば入手できなくなるリスクは減ると思ってたのだけれども……。しかも販売終了日は事前に告知されるわけではないので、ある日突然購入できなくなるのはけっこう厳しいなぁ……


と思ってたら、達人出版会のページにはこんな記載が。

※本書の販売は終了いたしました。本書のオンデマンド版が近日改めて再出版される予定です。
Code Reading オープンソースから学ぶソフトウェア開発技法【委託】 - 達人出版会

オンデマンド版? オンデマンド出版に対応した可変レイアウトの版組になるのだとしたら嬉しいなぁ。
こういう情報を他ストアもちゃんと公開してほしいと思う今日この頃。

ちなみに

Kindleが他ストア対抗で大規模20%還元セール中の模様。
agnozingdays.hatenablog.com

デスマーチ対策を妄想する

はじめに書いておくがこの記事は冗談である。某所にてトラブル案件の防止策について議論した事がある。「トラブル案件発生の防止策を出しなさい」「あほか。必ずトラブルは起こる。何度でもな!」「むしろトラブル発生を前提として人間側を適応させたほうが早いんじゃないの?」都合のいい銀の弾丸(魔法の打ち手)など存在するわけはない。ではいっその事、身体的な鍛錬によりメンバーにトラブル案件耐性をつけたほうが確実なのではないかと考えたことについて。

ITプロジェクトはトラブル化しやすい

以前に書いたのだけれども、ソフトウェア開発に限らず、あらゆるプロジェクトには一定の確率で問題が発生する。これは避けられないものであって、どんなに注意しても防ぐことはできない。ただ、ソフトウェア開発では発生する問題の被害が非常に大きくなることがある。結果としてITプロジェクトはトラブル化しやすい。

ソフトウェアの特性から、プロジェクトの成功には限りがあるが、失敗には限りがない。うまくいっても10%の生産性向上とかが関の山だけれども、失敗すれば200%のコストがかかったりする。成功と失敗が非対称であることは忘れられがちだ。ソフトウェア開発プロジェクトは「ブラックスワン」で言うところの「最果ての国」に属している。
ソフトウェア開発プロジェクトは「負ける」宿命なのか - 勘と経験と読経

もちろんトラブルを防止することは重要なのだけれども、エライ人が妄想するような「根本的なトラブル防止策」は存在しないのだ。そうであればむしろ、必ずいつか発生するトラブルにニンゲン側が耐性をつけたほうが合理的じゃないのか、と思ったのだ。

どんな耐性をつければ良いのか?

というわけでここからは思考実験である。どのような耐性をつければトラブル案件に有利だろうか? について考えながら、いろいろとセミナー情報などを調べてみた。

ストレス耐性

トラブル案件では参加者に対して様々なストレスがかけられるだろう。というわけでストレス耐性をつけるような研修などがあるのか調べてみた・・・・・・ら、沢山あって驚いたでござる。日本社会の闇を感じた。

フレーミング能力

上記ページを眺めていて知ったのだけれども世の中には「リフレーミング」という素敵なメソッドがあるようだ。これを学ぶともっと良いかもしれない。

フレーミング(reframing)とは、ある枠組み(フレーム)で捉えられている物事を枠組みをはずして、違う枠組みで見ることを指す。元々は家族療法の用語。 西尾和美「リフレーム 一瞬で変化を起こすカウンセリングの技術」によると、「リフレームの目的は、今までの考えとは違った角度からアプローチしたり、視点を変えたり、焦点をずらしたり、解釈を変えたりと、誰もが潜在的に持っている能力を使って、意図的に自分や相手の生き方を健全なものにし、ポジティブなものにしていくことです」(32p)とのこと。

どうなんですかね。
そういえば以前に厳しいプロジェクトを経験した時、「このプロジェクトは社員教育のために意図的に仕組まれたもので、トラブルは全部仕込みである。完了すれば驚異的な成長が実現できるようになっているはずだから頑張ろう」と自己暗示して乗り切ったことがあったなあ。

ショートスリーパー

トラブル案件といえば長時間残業。睡眠時間の確保も難しくなってくるだろう。短眠能力を身につけたらよいかもしれない。というかこの能力は研修などで身に付くんですかねホントに。

上記のページを見るとちょっと魅力的に見えてしまう。ヤバイ。

記憶術

トラブル対応では、いかに脳に情報をブッ込むかが勝負というような気がします。というのでこんなのもあるんですね~

謎方面

いろいろ調べていたらグーグル先生に以下が示唆された。なにそれ怖い。

本当にすべきことは

上記のような耐性をつけるのは実際には現実的ではないだろう。地味にスキルの底上げを図るのが真っ当な道である。言うまでもないけれども、念のため。

ついにキター!ビヨンド ソフトウェア アーキテクチャがKindleで50%オフ

わたしの知る限り10月の発売以来、初めてKindleでセール対象になったのである。ビヨンド ソフトウェア アーキテクチャが50%オフになった。というわけで即刻購入。

その他の書籍のセールも続いているようだ。おすすめの書籍は以下を参照。
agnozingdays.hatenablog.com

2015年下半期に読んだ本のふりかえり

昨年までは毎月読んだ本をまとめていたのだけれども、今年は趣向をかえてInstagramでカジュアルに読んだ本をキャプチャーするだけにしている。2015年も終わるので、これまで読んだ本を振り返ってみる。

2015年下半期に読んだ本を並べてみた

































ビジネス書のオススメ

月並みだけれども、この本が良かった。なにやらHBR読者が選ぶベスト経営書2015で第1位らしい

特に良かったのが、著者のホロウィッツがアンドリュー・グローブの経営哲学に沿っているというところ。それどころか、HBR読者が選ぶベスト経営書2015の第2位である「How Google Works」も第3位の「ワーク・ルールズ!」もアンドリュー・グローブに繋がっているというのが興味深い。

agnozingdays.hatenablog.com

だから、今年読んだ本当のベストビジネス書はこれなのだが、残念ながら絶版である。なんとかしてもらいたいものだ。

技術書のオススメ

今年はあまり技術書を読み終えていないのである。ちなみに読み掛けの本はこんな感じ。

読み終わった本を振り返ると、「ソフトウェア要求 第3版」が最も有用な本であった。今後もなんども読み返すだろう。読むことが武器になる。

だが、あえて一番お勧めしたいのは以下のKindle無料書籍である。

Kindle端末がなくても、スマートフォンKindleアプリをインストールすれば読めるので本当におすすめ。この本は「角川インターネット講座」の各巻の序章(全文)を試し読みするもの。各巻の序章はそれぞれのテーマについての監修者が執筆しており、重要なポイントなどが惜しげもなく書かれている。というわけで、これを一通り読むだけでも、かなりのキャッチアップになるだろう。

インターネットは道具ではなく、もはや環境となりました。各会の日本を代表する第一人者に監修の労を賜ったこの全集が、これまでの社会とこれからの未来をつなぐ必備の書となることを願い刊行します。
角川インターネット講座 発刊に際して

しかし今年はSIer的な観点でいうとブームになるような(皆が話題にするような)技術書があまり無かったような気がするなぁ。何か見落としている?

文芸書のオススメ

いろいろと読んできたけれども、読書体験として良かったのはこの本。

経緯を知らないひとに説明するのはちょっと難しいのだけれども、

  • 屍者の帝国 (河出文庫) というSF作品と同じ世界観で書かれたアンソロジー
  • 原点の作品は故 伊藤計劃さんが冒頭だけ書いて未完だったものを円城塔さんが完成させたもの。
  • 筋としては「死者が動く(動かされる)」物語。(すでに死者である)伊藤氏が構想した死者が動く物語が増殖しているというメタな構図もあって凄い面白い。

オススメできないけれどいちばん面白かった文芸書は

コレです。面白いのだけれども本当にオススメできないので書影は取っていなかったりする。

Kindleで読んだので知らなかったのだけれども、文庫本のオビは「絶望率100%」。覚悟はしていたけれども、想像以上。ちなみに2巻も読みました。このあたりも参考に。

というところで、振り返りはここまで。
さて、来年はどんな本に出会えるかなぁ。良いお年を。