投稿日:2007年06月26日 作成者:yasunaka
あるプロジェクトマネージャから、プロジェクトのチーム体制作りで悩んでいる、という話を聞きました。その人は今、ウォーターフォールモデルで詳細設計まできちんと設計した上で、プログラミングに大量に人を投入するスタイルにすべきか、それとも以前に紹介したセル生産方式というべき、エキスパートのエンジニアを揃えてその人たちに自主的に設計からプログラミングを任せる方式にすべきか、ということで悩んでいるという話でした。
エンジニア達に受けが良いのは後者のタイプです。そのほうが仕事が楽しいと感じられるようです。ただ、できるだけそうしたいのだけれども、なかなか人が集まらなかったり、プロジェクト管理の立場では管理しづらい部分があるという点でなかなか結論が出せないでいる、ということでした。
私が感じたのは、作るもののタイプによってどちらのほうがいいのかは変わるのではないか、ということでした。毎回同じようなものを繰り返して作っていて、システムの仕組み上特別に難しい部分がないということであれば、プログラミング工程で人海戦術が可能な前者のスタイルのほうが効率がいいと思います。プロジェクトの遅延に対しても(あまりお勧めしませんが)人を投入することで回復しやすいと思いますし、管理もしやすいでしょう。
一方、作る対象が非常に高度で難しいもので、研究・開発色の強いプロジェクトの場合には、高い専門性が必要とされることなどから後者のスタイルのほうが良いように思えます。このようなものの場合「作ってみないとわからない」ことが多いので、そもそも詳細設計まで落としてからプログラミングに入るというのが難しいことが多いと思います。
作るものの対象に応じてプロジェクトの体制を切り替えるというのが現実的なのかもしれません。
投稿日:2007年06月25日 作成者:yasunaka
最近、学生の就職先として情報系(IT系)の企業の人気が下がっているという話を聞きます。へー、そうなの?程度の軽い気持ちで聞いていたのですが、良く良く考えてみると由々しき事態なのですね。
先日、京都大学出身の人と食事をしたのですが、その人が言うには今現在、京大の工学部で一番不人気なのが情報だ、と話していました。私が大学生のころは情報工学というのはある種憧れの分野だったと思うのですが、その話を聞いて時代の変遷を感じてしまいました。
やはり新3K(きつい・厳しい・帰れない)のイメージが一般にまで定着してしまったということの裏返しなのでしょうか? 昔は最先端の技術でよくわからない、何が神秘的で遠い存在だったコンピュータが、いまや非常に身近な、コモディティ的な存在に変わってしまったこともあるのかもしれません。
新3Kの汚名返上のためにはどうすべきか。やっぱり「そう(=きつい・厳しい・帰れない)ではない」ように、この業界を変えていくしかないのだと思います。でも、世の中には同じか、それ以上にきつく、厳しく、帰れない業種にも関わらず、こういったことがささやかれない業種も存在します。たとえ「きつい・厳しい・帰れない」であったとしても、やっていることが楽しくやりがいのある仕事だと感じられるのであれば、そんなにネガティブなイメージにはならないと思いますし、ネガティブに伝える人も減るのではないかと思うのです。
要は仕事に対してどれだけやりがいが感じられるか、ということにかかっているのだと私は思っています。他の業界に比べれば確かにちょっとはきつくて厳しくて、残業も多めかもしれない、だけどやりがいのあるすばらしい仕事だよ、って紹介できるように変えていきたいと私は思います。
投稿日:2007年06月22日 作成者:yasunaka
皆さんのところではどんなコーディングルールが採用されていますか? 最近は対象言語の標準的なコーディングルールを採用するケースも多くなってきていると思うのですが、そのような標準的なコーディングルールとは異なる社内標準が存在するケースも良く聞きます。そのような場合、従うのは当然としても、なにか割り切れない感じを受けませんか?
開発プロセスとかを事細かに定義しているところほど、この手の標準から離れた社内標準のコーディングルールを採用していることが多い気がします。
問題なのは、そのような社内標準のコーディングルールを決めた人たちがその言語環境についてあまり良く知らずに、他の言語で作ったルールをそのまま持ち込んでいる場合です。たまに見るのですが、オブジェクト指向言語のクラス名やメソッド名に管理番号が入っていることがあります。まあ、C言語とかで書いていたときにはこれも有りだと思うのですが、オブジェクト指向言語の場合には既にその言語内にパッケージ(あるいは名前空間)とかクラス名とか、管理番号に相当する、もっと良い仕組みが既に存在しているのですから、そんなルールは要らないというか、可読性を下げているだけだと思うのですが、「ルールだから」の一言で押し切られてしまうのですよね。
やっぱり、何のためのルールなのかを良く考えて、適宜必要であれば見直すという姿勢が必要ですよね。
投稿日:2007年06月21日 作成者:yasunaka
Google Developer Day Tokyo の鵜飼さんのプレゼンをまとめたメモ(ブログ)へ?たのめも「Google のソフトウェア・エンジニアリング」を読みました。Googleは既にテレビを始め、いろいろなメディアで開発スタイルが紹介されていまずが、実際に中で働いているエンジニアの方自身による、社内での開発の様子というのは非常に参考になりました。
いろんなところで持ち上げられているGoogleの開発スタイルは、実際にこうやって聞いてみてすごいな、と思う部分が多いのですが、一方で、あ、これは実は基本的なことをきちんとやっているのにすぎないのだな、と感じることも多く、そういった意味ではなにか自分のまったく知らない世界があるというわけではないという点で、ちょっと安心した部分もあります。
私が一番感銘を受けたのは、Googleでは偉い人(フェローとか)ほどコードを書きまくっている、という話です。日本とは逆ですね。私の会社でもぜひこれを目指したいです。
メモの中に「Design Doc」というのがあるのですが、これは一般にいうところの「システム概要設計書」(会社によっては基本設計書と呼ぶこともあるらしい)そのものですね。同じじゃん、と思ったのですが、一方でさすがだな、と思ったのは「一般的にはあんまり長くない。」ということ。これです。無駄に分厚いものが良いのではありません。(読んでいない人はぜひ過去の私のブログ?設計書に書くべき範囲を読んでみて下さい)
あと、
・パフォーマンス重視
・スケーラビリティ重視
・信頼性重視
というあたりは、Googleならではのプロフェッショナリズムを感じます。ぜひこうありたいですね。
投稿日:2007年06月20日 作成者:yasunaka
このブログを見ていただいている方の中には、安中はいったい何をやっているんだ?と思っている人も多いと思います。たまには私の会社でやっていることも書きましょう。タイトルのAPISとは現在開発中のプロダクトのコードネームです。(ちなみに商品・サービス名はこれとは異なる予定です)
ホームページにも書いたのですが、弊社は現在、「まったく新しい形のコラボレーション・サービス」を目指して研究・開発中です。プロジェクトのチームワークの力を高める手助けとなるシステム・サービスを提供したいと考えています。このシステム・サービスを提供するためのプロダクトのコードネームがAPISというわけです。
APISとはミツバチの学名(正確にはミツバチ属の名前)です。ミツバチは社会性のある昆虫で、それぞれが役割を担いながら巣を作っていくイメージを、チームがプロジェクトを進めるイメージと重ねあわせて、APISというコードネームにしました。
現在、開発は7月末のM2を目指しているところです。その後、8月末にRC1、9月末にRC2とし、10月には1.0をリリースする予定です。RC1もしくはRC2についてはClosed βという形でお披露目できるかもしれません。
で、肝心な中身というか、どんなものなのかについては、今後このブログを通じて少しずつお伝えしていきたいと思います。お楽しみに。
投稿日:2007年06月19日 作成者:yasunaka
皆さんの会社や組織では、何か定期的な行事のようなものはありますか? 例えば毎週全員参加で部会をやっているとか、そのようなことです。で、その行事やミーティングは何のために行われているのでしょうか? そして参加している人たちはみんな、その目的を理解し、かつ必要性を十分に認識した上で参加しているのでしょうか?
ただなんとなく集まって、参加意識も希薄なまま時間が過ぎるのを待つ、という人がいるとしたら、おそらくその行事やミーティングはうまく機能しているはいえないでしょう。社内を見渡して、そうなってしまっている行事やミーティングがありませんか?
もしあるならば、今一度、真剣にその行事やミーティングの意義、目的をとことん話し合い、納得できる状態にする必要があるのではないでしょうか? 特に重要なのは、経営サイドから、本音ベースで何をそこに求めているのかをきちんと知ってもらうことだと思います。いいこと、悪いこと全部含めて、お互いにきちんと納得した上でその行事やミーティングに臨むことができるのだとしたら、だいぶ違ったものになるのではないでしょうか?
そして、たまにはその目的と現状の「たな卸し」を行って、見直しを行うことも重要だと思います。個人の評価では期初に目標を立て、期末にはその目標と達成度の比較などを行うわけですが、同じように社内行事やミーティングについても、定期的に目標を立て、期末にその達成度を評価するプロセスがあったほうが良いのかもしれません。
投稿日:2007年06月18日 作成者:yasunaka
皆さんはアプリケーションが使いにくくてイラついたことはありませんか? 私は根が短気なのか、よくあります。つい先日も会社で使っている、あるバックアップソフトのあまりにもの使い難さに腹を立ててブーブー言っていました。
その時に腹を立てていた理由は、こんなことでした。
1.単純なことをインスタントにやる方法がない。(すべての処理について一旦ウィザードを使ってタスクを生成し、その後で実行する形になっている)
2.処理をしている間のリアルタイムのフィードバックがわかりずらい。
3.エラーが発生したときに、正しいエラー原因が提示されない。
4.処理が失敗しているときに、ログを見てもなんだかよくわからない。
おそらく作る側は、バックアップの日々の運用の自動化を第一の目的として作っているので、1.については仕方ないのかな、とは思うのですが、ちょっとテープのVerifyがしたいな、と思った程度のことでもいちいち同じ手順を踏まなければならない、ということでまずちょっとイラつきました。
次に2.ですが、一応リアルタイムのフィードバックはあるのですが、起動した処理との関連がわかりずらい。この「わかりずらさ」でさらに イラつき度++(インクリメント)されました。
で、3.ですが、処理が失敗すると画面上に赤いエラーという文字が点滅するのでエラーであるのがわかるのですが、このエラーの原因がおそらく見当違いなエラーメッセージになっているのです。昔、MS Officeで「メモリーが足りません」というエラーメッセージが頻発したときに、知人から実際にメモリーを増設してみたのだけどだめだった、という話を聞いたことがあるのですが、まあそんな感じの話です。エラーが発生しているときに見当違いの原因を提示されると、イラつき度 *= 10(10倍して代入)ぐらいになります。
最後に4.のログを見てもわけがわからん(そもそも失敗していることがでていない、結果には「完了」と出ている、など)に至って、ついに throw new IraIraException() したわけです。
まあ、「またひとつ勉強させてもらった」と考えれば良いのかもしれません。こういった一つ一つのことを反面教師として捉えて、自分が作るシステムがそうならないようにしていきたいと思いました。
投稿日:2007年06月15日 作成者:yasunaka
昨日、関東甲信地方が梅雨入りしたと気象庁から発表があったようですが、今日は(今のところ)横浜地方、おもいっきり晴れてますね。

