2010-05-16

『リコールを起こさないソフトウェアのつくり方』の感想

4月に感想を送っていただける方に『リコールを起こさないソフトウェアのつくり方』を進呈するキャンペーンを実施した。

本を読んでいただいた yuri_at_earth さんから感想が送られてきたので紹介したいと思う。

【『リコールを起こさないソフトウェアのつくり方』の感想】



まず、ソースコード20例が大変貴重なものだと思いました。ベテランになった著者の方が考えて書いた初心者っぽいコードでは、実際に初心者が書いたコードははまるポイントを押さえてはいたとしても、それ以外の素人っぽさは再現できなくなっていると思うので、リアル感がよかったと思います。実際に集められる人も限られていると思いますし。

しかも、2,3例でなく、20という数がいいですね。私自身、ちゃんとした集合教育的なものを受けたことがなく、同じ課題を多数の人が書いた結果というものを実際に体験したことがなかったので、とても貴重でした。さらに、同じ人が書き直したコードが改善された例など、この部分は新人時代に読みたかった、もしくは前職で部下だった人たちに見せたかった感じです。

次にこれまでの経験をもとに素直に読んで、「プライドを傷つけないようにする」という表現が、最もなのですが(だからゆえ?)笑えました。(私があまりほかの本を読んでないのかもしれませんが)こういう内容を強調されているところが特徴的というか、現場を経験されている方ならではだと思いました。

その他、実際に見聞きされたんだろうなという例がたくさんあって、心当たりがあり苦笑するものと、組み込みだとそうなのかと思うところがありました。ちょっと話がとびますが、エンプラ系はもともと進化が早く、新しいものを取り入れたものが偉い的な風潮があり、昔ながらのやり方だとだめ的な考え方があるためか、プライドを傷つけないように新しいことを取り入れていくという考え方は少ないように思います。

どちらかというと、新しいものについていけない方が悪いというような。。。
そして、やっぱり(吸収の早い)若い人にはかなわないよねという文化だと思います。とはいえ、上司のプライドを傷つけないように導入していけば、エンプラ系でありがちな、最近の技術はわからんから若いもんでやれ的な態度で投げ出すのでなくて、協力してくれるのかも?と思いました。

実際、以前の職場のマネージャは、javaはわからんとか、最近の~はわからんとかで実装は経験が数年レベルの部下に丸投げ状態で、その結果テストが全然だったことがありました。そこで、最近の開発環境とか、はやりとかはわからないかもしれないが、テスト設計をするときの考え方は今も昔も同じだし、彼らはそのスキルがないのでテストしたつもりになっていても、実際は肝心なところがテストされていないんですよ。なので教えてくださいという話をしたら、快諾してくれたことがありました。

プライドを傷つけずに導入することができていたら、(昔は言語は違えど現場でばりばりにコードを書いていたはずの)上司が、実装はわからないと目も耳もふさいでしまうことはなかったかも?と思ってしまいました。(本題とはかなりずれてしまいましたが・・・)

最後に、今の職場の問題に対してどう対処すべきか?という目線からです。まさに現状がこの本の例にあるように、「あたたかい人間関係の中のやさしい一員」状態なので、ここに書かれていることを気をつけながら導入していけばよいかな?と思ったのですが、現状でそれなりにうまく回っていて、現場的にも特に問題意識もなく、開発規模が大きくなることもなく。。。

ならば、このまま「あたたかい人間関係の中のやさしい一員」のままでいるのもひとつの解かと思ったのですが、ここはどうお考えですか?
【感想終わり】

まずは、感想を送っていただいた yuri_at_earth さんにお礼を言いたい。ありがとうございました。書籍にしてもブログにしても読者が何を考えているのか、こちらからの発信をどう受けとめたのか、じっと待っていてもが何も分からない。その点、Twitter は双方向のコミュニケーションが成立しているが、やはり不特定多数の読者の深い意見を吸い上げることができない。

そういった意味でも本の感想は貴重だ。Amazon のサイトにも「とら子」さんから「日本の開発現場にフィットする品質向上策」というタイトルで『リコールを起こさないソフトウェアのつくり方』の感想をいただいたので是非見て欲しい。

さて、yuri_at_earth さんの感想で Part1 の20のソースコードの例が貴重であると評価していただいたのが正直うれしい。重厚なタイトルにしてしまったため、新人や初級者、上司の方達には「自分には関係のない本」と思われたかもしれないが、実は Part1 だけでも切り離して多くの初級プログラマや指導する先輩、上司の方達に読んで欲しい内容なのだ。

