私的メモ:自力トラブル解決マニュアルの種

しょうもない質問してくる学生を直面したトラブルを自力で解決できるようにできるマニュアルができないかなぁと思ってつぶやき始めたのだけど、マニュアル化はできそうにもないです。
10
next49 @next49

となると、やはり、まずは、自分が本当に困った状況におかれているということを確認し、困っているということを確定してもらわないといけない。何が目的(理想的な状況で)、何が実際に行ったことで、確定した事実としてどういう状況にあるのか。そして、なぜそれに不満なのか。

2011-11-26 00:17:00
next49 @next49

困っている状況が確定した場合。どうすればよいか?私が普段教えていることからすると「分割し、支配せよ」となる。その状況を成り立たせている原因となる要素を列挙し、相互に干渉しないようにしながら、どれが支配的な原因なのかを確認していくという作業に入る。

2011-11-26 00:18:35
next49 @next49

で、学生曰く「理屈はわかるけど、原因となり得るものの列挙ができない」とのこと。じゃあ、私はどういう風に原因となり得るものを特定しているのか?はてさて?

2011-11-26 00:19:26
next49 @next49

原因候補の列挙は、まずは直近で行った自分の行為から疑っていくかな?「ゴミを入れればゴミがでる

2011-11-26 00:28:16
next49 @next49

「ゴミを入れればごみがでる」の基本とおり、何が好ましくない状況が発生しているならば、その状況を招いた直接的な原因が怪しい。よって、その状況を発生するまでn自分の行ったことをリストアップする。そして、各行為ごとにその状況に影響を与えそうな要素を洗っていく。

2011-11-26 00:30:05
next49 @next49

次は、その状況に関連するもので「壊れる/壊れている」可能性があるものがないかを探す。とはいえ、盛者必衰、諸行無常だからなんだって壊れるわけなので、放っておくとフレーム問題発生。自分の行為と関連性が高いものから疑っていく。

2011-11-26 00:32:28
next49 @next49

ソフトウェアならば1) 自分が用意した入力データ 2) 他人が用意した入力データ 3) 自分が作ったスクリプト 4) 他人が作った普及していないスクリプト(not ライブラリー) 5) ライブラリー 6) コンパイラー 7) OS 8) ハードウェア(CPU、メモリ、HDDなど)

2011-11-26 00:34:20
next49 @next49

私の場合、自分に甘く、他人に厳しいので、何か良くないことが起こるとすぐに他人に原因を求めてしまう傾向にある。なので、その傾向を加味して、自分側から洗う。

2011-11-26 00:35:13
next49 @next49

あとは、柔らかいもの(変えやすいもの)と硬いもの(変えにくいもの)にわける。あるいは、少数人しか使っていないものとたくさんの人が使っているものに分ける。基本的には変えにくいものや多くの人が使っているものの方が、その働きを一定で安定していることが多い。

2011-11-26 00:37:30
next49 @next49

(承前) 何を安全パイとみるかは経験がものをいうので、素人は何が安全パイなのかはわかるはずない。どうするか?諦めるべし。えいや!と線引きしてその内側を安全パイとするしかない。でも、どこかに記録しておいて、すべてがうまくいかなかったときに再検討対象としておくこと。

2011-11-26 00:38:49
next49 @next49

まとめると、まずはその状況に至るまでにおこなった、自分の行為を列挙する。その中で状況の発生に寄与しそうなものをすべて列挙する。次に、その状況の発生を成立させている道具および環境の中で壊れる可能性があるものを列挙する。

2011-11-26 00:41:10
next49 @next49

(承前) 壊れる可能性があるもののうち、使っている人が少ないものから、使っている人が多いものの順に並べる。また、変えやすいものと変えにくいものを並べる。両者を勘案して、「えいやっ」っと線引きし、その内側を検討対象とし、外側を考慮外とする。ただし、何を考慮外としたかはメモる。

2011-11-26 00:42:45
next49 @next49

