これが面白いのはバランスをどうとるかというところ

http://d.hatena.ne.jp/nowokay/20091216#1260907774

これが面白いのが、開発者にとって重視するバランスが異なるというところだろう。


保守性を意識したコードなのか、それとも早いけど、保守性の拡張性の悪い泥臭いコードなのか。

そのバランスを取るのもまたプログラマ。だから面白い。もちろん天才は両方とも満たすはずだ。今以上に技術が重要になる世の中になるといいな。


今までは効率部分はわりと無視して保守性の高いコード重視しすぎる傾向だった。適当に書いても高速に動くもんね。インタプリタでも異様に速度が速い。

クラウド時代はリソースの消費を意識したチューニングも大事になる。消費したりソース=お金だから。


ここは8bit時代を生きたプログラマこそ腕の見せ所だろう。メモリ空間は64KB。今のCPUの1次キャッシュにおさまりそうだ。


たとえば値を2倍にするのに掛け算は使わない。もちろんシフトも使わない。一番高速なのは同一の値を使った足し算だ!

コンパイルが中間コードで実行時にインタプリタとして実行されるかコンパイルされて実行されるか、どのように最適化されるかがわからないJavaでこれは無意味だな。

あとシフトは早いイメージあるけど、掛け算よりは早いというだけであって結構遅かったよね。バレルシフタの登場でシフト=早いとなったけど。Pentiumくらいになると2パイプあるけどシフトはパイプラインがうまく回らなくて意外とシフトだけ使ってると遅かったり。

あと掛け算は今のCPUならばさほど意識しなくて大丈夫だけど、割り算や浮動小数点演算は相変わらず遅い。性格にはスループットは高いが、レスポンスが悪い。演算した結果をすぐに使う場合はかなり待たされる。レジスタリネーミングとアウトオブオーダがあるかどうかが非常に重要。そうじゃないなら命令をどうパイプにつめるか意識して書くこと。

ん?これJavaで必要か。いや、必要になるはずだ。問題はVMレジスタマシンじゃないのに実行されるときレジスタ使うって所だな。まるで予想がつかない。


まぁ冗談はこの辺にして、過去の例を見るとハードの性能向上がとまったときに一気にソフトウェアの品質が上がっていくというのは明らかなので、シングルスレッドの性能が頭打ちになった今こそ面白くなるところなのかもしれない。