Part1には他の本には書かれていない人間の本質からくる危うさを具体例で示している。その危うさは現場でまともに仕事をしていくとどんどん薄れていくのでほとんどの技術者が忘れてしまうのだが、「焦っているとき」「集中力が欠けているとき」「モチベーションが下がっているとき」などに、その危うさがプログラムに出る。また、プロジェクトリーダーが確固たる設計の規範を持っていないとき、持っていてもメンバーに指導しきれていないときに、その危うさがソフトウェアシステムの欠陥となって表面化する。

その根源がどこにあるのかを Part1 では具体的に読者に知ってもらいたかった。テストでよい点を取る手順のように、あらかじめ用意されたユニットテストのテストケースをパスすることだけに注力を注いでいると、そのソフトウェアを使うエンドユーザーにとって危険なプログラムを作り込んでしまう可能性があるということをソフトウェアを作ったことがない人、昔作っていたけど今のような大規模・複雑化してしまったソフトウェアの中身を知らない人に伝えたかった。

「プライドを傷つけないようにする」というのは特に日本のソフトウェアプロジェクトでプロジェクトを成功させるためには重要なポイントだと思う。この本では「あたたかい人間関係の中のやさしい一員」というキーワードを何十回も書いている。日本人がそういう性質を持っているからこそ、トップダウンでの指示よりも、プライドを傷つけないように気をつけながら導くことが大事なのだ。ちなみに、D・カーネギーの『人を動かす』にも同じようなことが書いてあるので特に日本人だけに当てはまることではないみたいだ。

yuri_at_earth さんからの「あたたかい人間関係の中のやさしい一員のままでうまくいっているので、これまでのやり方を変えていく必要があるのか」という問題提起に答えていきたい。

20年くらい前の組込みソフトウェア開発の現場は「あたたかい人間関係の中のやさしい一員」でうまく回っていた。開発効率は今ほど納期が厳しくなかったのでそれほどプレッシャーが強くなかったし、最終成果物の品質もよかった。しかし、現在、自分の周りではそんなにうまくはいっていない。ひとつの製品が自分のプロジェクトの中だけで閉じなくなってきている。スタンドアロンの機能だけでは他社に勝てない、ネットワークを使った連携機能が求められるようになってきた。

そんな時代になった昨今、「あたたかい人間関係の中のやさしい一員」の世界で培われてきたアプローチと「創造性と個性にあふれた強い個人」の世界で体系化されたアプローチの両方を使わないと顧客満足の高い商品をアウトプットできないと考えている。

もちろん、プロジェクトの人間関係という視点では「あたたかい人間関係の中のやさしい一員」のよさが前面に出ていていいのだが、大規模、複雑化したソフトウェアシステムの顧客に対する安全や信頼を保つためには「創造性と個性にあふれた強い個人」の世界で体系化された是正・予防のアプローチ等をきっちりやっていくことも必要だ。

ただし、マニュアルに書かれたようにシステマティックでなくても、大工の棟梁が失敗した職人を呼び出して説教をし、一度目は軽く、二度目は雷を落とすという、見事な是正・予防のアプローチをしていることもあるから「あたたかい人間関係の中のやさしい一員」もまんざら捨てたものではない。

また、CMMIには是正を言い渡してダメ出しした後に、相手と飲みに行って「本音で話す」などというアプローチは書いていないが、上記の大工の棟梁は雷落とした後に職人を飲みに連れて行ったりする。

従って、問題提起の答えは「顧客を満足させる品質が保てているのなら今のままでよい」「それが危うくなってきたら、変わる必要がある」となる。大工の棟梁のすごいところは顧客満足のことを第一に考えていながら、職人を一人前に育てることも同時に重要だと考えているところだ。どちらが欠けてもいけないことが分かっている。でも、どんなに優れた棟梁だって100人の職人を同じように気に掛けてやることはできない。そのアプローチの有効な範囲(プロジェクトの規模)はある。

西欧と東洋の良さを融合させながら、グローバルマーケティングにアウトプットする商品が多くの顧客に満足される品質を確保するにはどうしたらいいかということを『リコールを起こさないソフトウェアのつくり方』には書いたつもりである。

2010-05-05

人は教育によってどれくらい変われるか?

4月5月は教育計画を立てる時期ではないだろうか? その時期にいつも思うことは「人は教育によってどれくらい変われるか?」ということだ。

教育によって知識を増やすことは可能だ。しかし、知識を増やすだけでは組織内の問題はなかなか解決しない。今の世の中、知識を詰め込むトレーニングは意味がない。なぜなら、知識の多くはインターネットで検索できるようになってしまったからだ。

必要な知識は検索したりお金を払って手にいることができるようになった。人間に求められているのは、それらの知識を使ってさまざまな問題を解決することである。

