見出し画像

学生さんとアルゴリズムの勉強

こんにちは「つけらっとゲームス」プログラム担当のとちです。
実はこの7月から、ご縁があって外部の非常勤講師として学生に「システム設計」や「アルゴリズム」を教える立場になりました。
既に数時間の講義をしているのですが、わたし自身いわゆる先生という立場になるつもりもなく、人にモノを教える経験がないため試行錯誤の日々が続きそうです。

今回の記事は「講義して感じたこと」と「講義内容」を自分なりに復習したいと思い書きました。


どこで教えているのか?

まず、わたしの学歴というか職歴から軽く触れておきますと、商業高校の情報処理科を卒業し、そこで1つ欲しい資格を取り損なったため、もう少しだけ勉強しようと情報ビジネス専門学校に進学します。
今回の外部講師をすることになった学校がここです。専門学校。

その後、医療事務とそれに連なる病院系システムを扱うソフト会社にて、汎用コンピュータで動くプログラムを作っていましたが、パソコン等の進化により徐々にパソコンで動くソフト開発へとシフトしていきます。

しかし体調を大きく崩して(会社や仕事のせいではない)数年間の療養生活を過ごしてしまいました。さすがに会社にも居られないので、それまで趣味であった創作の世界へ……

何もできない30代を過ごしてしまったのが悔しい

もともと何かを作るのが好きだったしサラリーマンしながらもやってたので創作活動は苦ではありません。
フリーゲームを何作品か公開すると、それなりのDL数があり、それなりに雑誌掲載されました。そのことを幼馴染に軽く話したところ、ゲームを作れるならお金にできないかと誘われてゲーム作りに本格的に参戦していきます。

ところが幼馴染と始めた会社の経営状況的にゲーム作りは難しくなります。とはいえ、ここまで作ってきたゲームによって「地域おこし」を推進してきたのもあり、せっかくできた地元との繋がりを潰すのはもったいないと思い、法人を抜けインディーゲーム開発サークル「つけらっとゲームス」を設立、現在に至るという流れです。

「地域おこし」の中で「展示会」を開催しました。
(詳しい話は以下にありますのでご興味のある方はご覧ください)

その「展示会」宣伝を母校である専門学校でも行いました。その繋がりもあって今回、外部講師のお話をいただいたというワケです。

授業内容や学生さんの回答については、学生さんの個人情報等を特定できなければ記事にしてもよいと確認をとっています。


講義して感じたこと

卒業した専門学校の外部講師をすることになったわたし、校舎そのものは通っていた当時と変わらずですが立場が違います。以前は教えてもらう立場、今は教える立場。

わたしには座って白板を見て板書されたモノを必死にノートに書き写していた記憶がありますけど、今はタブレットやノートPCに書き込む学生たち、かなりの時間経過を感じます……

もうひとつ感じたのが、わたしが学生の時からそうだったのでしょうけど「商業系」「工業系」などの高校で情報関連の専門授業を受けている学生と、普通高校から進学してきた学生の差が思っている以上にあることです。

仕方のないことではあるのですが、どんな分野であっても、基礎がある人とない人では理解のスピードが異なります。そしてわたしが講義する内容が基礎中の基礎ともいえる「アルゴリズム」と、そのアルゴリズムを視覚的に表す方法である「フローチャート」の書き方を含む「システム設計」です。

今の時点で基礎がしっかり頭に入れば、出身校はあんまり関係なくなるはず、これは責任重大だな……と感じるのは自分の性分なのかも。


高校レベルの数学って使う?

わたしは中学生の頃から、いわゆる5教科(国語、数学、理科、社会、英語)が苦手で人様より点数を稼げないと自覚しておりまして……

商業高校レベルの数学でも1時間ずっと「?」が頭に浮かんでいる生徒でした。「大事だ!」「重要だ!」と先生に言われていた公式のほとんどは頭に残っていません。私生活においては四則演算(加減乗除)ができれば良さそうな気がしますもんね。

特に「数学」「英語」は壊滅的に成績悪かったです

