安永ノリカズのゲーム制作&Javaサンプル集


『愛のJava256本ノック』誕生の秘話が今明かされる!

この企画が生まれた背景

20年前の電器店にて

専門学校 で講師をしていると「先生はどこでプログラムを覚えたんですか?」と聞かれることがあります。 立ち話のときなんかは「自分で覚えた」と済ませることにしてますが、 飲み会の席なんかで、ゆっくり説明できるときは 「ベスト電器」と答えることにしてます。

かれこれ20年くらい前、まだパソコンをマイコンと呼んでいた時代です。 当時、ゲームセンターで、ギャラクアンやゼビウスなどに50円玉をつぎ込んでいた少年時代の僕にとって、 マイコンは、タダでゲームができる、夢のような機械でした。 だから、お小遣いがないときは、近所のベスト電器に行って、 雑誌に掲載されていたゲームのソースを、展示してあるマイコンに入力しては、 実行するということをやってました。

当時は、マイコンBASICマガジン (通称ベーマガ)などの雑誌が、売り場に備え付けてあって、椅子まで用意されてたんですよね。 一番の購入ターゲットだった子供を取り込むことが、お店の方針だったのでしょう。

ソース入力で覚えたプログラミング

ま、そんなことは知らずに、ゲームやりたさだけで通ってた自分ですが、 もちろん、最初からプログラムを理解できたわけじゃありません。 記号の羅列としてただ機械的に入力してました。 文法エラーが出れば、雑誌と見比べてまた入力。 それを繰り返してるうちに、なんとなくBASICの文法が体に染み込んできて、 IF とくれば THEN てのを覚えてしまうんですよね。

さらに入力を重ねていくと、処理の流れがおぼろげながら見えてきます。 雑誌連載のベーシック入門記事も読んでいるので、一通りの知識は備わってるわけですね。 もちろん、探すのは当たり判定ルーチン。 座標を比較しているところを見つけては、条件式を書き換えて、無敵状態に改造します。 ゲームとしては全然面白くなくなってしまうんですが……。

そのうち、他人のソースを改造するだけでは飽き足らなくなって、 自分でゲームを作ることを始めます。 たいしたものは作れませんでしたが、 いつの日か雑誌に投稿して賞金をもらうことを夢見てました。 実際に、友人のゲームが雑誌に掲載された話なんかを聞くと、本当にうらやましかったのを覚えてます。

当時、まだパソコンが一般に普及する前の段階にもかかわらず、 子供達がプログラムを学び発表する文化が存在していたんですね。

プログラムを学ぶ文化の再構築へ

では、パソコンが一般に普及した今日、その文化はより広く発展したのでしょうか?

残念ながら、子供達がプログラミングを楽しむ土壌は、完全に失われてしまいました。 昔と今で、パソコンの果たす役割が決定的に変化したからです。 もちろん、ただ昔を懐かしがっているわけではありません。 時代の求めに応じて、パソコンが進化したことは、ごく当然のことなのですから。 でも、パソコンの役割が変化しようとも、時代に沿った形で、 プログラムを学ぶ文化を受け継いでいくのが、 その昔を知っている僕らに託された使命なのではないかと思っています。

こういう思いから生まれたのが、『愛のJava256本ノック』。 子供達がプログラムを楽しむ環境を再現するのは難しいかもしれませんが、 「既存のソース解析&改造」については、プログラム学習の一つの方法論として、 確立できるのではと考えてます。 今回用意したサンプルソースは、あえて変数・メソッド名を無意味にすることで解析を促し、 「意味のない使用例」ではなく、処理に何らかの意図を含ませることで、改造の意欲を引き出そうとしています。 自分が経験した、何かに夢中になっているうちに、 自然とプログラミングを身につけるあの感覚を再現できればと願ってます。

この企画で身につけて欲しいもの

プログラマー根性とは

専門学校で多くのJavaクラスを担当してきましたが、 生徒にただJavaを教えるだけではなく、時代が変わっても、 この業界で生き抜くだけの資質も身につけて欲しいと、授業をやってきました。

中でも、プログラマー必須の資質として、自己解決のメンタリティーというのがあります。 自分で問題を発見し、自分で解決手法を調べ上げ、自分の手でやり遂げる。 例え最終的に解決できないとしても、自力で前に進む意志を持ち続ける精神力、 これが備わってないと、プログラムで飯を食っていくことはできません。 ここではその自己解決のメンタリティーを「プログラマー根性」と呼ぶことにします。

根性以前に基礎体力

では、これからプログラマーを目指そうという初心者は、 いかにしてプログラマー根性を身につければよいのでしょうか? 自分は、根性そのものよりも、それを発揮するための基礎体力が重要なカギを握ると考えています。 たとえ、自己解決する意志を持っていても、基礎的な知識と技術が備わってなければ、 何をすればいいか分からないのは当然ですよね。 根性とはいえ、それを裏付けるだけの知識は絶対に必要で、 むしろ、しっかりとした知識の下地があるからこそ、 自分で解決しようとの意志が沸くのではないでしょうか。

