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は、実は初心者やホビイストにとって十分に意味のある言語だな、と思ったのだった。






