« Hearts of Iron Ⅲ | トップページ | テトリスを1時間強で作ってみた »

2009.11.08

 「やれば必ずできる」と「できるかどうかわからない」

 突然だけど、プログラミングって2種類あるよな。
 「やれば必ずできる」と「できるかどうかわからない」の2つ。

 仕事でやるものはだいたいが「やれば必ずできる」ものに入る。どういう機能を持たせればよいか理解して、それを実現するデータ構造を考えて、素直に書いていけば完成する。まあ所要時間は事前の見込みより数倍くらい長くなることもあるけど、完成しないということはたぶんない。

 一方の「できるかどうかわからない」は、そもそも解決することができるかどうかが定かでないような問題にチャレンジすることだ。解決できない理由としては、もともと原理的に無理、計算量が爆発して現実的な時間内で実行できない、エンドユーザにとって許容可能なパフォーマンスが出ない、などいろいろあるので、それをうまくかわしてゴールにたどり着かないとすべて徒労になってしまう危険な世界だ。

 もしかすると、職業プログラマの多くは「できるかどうかわからない」問題にはチャレンジしたこともないかもしれないけれども、知的興奮としてはこっちがはるかに上だ。

 過去にチャレンジした例としては、あるJavaVMの実装があって、それのガーベジコレクションのアルゴリズムを中断可能にする、というのがあった。オリジナル実装はガーベジコレクションが一度始まると完了までVM全体が動作しなくなってしまう欠点があったので、それに割込をいれられるようにする、ということだ。ふつうはそれくらいの停止は問題にならないけど、Javaアプリケーションがリアルタイム性を必要とする場合は困るのである。
 結果的にそのときのチャレンジは失敗した(2~3週間かけていくつかの戦略を考えて検証し、すべてうまくいかない結論が出た)けれど、そういう類の問題が「できるかどうかわからない」に相当する。

 で、なんでこんな話を書いているかというと、つい昨日、「できるかどうかわからない」問題の一つが前向きに解決できてたいへんうれしいのである!
 これは今後の商売のネタになるので詳細は書けないけど(いつかのバージョンのTacticoに搭載されるでしょう)、こんな感じ。

●バージョン1の実装
 以前アルバイトにやらせてみた。ある程度はできたものの仕様にかなり制限をつけないと実用にならず。
●バージョン2の実装
 バージョン1で得た経験を踏まえて自分で再設計して実装。しかし、「場合分け」の膨大なif文の分岐に耐えられず挫折。
●バージョン3の実装
 場合分けが複雑になりすぎる理由を考察していろいろ改良して再実装。これでうまくいった!

 コードの行数ではせいぜい1000行くらいの機能なのだがえらく苦労したぜ。
 もちろん、前バージョンの失敗の経験がなければ次には進めなかった(同じ分野で充分な経験を積んだ人なら別だろうけど)ので、あきらめずに思考を蓄積するのは重要なのである。いきなり最初から正解を思いつくというのはとても難しいし、失敗からちゃんと知見を得て次に生かすのも難しいが、突破できた場合の喜びは大きい。

 さて次はこいつのObjective-Cを作らねば...

|

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/73665/46711352

この記事へのトラックバック一覧です:  「やれば必ずできる」と「できるかどうかわからない」:

コメント

なかなかその2つをうまく言い表すのは難しいよね。

前者は、受託開発型の仕事で見積りもできる内容
後者は、企画して売り込むソフト

できるかどうかわからないけれど、実現性の可能性と時期を予想しなくてはいけない。すぐに誰にでもできるものだったら競争力はないし、そうでないのならば実現性は低い。未踏の企画と同じような話ですよね。

どんなものが出てくるか楽しみにしています。

投稿者: Solis (2009/11/09 8:09:34)

コメントを書く