えむけーろぐ

間違った事を書いていたらやさしく教えてください

部活で1年生にプログラミングを教えることになった

またポエムです。

2年生の始まりから3年生の終わりまで、苫小牧高専の情報処理同好会というところで会長をやっていた。今年度も続けてたら3年目だったんだけど、さすがに3年間も同じ人が会長やってるとウザいかなという気持ちがあったし、やっぱり学校みたいな人の流れが早い場所にいるなら、僕らもその流れに従うべきかな、なんていう考えもあったので、一個下の後輩たちにいろいろ任せて僕は去ることにした。同じ場所にずっと留まるのもあまり好きじゃないしね。

まあ、せっかくLTや「俺こんなの作ったぜー!!」を自慢するような文化を持ち込んだりしたので、そういうのくらいは遊びに行きたいけど。でも基本的な活動には口出ししたくない。僕が会長やってた時、先輩方は口出ししないでいてくれてたので。(標本サイズ1)

僕が会長やってた頃はかなりテキトーにやってて、2週間くらい前にやるって言ったことを忘れてたり、そもそも活動を忘れてたりとダメダメっぷりを発揮していたんだけど、新しい会長はしっかりもので、さらに副会長やコアとなる後輩くんたちもたまにムカつくけどおもしろい奴らで、楽しくやってくれるんじゃないかと思う。
 

「あとのことは若者たちに任せた。老いた者は去るのじゃ!」みたいな文章になってるけど、僕だってまだ4年生、19歳になったばかりでまだまだやりたいことはたくさんある。

ちょうどソフトウェアテクノロジー部で新1年生の教育を担当していた元クラスメイトが……、元クラスメイトという表現でだいたい何が起こったか察して欲しいんだけど、まあそういうことになったので、じゃあそれ僕がやろうかなーと思った。ノリである。

ノリとは言ったものの、これでも僕は教育系スタートアップでエンジニアをやってるし、教育に興味が無いことも無い。僕達の作っているサービスは先生向けのSNS、ユーザは先生だ。「ものを作るときはユーザの気持ちになることが大事」という話は高専の先生だったり社長だったり、CTOだったりによく言われている。

人の気持ちを理解するのに一番良いのは、その人の立場になりきることだと思う。なら俺が先生になってみようじゃないか。国語や数学、電子工学を教えることはできなくても、プログラミング関連なら、ハンズオン形式でGitHubの説明をしたり、RubyでWebスクレイピングしたりなどの経験はあるので、まぁできないこともないであろう。

と、意識高そうなことを言っているが、実は一昨日、作業をしなきゃいけなかった時間帯に思いっきり寝落ちしたので、この記事を書いたあとにちょっと作業するつもりでいる。あ、でも眠いかも。

さて、僕は1年生の教育担当になったわけだが、じゃあ何をやろうか。どうせ「C言語入門講座〜!」とか、「Pythonではじめようわくわくプログラミング!!」とかやっても、やる奴は週に1回や2回放課後にやる部活動なんかでは満足せずに、本なりインターネットなりを活用して家で勝手にやっていくし、やらない奴はたぶん……、一生やらない。僕みたいな立場の人間がこういうことを言うのは良くない気がするし、今後この考え方を覆してくれるようなことが起こるのを楽しみにしているんだけど、僕の短い人生経験から、そうなんだろうなーという気はしている。

そういう僕だって、中3の終わりくらいにC言語Pythonをやって、ifだとかforだとかの基本的なプログラミング言語の使い方は覚えたけど、それで何ができるのかよくわからなかったし、「ゲームを作りたい!」みたいな明確な目標もなかった。まず僕ゲームしないし……。。

1年半くらい目標も無しになんとなくプログラミングやってて、なんとなくC言語の授業の問題をPythonで解き直してみたり、なんとなくWindowsをディスってLinuxで遊んでたりしていた。そのなんとなくやっていた事が今、何かを作るという目的を持ってコードを書くときに役立つノウハウという宝物になっているわけだが、まぁ当時としては結構つらかった。成果物が無かったから。(成果物の出し方を知らなかっただけ、かも。)

ふとTwitterで見かけた「高専生にはさくらVPS1年間無料で使えるよ!」みたいな言葉に釣られ自分専用のサーバーを手に入れたり、高専カンファレンスでWebやものを作って発表することの楽しさを知り実際にコードを書き始めるまでは、「作りたいものが無いとプログラミングは上達しない。」みたいな言葉を見たり聞いたりするたびに泣きそうになっていた。
 

話が長くなったが、自分のそういう経験があったので、じゃあ1年生には「プログラミングでこんなことができるよ!」というのを示して、自分の手を動かして何かしら作るという経験を早めに積んでもらおうと思った。

プログラミング言語の細かい使い方は自分で勝手に勉強するのが一番だと思うし、自分がどういうものを作りたいのかは自分自身で探すしかないんだけど、まずは「プログラミング楽しいかも?」と思ってもらい、そして「プログラミングでこんなことができるよ!」のサンプルをいくつか見せれば、少しはそれらの助けになるんじゃないかなーなどと思ったりした。

