Sep - 15th

逆Switchによる作業効率の低下

Posted at 12:26 pm | Filed Under Work

業務の効率化についてはだいたいこんなことがいわれている:

業務の効率化は短期的には効率が落ちることが多い
業務の効率化は長期的な対策なしには実現できない

例えば、プログラマの作業環境を変更する場合。今まで慣れ親しんだ環境を大幅に変更されると、代替のシステムがどんなに便利であっても、ちょっとしたことですぐに作業の効率は落ちる。メモリの増設やディスプレイの追加や交換であれば、これといって問題はなく、むしろ助かったと感謝されるだろうが、バージョン管理システムの導入や夜間ビルド、自動テストなど、開発環境には欠かせないようなものであっても、慣れ親しんだ環境を捨ててそれまでの手順と異なる作業を強いることはプログラマの負担になる。

実体験を語るのはちょっと憚られるので、例えば、平均以上の技量を持つプログラマが、普段viでコードを書いているとしよう。仮名は丸山さんでいいや。28歳、独身。痩せ形で、これといって目立つところはないが、強いて特徴をあげるとすれば、どんな暑い日でもシルクハットとお揃いの黒いビロードのスーツ姿でしか人前に出てこないWilcomユーザ。そんな丸山さんに、チームでの作業には欠かせないからという理由でコードチェックやレポジトリへの自動コミットなどなどの機能がてんこもりになったEclipseに移行してもらうとする。発案したのは丸山さんの直属の上司にあたるSEで、丸山さんとはちょっと趣味やコミュニケーションの面では難しい関係にあると感じているが、時折砂漠でラクダと話しているような気分になることを除けば、丸山さんのことは好きだし、出来ることなら夜道を歩いても通報されないくらいの時間には家に帰してあげたいと思っている。

もちろん、そのための準備としてSEは業務の合間に徹夜で資料を作成し、効率化グラフなんかをでっち上げて作業を進める承認を貰ったり、上司に予算を確保してもらったり、プログラマへの説明資料を用意していた。これが調査を含めて実働でだいたい一週間くらいの作業だから、コストはその分のSEの単価と彼の寿命、上司のミーティングの時間分の単価、それから説明会に出席する丸山さんたちプログラマの一時間分の時給の合計だ。100万には届かないが、数十万円にはなっている。哀れなSEの命はプライスレス。

説明会は順調で、丸山さんも見事な口髭に手をやりながら、遠くを見るような目でしっかり話を聞いてくれていた。SEも少しは自分が何か出来たような気がして満足した。これで明日ちょっとくらいは遅刻してもいいなら、もっと幸せなのに。ソフトウェアの導入は各プログラマが各々の環境に一時間ばかりかけてインストールする。ここでもちょっとコストがかかった。今日の作業に支障が出ないように、インストール作業は定時ちょっと前に始められ、完了したらみんな帰っていいことになっている。丸山さんはちょっと戸惑っているようだ。エディタが白い背景にカラフルな文字という組み合わせには耐えられないと、あれこれ設定をいじっている。明日からは人心一新、ジョエル・テストで3ポイントくらいアップした環境で作業を続けよう。SEは明日から業務の効率化の計測が始まるため、結局また準備で終電まで働いた。

プログラマとその作り出すプログラムのユーザに共通している点は、いくら説明を聴いてもマニュアルを読んでも、片っ端から忘れてしまうことなので、翌朝から現場にはちょっとした混乱が生じていた。説明会で話を聞いているときにはなんだかわかったような気がしたのに、いざ目の前のシステムを触る段になって、あれはどうするんだっけ、これはどうなってんだっけ、と迷ってしまう。他のプログラマたちがあくせくとマニュアルを読み返したりしている中、丸山さんはというと、独自のマクロやキーバインドが使えないので、どうにかならないかとやはりウェブや書籍とにらめっこしている。午後になっても今日のタスクに取りかかれていないらしい。やがて、諦めてようやく作業を始めるが、ため息をついたり、ティッシュを敷いてその上にコーヒーかすをもんじゃ焼きみたいに丸く集めたり、どうも集中出来ていないらしい。周囲のプログラマが徐々に作業のペースを取り戻す中、明らかに孤立してしまっている。

と、ここまで延々と書いてきて、そろそろ疲れたのでどこかの本からパクッてきたようなお話し口調を中断して、結末がどうなったかというと、だいたいこんな感じだ:丸山さんは、自分が不当な扱いを受けているような気がしてくる。他のメンバと比べても遜色ない実績をあげてきたのに、急に妙なルールを押し付けられて足を引っ張られたような気分だからだ。SEはなんとか彼を励まして、このシステムがいかに他のメンバに貢献するのか説得するが、そんなことはわかっているとしか返事をもらえないのでほとほと困り果てている。お気付きの方もいるだろうが、作業環境の変更の際、SEは自分のプランについて上司には承認をもらっているがプログラマである丸山さんには何の相談もしていないので、これはある意味当然の帰結だ。やがて、丸山さんも慣れてきて長期的な効率の向上には貢献出来るようになるのだが、なんとなく心の中に生じた嫌な感じは拭い切れない。そう、彼は上司であるSEに「恨み」の感情を持ってしまったのだ。