公園のアジサイがきれいです。
投稿日:2007年06月15日 作成者:yasunaka
最近よくSaaS(Software as a Service)という単語を聞くようになりました。基本的には昔のASPという単語の焼き直しなのですが、そのときは騒がれた割に掛け声倒れで終わってしまったためにあまり良い印象がありません。そういうこともあって新しい言葉が造語された、ということもあるのでしょう。もちろん「SaaSとASPではここが違う」とか説明がありますが、本質的な部分は一緒だと思います。ただし社会基盤として高速で安価なネットワークが完備されたことで、ASPのときの失敗の大きな原因が取り除かれているといえるでしょう。
私は、このSaaSは単なるブームではなく、勝ち残るシステム提供会社が進む道だと考えています。SaaSの世界ではシステム開発会社ではなく、システム提供会社となります。この「開発」から「提供」へ変われるか変われないかが、大きな分岐点であり、勝者と敗者の分かれ目になると考えています。
今までシステムを開発することを生業としてきた会社は、基盤的なものを提供する一部の会社を除いて、システム提供会社の下請けに甘んずるか、どんどん狭くなる市場から徐々に淘汰されるか、システム提供会社の提供するサービスに対するコンサルティングで食べていくか、それらのいずれかになっていくのではないかと私は予測します。
そうなるとすると、百貨店的な分野を問わないシステム開発を手がけているベンダーよりも、ブティック的に、ごく専門的な特定の分野についてのシステム開発に強いベンダーのほうが有利になるのかもしれません。というのは、どのようなシステムを提供すべきかがわかっているからです。
以前のブログでも書きましたが、これこそが「製造業」から「サービス業」への転換です。さて、日本のシステム開発会社の中で、どれくらいの会社がこの流れについてこれるのでしょうか?
投稿日:2007年06月14日 作成者:yasunaka
皆さんはシステムテストを行うときのテストデータはどうやって準備していますか? 全パターンデータを手作りという場合もあるかもしれませんが、むしろ本番データを活用することのほうが多いかもしれません。個人情報などの部分をマスキングした上で本番データを一部コピーしてシステムテストに利用するというのは比較的よくやる話だと思います。
本番データをシステム・テストデータに使う場合、一番問題になるのはテストパターンのカバレッジに関する部分ではないでしょうか? つまりテストしたいパターンについて十分なカバレッジをもったデータの場合にはそれをそのまま使えばよいわけですが、本番データだけではテストしたいパターンを網羅できていない場合も多いと思います。そのような場合にはなんらかの形で人工的にパターンデータを作り出す必要がでてきます。
場合によってはテストデータを作るためのツールやプログラムの別途開発が必要なこともあるかもしれません。そのためには工数もかかります。いざテストという工程になってからでは間に合いません。
つまり、システムテストへの準備はシステムテスト工程になってからでは遅い、ということです。システム開発と同時にシステムテストに向けたデータ準備を忘れずに。