プログラミングに熱中したきっかけ

初心者向け言語は何かという話題が、今月になってからいろいろ議論されていますが、私が興味があるのは、そういう議論をされている方々のプログラミングに熱中するようになったきっかけです。
エンジニアやコンピュータサイエンス系の大学に通っている人の場合、仕事・学業の必要に迫られて、というパターンが多いのではないかと思います。そのような状況で、かつ周りに相談できる人がいる場合が、一番学習効率がよいと思います*1
んで、今回考えたいのは、そういうある意味恵まれた環境にいる人ではなく、コンピュータと縁遠い学部にいる大学生や、ほとんどPC触ったことのない高校生のような人たちが、どうやってプログラミングに熱中するようになるかです。
初心者向け言語が云々と議論するよりは、興味を持ち始めたきっかけの事例を集めて、初心者がプログラミングを好きになるためのノウハウが出てくれば、よほど有益なのではないかと思います。
ということで、以下自分のプログラミングにどのように熱中していったかの話です。


原点:RPGツクール

言語を使う前の、プログラミングに対する私の原点はコンシューマ版のRPGツクールです。
初めてこのゲームに触れたのは小学校に入ったころのことと思いますが、自分でRPGが作れるゲームということで衝撃を受けました。(参考:wikipedia:RPGツクール
初期の頃のRPGツクールは、構造化プログラミングの構成要素である順次・反復・分岐の反復を行うことができず、変数も存在しませんでした*2

制限される面白さ

普通のプログラマだったら、「こんなのやってられるか!」となるかもしれないのですが、プログラミングのプの字も知らなかった身としては、ただ自分で書いたとおりにモノが動くということが自体が楽しかったので、まったく気になりませんでした。
ある程度プレイ慣れしてくると、やはり物足りなくなってきます。しかし、当時は限られた機能で、いかにして難しい表現を実現するかが楽しみとなっていました。拡張性があるに越したことはないのですが、技術的制限があるほうが、やり込める要素になり、小学生なりに工夫を凝らしてものを作るよい機会となりました。
また、シリーズの最新作が出るたびに、変数や反復のような新しい制御構造が加わっていき、そのたびに悩みましたが、こういう段階的に覚えることが増えるのも、無理なく学習できたように思います。

最初の言語:JavaScript

JavaScriptに初めて触れたのは、高校生の頃で、HTMLを勉強していく途中で知りました。
サーバサイドプログラミングの知識はなく、CGIを動かすことのできるサーバもなかったので、何の準備もしなくてもプログラムが動くというのは、始めるきっかけとしては十分でした。
その頃は、当然Ajaxという言葉は存在せず、「現在0時35分です」とか「2回目の訪問ありがとうございます^^」のような腐った用途に使われるものとしてしかJavaScriptは認知されていませんでした。そのため、Webに転がっている情報もほとんどはそれに類するものでした。

JavaScriptでゲーム

ある人が、Cookieを使うことで、クライアントサイドだけでゲームを作っているのを見かけ、それに感動して、自分でもJavaScriptを使ってゲームを作り始めましたが、以下の3点に悩まされました。

  • クロスブラウザの問題 ・・・ 当時、こちらはMac+ネスケの環境で、Win+IEの知り合いに見せたところエラーが発生するも、原因がわからず悩んだ。サンプルも環境依存のものが多かった
  • 言語の柔軟性の高さ ・・・ 同じことをするのに2つのサンプルで書き方が異なり、どちらを参考にすべきか悩んだ
  • リファレンスやチュートリアルがない ・・・ 今以上に不足しており、適当に書いてもそれなりに動いてしまうのでひどいスパゲッティコードになっていた

このような問題もありましたが、HTMLと一緒に使うことで、グラフィカルなプログラミングを行うことができることは作っている側としては非常に楽しかったです。amachang小飼弾さんが言うJavaScriptが初心者向けであるという利点を身をもって経験しました。
プログラミングをもっと勉強したいと思い始めたのはこのあたりからです。

その後

C言語の本を買って勉強を始め、順を追って勉強することが出来たので、プログラミングの基礎がわかってきました。進むべき指針を示してくれるものの重要性がよく理解できました。しかしながら、私の中でのプログラムというのはGUIであり、ターミナルに表示される「Hello World!」がどうつながるのかわからず、あまり面白みを感じませんでした。
大学に入り、Visual Studioを使えばGUIプログラミングができることを知り、C++と一緒にWin32 APIの勉強をしたり、サーバサイドプログラミングの勉強を始めたりして今に至ります。

終わりに

以上から私がプログラミングに熱中した重要な要素をまとめると、

  • 制限というやりこみ要素
  • 作ったものが簡単に動かせて結果が視覚的にもわかりやすい
  • 教本あるいは教師の存在

の3つです。
「ゲームを作りたい」というベクトルがプログラミングという手段とマッチしていたというのも大きいと思うので、何か目標があることも大切だと思います。
自発的にプログラミングを始めたほかの人の話も是非聞いてみたいですね。

*1: もっとも本人がその過程でプログラミングに魅力を感じられるかどうかで学習に対するモチベーションは変わってきますが

*2: 確か、4か5から導入されたはず