この「恨み」というやつは、人間のモチベーション管理の面で非常に大きな障害となるやっかいな代物だ。初めてこの「恨み」フィルタを通してで周囲を見てしまうと、周囲の人間がいかにロクでもない奴らで、自分はいったいどんなに哀れでちっぽけで無価値な存在なのだろうと思い込むようになる。不当な扱いを受けるのは、人間の合理性をなんとなく信じて生きているわれわれ人間にとって、それはそんな扱いを受けて当然のろくでなしだからだ、という結論に自然に到達するようになっている。たとえそうでないにしても、少なくとも自分以外の人間はそう思っているに違いない。だから、自分はこの職場にはフィットしない。よし、転職しよう。

こうして、丸山さんはたっぷりの有給休暇を使って、ちょっとした念願だったワードローブに立て篭って座禅を組む精神修行を始めてしまい、残されたプログラマやSEは掃除用モップをしゃぶって悲しんでいる。人が増えても業務は減らないが、人が減ると業務は確実に増えるからだ。

というわけで、悲哀の中間管理職としては、業務効率改善はいい加減には出来ないな、と思うと同時に、どうして俺はMacで仕事出来なくされてしまったんだろう、そして支給されたDELLのマシンのレジストリとやらが壊れて作成したドキュメントは消え去りディスクは認識されなくなり、再インストールとアップデートのやり直しで丸一日を無駄にして、結局最後は元のMacBookを引っ張りだしてEmobileで常時接続しながら、LANには入れない不便な環境でもなんとか仕事をやり終えて、家族にはどうせ夜中にエロサイトでも眺めて遊んでいるんだろうとそしられ、徹夜明けの朝に銀行で結んだローンの契約では最悪の選択をして、家族からは馬鹿にされ、再作成したドキュメントは間違いだらけで、心臓が涎を垂らして貧乏揺すりが止まらなくなるのでもうなんとかしてくれ。

Read More>

Sep - 15th

Helix

Posted at 3:22 am | Filed Under Music

実験用に自宅サーバにHelix DNA Serverを入れた。

でも帰らないとルータのポートがあけられない。

Read More>

Sep - 13th

誤変換の検知

Posted at 4:04 pm | Filed Under Google

Googleの中の人はこんな対応もしていたのか。

Ws000004

Read More>

Sep - 11th

ゲートウェイ理論

Posted at 3:00 pm | Filed Under Fun

ここのやり取りを読んでいて、関係ないことを思い出した。

onion.comに、「High Timesを読むことがさらに熱心な読書への入り口にはならない、という調査結果が出た」という記事があった

High Timesというのはマリファナ雑誌。マリファナがより深刻なドラッグ使用への入り口になる(から取り締まろう)という、いわゆるゲートウェイ理論をネタにしたギャグ。

Read More>

Sep - 11th

仕様書

Posted at 2:39 pm | Filed Under Work

この2週間、ずっと仕様書を作成している。来週で1回目のレビューだ。

気づいたらこの作業をやる他ない状況にいたのだが、はからずもちょっとした面白さのはじっこに自分が齧りついているかもしれない気がしてきたので、メモしておく。

まず、仕様書の作成を依頼された(本来自分から言い出すべきだったのだが)時に念を押されたのは以下の3つ:

(1)実装の詳細は書かない

つまり、これは機能仕様書であって、技術仕様書ではない。

(2)全ての機能と機能のフローを記載する

要するに、仕様書で大事なのはINとOUTがはっきりと書かれていること。

想定される読者は、プロジェクトマネージャ、営業マネージャ、この製品を使って実際のサービスを構築する開発チームのマネージャ、リリース後に保守を担当するテクニカルサポートチームのマネージャ。この人たちを、ただの読者にしておくことはやらない。それぞれの視点から、自分の担当する業務や今後の戦略に照らし合わせ、この仕様書に記載された内容で過不足ないかどうかをチェックする義務を負う。

(3)レビューの目的と期日、目的を明確にして通知する

最初の打ち合わせの時に、期日までにレビューを完了してリクエストを返さない限り、希望する機能が他にあったとしても、そしてそれが自分の業務に欠かすことの出来ないものであっても、絶対に組み込まれない旨を想定読者全員に通知する。もちろん、本当にそうするつもりだ。何か機能を組み込み忘れたせいで製品が売れなかったら、それはリクエストしなかった人の責任になる。

