小さくまとまってしまうのはもったいない
(0) はじめに
- (これはKがSecHack365での発言のうち、特に良かったものをリメイクした文章です。)
- なんていうのかな、とてもいい開発なんだけど、なんか物足りない感じを受けることがよくあります。・・・でもそれはもったいないと私は思っています。打破してほしいです。
- そのための方法論を提案してみます。
(1)(いきなりですが)想像してみてください
- あなたは今、家を買おうとしています。予算は5000万円です。・・・ということで、5000万円以下の物件のリストを得て、よさそうなおうちを探します。
- いや結構なことですよ。何より現実的です。でも、それで買う家って、たぶん普通の家です。
- これに対してこうだったらどうでしょうか。
- あなたはとにかく温泉が好きなのです。温泉付きのおうちに住みたいのです。それなら5000万円の範囲で手に入る温泉付きのおうちを買うでしょう。もしくは温泉のそばのおうちを買うでしょう。
- 私はこういう選び方はすてきだと思います。あなたはたぶんかなり満足するのではないでしょうか。もちろん、温泉を得る代わりに失ったものもあるでしょう。職場が遠いとか。街灯が少なくて夜道が暗いとか。
- でもどの評価項目でも70点くらいの物件ではなく、120点や20点が入り混じった物件に、私はものすごく魅力を感じます。個性が出ていますよね。
(2) 勉強のやり方で例えるなら
- 国数英理社の偏差値がすべて40の人がいたとします。ここからよく勉強して、次のテストで5教科の偏差値をすべて55にしたとします。偏差値は合計で75も上がったことになります(!!)。
- とても素敵ですね。志望校への合格を考えるのなら、とてもいいでしょう。
- これに対してこうだったらどうでしょうか。勉強を数学に偏らせて数学の偏差値を80にします(!)。数学だけならもう学年トップなんて余裕です。その代わり他の4教科の偏差値は35にまで下がってしまいました。
- だから偏差値の合計では20しか増えてないです。これは数学のみで受験できる一部の学校以外は、合格しにくいでしょう。そもそも仮に偏差値80の能力があっても、学校が偏差値80がないと解けないほどの難問をなかなか出題してくれないですよね。
- だから受験ではこの数学力の上振れ分を評価してもらえないでしょう。問題がやさしければ差がつきません。
- でも私はこの人にものすごい魅力を感じます。数学で分からないことがあったら最後はこの人に相談したいです。偏差値オール55の人は、申し訳ないけど「この人がいないと困る」にはならないと思います。
(3) 普通なものを作っても魅力的には見えない
- 2025年の川合ゼミでは新OSや新CPU命令を作ります。なんとなくよさそうな機能が10個とか100個あっても、それはほとんど光りません。既存のOSやCPUでも工夫すれば似たようなことができる、みたいなことをやってもイマイチ光らないのです。
- 1つか2つでいいから、圧倒的にまばゆく光ってください。それ以外は超ポンコツで十分です。・・・SecHack365の今までを思い返すと、優秀修了生に手が届かなかった作品は、「長所を伸ばす」ことを追求せずに、「弱点を少しでもマシにしておこう」ということに時間を使ってしまっていた気がします。でもそんなのどうだっていいんです。
- 「私は英語が不得意なので偏差値を30→45にしました」いや、それはとってもいいですよ。でも偏差値45は結局光らないのです。「私は理科が得意で偏差値を65→75にしました」おお、いいじゃないですか!
(4) ということで
- だから川合ゼミのたちも、「とにかくこの観点で見れば、最強」を目指してほしいです。
- そして1つか2つの特徴を徹底して作りこむだけでいいのであれば、全体を一通り作る必要なんてなくなるのです。これで開発時間を大幅に節約できます。
- 私のバイトコードは、すべての命令が実装済みだと思いますか?いやいやそんなの短期間でできるわけないです。マンデルブロ集合とあと他にいくつか作ったサンプルプログラムを動かすための必要最低限の部分しかでてきていません。・・・でもそれでいいのです。
- 未実装の演算子はいっぱいあるし、構造体とかのサポートも全然できてないです。でもそんなの後回しでいいんです。もし緊急に必要になったら、誰か他の人が適当に作ってもらえばいいじゃないですか。
- 今までの実装をみれば、たぶん無難な実装が誰でもできるでしょう。今は、そんな「どうでもいい部分」に時間をかけている場合じゃないんです。私じゃなきゃできないところを先に作るべきです。
- 私のアイデアで一体どこまで小さく作れるようになるのか、限界はどこなのか、現時点でそれより優先されることなんてありません。だからそこだけを完成度100%にするのです。他は全部後回しです。
- こんなに小さくできるのなら、あんなことやこんなことに応用できそうですね!って言ってもらうためにもとにかく限界まで先に作るべきなんです。そうすればこの開発の価値がやっと見えてくるんです。
(5) 追記
- 別のページを作ってまで書くほどの量ではないのでこちらに。
- たぶん学習駆動の坂井さんは「今ある機能にもう一つ足して、相乗効果を出そう」みたいな話をいつかすると思います。これはいい話で、全く持ってその通りなのですが、私はあえて逆の着眼点も紹介したいです。
- それは、「足したり掛け算する前に、とにかく引いて引いて引きまくれ」です。
- 例えば「無人島で1年間暮らさなければいけない、でも持っていけるものは1つだけ」みたいな無理難題を考えてください。この状況は、とにかく引きまくって、一番有用なものを選び抜かなければいけません。
- これがいいのです。引きまくって最後に残ったものは、かなり本質的な価値を持っていると思います。なぜそれを選んだかという説明もできるはずです(なんとなくでは限界までの引き算できない)。
- 何か作品の特徴を考えようというときに、この引き算の視点は使えます。しかも引き算のいいところは、引けば引くほど作る内容は減り、作るのは楽になるという事なんです。
- もう何も引けなくなるほど引いて、単機能をきちんと作り切って、そうなってからちょっと機能追加すれば、一気に応用の範囲が広がるのです。
- 引き算しないで、「なんかいろいろできるけどどれもパッとしない」状態で、何か加えても、大した化学反応は起きないのです。