その基礎体力には、もちろんJavaの文法や、APIの知識も必要ですが、 なんといっても、「こうプログラムを書けば、こういう処理ができる」という、 具体的な実例をを豊富に経験することが不可欠です。 ライブラリとしてAPIの知識を詰め込むだけでなく、 自分の記憶の中に実装事例のライブラリを構築していくことが必要というわけですね。

基礎体力をしっかりつけた上で、課題に取り組んで、自力でやり遂げる。 それを繰り返すことが、根性アップの秘訣かと思います。

キッカケつかんで体力アップ

ですので、問題は、いかにして初歩の段階で基礎体力を身につける キッカケをつかむかです。 参考書の解説を読んで、なるほどねと理解しただけでは終わらず、 そこに自分なりの課題を見つけては、実際にプログラミングに挑戦し、 分からないところが出てきたら、また参考書を調べる。 そういう理想的な学習の循環を作るキッカケが、求められているのだと思います。 自分の場合は、ゲームのソースコード入力がそれだったということでしょう。

『愛のJava256本ノック』では、実際に動くサンプルを多数用意することで、 その学習の循環のキッカケを提供しています。 さらに、何度もソースを読み解き、調べぬくことによって、プログラマー根性を高めると同時に、 プログラミングの定石を知ることで、 根性を発揮するための基礎体力アップも実現します。 「256本ノック」というタイトルは、この「根性・体力アップ・反復」 というキーワードからイメージしたものなんですよね。

キッカケは人それぞれだとは思いますが、一人でも多くの人が、この『愛のJava256本ノック』を利用して、 プログラマーとしてのレベルアップを実現して欲しいと願っています。

この企画が世の中に問うもの

学習方法を提案すること

今日、これだけパソコンが普及して、プログラマーを志望する人が増えたからには、 その学習手法だって、多種多様なものが出てきてしかるべきだと考えます。 しかし、プログラム言語を解説する本やサイトはあっても、 プログラム能力を高めるための手法を紹介したものは、ほとんど見かけないのが実情です。 書店のJavaコーナーに数多く並べられた入門書を見るたびに、ときどき不安を感じることあります。 これだけたくさんの入門書があるということは、 何冊も入門書を購入し続ける脱初心者失敗組がいるんじゃないのか? たくさんのダイエット本がある背景に、ダイエットを失敗し続けている人々がいるのと同じように……。

『愛のJava256本ノック』として、Javaの入門解説ではなくて トレーニングメソッドを企画したのは、情報提供は他の人に任せて、 自分は情報を噛み砕く能力をアップする手法を紹介したいと考えたからです。 とりわけ、Javaの世界では、「知っている者」は、自分が持ってる情報を提供したくてウズウズしていて、 「知らない者」は、大量の情報の波に飲み込まれ、もがいている、そんな図式を感じることがあります。 ただ情報を提供するだけで終わらず、学ぶ側の立場に立った提案をすることも、ときには必要だと感じます。

Javaの敷居を低くできるか

この企画では、最初にソースをコンパイルして実行することから、学習がスタートします。 これは「知識を得てから実践する」のではなく「実践した中から知識を得る」力を養うためです。 人から押し付けられた100の知識より、自分で導き出した50の知識の方が、 プログラムを組む上でずっと役に立ちます。

また、場合によっては、形から入ることで、 Javaを学びやすいと感じてもらえるかもしれません。 ときどき「初心者に敷居が高い」といわれるJavaですが、決してそんなことはありません。 サーバーサイドや携帯電話で大きな役割を担っているJavaが、 デスクトップで担うべきは、プログラム入門言語としての役割だとすら考えています。 なんといっても無料でこれだけの開発環境が手に入るのは魅力ですし、関連する情報も豊富に存在します。 マイコン時代にBASICが担ったような、プログラマーの登竜門的役割を、 今後、Javaもこなせるのではないでしょうか?

ですので、サンプルを用意する際も、昔の雑誌の片隅にあったような、 短いけどもちょっと面白いプログラムのノリを意識しました。 分厚い参考書や膨大なAPIドキュメントとともにJavaと格闘するのではなく、 1つのソースファイルを通してテキトーにJavaを眺める…… そんな意識・視点の変換も提案したいと思ってます。この企画が、溢れかえる情報の中で、 軽快なステップを踏むための第一歩になればと思っている次第です。

最後に

この企画に対するご意見、ご感想を、心よりお待ちしております。 特に、実際にノックを受けてみたJavaプログラム初心者の方々の意見を聞かせてください。 学習手法として、改良すべき点は多々あると思いますし、サンプルソースも少ししかそろってません。 改善すべき点を汲み取りつつ、256ノック完成に向けて励みたいと思ってますので、よろしくお願いします。

また、このトレーニングメソッドに共感いただき、同様の形式でサンプルソースを配布したいとお思いの方は、 この手法をご自由に採用されて構いません。 サンプルソースにつきましても、非商業利用、及び二次配布物に対して同様のライセンスを付加することを条件に、 再配布、改変を許可していますので、部分的にソースを差し替えて、 自分なりの「256本ノック」として公開することも可能です。

プログラムの楽しさを一人でも多くの人に感じてもらえますように……。

2003年冬 安永ノリカズ <nori@groovy-number.com>