実は、この仕様書を作成する前に、もうプログラムを作成する日程を決めて実際に作業を始めようとしていた。そこへ、リリース後のサポートを担当するチームのマネージャからストップがかかった。現状のままで開発を進めた場合、製品の品質に重大な懸念があり、サポートは責任を持てないというのだ。まったくもってノリの悪い奴だ、と思ってやろうとしたが、その前にじっくりと考えて、確かにその通りだと思うことにした。まったくその通りだから。うん、実にその通りだ。当初は、複雑な製品なのだから、作ってからバージョンアップして改良していけばいい、と考えていた。でも、その割には改良のためのコストは誰もどこにも計上していない。自社製品なのだから、日々改良するのは当たり前、みたいな雰囲気もあったせいかもしれない。

最初は、どんな機能を実装するかは企画担当者に任せて、こちらはそれをプログラムにするにあたって必要な作業に集中していればなんとかなる、と思っていたのだが、それだといろんな人たちとの間で本当にコンセスサスが取れたものが作れないし、みんな忙しいから、いつも都合がいいときに内容をチェックして、要望をくれるわけでもない。だから、大規模な商談がまとまりそうになってはじめて「そういえばこんな機能あるよね?」といわれたりする。こういったことは作るコストに含まれていないから、結果的にずるずると金ばかりかかってしまう。

追記:
ギャーッッッッ!!!仕様書が5MBを越えたらWordが落ちて二度と開けなくなっちゃったよ!どうしよう!もう間に合わない!

Read More>

Sep - 10th

SoftBank殺し

Posted at 6:56 pm | Filed Under mobile

SoftBankから通達があり、パケット通信中に端末に何らかのパケットが送信された場合、そのパケットも通信量として加算されるとのこと。

パケットし放題」は上限9,800円だが、IPアドレス指定でpingを打ちまくられると「PCサイトダイレクト」の対象になるので上限がちょっと上がって10,290円になる

Read More>

Sep - 9th

生産性

Posted at 11:47 am | Filed Under Ruby

孫引きなのだが、Rubyのまつもと氏の発言とされる以下の記事:

【XDev】「とりあえず作って,後から作り直せ」,Rubyのまつもと氏が語るエンタープライズ開発:ITpro:
「エンタープライズRubyに関しては,実績もあるし,生産性が高いことも認められ始めてきた。楽天が社内向けシステムをRubyで開発したところ,JavaやPHPと比べて,生産性が1.6倍から3倍に上がった」

これ、どうやって生産性を計測しているのだろうか。

もっともありがちなのは、JavaやPHPでだいたい同規模のソフトウェア開発をやってみた時の実際の工数と比較すると、Rubyで作った場合の方がこれくらい早く仕上がった、という計測の仕方だろう。いや、実際にそうやったんだろう、と下司の勘ぐりをしているわけではない。よくあるパターンだとこうだよね、という話。

でも、プログラミングの世界では、生産性の個人差が大きいので、1.6倍や3倍といった程度の違いなら、個人のスキルで十分に吸収されてしまう誤差でしかなかったりする。

また、もっとベタな状況を想像してみよう。10人の開発者を抱えるごく普通のソフトウェア会社があるとする。主にPHPを使ってウェブアプリケーションを作っている。普段は数人のチームに分かれて開発をしている。よく出来る人にそうでもない人を混ぜているので、どのチームも生産性はいつもだいたい同じくらいだ。そこへ、新任のプロジェクト管理者が登場し、プログラミング言語による生産性の違いを計測するために、それぞれのチームにPHP、Java、Rubyをそれぞれ使わせて、同じ内容の社内向けアプリケーションを開発させてみた。

あまりの贅沢さにトム・デマルコの本に出てくるトムキンスが聞いたら呆然とするかもしれない。まあ、仮定の話なので細かいところはいいとしよう。

だが、この実験プロジェクトを遂行するにあたっては、様々な問題が噴出した。最初の問題は、では誰がJavaやRubyのプロジェクトを担当するか、だ。普段の業務で使っている言語なら、どのメンバも短くても半年、職歴の長いメンバなら5年以上の実務経験がある。そこへ、急に別の言語の仕事がまわされるかもしれなくなったのだ。どちらかを選べといわれれば、平均的な開発者であれば、普段使っている言語の方を選びたがるだろう。コーディングを担当する者にとって、目標とする期日までに業務を完了させることは、決してないがしろにできないミッションでもある。キャリアの浅い言語のプロジェクトは敬遠するはずだ。誰だって、期日前に受けるプレッシャーは避けたいものだ。それが直接人事考課に響くなら、当然のことだろう。

そんな状況でJavaやRubyでの開発を受けるような人間は、以前Javaの現場にいたか、あるいはRubyを独学していて、それなりの勘所を押さえているに違いない。

