kensyou_jikenboのブログ

yahoo!ブログの同名ブログを移行しました

C#出来るか?再考察

表記命題の説明用に様々な例が挙げられてきた。
(参考”江川紹子さんにC#とは何かを解説する人々”  http://togetter.com/li/458426

実際の命題は「被疑者がC#で今回のトロイを作れるか?」になるだろうが、当方は本日その説明用に以下の例を考えてみた。
<5年ぐらいの自動車運転経験が有る人がいる(Aさんとする)。
 Aさんは東京から北海道まで車で行きたいと思っている。
 条件は、フェリーは青函航路以外無し、高速も無しで下道オンリー。
 行けますか?>

これは大抵の人が「行ける」と答えるだろう。
では期間を1日とする条件を追加したらどうか?
<1日で行けますか?>
これも「行ける」と云う人が多いと思うが、青森-函館フェリーの時間などが問題になると考える人も出てくるだろう。

そしてもうお気付きの通り、北海道でも函館と札幌では違ってくる。
函館までは到達できても、札幌までは微妙かもしれない。
(ネットで見たら東京から下道24時間で苫小牧に着いたという人がいた)
更に旭川もあるし、稚内根室も北海道である。
旭川だと困難という答えが多いだろうし、稚内根室はもう無理だろう。
これを単純化して論理的に考えれば以下の式になる。
到達距離 = (平均)速度 x 時間

時間要素を考慮に入れるのは当たり前の話なのだが、C#できるか?」という問題に関しては期間が考慮されていない答えが過去に見られた。
例として或るブログに載っていた次のような意見がある(批判する意図ではないのでURLは省略)。
<私はC#は使ったことがないのでよくは知りません。
   でもJAVAができるなら、やる気と時間をかければC#のソースは読めるのでは?
 ・・・
 今回のプログラムはお仕事ではない。
 ということは、いくら時間がかかってもいいのでしょう?
 根本から大きく変えるような作業でなければ、「時間」「やる気」「開発環境」があれば出来ると思います。
 とにかくソース組んで実行ファイル作ってテストしまくって、自分が望む動作ができればOK…でしょう?>

「時間」というファクターを書いているのに、「いくら時間がかかってもいいのでしょう?」という前提条件になってしまっている。
ただ、ブログ記事日付は3月10日であった
トロイ開発期間が6月末~8月末の2ヶ月程度という見方を検察側が明らかにしたのは7月10日の証明予定事実記載書第三部においてであり、3月頃は開発期間を余り考慮せずに考えた結果と想定される。
(当時ネット上で「開発期間はいくらかかってもいいはず」と主張する人は確かにいた)

なお、検察の主張する6月末からの2ヶ月間だが、中間の7月末に大阪男性PCに対する遠隔操作が行われて犯行予告も実行されている。
そのため、初回動作版までの開発期間が1ヶ月で、その後の改良に更に1ヶ月程度ということになる。

では現在において、「C#独習しながら開発期間一ヶ月」という条件を付けて「被疑者がC#で今回のトロイ作れるか?」という問いをしたらどうなるか。
JavaをやってたのならC#も分かるから出来るだろう」と簡単に答える人はぐっと減るのではないかと思う。

「北海道に行けるか?」という問いに戻って、期間だけでなくもっと条件は色々在り得て、今回の事件に関連して考えることが出来る。
まず前述の「北海道の中でもどこか?」という点は、「トロイ(iesys.exe)をどの程度のレベルと見るか?」ということに当てはめられるだろう。
到達困難度としての目的地設定は、函館なのか、札幌なのか、旭川なのか、稚内根室なのか、というような評価がiesys.exeに対して定まっていない。
(高さなら、高尾山なのか、雲取山なのか、富士山なのか、或いは海外のもっと高い山なのか・・・)
ある人はレベルが低いと云い、そうではなく結構レベル高いと云う人もいる。
この辺でもう「北海道に行けるか?」という単純な問いでも一筋縄では行かなくなる。

JavaC#の違い」はどうかというと、余り適切な対比ではないが「普段右ハンドルの車に乗っている人が、いきなり左ハンドルの大型のアメ車でも与えられて北海道に1日で行けるか?」ということにやや似ていると思う。
結局慣れの問題になるが、1ヶ月なら充分慣れるとしても、一週間ではどうか。
それが一日で、普段走っていない北海道への道のりなら影響してくることもあるだろう。

また、単に車そのものの違いだけでなく、付いているカーナビのルート設定能力や渋滞回避性能が違ったりするかもしれず、所要時間に影響を与えることも考えられる。
運転もカーナビも慣れれば扱い方を工夫するなどしてそう差はなくなっても、1日という制限が付くと色々面倒なことも起きる。また慣れるのが早い人と遅い人の個人差も大きいだろう。
このような要素が今回のJavaC#の比較に入ってくるのではないかと考える。

後は、「1日と云っても24時間走りっぱなしなのか、休憩はどれぐらい取るのか?」という点も重要になる。
本事件においては、「会社にいる間だけで開発したのか?、自宅でも開発していたのか?」ということにつなげられる。
会社のみでの開発で平日9時から5時、時折8時頃まで残業という条件は、「1日で北海道まで行けるか? 但し1日の内に運転できるのは最長12時間」というような条件に似てくるだろう。(制限速度は大体守るが、流れには乗るとする)
これは強力な条件で、例えば「12時間だと津軽海峡のフェリー乗船時間だけでも4時間近くかかるし、函館でも無理」とすぐ答えが出てしまう。

また、北海道に車で行くなら通常は高速使うが、出来るだけお金使いたくないというような訳があって時間がかかっても下道を使うのだとする。
本事件も普通のソフト開発なら堂々とできるところを、犯罪行為という理由があって隠して行うから、例えばネットアクセスも遅くなるTorを使う必要があったり、Visual Studioなど開発に必要な画面も他の人に見られないようにしたりして、時間も手間もかなり余計にかかるだろう。

同じ北海道に車で行くにも条件によって様々な場合があって答えも違ってくるように、
C#出来るか?」という問いも条件が不明確では本来答えは困難なはずである。
しかし、「C#できるか?」に関しては各人が独自に設定した条件で、しかもその条件を余り明らかにしないままの答えが氾濫した。
この点では前述のブログの人は「いくら時間がかかってもいいはず」という前提を明らかにしているので分かり易いが、検察が想定期間明らかにした後になると、もう「C#出来るか?」という問いを考える人も少なくなってしまって、期間を考慮した検討はなされないまま過去の見解が残ってしまっている。
こういう経過があったことが余り認識されていない。

今改めて前述の「Java使いの被疑者がC#独習して、他の人に見つからないようにしながら開発期間一ヶ月」という条件で「今回のトロイを作れるか?」について回答を求めないと、意味のある回答にならないと思う。
しかも、「一ヶ月」でも、「会社の勤務時間内のみで一ヶ月」と「自宅でも開発しての一ヶ月」の両方の条件で聞く必要がある(検察は「会社のみ」だとしても参考に「自宅でも開発」の場合も考えて聞いておいたほうが良い)。

それと、先に”到達距離 = (平均)速度 x 時間”と書いたが、
今回に当てはめれば”作成物(トロイ)のレベル = 開発能力 x 時間”としても良いだろう。
被疑者の開発能力についても派遣元社長や同僚の話など色々あったが、内面の問題なので最終的には曖昧になってきてしまう。それで本日は特に開発期間の方に焦点を当ててみた。
トロイのレベルや被疑者の能力面の考察は又別の機会にやってみたいと思う。

さて、関連して以前にval*gar*yさんから以下のような趣旨のコメントを頂いていたことに気がついた。 
<被疑者のようなプログラマーが、イチから独学でIesysを作るのは可能なのかどうか。
 ブログ主さんの見解はどうなのでしょう。>

本日の題材そのものであるが、前述のように特に能力面が不明である。
それで能力は一般的と仮定して本日焦点にした時間の方を重視して考えてみた。
以下の(1)~(3)の場合で考えるが、いずれも期間は一ヶ月(9時~5時、時折残業8時迄、土日休みで一ヶ月の勤務日は20日)とする。参考として当方がやったらどうなるかも推測して付けた。

(1)会社のみの開発で本来業務も一応怪しまれない程度にこなす(当初想定された条件)
  →被疑者や当方のみならず、殆どの人が無理ではないか。(天才レベルは別かも知れないが)

(2)会社のみの開発で本来業務は殆どやらない(検察の主張)
  →実際の大阪の事件のように一回目から目的達成させる完成度に持っていくのは相当ハードル高いと思われる。
  当方ではまず無理。
  被疑者も技術者として一般的能力レベル(或いはそれ以下)としたら厳しいと思う。
  もしやれたとしたら相当能力の高い人物。
  被疑者はこの条件で2~3ヶ月と佐藤氏に話していたと思うが、妥当ではないだろうか。
  ただ、その場合でも隠れてやるためにかかる余分な手間は含んでないと思う。

(3)会社と自宅の両方で開発。自宅でもTor使えて時間はほぼ無制限(本来ありそうな設定)
  →当方はこれでも厳しい(各掲示板の仕様などの調査や自動アクセス実験などトロイの基礎部分の検討から始めてソフトの基本構成を決めた後にプログラム開発・試験等を行うことになるので、1.5ヶ月かそれ以上かかるかも知れない。C#独習を考えたらもっと厳しい)。
   掲示板なども含むインターネット関連の開発知識が元から相当あって、JavaからC#への理解も比較的早くて、何より高い集中力が一ヶ月持続できる人ならやれるのかも知れない。
   つまり、好きなことには打ち込むという被疑者はギリギリ可能性あるか?
   (被疑者が前項のように2~3ヶ月と言っているのは会社だけでフルにやった場合と考えられるので、家でもやったら1ヶ月か1ヶ月半ぐらいに相当するのではないか)
   ただし、家でも開発したという条件は検察が主張してないので参考としての見解になる。
   仮に検察が主張を変えて自宅でもやったとするなら、自宅での開発証拠が或る程度は必要になってくる。

なお、(1)~(3)はiesys.exeのテスト環境を考慮していない。テスト環境によって開発効率は大きく影響を受けるが、iesys.exeの動作テストの為の環境がどうだったのかは不明。
同僚PCにiesys.exeの痕跡があったという話は、以前当ブログで「開発用として入れたとすると辻褄は合う」ということを書いたが、実際のところは詳細情報がないので不明である。
本来検察側は被疑者が派遣先で開発したと主張するなら、テスト環境の想定も示さないと具体性に欠けることになりかねない。それほどソフト開発におけるテスト環境は重要。

本日以上であるが、明日もこの件を続けて記す予定。