2010-12-18 Sat [ ゲームについて ]
がまぐ公開されておめでとうござます…と投稿した身で書いているのもなんだけど、それはともかくとして。
がまぐに参加してくれと言われたとき、小さなプログラムを書くツールとしてSmall Basicを使った。
前のポストで使った印象として、小さくて・簡単でわかりやすいが、反面、30年間のソフトウェア技術の進歩を否定するような代物だ…と書いたわけだが、そのあとしばらく考えて思ったことを書きたい。
少なくとも、プログラムの初心者、ホビイストには、構造化プログラムはともかくとして、ローカル変数も型の宣言もオブジェクトもクラスも、テンプレート(ジェネリックプログラミング)も、およそ30年間のプログラム技術の(論理的な)進歩のほぼすべては「必要ない」ということだ。
(正確にはオブジェクトとクラスはWindowsの.netの構造上、ある程度顔は出してくるけれど)
なぜなら、プログラムの初心者・ホビイストは共同作業をしない。だから影響をローカルにする必要がない。つまり影響をローカルに抑えるための様々な機能、名前空間・スコープ宣言、そういったものは一切必要ない。だいたいSmall Basicは複数のソースコードを扱えない。
もちろんクラスなんていらない。まず再利用することがないのにクラス作ったってしょうがない。ジェネリックプログラムもそうだ。抽象化は本質的には再利用・バグを作らないためで、抽象化されたレベルのプログラムをするのは初心者には常に難しい。
変数宣言しない変数は文句を言われるよりも「いきなり使ってるのに初期化してない」チェックだけして、あとはインテリセンスに頼るほうが初心者には楽だ。
サブルーチンが引数を取れないときには腰を抜かしたし、ローカル変数ないのもびびったけれど、せいぜい数百行(例えばcannonballは200行ほど)、1000行あれば信じられないほど大きいという範囲のプログラムで、そんな機能がいるか、全くギモンだ。だいたい関数にすると、戻したい変数が増えるに従って、配列戻しの概念だのが出てきて、遥かに複雑化する。ともかく使った変数は世界中から見えてしまうほうが楽なのは確かだ。
構造化がどれほど必要かすら疑問だ。もちろん構造化は最低できないと困るが、small basicでは、if-then-elseやwhile文によって、goto文は絶対に必須ではなくなる程度には構造化はサポートされている。
また、下手にループからの脱出にbreak用意するぐらいならgotoの方が初心者にはわかりやすいのも事実だ。
と、考えていくと、この30年ほどのプログラム技術の進歩の大半は「巨大なプログラムを作ったとき、それを無駄にせず、出来るだけ再利用し、多人数で作ってもトラブルが発生しないようにする」ために発達してきたもので、初心者やホビイストに必要な技術ではないのだ、と思えるようになった。
そして、遥か遠い昔、32年ほど前に使われていたTiny Basicにいくつか構造化のための文法を付け加えたsmall basicは、実は初心者やホビイストにとって十分に意味のある言語だな、と思ったのだった。
がまぐに参加してくれと言われたとき、小さなプログラムを書くツールとしてSmall Basicを使った。
前のポストで使った印象として、小さくて・簡単でわかりやすいが、反面、30年間のソフトウェア技術の進歩を否定するような代物だ…と書いたわけだが、そのあとしばらく考えて思ったことを書きたい。
少なくとも、プログラムの初心者、ホビイストには、構造化プログラムはともかくとして、ローカル変数も型の宣言もオブジェクトもクラスも、テンプレート(ジェネリックプログラミング)も、およそ30年間のプログラム技術の(論理的な)進歩のほぼすべては「必要ない」ということだ。
(正確にはオブジェクトとクラスはWindowsの.netの構造上、ある程度顔は出してくるけれど)
なぜなら、プログラムの初心者・ホビイストは共同作業をしない。だから影響をローカルにする必要がない。つまり影響をローカルに抑えるための様々な機能、名前空間・スコープ宣言、そういったものは一切必要ない。だいたいSmall Basicは複数のソースコードを扱えない。
もちろんクラスなんていらない。まず再利用することがないのにクラス作ったってしょうがない。ジェネリックプログラムもそうだ。抽象化は本質的には再利用・バグを作らないためで、抽象化されたレベルのプログラムをするのは初心者には常に難しい。
変数宣言しない変数は文句を言われるよりも「いきなり使ってるのに初期化してない」チェックだけして、あとはインテリセンスに頼るほうが初心者には楽だ。
サブルーチンが引数を取れないときには腰を抜かしたし、ローカル変数ないのもびびったけれど、せいぜい数百行(例えばcannonballは200行ほど)、1000行あれば信じられないほど大きいという範囲のプログラムで、そんな機能がいるか、全くギモンだ。だいたい関数にすると、戻したい変数が増えるに従って、配列戻しの概念だのが出てきて、遥かに複雑化する。ともかく使った変数は世界中から見えてしまうほうが楽なのは確かだ。
構造化がどれほど必要かすら疑問だ。もちろん構造化は最低できないと困るが、small basicでは、if-then-elseやwhile文によって、goto文は絶対に必須ではなくなる程度には構造化はサポートされている。
また、下手にループからの脱出にbreak用意するぐらいならgotoの方が初心者にはわかりやすいのも事実だ。
と、考えていくと、この30年ほどのプログラム技術の進歩の大半は「巨大なプログラムを作ったとき、それを無駄にせず、出来るだけ再利用し、多人数で作ってもトラブルが発生しないようにする」ために発達してきたもので、初心者やホビイストに必要な技術ではないのだ、と思えるようになった。
そして、遥か遠い昔、32年ほど前に使われていたTiny Basicにいくつか構造化のための文法を付け加えたsmall basicは、実は初心者やホビイストにとって十分に意味のある言語だな、と思ったのだった。
コメント
Flashはメチャメチャすごい環境です。
ただ、いい環境は基本有料ですから。
ゲームの開発環境は日本ではどうかわかりませんが、現在の海外での開発環境は8ビット時代とはほとんど別物だと考えて結構です。
サイズの変化が質の変化を促して、作業のフローから考えないと、もう動けない時代になってます。
ただ、いい環境は基本有料ですから。
ゲームの開発環境は日本ではどうかわかりませんが、現在の海外での開発環境は8ビット時代とはほとんど別物だと考えて結構です。
サイズの変化が質の変化を促して、作業のフローから考えないと、もう動けない時代になってます。
| 岩崎 | EMAIL | URL | 10/12/19 14:03 | KW5mIGUw |
自分はWeb系の開発に関わりつつ、基本は企画・画面設計・制作管理方面の人間なんで、
実際には具体的な立場でコードを触ることは無いんですが
(html,php,jspの改修程度では触ることもあります)
昔から言語入門書マニアでもあるので、上記の「いらない概念」に関しては共感を覚えつつ
「それでいいのかな」という不安もありますね(よくわかっていないだけに)。
別業界の人間からすると、ゲーム開発に関する入門書のようなものは昔からあまり数が出ていないように思います。
(最近は増えてきたようですが、詳しい内容は未見です)
実際にどういった環境(人・物)で、どのような工程を経て開発されているのか、というのは、
各種のパブリックイメージ(雑誌のインタビューとかブログ)からうかがい得る以上については、
8bit時代の昔から現在に至るまで謎だったりします。
(webもそうなのかもしれませんが・・・)
今の知識で8bit時代の機種のゲーム開発を行うとして、
開発手法や思想、工程管理的な部分での「こうすれば良かった」みたいなことは、やっぱりあったりするもんなんでしょうか。
それと、PC上のゲーム開発入門環境として、最近だとFlashなんかもアリなのかな、とは思っていたんですが
「純粋な入門」として考えると、また別の路線なんでしょうかね。
(画面描画等々の低レベルな要素が端折られたりしているので)
実際には具体的な立場でコードを触ることは無いんですが
(html,php,jspの改修程度では触ることもあります)
昔から言語入門書マニアでもあるので、上記の「いらない概念」に関しては共感を覚えつつ
「それでいいのかな」という不安もありますね(よくわかっていないだけに)。
別業界の人間からすると、ゲーム開発に関する入門書のようなものは昔からあまり数が出ていないように思います。
(最近は増えてきたようですが、詳しい内容は未見です)
実際にどういった環境(人・物)で、どのような工程を経て開発されているのか、というのは、
各種のパブリックイメージ(雑誌のインタビューとかブログ)からうかがい得る以上については、
8bit時代の昔から現在に至るまで謎だったりします。
(webもそうなのかもしれませんが・・・)
今の知識で8bit時代の機種のゲーム開発を行うとして、
開発手法や思想、工程管理的な部分での「こうすれば良かった」みたいなことは、やっぱりあったりするもんなんでしょうか。
それと、PC上のゲーム開発入門環境として、最近だとFlashなんかもアリなのかな、とは思っていたんですが
「純粋な入門」として考えると、また別の路線なんでしょうかね。
(画面描画等々の低レベルな要素が端折られたりしているので)
| atsu | EMAIL | URL | 10/12/18 17:03 | jB3nOvqE |
この記事のトラックバックURL :
トラックバック