悪態のプログラマ -32ページ目

悪態のプログラマ

とある職業プログラマの悪態を綴る。
入門書が書かないプログラミングのための知識、会社の研修が教えないシステム開発業界の裏話は、新人プログラマや、これからプログラマを目指す人たちへのメッセージでもある。

おなじみの「ファイルを開く」ダイアログ。

このダイアログを続けて開くような場合、2回目に開くときには、1回目に開いたのと同じフォルダが開いてくれると使い勝手がよい。実際、そうなっているソフトが多い。

そうでないソフトでは、常に「マイ ドキュメント」というフォルダが開かれたりする。このため、ユーザーは、他の特定のフォルダにあるファイルを続けて開く場合でも、毎回毎回指定しなおさなければならなくなる。


プログラムで、この「気の利いた」機能を実現するには、一度ファイルが開かれたら、そのフォルダの位置をメモリ(変数)に記憶しておき、次に「ファイルを開く」ダイアログを開くときに、その位置を指定してやればよい。技術的には全く難しいものではない。

しかし、たったそれだけのことだが、実装されないこともある。

開発に与えられている工数があまりに少なかったり、進捗が遅れている場合などは、そうした「気の利いた」機能が削られる場合があるのだ。

受託開発では、こういった細かい機能の仕様については、特に指定されていない場合も多く、こうした「気の利いた機能が付いていない」ということが、不具合とされることは少ない。


しかし、「気の利かない」プログラムに不便を感じるのは、ユーザーだけではない。

プログラムをテストする時には、プログラマ自身や他のテスター(※)が、何度となく繰り返しこの「ファイルを開く」という作業を行うことだろう。

自分で作った機能を自分でテストしていたりすると、「なんで前回のフォルダを記憶するようにしなかったんだろう」と後悔することになるはずだ。


このように、プログラムの設計がテストの工数を左右するようなことは多い。

例えば、「処理速度」がそうだ。速度効率を考慮していないプログラムは、考慮しているプログラムに比べ、「ユーザーの待ち時間」が長い。プログラムのテストでは、同じ処理を、条件を変えながら何度も繰り返し実行するので、「テスターの待ち時間」はどんどん累積していく。結果として、速度効率の悪いプログラムと良いプログラムとでは、開発工数に莫大な差が生まれることになる。

設計やプログラミングのちょっとした工数をケチったために、開発全体としては損をすることもあるわけだ。

ユーザーの利便性を考えた設計をすれば、顧客満足度の向上にも繋がるのはもちろんだが、同時に、テストの工数も減らすことができる。

また、テスターの「イライラ」も減らすこともできるはずだ。




※ここでは、プログラムのテスト(試験)をする人。テスト要員。


■関連記事
デザイナーの屈辱
テストを簡単にし、品質もアップする方法



ユーザビリティテスティング―ユーザ中心のものづくりに向けて
黒須 正明
共立出版 (2003/05)
売り上げランキング: 138,859
おすすめ度の平均: 5
5 卒論で使わせていただきました


ユーザビリティエンジニアリング―ユーザ調査とユーザビリティ評価実践テクニック
樽本 徹也
オーム社 (2005/10)
おすすめ度の平均: 5
5 ユーザビリティ活動の実践に関する良き手引き
今週の "IT" のトラックバックテーマは「メールと電話、どっちが伝わる? 」である。しかし、メールと電話は本質的に違うものなので、同列に比較することはできない。

メールと電話にはそれぞれ特色がある。メールの利点は、書くとき推敲できること、いつでも何度でも読めること、データが添付できることだろうか。対する電話の利点は、相手の肉声が聞こえること、リアルタイムな情報交換(会話)ができることだろう。

また、人によっては、文章能力や会話能力に差があったり、好き嫌いの問題もある。自分だけでなく、相手がどうなのかも考える必要がある。

メールしたり電話したりする時には、誰でもそういったことを踏まえた上で、その都度、どちらかの方法を選んでいるのではないだろうか? どちらの利点も必要な場合は、メールを送った上で、電話も掛ける、ということもあるだろう。