あとは、授業でC言語をやるからプログラミング言語の本当の基礎、使い方を学ぶのはそれでいいかなという気持ちもある。

今回、うちの部に来た1年生6名、みんなプログラミングはまったくの未経験らしい。毎年クラスに1人や2人くらいプログラミング経験者がいて、そういうのはうちの部か情報処理同好会に来るもんだったんだけど、珍しい。まあそのほうがやりやすいし、上に書いたような事の意義も大きくなるだろう。

1年生に「細かいことは抜きにしてまずはプログラミングを楽しんでもらうよ。いろいろなテーマをやってみよう!」というような話をして、「なにかやりたいのある?」と聞いてみたところ、僕の友人の弟(なんと兄弟で同じ高専の同じ学科に来たらしい。いいね!)が「ゲーム作ってみたい」と言ったので、最初のテーマにはゲームプログラミングを選んだ。

少し前だとDXライブラリで弾幕ゲーム、最近だとUnityで3Dゲームが主流なのかな……。どっちもやったことないし、まったくの未経験者には重すぎるかなと思ったのでパス。学校のPCに実行環境ないし。

そうだ、ブラウザとエディタさえあれば簡単にゲームを作れるenchant.jsが良さそう。これは僕もいじったことあるし。よし、そうしよう。

というわけで、1年生にはenchant.jsで遊んでもらうことにした。こないだ第1回めの活動をやったんだけど、まあたぶんいい感じだった。

あんまり好きじゃない「/* おまじない */」や「// ここに処理を書いていく!」という表現使いまくりで、小難しい話をなるべく抜きに、説明はするけど理解しなくてもいいよーみたいなスタンスで話を進めたんだけど、これが意外といけるもので。

僕が示したサンプルコードをいじくりまわして遊んでたり、「xの値を変えて横移動なら、縦移動するにはyを変えればいいのかな?」と勘の良い奴もいて、楽しそうにやってくれていた。まあ最初なんてだいたい何やっても楽しいものだし、キャラクターを表示して動かしただけで、ゲームとは程遠いものなのでまだまだこれからなんだけど、良いスタートではあると思う。

あと何回かサンプルを示してみんなで同じものを作ったあと、今度はそれぞれオリジナルのものを作って、それをパワーポイントを使って発表してもらえたらと思う。(一応プロコン向け教育という名目なので、プレゼンも大事だよね。)

しょぼくても、最悪動かなくてもいいから、自分の手を動かして何かを作って、友達と自慢しあって欲しい。で、「プログラミングは黒い画面にHello Worldだけじゃないぞ!ゲームを作れたぞ!」と感じて欲しい。(笑)

ゲーム作り終わったらProcessingでアートなプログラミングする? それとも、C#でウィンドウにボタンをぺたぺた貼り付けておみくじでも作る? ちょっと学校のサーバーのRubyを新しくして、いくつかGemを入れてもらわなきゃいけないけど、学校のホームページから時間割引っ張ってきて遊ぶのもいいね。

なんでもいいけど、できるだけ広く浅く美味しいところだけつまみ食いする感じでやっていこうと思う。どうしても僕の知識や学校のPC環境的にWeb方面が多くなるけど、頑張る。

プログラミングそのものは自分で勉強してもらうのが一番だと思っているし、「やる奴は勝手にやる、やらない奴はたぶん一生やらない。」という考えはしばらくは変わらないと思う。でも、「プログラミングでこんなことできるよ!」「映画に出てくるようなスーパーハカーじゃなくて、僕でも、君でもできるんだよ!」みたいなのを示して、少しでも「勝手にやる奴」を増やすことは僕でもできると思う。

まあなにはともあれ、最初の1年でそういう経験をして、この部活の目的であるプロコンやETロボコンにつなげて欲しいし、ものづくりの学校 高専での生活を楽しんで欲しいなーなんて思いました。

推薦入試の面接の時、試験官に志望理由を聞かれて「ゲームを作るためにプログラミングを学びたいです!」と言った人の中で、今実際にゲームを作っている人はどれくらいいるんだろう。高専生は、レポートが忙しいとか資格試験の勉強がーとかいろいろ言い訳できるかもしれないけど、そんなんじゃ一生そのままだよ。

でもまぁなんとなく気持ちはわかって、低学年のうちは回路の話ばっかりで、プログラミングの授業だって3年生までの授業だと黒い画面で文字が動いてるだけのプログラムばっかりだし、「これがどうモンハンやスマブラになるんだ……!?」ってなると思う。工学を学ぶものとして、これをすっ飛ばしてはいけない、重要な過程であるのはわかってるけど、ね。。

学校で体系的に学ぶ情報工学と、趣味や部活のものづくりプログラミングと、両方をバランスよくやるのが良いんじゃないかなと、自戒の意味を込めて書いておきます。

それでは。