なんとなく「三角関数あったなー」とでも記憶が残っていれば、今の御時世、検索して覚えなおすことも可能ではあるんですけどね。
んで、その三角関数ってゲーム作る上ではちょこちょこ出てくるし、アナログなゲームでも正確な数値ではなくても、おおよその確率計算できれば便利です。

プログラムとか、それに関するアルゴリズムを覚えようって言われて、やみくもに頭に詰め込める学生は全体の何割くらいいるんでしょう?

というか、わたしもいざ学生に説明しようと思ったら正確には説明できないです。頭にあるのは普段から使うモノであって、下手したら言語で説明できないくらい直感的に出てくるモノを使ってゲームを作っている……としか言えない部分もあるんです。

こういうのって必要であれば勝手に覚えるんですよね。そして勝手に頭の中で最適化していき直感的に扱えるようなモノに変化していく、それを教えるのは結構難しい。

学生の立場だと必要に迫られていない状態ですから「勝手に覚え、勝手に最適化していく」以外の方法を採らなければなりません……となると反復練習くらいしか思いつかないなぁ。


本当の基礎って何だろう?

自分が高校生・専門学校生の頃に習った基礎の部分って何かを考えてみたところ、まず最初に思い浮かんだのが以下の3つ。

  • 探索(サーチ)

  • 並び替え(ソート)

  • 結合(マージ)

3つに分けて考えるようなことでもない……っていうのは、いま頭の中が最適化できているからで、おそらく基礎を学んでいない学生にとっては分けた方がいいのではないかと考えました。

その中でも、まず欲しいデータを探索できないと何も始まらないだろう、ということは探索(サーチ)を最初にやるべきではないか?


線形探索

授業用の資料を作っていきます。
ただ、自分の作ったゲームだとデータ量があっても1000個とかのレベルなので探索のアルゴリズムを考えると言っても、ほぼ「線形探索」です。

線形探索、わたしが習ったときは「逐次探索」だった気がしますが、検索で一般的に出てきた方がいいでしょう。早速資料が間違っていますね。逐次探索という言葉しか出てこないので仕方ない。あとで訂正しよう。

少しでも興味が持てるようにポケモンのフレンドリィショップの品揃えにしてみた


前提条件として配列をコチラで用意して処理の流れを箇条書き、これをフローチャートで書いてもらうというのが最初の目標です。
既に高校で学んできた学生さんには難しい目標ではありませんが、いまから学ぶ生徒には既に難しかったような印象を受けました。

理解度を上げるためもうすこし線形探索に時間をかけたいところです。

回答例としてはこんな感じのを求めていました

もしかしたら「AT END」で条件分岐するのは「COBOLを前提に学んでいたわたしと同世代だけ?」という不安があります。
「配列を読む」の下に分岐で「読み終わった?」を書けば問題ないかなぁ。


二分探索

線形探索を解説した後は二分探索を解説します。
しっかりソートが済んでいるデータ群であれば半分の半分の半分の……を繰り返していくことで素早く欲しいデータを見つけることができます。

こちらはまだ「そういうのがある」という解説だけです。
この他にも「ハッシュ法」というのがありますよ、と解説しました。

二分探索だと試行回数が減ることを説明したい


変数として「最大値」「最小値」「センター値」を要するので、ここでも「変数」を理解しているかで理解スピードに差が出ますね。

このデータ数だとそんな変わらないけど意味が伝われば…

現時点で授業ではここまでしかやっていません。
まだ始まって数時間です、これからです。
興味を持ってもらうためにゲームっぽいデータ群を扱うようにしていますが、学生さんたちがどう感じるのか……

(※フローチャートの回答例はまたそのうちに……)


おわりに

理解まで反復練習なんてしたらゲームが嫌いになっちゃうかもしれない?
そうなったら怖いけどアルゴリズムは知識として無駄ではないと思いますのでなんとか理解まで持っていきたい。

教えるのが初めてなので試行錯誤しながら進んでいこうと思います。

今後もゲーム開発に使える(少し難しい)話をしたいと考えていますのでゲーム作りたいと考えている皆様、ゲームの中身に興味のある皆様、応援よろしくお願いいたします。

弊サークルのゲームにご興味がございましたら、
コチラ(↓)から購入できますのでよろしくお願いしますね~


この記事が参加している募集

ゲームの作り方

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