by Death Wish (Edited by Norio Sakai)
トラブルが起きたときに、私たちはNet News に投稿したり、サポートセンターに電話をかけたりします。
しかし、何回もやり取りが続いても解決方法がなかなか見つからなかったり、解決方法が見つかったと思っても違ったり、そういう経験はありませんか?
これは、必ずしも答えてくれる側に問題があるとは限りません。質問者側に問題があるケースもあるのです。たとえば、十分な情報を提供しなかったり、必要最低限の調査を行っていなかったり、書き方(話し方)がわるく状況が十分伝わらなかったりしているケースです。このようなときには、憶測でしか答えられないことや、まったく外れた回答をしてしまうことになりがちです。
このような状態では、お互いに余分な時間を費やす事になりかねません。例えばかみ合わないやり取りをした挙げ句、実はすでに FAQ となっているケースもあるのです。
答える側の人は、別に仕事を持っており、Net News には余暇に書いていることがほとんどです。質問する側は、仕事で問題が発生し、必死になって解決策を探しています。お互いにロスがなく素早く解決できた方が幸せですね。
しかしながら、質問する人は「どのように調べたらいいのか?」、「どこに情報があるのか?」、「何をチェックすればいいのか?」という "効果的に質問するノウハウを持っていない" 場合が少なくありません。
そこで、ここでは、質問する前の手順から質問するにあたってまでの手順を順を追って説明しましょう。
あなたが疑問を抱いたとき、スグに誰かに聞くのではなく、「すでにどこかに情報があるかもしれないな、探してみよう」と考えるように心がけましょう。これは非常に大切なことで、もっとも少ない工数で解決策を得ることができるかもしれない方法です。質問する人の多くは、「どこに情報があり、どこで探せばよいか"」を知らないのです。
まず、次の場所で情報を検索してみましょう。
例えば、Visual Basic 関係であれば、次のような場所を見ましょう。
あなたはVisual Basicを使っています。しかし、Windowsを知っていますか?
Visual Basicさえ使いこなせば、Windowsのアプリケーションが作れると思われています。しかし、これは大きな誤解です。
Visual Basicで作ることができるのは、Windows用のアプリケーションです。ならば、Windows用とはどういうことかを知る必要があります。
それは、ユーザーインターフェイスがどうあるべきかということです。これを知らずしてWindows用のアプリケーションを作ることはできません。経験的にそれっぽいものを作ることはできますが、デザインのガイドラインから知らないうちに外れていたということもありがちです。
たとえば、一つのフォームにたくさんのコントロールを貼り付けたり、Enterキーでフィールドを移動したりといったことは、ガイドラインから外れたことです。
仮にそのようなプログラムを作ると、あちこちで不整合が生じるばかりではなく、ふだんは出てこないVisual Basicのバグを誘発することになります。
他人にも使ってもらうWindows用のアプリケーションを作るなら、必ず「Windowsインターフェイスデザインガイド」を読むべきです。Newsに質問する前に、このようにやってはいけないことを知っておく必要があるのです。
Visual Basicでは、Windows APIを使うことが多々あります。しかしながら、APIの情報は Visual Basic にはありません。これは、API は Windows の機能であり、Visual Basic の機能ではないからです。Visual Basic は API を呼び出すための入り口を提供しているだけで、実際の機能は Windows が提供しています。そのため通常の方法ではなかなか情報を得ることができません。このような場合には何か別の情報がたくさん含まれているものが必要となります。
ここでは API を例にとりましたが、他でも話は同じです。あなたのプログラムに複雑な数式が必要ならば、それらがのっている本が必要になるでしょうし、SMTPプロトコルの詳細が知りたければ、RFCドキュメントを手に入れる必要があります。
API を使う必要性があるなら、Software Development Kit (SDK)が必要になります。SDKには 個々の API の英語のドキュメントや、開発には必要不可欠なツールや、C 言語によるサンプルが含まれています。これはAPIを使う以上は持っていて当然のものです。
News で質問する場合、回答者もこのあたりの情報を読んでいることを前提として回答します。したがって、必要な情報が書かれている媒体を手に入れ、読んでいるかどうかが重要になってきます。
SDK は現在単体発売がされておらず、 Microsoft Developer Network (MSDN)あるいはVisualC++に含まれています。以前は MSDN は年間契約で 3 ヶ月おきに CD-ROM が送られてくるというものであったため、すぐに入手というのは困難でしたが、現在は MSDN は単品パッケージで発売されているので比較的容易に入手できます。
SDKの内容のほとんどは、英語であり、サンプルプログラムはCで書かれています。Visual Basicで使うために、英語のドキュメントを読破し、C言語のサンプルを見る必要があるのでしょうか? 答えは「Yes」です。
Windows の新しいバージョンが最初にリリースされるのはどこでしょうか? それは アメリカです。日本語版は少なくとも 3 ヶ月程度は待たないと手に入りません。ソフトウェア業界全体を考えてみても、アメリカが中心となっているのです。日本人としては悔しいことかもしれませんが、最新情報を得るためには英語を避けて通ることはできません。
API のドキュメントは膨大な量があります。これを日本語訳して出てきたときには、すでに新しい API がいくつも増えたり、新しいテクノロジーが生まれています。
英語は面倒かもしれません。しかし、あなたがこの仕事をしている以上、やらざるを得ません。とはいえ、ほとんどがテクニカルタームとコードなのです。ある程度慣れてくれば、そんなに難しいことはありません。毛嫌いせずに、英語に親しみましょう。
SDKに含まれているサンプルプログラムはCで書かれています。そして、Windows自体のネイティブな部分に触れるならば、Cを使うのが最適です。
しかし、あなたはVisual Basicを使いたいのであって、Cのような面倒なものは使いたくないと思うかもしれません。しかし、APIをもっともシンプルに呼び出すことのできる言語はCなのです。あなたが、Visual Basic でAPIを使いたいならば、一度はC 言語で Windows プログラムを作っておくべきです。
API でつまずく Visual Basic プログラマーは、C 言語で Windowsプログラムを作ったことがない場合がほとんどです。 Visual Basic 用のAPI 呼び出しのサンプルプログラムを改造しているうちは、この事に気がつかないでしょう。しかし、仕様変更要求がされたときに そのサンプルを変更する必要が出てきたとき、その時になって初めてその重要性に気づくはずです。
Windows APIを使うことだけが目的ではありません。問題が起きたときに、その原因を探る上でも、この知識は重要なのです。
とにかく、一度はC 言語で Windows プログラムを作ってみてください。Visual C++ を使うときには決して MFC を使わないようにしてください。MFC は重要な OS とのやり取りをすべて隠蔽してしまい、Visual Basic プログラマーの糧にはなりません。MFC を使わないなら C++でも大丈夫です。
C 言語で WinMain から始まり、CreateWindow でメイン Window を作成し Windowプロシージャで Windows からのメッセージを受け取るプログラムを作ってみてください。
将来的には きっとあなたの糧となるハズです。
作ったプログラムが、ある環境では動かない、あるいはセットアップができないといった問題は、一度は起きるものです。プログラム的なロジックミスであれば簡単に分かることもありますが、環境の問題となるとお手上げになってしまうことも少なくありません。
こういった問題が発生する可能性としては次の2種類が考えられます。
1台しかマシンが無いときには「テストできる環境が無い」と思いがちです。しかし、1台しかマシンが無いときでも、OS の選択とインストールの方法さえ間違わなければ、開発環境とテスト環境を共存させることが可能です。ただし、クリーン環境を残すために PD あるいは MO などのリムーバル メディアか、大容量 HDD があることが前提です。
あらかじめ、Windows 95 + SP1 の環境であるとか、Windows 95 + IE302 の環境であるといったそれぞれの環境を作っておき、リムーバブル メディアに保存しておけば、必要に応じて環境の構築し直しが容易にできます。
要は、2回目以降のインストールの手間を省くわけです。この時アプリケーションをインストールする時には、Windows か Program Files のどちらかのフォルダへ入れるようにします。
クリーン環境でテストを行えば、問題の原因はを環境から切り分けることができます。特にセットアップのテストはこのような環境でないと本当に必要なファイルや、セットアップ後のプログラムの動作を正しく判断することができないからです。
これらのテストは何らかのソフトのインストールにより、開発環境自体がクリーンでなくなってしまっている場合のチェックにも欠かせません。
クリーン環境があれば、そこへアプリケーションをインストールすることもカンタンですから、特定環境下でうまくいかない場合の切り分けを行うことができます。
あなたのカスタマーから 「あるソフトが入っている環境にインストールできない」と言われた時に、そのソフトが問題なのかどうかはクリーン環境 + そのソフトで調べることができます。これでうまく行く場合には、そのソフトが問題ではないということになります。
画面の表示がおかしいときや、描画によってリソースが減るといったことがあります。
このようなときには、Windows 95 であればセーフ モードで、Windows NT であればVGA モードで起動してみるといいでしょう。この状態で問題がないのであれば、原因はディスプレイ ドライバにあるということが明確になります。
印刷がおかしいときには、プリンタドライバに問題があるケースがあります。複数のプリンタで動作を確認してみましょう。プリンタドライバはベンダーごとに最新のものがインターネットで公開されていることが多いようです。最新のものを使うよう心がけましょう。
プログラミングの問題となった時には、どこが問題なのかを明確に切り分ける必要がでてきます。あなたが Net News に投稿する場合でも、どこが問題なのかを突き止めない限り、解決までに時間がかかったり、期待した答えが得られない場合が多いでしょう。
その結果、自分のやりたいことが伝わらないばかりでなく、「これはやりましたか?」と逆に聞かれることになるでしょう。
プログラミングでつまずいてしまったときには、「問題を再現できる必要最低限のコード」を作り出すのが効果的です。
よくある話ですが、問題が起きたその場所ではなく、実は別の場所に原因があったということがあります。まずその場所が問題であると仮定したなら、その場所を切り出し、本当にそこが原因かどうかを確かめてみる必要があります。
そのためには、その場所を切り出し、新規プロジェクトで試すという必要が出てきます。狙った通りその場所が問題であったなら、さらにそれを細かく細分化し、削れるコードは削っていきます。そうして、問題のコアを取り出します。
問題のコアを取り出した時、自分で解決できる場合には、問題ありませんが、自分で解決できない時にはそのコードを提示するしかありません。この時の問題のコアであるコードを「問題を再現できる必要最低限のコード」といいます。
コードは小さいに越したことはありません、できる限り小さくしましょう。
ここまでのことを実践すれば、情報の検索や環境に関する問題はクリアできるでしょう。
しかし、問題のコアが分かったとしても、自分では解決できないこともあります。このようなときには、誰かに助けを求めるしかありません。
しかし、助けを求めるにしても、ただ「助けてー」だけでは、お話になりません。冷たいと思われるような回答が返ってきたり、また回答自体されないこともあるでしょう。誰かに答えてもらえるためには、最低限伝えなくてはならないことがあります。
状況により、伝えなければいけないことは変わってきますから、ここにあることを元にアレンジするとよいでしょう。
自分がやりたいことは、詳しく伝えるようにします。自分が見つめている方向とは別の方向で、もっと簡単にできるアイデアを提供してくれる人ががいるかも知れません。
何が問題となって困っているのか詳しく伝えるようにします。やりたいことの方向が変われば、必然的にこれは消える可能性がありますが、問題点をはっきりさせることは大切です。
これも詳しく説明します。自分が今までトライした事は説明します。何も試さずにただ質問だけする人は、嫌われます。あなたの努力を見せる必要があります。
これは状況によっては、伝える必要が無い場合がありますし、詳しく伝えなければならない場合もあります。
プログラムを見せることは、守秘義務の関係でやりにくいかもしれません。しかし、必要最低限のコードがないことにはよいレスポンスも期待できません。
この他にも自分が必要と思った内容はなるべく伝えるようにします。
Newsなどで得られる回答は、ヒントだけかもしれません。それをベースに自分でやってみた結果うまく行ったなら、そのやり方を報告しましょう。そして、後から同じような問題に遭遇した人の役に経つようにしましょう。
質問することは簡単です。
しかし、いつまでも質問ばかりしていては進歩がありません。
Newsで見かけた質問の答えが、あなたが知っていることだったら、答えてあげるように努力しましょう。決して無理をする必要はありません。あなたの知っていることを少しだけ困っている人に教えてあげるだけでよいのです。
このように、情報を共有することはとても大切なことです。ですから、個人的にメールをして聞いたり、回答するのでは意味がありません。
NewsはGive & Takeです。お互いに助け合いの精神を持って接しましょう。