ぱすたけ日記

日記っぽいのを書きます。

サークルで初心者向けにプログラミングの話とかをする際にちょっと考えてみたいことについて発表した

はじめに

ちょっと前の話なのですが、僕の所属している京大マイコンクラブの新入生向け説明会で講座*1をやらせてもらったので、その内容について書いていきます。

スライドを公開するだけでも良かったのですが、スライドだけだと伝わりづらいこともあるかと思ったのでブログで補足しようという作戦です。

スライドはこちら

モチベーション

講座やってくれと言われてから何について話すか考えてて、昨年はわくわくシンセサイザー入門というタイトルでWeb Audio APIについて話したけど、この時期に来る新入生はコードを書いたこともない人が多かったので、具体的なAPIなどを紹介するのではなくて何かしら精神っぽいエモさあるトークをしようという方針を立てた。

ちょうどそろそろスライドを作るかというタイミングでたまたま部室居たら、サークルの若者たちが競技プログラミングを始める新入生に向けたC++のスライドのレビュー会をしていた。

何気なくふむふむC++はこうやって書くんだなぁと思いながら眺めてたら、『おまじない』をどうするかとか『どの書き方を教えるか』について多数決や話し合いで決めているのを見て、いやいや多数決はないでしょと思って作り始めたのがこのスライドということになってる。

ちょっと反応を見たりするためにいくつかTweetして、そのレスポンスなどを参考に組み立てたものになってる

何を議論すれば「しょぼい話」にならずに済むのか

スライドの序盤では「しょぼい話」をキーワードに我々が知っているからこそ入門時に言ってしまいガチな余計な話を避けるようにしましょうということを話しました。余計な話や入門時のコラム的なの意外と始めると力を入れてしまうけど具体的な例を複数挙げなくても1つくらいで良いでしょうというか、まぁ検討が必要なタイミングがやってきたときに改めて学んだり情報集めたりできるので、その時に本気を出しましょうみたいな感じの話をしました。

スライドに書いてないこととして『どういう「入門」が正解なのか』ということまでハッキリと踏み込んではいないということがあります。これは意図的にそうしていて、『入門』に関してこれが正しいとかこれが良いみたいなのはなかなか難しいと思っているからです。スライド内にも書いていますが、例えばあるコミュニティや企業でやるときにはこれがBetterだが、KMCではこれがStandardになってる、でも初心者に対して話す場合は簡単のためこちらを紹介ということがあると思う。こういうのは話者やその入門を牽引する人がBetterだと思う方法でやるのが良くて、最も重要な事は「その一連の『入門』の流れの中で一貫した流れがある」かということだと思っているからです。

前述したような個別の文法の取り扱いなどに関する話し合いはそのコミュニティでの知見を収集するのには有効だと思いますが、そのような内容をどう扱うかについては『どのように「入門」するか』ということを定義することで自ずと見えてくるだろうし、それさえハッキリしていれば、個別の文法の教え方などに関してはいくつかの複雑なものを除いてはそこまで難しい問題にはならないと思います。

内容の決定に関して多数決などを導入しすぎてしまうと、やはり入門をどうルート立てて入門させて、どのタイミングで何を学び、最後は何が出来るようになるかというイメージを話者の中で組み立てたものにするのを阻害してしまうと思うし、場合に依ってはそこまで至らずに淡々と事実を列挙するだけのものになってしまうと思う。

KMCの場合は新入生向けプロジェクトを1人がコアになって牽引することが多いから「話者」と言っているけど、グループで導入や入門、ことはじめ的なのを担当する際も同じことを共有している必要があると思うし、きっと大半はそのように行われているでしょう。

『おまじない』について。

こういうコンテキストで『おまじない』と聞くとプログラミングの入門をちょっとでもしたことあれば、大半の人は

#include <stdio.h>

をイメージするだろうし、まぁ多言語でも色々マジックコメントがあったりとか色々すると思う。入門時にここは毎回冒頭に書きましょうみたいに詳細されるような諸々。。。

スライドの中盤はこの『おまじない』についてちょっと一歩立ち戻って考えてみようという話題でした。

実際にC言語の経験がない新入生に「どれが『おまじない』だと思う?」と質問したところ、intと答えてくれました。

『おまじない』について考えましょうとなると、やはり先ほどの例を出したところに関してこれは『おまじない』として扱うのが良いか初めから役割を紹介するかということはよく話題になるけれど、本来はこのようなことを紹介したintvoid、はたまた(などについても同じように考えるべき要素ではあると思うけど、意外と忘れがち。

そもそも個別の要素について1つずつ丁寧な検討をするのはムズカシイので、まずは総合的な検討をして道筋を立てましょうという感じ。そうしておけば、まぁあとはその要素の説明の仕方に関してはそこまで皆さん困ることはないはず。*2

再構築としての『入門』

そのように要は『おまじない』はあらゆるところに潜んでいるので、それぞれの要素をしっかり分解して、それを並べて再構築するのが、我々がサークルの春期においてピカピカの新入生に教えるときに行う『入門』ということがここまででなんとなく分かってもらえたはずなので、最後に道筋の立て方のヒント的なことを話しました。

自力で考えるのは難しいし多分自信も持てないと思うので、巷に大量にある入門書の目次をずざっと眺めて良さそうなのを探りましょうという感じ。あとはそれと具体例でJSでのhello, worldをどう分解して説明するかという話を最後にした。

目次を読むだけでも結構ちゃんとその入門がどこをゴールにしててどういう順番で何を意図して扱っているかが見えてくると思う。

例えば、JSの入門書でいきなりXHRをやる本とか多分なくて、まずはconsole.logでも叩きながら計算とかやってみて、ループやって、そうやっているうちにちょっとずつDOM APIが入ってくるみたいなそういう流れがあると思う。

その流れの雰囲気を掴んで自分なりにこれだったら上手く教えられるし、多分良いと思うと思えるやつを考えてみましょう。という感じ。

ちなみに僕が数年前にJSの入門をやった時はMDNの資料とはてな教科書のJSの資料を元にして流れと紹介する内容をピックアップしてた。

まとめ

『入門』をやるときに考えてみたいことをサークルの人向けに話したので、せっかくなのでブログで補足を足しながら公開してみました。

KMCに限らず長く同じコミュニティに居たりすると、外からやってきたピカピカの新人と相対する時の基準みたいなのが徐々に失われていきなりガチンコ勝負とかそういう感じになってしまったりもする。僕は『逆「井の中の蛙」』現象と読んでいるのだけど、そういう感じで自分は良い意味でも悪い意味でも『中級者』(以上)になってしまっていることをしっかり自覚して、真摯に接しながら時たま突き放したりしながら、知見を伝え合ってこれからも最強のコミュニティにしていきましょうという感じです。

多分、皆様におかれましては様々なご意見ご感想があることとは存じますので、はてブのコメントやTweetでの言及、コメント欄の活用、またはみなさま自身のブログなどで諸々お聞かせねがえればと思っています。

よろしくお願いします。

KMCM

京大マイコンクラブでは仲間と共に最高のプロダクトを生み出したい新入生を募集しています。

詳細は下記のページを御覧ください

*1:普段は例会というのをやっててその場で部員が15分の発表をするのですが、この時期は例会が新入生向け説明会になっていて、講座もその中で行われる

*2:説明する人はそれらをある程度まで理解しているという前提があるので