一連の作業により、好ましくない状況を発生させた原因候補が列挙できた。さて、次はどれが主たる原因なのかを特定しなければならない。ある候補Aに着目し、その他の候補を一切変化させず、Aだけを変化させて、その状況が起こるか起こらないかを観察するのが基本方針。

2011-11-26 00:45:34
next49 @next49

(承前) とはいえ、他の原因候補を一定の状況に保つこと自体がそもそも難しいし、各候補をどう変化させたらば、その候補の無罪を証明できるのかということを考えるのも難しい。なので、各要素が他の要素にどういう影響を与えるのかを大雑把に検討してみる。

2011-11-26 00:47:21
next49 @next49

他の要素に影響を与えないもの、無罪か有罪かをはっきりさせるのが簡単なもの、その状況を発生させるのに近そうなものから順番に調べていく。

2011-11-26 00:48:44
next49 @next49

はい、私もそう思います。実際、卒論をやったことある修士と卒論やっていない修士・博士を比べると卒論やったことある修士の方がここいらへんが上手ですので。 @_ko1 卒論などは,それをする訓練なのかなぁ,と.繰り返させると身についていくのがわかりますし.

2011-11-26 00:52:39
next49 @next49

細かい言い回しは個性(癖・好み)ですが、文書の構造、論旨の進め方は他人の真似っこですから、真似事になるのを恐れずとりあえず書いたらいかがでしょう? @kkkimmy_h: この方(@next49)、なんか私と文章のリズムが似てる。...

2011-11-26 00:56:12
next49 @next49

疑う対象が「行為」である場合。基本は、その行為が自分の意図した結果を生み出す行為であるのか、そうでないのかが検討事項。適切な行為だったとして、その行為を正確に実行できたのかできていないのか。正確に実行できていたとして、入力は適切だったのか否か。そして、出力はどうだったのか?

2011-11-26 00:58:29
next49 @next49

疑う対象が「プログラム」であったとき、正常な出力はいったい何なのか?その正常な出力は使用している入力データから理論上導出できるのかどうか?理論上導出できるとして、入力データは正しいのか?入力データは正しいとして、そのプログラムの実行環境(特に許可権限)は適切なのかどうか?

2011-11-26 01:02:18
next49 @next49

(承前) そのプログラムの入力、出力、実行環境が正しいとしたら、他に何がダメで、意図した結果が得られないのか?

2011-11-26 01:03:02
next49 @next49

疑っているのが「ハードウェア」として、そのハードウェアは意図した目的で使用するのに適切なものであるかどうか?そのハードウェアの稼働環境はちゃんと整えられているかどうか?ハードウェアの設定は適切にされているかどうか?ハードウェアへの入力は適切であるかどうか?

2011-11-26 01:05:13
next49 @next49

(承前) ハードウェアの出力は正常かどうか?ハードウェアの出力は一定かつ安定であるかどうか?

2011-11-26 01:05:34
next49 @next49

各要素について、有罪か無罪かを判定する項目がはっきりしたとする。次は、実際に確かめるフェーズに入る。どうするか?一番重要なのは「確実に正しい」を早く手にいれること。その確実に正しいを基準として、ちょっとずつ確認作業を進めていくのが重要。

2011-11-26 01:07:50
next49 @next49

(承前) たとえば、ソフトウェアやハードウェアの提供元が出しているマニュアル類、テストデータおよびテストツール。専門家が書いている書籍、論文およびブログなどから始めるべき。いきなりGoogleでの検索から始めるのも良いけど、素人はマニュアルと書籍、論文から始めた方が効率的

2011-11-26 01:10:24
next49 @next49

で、確認作業を進めようとすると、確認作業自体がうまくいかなかったり、確認作業をどうやればよいのかわからなかったりする。そうしたら、これを「うまくいかなかった状況」にとらえなおして、再び分析を始める。これが多段につらなっていくので、自分が何やっているのかわからなくなったりする。

2011-11-26 01:12:16