見出し画像

プログラミングを教える際にゲームを用いるべきでは無いかもという話

どうも、僕です。

はじめに

本日はプログラミングについてお話します。

僕が自主的にプログラミングで遊び始めたのは中学生のときです。

その後、情報系の学校へ進学してプログラミングを学んだのですが、序盤の課題でゲーム制作をさせられた記憶があります。

僕はプログラミングは楽しいので好きなのですが、ゲームプログラミングに関しては嫌いでした。

まぁ、あまりプログラムに詳しくない人間を対象とするなら、キャッチーで万人受けする「ゲーム制作」を課題とすることで、モチベーションを保ちながら勉強を続けられるメリットがあるのはわかります。

ただ、ゲーム制作は大してゲームが好きではない人間からしたら苦痛なのではないかなと。

そもそもの話

すげえ突拍子もない事を言いますが、僕は「プログラミングを教える際に、アルゴリズムを持ち出す必要はない」と考えています。

ただ、「アルゴリズムを教える際に、プログラミングを持ち出す」のは大事だと思いますが。

どういうことかと言うと、プログラミングの楽しさとは、「コンピュータに指示を出すことができる」という事実を体感できることです。

「コンピュータに指示を出す楽しさ」と「アルゴリズムを考える楽しさ」は別物で、例えば「自分のアイデアをプログラムで実現するのが楽しい」という方もいらっしゃいますが、それはどちらかというと後者の側面が大きいのかなと。

ゲーム制作の場合、その大部分が”アルゴリズム”を考えることに費やされます。

プログラミング初学者が実際にスプライトを用意して、表示から動きの処理までを1から実装することは極めて困難なので、多くの場合は何かしらのゲームエンジンを用いることになると思います。すると、画面に画像が表示されるのは当たり前、画像が動くのは当たり前、それらを前提とした上でゲームとして成り立つアルゴリズムを考える、という流れになります。これではコンピュータに指示を出す楽しさは味わえません。

また、ゲーム制作で使用するアルゴリズムは、確かに論理的思考を身につける上で大切なものです。しかし、その実プログラマの職種によっては、そんなアルゴリズムなど全く必要としない場合もあります。例えばWeb制作では、コンポーネントを作成し、それを組み合わせてページを作るという、数学的なアルゴリズムとは全く別の考え方が必要となります。

他にも、業務系ソフトウェア開発の場合だと、ページ遷移時の状態管理であったり、DBのデータを適切に受け渡したりと、やはりゲーム制作のアルゴリズムはあまり役に立ちません。組み込みエンジニアなら多少役立つかもしれませんね。

もちろん、余裕があるのなら色々なアルゴリズムを学び、自身のスキルを磨けば良いのですが、初学者となると話は別です。

あ、マイコンは趣味でやってください。

コンピュータを操作する楽しさ

じゃあプログラミングの楽しさを知るために良い方法は何か。あくまで僕の意見ですが、VBScriptやJS(+HTML)を用いて、視覚的なフィードバックを体感することが大事なんじゃないかなと。

VBScriptはあんまり使われなくなったのですが、かといっていきなりフォームアプリケーションを作成するのも酷だとは思うので、掴みとして使う分には問題ないでしょう。

VBScriptの利点は、まさに自分が使用しているWIndowsコンピュータに自身で指示を送れることを実感できる点です。プログラミングを学ぶ前では、コンピュータとはインストールされているソフトに従って操作を行うことが当たり前です。コンピュータを動かすとは、すなわちインストールされているソフトを動かすことと同義なんですね。しかし、実際には意識していない低レイヤーな部分で一番大きなプログラム、「OS」が動いているのです。それを利用することがコンピュータを操作することなのだと認識することが大事なのではないかと思います。

JSは正確に言うとコンピュータではなく、ブラウザに指示を出しているのですが、初学者にとっては些末な差です。大事なのは、今まで自分が操作しているのは、あくまで誰かが作成したソフトウェアであり、それに従っていただけなのだと理解することです。

マイコンは趣味でやってください。

アルゴリズムの勉強でプログラミングは必要です

プログラミング学習でアルゴリズムを用いる必要はないと書きましたが、逆の場合は別です。

アルゴリズムを考える際は、それが正しいのかを確認する必要があります。そのために目視で脳内デバッグをしても良いのですが、やはり結果が表示されることは大事です。

また、アルゴリズムを考える能力が身についても、それをプログラムに落とし込む能力がなければ宝の持ち腐れです。丹精なフローチャートを作成してもただの設計図ですからね。

しかし、ここでもやはりゲームに関係するアルゴリズムは、あまり用いないほうがいいと思っています。

まぁ条件をかなり噛み砕ければ良いのですが、例えば「MP上限が100の勇者が、MP消費40のファイヤーボールを発動するアルゴリズムを考えろ」なんて言われても、ゲームの知識がない人にとってはイメージがつかめません。

ちなみにアルゴリズムはこんな感じになるかと思います。

開始
(1).勇者の現在のMP取得
(2a).「1」の値が40以上であればファイヤーボール発動
  (3).勇者のMPを「(1)の値 - 40」に
(2b).「1」の値が40未満であれば発動しない
終了

じゃあこれを、「MPはマジックポイントで、ファイヤーボールはそれを40消費して発動する魔法なんだよ」と説明しても良いのですが、それはもはやアルゴリズムの答えを伝えてしまっています。

これくらいの難易度であればまだ良いですが、座標計算だ当たり判定だみたいな話になったらたまったものではありませんね。僕はドラクエもポケモンもシューティングも格ゲーもやらないので、勘弁してください。

あとマイコンは趣味でやってください。

終わりに

散々語りましたが、結局僕はしがない元底辺プログラマですから、教育現場には僕なんかでは想定できないような、一筋縄では行かない事情があるのはわかります。

僕はいずれまた開発業務へ就きたいと考えているので、あまり優秀なプログラマをポンポン出されると困ります。そういう意味ではゲームプログラムを教えるのも悪くはないかもしれませんね。

最後に、マイコンは趣味でやってください。

では。

この記事が気に入ったらサポートをしてみませんか?