もうお分かりかと思うが、独学で実務では使っていない言語を習得しようとするような意欲的なプログラマに、生産性の低い人間はほとんどいない。だから、必然的に普段から他人の何倍もの生産性を発揮しているかもしれない。

JavaとPHP、Rubyのチーム編成を考えると、RubyなんかさっぱりわからないメンバをRubyチームに入れたり、JavaとJavaScriptの違いもよくわかっていないようなメンバをJavaチームに組み入れたりするのは、いくらなんでも問題だろう。データとして使い物にならない上に、下手をすると普段の業務で発揮していた力を出せないことを苦にメンバに退職されてしまうかもしれない。誰だって自尊心は必要なのだ。というわけで、だいたいのケースでは、意欲的なプログラマがRubyチームに入ったりする。

そうなると、まつもと氏が語っているような、Rubyで生産性向上があったというのは実際にはちょっと違っていて、言語など関係なく、元々生産性の高い人を集めたチームが、他の言語で開発していたチーム(つまり、優秀な人を除いた、まあ平均的技能のチーム)より高い生産性を発揮したという、ごく当たり前の結果がなんだか視点によって違うもののように見えてしまっているだけだということも十分にあり得る。少なくとも、自分の会社でこんなベンチマークをやろうとしたら、きっとこんな風な事態になると思う。

もちろん、個人的にはRubyはとにかくガシガシ書けるし、テスト可能性の高いコードを書こうと思ったらあれこれと便利なところがたくさんあって、個人的にはとてもいい言語だと思う。しかし、生産性の計測という点では、もうちょっと詳しく書いてほしかったな。

追記:

まず、記事の総論にはぜんぜん反対じゃない、というのははっきりしておきたい。もちろん、誰も正解がわからないソフトウェア開発で「速く作って、後から直す」という主張が出てくる背景も理解できる。ただし、これはRuby on Rails絡みのよくある話にもいえることだが、ソフトウェアを直すというのはとんでもないコストがかかることなので、いくら素早く開発してリリースすることが出来たとしても、この「後から直す」を軽視するととんでもない事態になる、というのは強調しないといけない。このやり方では初期開発費用は抑えられるけれども、ソフトウェアが軌道に乗るまでの費用が全て減るわけでは決してない。開発費と保守運用費のトレードオフになることを、開発者だけじゃなくて経営側、営業側も理解しないと、リリース後の下らないゴタゴタでひどい苦労をすることになる。つまり、単純にいえば、今までのやり方では直すことを前提としていないために見積もられなかった改修費用を、最初から折り込んでおきましょう、という話なのだ。変化に対応出来る体制というのは、こういうお金の絡むところの体制と、関連スタッフの意識の体制でもある。

Read More>

Sep - 8th

WordPress2.2.3

Posted at 9:26 pm | Filed Under WordPress

WordPress2.2.3が出ている。修正箇所はこちら

変更されたファイルはどうやら以下の通り:

/wp-admin/admin-ajax.php
/wp-admin/admin-functions.php
/wp-admin/install-rtl.css
/wp-admin/options.php
/wp-admin/rtl.css
/wp-includes/default-filters.php
/wp-includes/feed-rss2-comments.php
/wp-includes/formatting.php
/wp-includes/pluggable.php
/wp-includes/plugin.php
/wp-includes/query.php
/wp-includes/rewrite.php
/wp-includes/rss.php
/wp-includes/vars.php
/wp-includes/version.php
/wp-includes/widgets.php
/wp-mail.php
/xmlrpc.php

うちの環境では特に緊急性もなさそうだが、とりあえず全ての環境を更新。

Read More>

Sep - 5th

Parallelsの最新ベータ版

Posted at 5:50 pm | Filed Under Apple

Parallelsのベータ版を使っているのだが、Build 5144で起動時にゲストOSのWindows側とホストOSのMac側のフォルダをシンクロさせるかどうか聞かれる。で、Windows側でiTunesを起動すると、Mac側のiTunesライブラリと同期するようになった。Windows側で追加した楽曲もMac側でiTunesを起動すると自動的に同期する。

これでNapsterからダウンロードした楽曲をFairuse4wmでDRMを解除してWindows側のiTunesに入れるだけでiPodで聴けるようになった、と想像した人がいる夢を見た。

Read More>

Sep - 1st

Prototype Portal Class

Posted at 2:06 am | Filed Under Javascript, Software

コンテンツをブロックに分けて、それぞれをWidgetと称して自由に位置を変更したり非表示にしたりするJavaScriptライブラリ、Prototype Portal Classyoumosで紹介されている

PCサイト向けCMSのページ編集機能なんかに使えるな、と思ったら、これってJetspeedの画面みたいだな。

Read More>

« go back