プログラマyasuhoの隠れ家

某ソフトウェア企業に勤務するおじさんプログラマyasuhoです

GBAプログラミングが好きな人って、どんな人?

手軽な低レベルプログラミング環境として GBA はもっと評価されるべき
tekezoさんのおすすめ紹介記事です。

GBA homebrew日記

* みんなも GBA でプログラムを書こう

手軽な低レベルプログラミング環境として GBA はもっと評価されるべき


私もGBAはお気に入りの開発環境の一つです。これを使ってGBAのプログラムを書く人が増えてくれると嬉しいと思います。


ハードがシンプルで分かりやすいので、ちょこっとプログラムを書くのに向いています。もちろんハードソフトともにテクニックを極めることも可能。私は極めるなんてレベルには全然達していませんが、作る人のレベルに応じたプログラミングを楽しめるところがいいですね。


ただ、最近の開発環境に比べると不便なところもあります。便利なライブラリなどはないので、基本的に自分で一通り作らなくてはならない。速度を上げるための工夫をしなくてはならない。応答がなくなった時のデバッグが大変。といったあたりに面倒さを感じる人も多いでしょう。


「なぜそこまでしてGBAのプログラミングをするの?」それにはちょっと解説が必要かもしれませんね。ちょっと長いですが、少しだけ年寄りの話を聞いてもらいませんか!?:)

ソフトウェア技術と抽象化


プログラミングに限らず、コンピュータソフトウェアはずっと抽象化と仮想化を目指してきたと言っても過言ではありません。


昔コンピュータを動かすには機械語という、CPU固有の言葉で書かれていました。それは人間にとって分かりにくいもので、さらに他のコンピュータへ移植するには大変な労力を必要としたのです。加えて周辺機器ごとに独自のソフトを作らなくてはなりませんでした。


やがてプログラミングの負担を軽減するため、機械語自然言語に近い形に抽象化する「高級言語」が作られました。さらにデータ構造を抽象化する「オブジェクト指向」やCPUそのものを抽象化するJavaスクリプト言語などが考案され、現在も様々なプログラミング言語が研究されています。


OSやデバイスドライバは周辺装置を仮想化することで、アプリケーションが直接デバイスを意識せずにソフトウェアを作ることを可能にしました。今日はネットワークも意識することなくシームレスに扱うことができるようになっています。今後はCPUの仮想化も進むことでしょう。


こういった技術によってプログラマは実装とテストの負担を大幅に減らすことができました。私もそれは正しい進化であると思います。でも、その結果失われてしまったものもあるんですよね。

失われたもの


それは「実装の楽しみ」と「コンピュータを操る感覚」


ソフトウェアが抽象化・仮想化された結果、プログラマは面倒なことに気を使わなくてすむようになりました。その結果、コンピュータがどのようにして動いているのか、周辺装置はどうやって制御するのか。それを知る必要はほとんどなくなったのです。その部分はOSやドライバなどが隠ぺいしてしまうので、そこに対する改善の余地はほとんどありません。


加えてプログラムの速度やメモリ使用量、ファイル使用率といった観点はすでに忘れ去られようとしているのではないかとさえ思えます。正確に言えば、努力をしただけの見返りがなくなった、というべきでしょうね。


そうなると、なんか私は急にプログラミングが面白くなくなってきてしまったんです。いえ、もちろんそれなりに楽しいんですよ。けど、そういうソフトを作るのって、なんか作っているというより、作らされているという感覚の方が強いのです。


GBAはその失われてしまった楽しさを味わうことができる数少ないハードウェアの一つだと思います。様々な制約の中どうするか考えたり、ちょっとした工夫で目に見えて性能が上がったり。そんなところがとても楽しいんです。

おじさんの戯言でした


ここまでの話に少しでも同意できる人ならば、きっとGBAプログラミングは楽しいと思います。逆に同意できないとすれば、やっててもあまり面白くないかもしれないなあ。


たぶん懐古趣味なんでしょうね。「昔はよかった」みたいな。ハードウェアから遠ざかったとしても、プログラミングの本質は変わらないのですから。


ただ、プログラムを作れる人ならば、それがコンピュータの中でどう動いているのか知っていて欲しいな。なんて、おじさんプログラマとしては思うわけです。ここまで読んでくれた人。年寄りの戯言につきあってくれて、どうもありがとう♪