Luna Labs
Luna Labs
環境とプログラミング

環境といっても、いわゆるエコロジーの「環境」ではない。プログラミングという行為を取り巻く環境である。狭義のプログラム/ソフトウェア実行環境としてのコンピューター/ハードウェアや、プログラミング環境、さらにそのソフトウェア/ハードウェアを成立させる人間の世界での目的や思惑を含んだ広義の環境について考えさせられる記事が、"Dirty Coding Tricks"としてGamasutra(ゲーム開発全般を扱う海外サイト)にアップロードされている。ゲーム開発者たちが、納期に迫られたときに、どんなトリックを使ってゲームを出荷するための原盤の提出にまでたどりついたか。複数の投稿をまとめた、半分笑い話のような実話が語られている。

プログラミングは、コンピューターというハードウェアをコントロールするための命令群としてのソフトウェアを構成する行為なので、当然ながら論理的な思考の組み立ては必須である。しかし、何のためにソフトウェアを作成するか、作成したソフトウェアが人間に対しどのような効果を与えるべきか、という人間の世界での事情がそこに加わってくると、最終的な成果物は、人間の恣意的判断を多く含んだものとなる。

"Dirty Coding Tricks"で語られているのは、こんな話だ。視点を90度回転させてキャラクターを配置したらクラッシュが起きなくなったのでそのまま出荷した、CRCに依存した大量のコードが既に存在するときに偶然一致してしまったCRCを不一致にするためにデータに空白を追加した、オブジェクトのメンバ変数を取得するためにわざわざオブジェクトの先頭からのアドレス計算をしているコードを見た、特定のオブジェクトを番号で指定して隠すというデータ依存のコードをエンジンに入れた、ある関数のシグネチャを変更したくないために既存のパラメータにデータをパックした、本当のバグの原因を見つける時間を稼ぐためにバグの原因からプレイヤーキャラクターを遠ざける見えない壁を設置した、特定の条件に望んだ挙動を得るためのパッチ作成を繰り返した結果より多くのパッチが必要となった、メモリの制約に対応するのが最終的に無理だと思っていたら実は最も経験豊かなプログラマーがその事態に備えてメモリを予め取っていた、等々。

ゲーム機は、制約の多いコンピューターである。近年ではその制約は徐々に緩んでいるが、メモリの量、配布媒体としての光学メディアなど、PC向けのソフトウェアに比べると制限が多い。また、専ら人間の感覚に奉仕するためにソフトウェアを作成するという点も特異だ。たとえば、リアルタイムグラフィックスのプログラミングは、どのようにして完全に光学現象をシミュレートせずに、低コストな近似的手法で人間の目から見た場合のリアリティを向上させるか、という点に主眼が置かれている。これらの状況を逆手に取って、どうにかリリースに間に合わせるために苦肉の策を講ずる。そこに、すぐれて人間的なプログラミングの様相が現れてくる。

Windows PC向けに開発しているLunascapeでも、どのようにして個々のユーザーにとっての使い勝手を向上させるかという課題はあるものの、利用できるリソースについては、ゲーム機の世界ほどの制限は存在しない。従って、上記の記事で挙げられたような危険なトリックが用いられる機会は幸いにして無い。それでも、逆境においてどのような判断を下すべきか、"Dirty Coding Tricks"の逸話は、プログラミング産業に普遍的な、様々な示唆を含んでいる。


Posted 2009/9/1 15:44 by RyuK
Copyright Lunascape Co., Ltd. All rights reserved.
Powered by Community Server (Non-Commercial Edition), by Telligent Systems