ところで、メールには単なる伝達手段以外の使い方がある。

例えば、「1年前のトラブル、結局どうやって対応したんだっけ?」といった時、まず調べるのが過去のメールだ。1年前のメールを日付やタイトルで探したり、キーワードを指定して全文検索をかけたりする。頭では忘れてしまっている重要な情報が、メールの中から出てくることも少なくない。

あるいは、発言がころころ変わってしまうような相手とのやり取りも、過去のメールが残っていれば、「以前のメールには、こう書かれています」という反論ができる。口頭でのやり取りにありがちな、いわゆる「言った言わない問題」への対策にもなるわけだ。

このようなメールの使い方は、「ログ」の使い方に似ている。

「ログ」というのは、プログラムが、エラーの発生状況、ユーザーの操作、通信の状態などの情報を、時系列にどんどん記録していったものである。何か問題が発生したら、システム管理者などが、そのログを見て、原因究明の手がかりにする。

日付や時刻と一緒に記録され、後から参照できるような情報は、ログとしての機能を備えているといってよいだろう。例えば、「日記は人生のログだ」ということもできる。「ブログ」の語源とされる「Weblog」の「log」もこの「ログ」である。


ログとメールで大きく違うのは、それが読まれないかもしれない可能性の大きさである。通常、プログラムのログは、何か問題が発生しなければ、誰にも読まれない。しかし、メールは普通は、相手に読んでもらうために書くものだ。

しかし、この違いは、あくまでも程度の違いであって、メールにも「読まれない可能性」はあることには、注意が必要だ。

それはブログでも同じことなのだが。。。




メール道
メール道
posted with amazlet on 06.04.09
久米 信行
NTT出版 (2004/05/17)
売り上げランキング: 18,676
おすすめ度の平均: 4.63
5 メールは「ココロ」で書くもの
5 メール活用の「心得」に深く踏み込んだ本
5 メール作成の標準書として


サーバー管理者のためのイベントログ運用の基本
養老 利紀 平松 健太郎 高橋 明 相場 宏二
毎日コミュニケーションズ (2005/08)
売り上げランキング: 1,639
おすすめ度の平均: 5
5 Windowsサーバー関連業務に従事する全ての技術者に必携の本です
システム開発の業界では、1人の人間が、1ヶ月で行うことのできる仕事の量を、1人月(いちにんげつ)という。同様に、1日分の仕事量なら1人日(いちにんにち)である。

この単位は、システム開発の規模を見積もる場合や、プログラマなどの要員を作業に割り振る場合に使われる。例えば、10人日の作業量として見積もられた仕事に、2人のプログラマを投入すると、5日で出来るだろうというわけだ。

この「人月」という考え方は、今でも多くの場面で使われているが、昔からいろいろな問題点が指摘されており、非常に取り扱いが難しいものである。普段、「人月」という単位を何気なく使っている人も多いと思うが、一度、立ち止まって考えてみることも必要だろう。


「人月」の問題点を全てここで述べることはできないが、以前に書いた「プログラマは誰でも同じ? 」という題材に関して、「人月」という観点から再び考えてみようと思う。

1人月、1人日という単位は、「平均的」な生産能力をもつプログラマが作業した場合の時間を基準にしている(※1)。

もし、プログラマが誰でもほとんど同じ能力を持っているのであれば、見積の「人月」とプログラマの人数が一致するように、プロジェクトのメンバーを集めればよいはずだ。しかし、実際には、同じ1人月という仕事量でも、5日で終わらせてしまうプログラマもいれば、3ヶ月掛かるプログラマもいる。プログラマの生産能力の個人差は、非常に大きいのである。

まず、プログラムを作る速さが人によって違う。このことは生産性に直結するのはもちろんである。しかし、それ以上に、生産性に大きく影響を及ぼすのは、出来上がったプログラムの品質の差である。

品質の悪いプログラムは、良いプログラムに比べて、何倍もの時間を掛けてテストやデバッグ(※2)を繰り返さなければならないため、全体的な作業量が爆発的に増加するのである。