今読んでいる『20歳のときに知っておきたかったこと スタンフォード大学集中講義』(5/5現在でアマゾンのランキング1位!)には次のように書いてある。

【『20歳のときに知っておきたかったこと スタンフォード大学集中講義』p21-22より引用】
 教師はたいてい、学生に知識を詰め込むことが自分の仕事だと思っています。教室のドアは閉められ、机と椅子は教師に向かって固定されています。学生は、後で試験に出ることがわかっているので、熱心にノートを取ります。教科書を読んでおくことが宿題として出され、学生は黙々と予習します。大学を出てからの生活は、これとはまったく違います。社会に出れば、自分が自分の先生であり、何を知るべきか、情報はどこあるのか、どうやって吸収するかは、自分で考えるしかありません。実社会での生活は、出題範囲が決められずにどこからでも出される試験のようなものです。ドアは大きく開かれているので、何か問題にぶつかったとき、職場や家庭で問題が起きたとしても、友だちとの悩み事も、世界全体の問題を考えるときも、身の回りの資源をいくらでも利用できます。
【引用終わり】

そうなると『20歳のときに知っておきたかったこと スタンフォード大学集中講義』に書いてあるように、イノベーションを起こせるような思考トレーニング、行動が必要であり、それがないと組織改善につながらない、ルーチンワークをこなすだけならルーチンワークのやり方を教えることでトレーニングは終わってしまう。多くの組織では中堅から上級の社員に対してはそれでは足らないと言われる。

しかし、プロジェクトリーダーの立場で考えると「人間はそう簡単には変わらない」と思う。上記の引用のようには考えていない大学の先生が大半ならいいが、現実はそうではないし、アメリカの大学でできることと日本の大学でできることは異なる。

人間何十年も生きてくれば育ってきた環境やこれまで関わってきた人々の影響を何らかの形で受けている。360度のうち1度、2度、3度くらいは変わることがあっても、10度、20度、30度も変わることはそうはない。

そう考えると、今いるプロジェクトメンバーに対して組織が欲しいと思う理想の型にはめ込もうとするのはあまり効果的ではないんじゃかと思う。どちらかと言えば、その人の特長、良さを引き出すようなマネジメントが効果的だと考える。

かねてからピーター・F・ドラッカーや、トム・デマルコはそれぞれの著書でそういっていたと思う。

仮面の忍者赤影(古い?)やゴレンジャー(まだ、古い?)や A Team や、幽遊白書のように、チームの中でそれぞれが特技、役割を持ちそれらを活かしてチーム全体としてのパフォーマンスを上げるのが一番いいと思う。

しかし、現実的な問題は解決すべき問題に対してどうしても現在のメンバーでは足らないスキルがあるときだ。こういうときにオールラウンドプレイヤーがいるとプロジェクトリーダーはとても助かる。プロジェクトのパフォーマンスを最大にすることできる。

そういうオールラウンドプレイヤーやキープレイヤーがいないときは、一時的にでも外から連れてこなければいけないのだが、そういうことができないときもある。だから、プロジェクト設立のときの人選はとても重要であり、それがうまくいくかどうかで7割方プロジェクトの成功が見えると思う。

このようなプロジェクト運営のやり方で起こる問題として次のようなことがある。

  • それぞれに得意な仕事を割り振った後に残った誰もがやりたくない仕事を誰にやってもらうか?
  • どうしても現メンバーでは足らないスキルがある。
  • 他のメンバーの足を引っ張るようなチームの和を乱すものがいる。
「やりたくない仕事」は見習いレベルの者がいれば「すべては修行」と言ってやらせるし、中堅、ベテランばかりのときはチームとして必要な仕事であることを説明したときに理解し同意してくれる者にやらせるべきだろう。そういう者はいずれ上位に上がっていく。

どうしても現メンバーでは足らないスキルがある場合こと、トレーニングのときだが、トレーニングしてもダメな時はダメなものだ。データベースの設計をやったことがないメンバーに一週間くらいのトレーニングに行かせてもデータベースの設計はできない。

多くの場合、そういうときはお金を払って外部の協力会社に開発を委託するのだが、お金がでないときはどうするか、自分の場合はプレイングマネージャーとして自分がそのスキルを身につけるようにしている。一時的負荷は増えるが新しいことを学ぶことは楽しいし、オールラウンドの範囲が広がる。

チームに悪影響を与えるような者がいる場合、JaSST'10 Tokyo の基調講演で、Ms. Johanna Rothman (Rothman Consulting Group, Inc.) は、早めにクビを切れ(実際には転職先を探してあげたそうだ)と言っていた。

