カメヲラボ

主にプログラミングとお勉強全般について書いてます

ショートコーディングって何?

http://d.hatena.ne.jp/gpuppur/20070512
よく誤解されることなのですが、

正直ショートコーディングより、開発時間、実行速度、実行時に必要な資源をショートにするほうが好きです。

  • Golfとの違い

ショートコーディングは単にコードを短くするものではありません。また、Code Golfのように単純な問題で、主にスクリプト言語を用いてアクロバティックなコードを書くような、パズル的要素ばかりで成り立つものでもありません。

ショートコーディングの基盤はPKU Judge Onlineで、ここではACM/ICPC対策の問題として様々な問題が存在します。Code Golfで扱うような単純な問題から、数学的な問題や、グラフ理論動的計画法等の最適化を要する問題から、同じアルゴリズムでも処理系の特性を掴んで細かなチューニングを行うという、最速コード・低消費メモリについての研究もすべて含んだものがショートコーディングです。

  • 最短コードは上質な「おから」

ここでよく紹介する最短コードは、それらをすべて研究し尽くした上での残りカス、言わば「おから」のような存在です。実行速度や消費メモリなどの栄養素を十分絞りきった上で、おからとしておいしく食すのか、「んなもんカスなんやからウンコと一緒じゃ(`ω´)」と言ってウンコ扱いするのかはプログラマの勝手かもしれませんが、おからをウンコというプログラマは、私はウンコプログラマだと思います。

  • 開発時間

また、開発時間などというものはどうとでも言えるんじゃないかと思います。短期間で開発を行うには、システマチックな問題もあるかもしれませんが、基本的に開発者(組織)が蓄えた資産を効率的に出し入れできるかの問題ですので、たとえば最近私が書き上げる最短コードは以前のものと比較にならないほど高速な仕事です。最近話題になったFizzBuzzのコードでも、Cで最短の73Bは結構時間がかかりましたが74Bの驚異的な短さのコードは2分とかかっていません。これは、今まで積み上げてきたショーとコーディングのノウハウとその経験で培った勘によるものです。

  • プログラミング修行

これこそ「役に立たないことをやろう」という言葉に込めた私の思いです。ショートコーディングによって、最終的に出来上がるものはコードのおからです。好きな人には好評かもしれませんが、そうでもない人にとっては「何でそこまでする??」と思われるだけの存在です。しかし、そこまでやるからこそプログラマにとって必要な能力や忍耐力・集中力を鍛えられるのであって、その部分を無視してはなりません。

私のようにおからを作り続ける必要はありませんが、一端のプログラマになるのならそれくらいの修行はしておかねばならないでしょう。