また、品質があまりに悪い場合には、いったん完成していたものを破棄して、最初から作り直すようなことも珍しくない。

このような粗悪なプログラムしか作れないプログラマの生産能力は「マイナス」だといってもいいだろう。平たく言えば、「足を引っ張っている」ということだ。


作業量の見積が正確だと仮定すると、開発プロジェクトに参加している全員の能力の平均が、見積時に想定した「平均値」以上の能力にならなければ、納期に間に合わないという理屈になる。

大人数のプロジェクトであれば、無作為にプログラマを集めてきても、結果的には全体のスキルが「平均値」に近づくかもしれない。しかし、少人数のプロジェクトになるほど、「平均値」から外れるリスクが高くなり、プログラマの能力を考慮した上での要員確保がより重要となってくる。

現実には、明らかに生産力が不足しているプロジェクトを見かけることもある。会社全体の人材不足など、やむをえない事情もあるのかもしれないが、プログラマの能力を考慮しなかった結果としてそうなってしまった場合もあるようだ。

例えば、「有能なプログラマが1人いるから、あとは全員が新人プログラマでも大丈夫だろう」とか、「新人プログラマ2人では心配だから、3人にしておこう」といった判断がなされた場合は危険だ(※3)。こうした発言を聞いたとしたら、「マイナス」の生産能力という考え方が存在していないことの証拠であり、要注意である。

応援のクリックお願いします →



※1
平均の母体は、色々と考えられるが、見積の時点で開発に参加するメンバーが決まっている場合は、そのメンバーの実際の平均スキル(らしきもの)を元に見積を行うことができるので、見積の精度が高くなる(はずである)。

※2
デバッグは、プログラムの間違い(バグ)を修正すること。

※3
ここでは新人プログラマを生産性が低いプログラマの代表として扱っているが、もちろん、現実には有能な新人プログラマもいる。



■関連記事
プログラマは誰でも同じ?
簡単な仕事を探す難しさ



ソフトウエア開発の必修スキル―プロジェクトを成功に導く
日経ITプロフェッショナル
日経BP社 (2005/05)
売り上げランキング: 12,676
おすすめ度の平均: 5
5 「一冊要領よくまとまったものを」という方にオススメ


人月の神話―狼人間を撃つ銀の弾はない
フレデリック・P,Jr. ブルックス Frederick Phillips,Jr. Brooks 滝沢 徹 富沢 昇 牧野 祐子
アジソンウェスレイパブリッシャーズジャパン (1996/02)
売り上げランキング: 9,632
おすすめ度の平均: 4
4 マネジメントに関わる人間にとって示唆に富む本
4 ソフトウェアエンジニア必読のスーパー古典!
4 情報システムの仕事に関わっている方には是非お勧め


トラックバックテーマ「第2回 教えて!あなたの「パソコン先生」 」へのトラックバック。

パソコンの先生と呼ばれるような人も、パソコンに関する全ての知識を持っているわけではないはずだ。例えば、自分が見たこともないソフトの使い方までは知らないだろう。しかし、そういう未知のソフトに関する質問をしても、「先生」はすぐに適切な答えを返してくれる。なぜだろうか。

それは、パソコンに関する「一般的な使い方」を知っているからだ。例えば、画面上のデータなどをコピーするための操作は、「編集」というメニューの中にある「コピー」というメニューを選ぶ。このような操作方法は、多くのアプリケーションが採用しているので、「一般的な使い方」だといっていいだろう。

「一般的な使い方」を知っていれば、未知のソフトでも、使い方の「見当」をつけることができる。言い換えれば、「パソコンの先生」は、調べ方をよく知っているということだ。

こうした「一般的な使い方」に関する知識は、自分でいろいろなソフトを使っている間に、自然に身についていくものである。今は「パソコンの生徒」でも、これから色々なソフトを沢山使っていけば、いつかは「先生」になれる日が来るはずだ。


ただし、こうした知識には、「通用する範囲」というものがある。例えば、OS などの環境が違ってくると、通用しなくなるようなものも多い。「文化」に例えるならば、「文化圏」と言ってもいいかもしれない。