そういうもろもろの複雑な事情含めて考えると、問題解決能力の高いメンバー、新しいことに対して臆せず取り組んでくれるメンバーがいかに貴重であるかがわかる。

そういう人材を高く評価し、さらに伸ばす仕組みが社会的に確立されるといいなと思う。それは、ヒューマンスキルではないんだよね。ITSSたETSSなどソフトウェア系のスキルスタンダードは整備されてきたが、イノベーターとしてのポテンシャルを測るスケールがなかなか世の中にないから『20歳のときに知っておきたかったこと スタンフォード大学集中講義』が売れているんじゃないだろうか?

P.S.

日経コンピュータ 2010.4.28 号の書評に『リコールを起こさないソフトウェアのつくり方』が載ったので紹介しておく。
高品質・高信頼なソフト開発手法の解決書。トヨタ自動車がブレーキ制御ソフトの問題で大々的なリコールを実施したのは記憶に新しい。ソフトは大規模・複雑になるにつれ品質維持が困難になる。解決にはプロジェクト管理の改善とソフトの資産化が肝要と、組込みソフト開発歴20年の筆者は主張する。リコールになりかねない「危ない」プログラムの例にも注目。
著者として短いながら当を得た書評だと思う。感謝!

2010-04-24

ひとりでは学食に入れないという若者が増えている

今週はもうひとつ映像コンテンツの感想を書こうと思う。NHK で4月23日(金)19:30に放送された特報首都圏「“ひとり”が恐い」というテレビ番組を電車の中でラジオで聞いた。


ゲスト : 土井隆義
キャスター : 中野純一
ひとりでは学食に入れないという若者が増えている。なかにはトイレで食事をすませる学生もいる。背景には、周囲から友だちがいないさびしい人間だと思われたくない心理が働いている。専門家は、携帯メールで24時間常に維持される友人関係が、自己肯定感の大部分を占めるようになったと分析。大学では、友だち以外の分野で自分の居場所を持てるように、さまざまな取り組みを始めている。“ひとり”が怖いという若者の姿を伝える。
簡単に解説すると、学食でひとりで食べていることを見られることで、「あいつは友達がいないんだ」と思われることがイヤなので、そう思われるくらいなら歩きながらパンを食べたりトイレでささっと空腹を満たす方がいいとということなのだ。

「それほどまでに他人の目を気にするなんて」と思った人は、現代の若者達のコミュニケーションの方法について理解が足りていない。そうなる原因は携帯電話によるコミュニケーションの変化にある。

ようするに、現代の社会人になる前の若者達はメールで連絡を取り合うことで友達との連帯感を確保している。24時間「レス」できるようにしておくことが友達としての証であり、それができないと友達との距離が生まれる。

番組ではアドレス帳が500件までしか登録できないので700件まで登録できる携帯に買い換えた女子大生が出ていた。携帯電話のアドレス帳が友達の範囲であるような印象を感じる。

嘉悦大学では大学の入学式の前に新入生を集め大学構内を二人ひと組で回り、教授やサークルの先輩を訪ねるオリエンテーションゲームを行い、新入生の心のハードルを下げることに成功しているとのことだった。

冒頭に紹介したひとりで学食で食べられない学生に対して一緒に食事をしてくれるカウンセラーがいる大学もあるとのこと。(そうしないと辞めてしまう学生が後を絶たないのだとか)

もしも、自分が学生時代に携帯電話があったら確実に今の若者と同じ事をしていると思った。その環境があればもっとコミュニケーションが多くなって活動の範囲が広がったのではないかとも感じる。

ただ、その環境がなかったことでよかったのは一人で考えを巡らす時間が十分すぎるほどあったということだと思う。大学から離れた時にはたっぷりと一人の時間があった。

番組では携帯メールによる広くうすい四六時中つながっている状態の友達関係は若者の自立を疎外する傾向があるという。「自分は自分、他人は他人」という自己の確立が遅れるというのだ。

昔は、中学→高校→大学→社会人という流れの中で自己の確立が強まっていくのだが、携帯電話によるコミュニケーションにより、中学生レベルの自立にしかなっていないらしい。

twitter も24時間見ていてつぶやかないと疎外されるような感覚を持つようになると同様の問題が起きる可能性がある。

ちなみに、こういう時代になってしまった以上、パソコンや携帯電話が悪でありそれを排除すれば問題は解決すると考えるのはムリがあると思っている。なぜなら、これらのアイテムによるメリットもあるし、現実的に排除などできないからだ。

インフラの変化やコミュケーション手段の変化をキチンととらえて、それらのメリット、デメリットを把握しながら、どう向き合えばいいのかを考えていく必要があると思った。