1976年生まれのプログラミング初心者のゲーム制作日記

ひょんなことからJavaでゲームを作ることになり、その過程を記しています。

「初心者のためのプログラミング」的な本の内容すら理解できず

今回Javaを学ぶことになった理由は、ひょんなことからモバイル用のAppを制作することになったからです。

自分はAppの制作を仕事にしているわけではないのですが、たまたま自分の中でこういうAppが欲しいというアイデアがあり、そのようなものが探しても見つからなかったため、それなら自分で作ってしまえと思ったわけです。

しかしAppを作るにはプログラミングの知識が必要になり、自分はプログラムが書けません。ただプログラミングに詳しい友人にアイデアを話したところ、面白そうだということで協力してくれることになりました。ちなみにこのAppは言語学習ツールのようなもので、このブログのテーマとなっているゲーム制作とは別のものです。

友人の協力を得たことで自分はプログラムを書く必要はなくなったものの、制作におけるコミュニケーションを円滑に進めるためには自分も最低限の知識くらいは持っておいたほうがよいのではないかと思いました。そこで散々挫折したプログラミングをもう一度少しだけ学習してみることにしました。

最初に初心者向けの良い本を探しました。電子書籍のサンプルを10冊くらいまとめてダウンロードし、冒頭で悪くなさそうだと思った何冊の本は購入して続きを読みました。「初心者のためのJava」とか「すぐにわかるJava」とか、そういったタイトルの本です。しかし僕にとってはこうした本のどれもが「初心者向け」に書かれているとは思えませんでした。「子供のためのJavaプログラミング」といったタイトルの本すら、僕にとってはかなり難しい内容でした。

「こういう風に感じるのって自分だけか?」「簡単だと本には書かれているけど、なんの事前知識もなしにみんな本当にこんな不可解な内容を理解できるのか?」

自分は本当にこういうのに向いてないのだろうと改めて思ったわけですが、素直でない自分は同時に、実は著者の説明の仕方が下手なのではないかと思わずにいられませんでした。

 

サンプルを含むこうした入門書を10数冊読んで感じたのは:

プログラマーは構造を説明するのが好き

プログラマーは概念を語るのが好き

プログラマーは無駄な寄り道が嫌い(スマートでベストなルートだけを好む)

プログラマーはわからない人間の視点に鈍感

 

といったことでした。こうじゃないプログラマーの方には申し訳ないですが、入門書を執筆した著者(基本的にプログラマー)の書き方がどれも非常によく似ているなあと思ったことは確かです。たとえばJavaの本であれば、「Javaとはなにか」ということから始まり、「Javaとはオブジェクト指向である」という話が必ずといってよいほど最初に語られます。でもプログラミングのプの字もわからない者にとってはその時点で何か理解できない話が始まったなあ、という感じになります。なんというか、先のことを考えて、先回りして話すのが好きなんですね。先の先までちゃんと筋道が通るように、最初に道を整備しておこうとするというか。それはとてもプログラマー的思考だとは思うのですが、何も知らない者にとってはハードルにもなります。

そして当然ながら彼らにはすでに知識があり、僕らが学ぼうとしていることの答えを知っています。なのでこうした初心者向けの本というのは、基本的に「知っている彼らが知らない者の視点を想像して書いた」ということになると思うのですが、その想像が大体みんな非常に下手である、というのが僕の偽らざる本音でした。説明を読んでいても、大体ここはどうなっているの?と疑問に思うところが説明されずに次に進んでしまうということが多いのです。そりゃあんたはわかってるんだろうけど…と何度心の中で突っ込みを入れたことか。

たとえば有名な「Hello World」プログラムというものがあります。

これは画面に「Hello World」という文字を表示させるだけの、とてもシンプルなプログラムですが、実際に書くプログラムはこんな感じです(これをノートパッドやプログラミング作成ツールなどに書き込んで、ちょっとした処理をすると、画面に「Hello world」と表示されます)。

-------------------------------------------------------------------------------------------------------------------

public class HelloWorld {
       public static void main(String[ ] args){
              System.out.println(“Hello world.”);
        }
}

------------------------------------------------------------------------------------------------------------------- 

シンプルなプログラム、と言われるものの初心者からすれば理解不能な言葉満載です。“public”? “static void?”? “String[ ] args…ってなんぞや?”と。

しかし本は大体「…文字が表示されましたね。では次に進みましょう」と言って次に進みます。最初からすべてを理解する必要はないかもしれないが…と思いつつも、読み進めるうちにその説明のペースに「知る者と知らざる者」のギャップを感じずにはいられませんでした。たとえば「本当の初心者(つまり自分)」というのはこういうところでつまづいたりするわけです。

「…なるほど、この2行目の"public"の前にはスペースが4個入っている。でその下の"System"の前には1、2、3......8個か? じゃ4行目を追加したらスペースは何個入れればいいんだ?」

これを聞いて「おいおい」と思った方は「わかる人」、「ウンウン」と思った方は自分と同じ「わからない人」だと思います。すでにわかっている人たちというのはこういうことがなかなか想像できなんのだなと思いつつ、「この本はプログラミングの事前知識がない方でも理解できるようにやさしく書かれています」とかいう文を読むと「いや、書いてねえよ」と突っ込まずにはいられず、読むにつれて(自分の鈍い理解力への憤りもあって)段々ストレスがたまっていきました。

それが2ヶ月前の自分でした。