gallu’s blog

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

さじ加減のむずかしさ

まぁ毎度同じみ的な内容なのですが、色々な角度から。


考察の元ネタは、こちら。
https://twitter.com/nfujita55a/status/847131544166719488
コードが面白いので、頑張って書いてみました。

Runtime r = Runtime.getRuntime();

if ( hasA == true && hasB == true && hasC == true ) {
    r.exec( "foo -a AAA -b BBB -c CCC" );
} else if ( hasA == true && hasB == true && hasC != true ) {
    r.exec( "foo -a AAA -b BBB" );
} else if ( hasA == true && hasB != true && hasC == true ) {
    r.exec( "foo -a AAA -c CCC" );
} else if ( hasA != true && hasB == true && hasC == true ) {
    r.exec( "foo -b BBB -c CCC" );
} else if ( hasA == true && hasB != true && hasC != true ) {
    r.exec( "foo -a AAA" );
} else if ( hasA != true && hasB == true && hasC != true ) {
    r.exec( "foo -b BBB" );
} else if ( hasA != true && hasB != true && hasC == true ) {
    r.exec( "foo -c CCC" );
} else if ( hasA != true && hasB != true && hasC != true ) {
    r.exec( "foo" );
} else {
    System,out.println("あり得ない");
}


付帯情報として

この方、10年選手で、余裕のある状況で書かれたものです

との、事。


さて……まぁ本音ぶっちゃけますと「現場で見たらこぶしで殴る」ような感覚をたっぷりと感じるところではあるのですが。
実際に色々と考えてみると、なかなかに「根の深い」お話、になります。


ツイートにも書いてあったのですが

「これ直してよ」と私がいったら、このソースの開発者曰く「8ケースとも単体テスト通ってOKだったから品質は問題ありません」と言われ、気が遠くなった。

このあたり。
「ちゃんと動くから問題ない」というのは、一つの観点として、ないわけではないです。
もちろん、コードとしては「循環的複雑度の観点」とか色々あるのですが。
「馬力で常に全部テストしているから何が問題なのか?」と問われた時に、どの辺で突っ込むか僅かに悩むわけですまぁ「無駄な時間つかってムダ金使うな」で一撃ではあるのですが。


この辺はおそらく、ごくわずかに思考していれば、もうちょっと簡単に書けると考えられます。
PHPで書いてしましますが、基本的には

$command = 'foo';
if (true === $hasA) {
    $command .= '  -a AAA';
}
if (true === $hasB) {
    $command .= '  -b BBB';
}
if (true === $hasC) {
    $command .= '  -c CCC';
}

ってな記法でいけるはずですし。これだと「パラメタがさらに1つ2つ追加」されても、ケース数は爆発しませんし。


技術的知見の多く*1は、こんな風に「知らないと非常に無駄であったり非効率的であったりするものを、効率的にする」ものでございます。
アルゴリズム各種とか、その最たるものですね。
で、その手の知見のもう一つ大きな特徴が「知らないと、そもそも"困っている事が理解できない"から、"必要になったら学ぶ"の、まず"必要である"が認識できない」ところ、でございます。


ヒソカ…だと思ったんですが、確認したらウイングさんの台詞ですね。

極寒の地で
全裸で凍えながら
なぜ つらいのか
わかっていない
ようなもの

「知る」ってのは、とても大事な事でございます。


ただ……じゃぁ「どこまで知ってればいいのさ?」ってのが、当然、出てきます。
その辺の加減を間違えますと、ガッツが言うところの

それともお前
何十年も修行して、達人にでもなるのを待ってから戦場に出るつもりか?
気の長げェ話だな

ってな事になってしまいます。


この辺のバランスって、本当に難しいなぁ、と、多分これは、生涯悩み続けるんだろうなぁ、とか思ってたりします。
おいちゃんのスタンスとしては「百尺竿頭進一歩にもあるように生涯日々精進しつつも、"精進中である"事を言い訳にせずに行い、新しい教えがあったら躊躇なく受け入れる」ってなあたりかなぁ、と。
薄氷を踏むような、危ういバランスですが(笑


この辺のむずかしさとか大切さを、なんとか、色々と伝えられるとよいなぁ、とか思ったりはするのですが。
伝える事もまた、難しいなぁ、とは、常々感じているものではございます(苦笑

*1:……だと思いたい