例えば、Windows の文化で育った「先生」は、UNIX の vi エディタの使い方を、誰かに教えることはできないだろう。あるいは、Macintosh というパソコンに右クリックがないことに戸惑いを覚えるかもしれない。

また、同じ文化圏のソフトであっても、独自の操作方法(ユーザー・インターフェース)を持っているようなものについては、「パソコンの先生」といえども、使い方の見当をつけることが難しくなってしまう。

たまに、フリーソフトなどでは、そういった「先生泣かせ」のソフトを見かけることがある。ユーザー・インターフェース以外の機能が優れているときには、非常に残念な思いをするものだ。

また、「一般的な使い方」としての機能が欠けているというケースも多い。例えば、「ESC キーでダイアログを閉じる」というのは、一般的な使い方だと思うが、それができないソフトがある。もちろん、「閉じる」というボタンや「×」ボタンで閉じることはできるのだが、いつも ESC キーでダイアログを閉じているユーザーは、ストレスを感じるものである。


ソフトを開発する側の人間への教訓としては、ユーザー・インターフェースは、なるべくその「文化」に合わせたような設計をするほうがよい、ということであろう。もちろん、そのソフトの用途によっては、特殊な操作のほうがよい場合もある。しかし、特に理由がないのであれば、「一般的な使い方」に合わせたほうが、多くの人に使いやすいものになるのは確かだろう。

プロの開発者であれば、一般のパソコン先生のように自然に「文化」を体得するだけでなく、「一般的な使い方」にはどんなものがあるのか、自分から積極的に調べておくくらいのほうがよいだろう。





「パソコンの先生」と呼ばれるための500の知識―WindowsXPと関連知識を一挙に自分のものに
志村 俊朗 森 貴実代
技術評論社 (2003/10)
売り上げランキング: 64,186


パソコン・インストラクター完全マニュアル―コンピュータを教えるすべての人に
ポール クロチーア メディアプラス Paul Clothier 木全 康仁
海文堂出版 (1997/08)
売り上げランキング: 14,827
おすすめ度の平均: 5
5 全てのIT業界で教える立場の方に超オススメ
5 邦題でひどく損をしている名著
5 分かりやすいインストラクションはこの本から始る!

トラックバックテーマ「第1回 PC回りのオススメ小物 」へのトラックバック。「小物」というのとはちょっと違うような気もするが、何度も役に立った実績があるものをご紹介。

いわゆる LAN ケーブルに「ストレート」と「クロス」があるのはご存知だろうか? ストレートのケーブルは、HUB などに繋ぐときに使用するもの。クロスケーブルは、2台のパソコンを直接繋ぐときに使用するものである。

一般的なオフィスでは、多くのパソコンを HUB などで間接的に接続してネットワークを構成している。このため、ストレートケーブルは沢山置いてあるが、クロスケーブルはなかなか見かけないものだ。

そこで、私は写真のような短いクロスの 10BASE-T ケーブルと両端がメスのコネクタを持ち歩いている。これらを、長いストレートのケーブルに繋げば、全体を長いクロスケーブルとして使うことができるのである。

仕事柄、職場や出先で2台のパソコンを直接繋がないといけないということも時々あるのだが、ストレートケーブルは比較的簡単に調達できるので、これだけを持ち歩いていれば何とかなる。

もちろん、このコネクタだけでも、ストレートケーブル同士を繋いで「延長」する目的にも使えるので、何かと重宝している。


・長いクロスケーブルとして
  -- クロス -- [コネクタ] ---------- ストレート ----------

・ストレートケーブルの延長として
 ----- ストレート ----- [コネクタ] ----- ストレート -----






ELECOM LD-CTHEN(ストレート/クロス変換コネクタキット)
エレコム
売り上げランキング: 8,039


TCP/IPの絵本 ネットワークっておもしろい!
アンク
翔泳社 (2003/12/13)
売り上げランキング: 114,636
おすすめ度の平均: 4.33
4 シリーズ4作目で・・・
5 分かりやすいです。
4 わかりやすい☆