桐生あんずです。タイトル通りのお話です。
1, はじめに
6月の始まりくらいに「プログラミング勉強会を開いてほしい」という声を友人から受け、色々面白そうなのでやることにしました。気が付けばもう8月に入って、運用方法も定まってきたのでどんなことをやっているか紹介していきたいと思います。
以前から「プログラミングを勉強したい/Webサービスを作ってみたいけど、どう進めたらいいか分からない」という相談を複数の友人から受けており、個別に対応していたのですがそういった人たちを一つの場所に集めて私が以前参加していたid:hidesysさん主催の「1ヶ月でWebサービスを作る勉強会」のような座学と実習を交えたやり方で進めてみたら私でもうまく進められるのではと思い、こういうことは何でも早い方が良いので6/8に初回の講座を開き、始動しました。
2, 基本的な流れと運用方法
・講座内容
私がある程度教えられてかつ、参加者側が作りたいもののイメージが掴みやすいやり方を考えた結果、
1, RubyでFizzBuzzを書いてもらうなどしてプログラミングの基礎的な流れを掴んでもらう
2, HTML/CSSを学習してもらってオリジナルの静的サイトをマークアップし、パブリックに公開するまで行う(AWS S3で静的ホスティングを行う)
3, ProgateのRailsレッスンやRailsチュートリアルを毎週課題として出しながら、作りたいWebサービスをアイデア出ししてイメージして勉強してもらう。最終的にはオリジナルのWebサービスを開発・完成。
という流れでいくことにしました。
1では私が作ったスライドを見てもらいつつ実際に簡単なコードを書いてもらってプログラミングがどんなものかを知ってもらいます。
2ではHTML/CSS(余裕があればJavaScriptも)について簡単な概要を説明した後、自分でアイデアを出してオリジナルのホームページを作る課題を1~2週間の間でやってもらっています。こちらで個別の教材は用意せず*1、おすすめのリファレンスサイトをこちらで教えたり、参加者各自でHTML/CSSの入門書を買ってもらい基本的に一人で進めてもらいます。
定期的にコードレビューを行って加えた方が良いところや変えたら面白そうなところなどをアドバイスしています。
3の段階は最近始まったところですが、参加者の学習状況によってRailsチュートリアルかProgateかを選んでもらい、毎週1~2章分やってもらうようにしています。一から全部やってもらうのは特にRailsチュートリアルの場合だと大変だと思われるため、Slackの方で専用チャンネルを作って質問を随時受け付けたり、章ごとの注目ポイントについて私がまとめるなどしています。
最終到達目標は「オリジナルのWebサービス開発を行う」と設定しているので、Railsの基本を勉強してもらいつつ実際に集まる際にはどんなサービスを作ってみたいか・どう作っていったらいいかをヒアリングしてサービスのアイデア書き出しやER図を書いていくことなどを一緒にしていこうと考えています。
そんな感じの流れで2ヶ月続けています。上記には書いてはいませんが、勉強会の時間中にRailsGirlsガイドのハンズオンを行うといったこともしてみました。ただ、コーチ1人と参加者5,6人はかなり大変だったため、もしRailsGirlsの教材を使う際は参加者の学習状況に合わせてリモートで個別に質問対応するといった方式を取っています。
ちなみに開発環境に関してはWindowsの方はAWS Cloud9、Macの方はターミナルで基本的に進めてもらっています。
・場所
現実で集まれる場所がないと始まりませんよね。大変運が良いことに、知り合いでオープンシェアハウスを運営している方がいて、勉強会参加者の何人かがそこの居住者ということもあり、そこを使わせていただけないかお願いしてみたところ快く承諾してくださりました。ということでそこに集合してみんなでPCを出し合って活動しています。
勉強会場所として貸していただいているリビングが宴会場と思えるぐらい広い上に大きめなテレビもあるのでそこにHDMIケーブルを繋げてPCの画面を写すことができ大変ありがたいです。もちろんWi-Fiもあります。
・活動時間
できるだけ週一で集まった方が良さそうと思い金曜日の19時~21時に行っています。終わった後も雑談したりゆるくコードを書いたりしながら終電までゆっくりしています。近所のスーパーに半額以下の値段になったお惣菜をみんなで買いに行くこともあります。
・情報共有ツール
情報共有方法は、日程やリマインドに関してはLINEのグループチャット、講座内容のまとめや個人のアイデア置き場はScrapbox、技術に関する質問対応・アドバイス・雑談に関してはSlack、といったように使い分けています。
3, 大事にしていること
・プログラミングによる物作りの楽しさを知ってほしい
参加している方の中には、「IT系のアルバイトや就職活動のために勉強してみたい」といった方も何人かいられるのですが、個人的には「そういう話は一旦置いといてまずはプログラミングの楽しさとか物作りの面白さとかアウトプットした時の快感さを知ろうぜ!!!」ということをやりたいのを最初に伝えました(私が勝手に言っているだけという部分もあって基本的に考え方は自由ですが)。
まずは、オリジナルでWeb制作を行う楽しさをできるだけ知ってもらいたくて最初の個別課題として上記に書いた通りオリジナルの静的サイトを作ってもらうことにしました。
結果として、自身が運営しているVtuberのHP*2や、自分の絵を紹介するHP、昔作った厨二病的なものをHPにまとめてみたいという人など、多種多様で面白い感じになっています。私も自分のインターネット活動のポートフォリオサイトを作りました。*3
そんな風に今後も物作りの楽しさが分かるような実践型の取り組みができたらと考えています。
・参加者の学習状況に合わせて柔軟に対応する
参加者は、以前から授業や本でJavaやPythonを触った経験のある人、Progateで入門的なことは触ったことがある人、プログラミング自体まだ触ったことがない人など、様々な人がいます。
最初はスライド講義&簡単な実践学習の方式で行っていましたが、「既にある程度の知識がある人たちに初歩的なことばかり座学で教えるのはちょっと勿体無い、それでも基礎的なことをこれから勉強すべき人たちをちゃんと大切にしなければ…」などと色々考えてみて、週一で個人のレベルに合った課題を毎回出す方式を取り入れてみました。
Progate、実はちゃんと触ったことはなかったのですがこれを機に触ってみたところこれは初学者の教材として相性が良さそうだなと思ったので始めたての人にはこれをやってもらいつつ、先ほど話したオリジナルの静的サイトに取り組んでもらっています。
進度が早い人にはRailsチュートリアルを最初から触ってもらっている流れを取り入れてますが、ただやるだけだと厳しそうなのでSlackやリアルで集まる日に重要ポイントや解説などを行っていく必要があると思います。今のところSlackで#rails-tutorialといったチャンネルを作ってそこで重要ポイント情報を流して質問対応を行っている状態です。
今後も新しい人が入ってくる可能性があるのでその度に柔軟にアドバイスできたらなーと思います。
・コーチ側が教える立場に満足しないようにする
プログラミングスクールで3ヶ月ほどバイトしてた時期があるんですが、そこだとカリキュラムの内容に沿って教えるだけで満足して自分で何かを新しく得られない状況に陥っていた部分があったので、それは絶対に繰り返したくないなと思いながらやっています。
今の所、一緒にオリジナル静的サイトの課題に取り組んでオリジナルのポートフォリオサイトを作ってみたり、新しいWebサービスのアイデアを練ってみるなどして自分も物作りを楽しむ流れを作って実際に楽しんでいます。
4, やっていて気付いたこと・得られたこと
・基本的には個人で取り組んでもらう感じでも割と大丈夫
参加者が勉強熱心かつ調べ上手な人が多いおかげなのか、割とみんなちゃんと自分で課題をこなしてくれて何か作ってきてくれています。すごく良い振る舞いだなあと思うのでその度にめちゃくちゃ褒めています。
何か作ってきてくれた際には、「ここはこうした方が見栄えがよくなるかもしれない」「せっかくここまで作ったんだし、独自ドメインと独自SSLも実装してみたら面白いからやってみようか」と言った風にコードレビューやアドバイスを行う流れを作り、参加者が更に良いものを作れるようなコミュニケーションを行っていくことで参加者の学習を支援しています。
・勉強したいことを一緒になって楽しむこともできる
私が今企画している勉強会自体はRailsでWebサービスを作ろうという内容のものですが、参加者の中に機械学習にも興味のある人が多かったため、夏休み中は勉強会がある日の15時から機械学習の入門勉強会もやることになりました。今週からスタートする予定なので楽しみです。
以下の本を使いながら実践的に学ぶ予定です。
カラー図解 Raspberry Piではじめる機械学習 基礎からディープラーニングまで (ブルーバックス)
- 作者: 金丸隆志
- 出版社/メーカー: 講談社
- 発売日: 2018/03/14
- メディア: Kindle版
- この商品を含むブログを見る
・自分のためにもめちゃくちゃなる
実際のところ、人々に教えるという取り組みをやってみると予想以上に得られるものがあります。
教える側に立つことで、改めて基礎的な話に振り返ってちゃんと細かく教えられるぐらい復習をしてみたり、教える際にどういった教材が使えるだろうかと模索しながら実際に使えそうな教材に改めて触ってみたり、質問で自分がまだぶつかったことのなかったエラーについて聞かれてこういう現象もあるんだなあと勉強になるなど色々得られています。
また、周囲が物作りしている姿を見て自分も刺激されて何か作りたい気持ちに駆られ、実際に何か作ることができたりと、モチベーションアップの効果にもなっています。
上記のように、参加者と一緒に機械学習を触ることも始められたりと、勉強会を始めていなかったらやっていなかっただろうなあという出来事もあります。
5, まとめ
手探りで運用を開始したプログラミング勉強会ですが、思った以上に参加者の方々が積極的に学習に取り組んでくれて何か物を作っている姿を見るとこちらもすごく楽しいし、私も頑張って勉強していこうと思えるので始めて良かったと思います。(みんな吸収力の高い人たちばかりなので何もしていなかったら追い抜かれそう……)
また、勉強会を続けて1ヶ月経った際に気付いたことがあります。
講義中、サンプルコードやチュートリアルをただ触らせて終わるのではなくて、その後参加者が自主的に動けるような流れを作って、自分が作りたいものに関する知識の学び方を身につけてもらうことがすごく大事ということです。
人にプログラミング教えるの、ただ基本を教えたりチュートリアルを触らせて終わるんじゃなくて、その後に受講者が自主的に学べる流れを作ってあげて作りたいものを作るための知識を身につけてもらうことが重要な気がしてきた
— 桐生あんず (@anzu_mmm) July 19, 2018
という気付きもあり、今現在は課題としてネットに公開されているチュートリアルをやってもらいつつも、自分が作りたいもののイメージを見据えて実際に取り組んでもらい、こちらはアドバイスをし続けることで支援していくという方式を取っています。
よく考えたらプログラミングってつきっきりで教えてもらうものではなく、自分で進めて得ていく局面が多いものだよなあと改めて気づかされました……。
教える側がやることとしては、主に学習方法のアドバイスやオリジナルのものを作り方のアドバイスやコードレビューなのかなと今は考えています。あとは、エラー文の読み方やデバッグの流れについてももうちょっとしっかりと教えていきたいです。
まだまだ始まったばかりですが、参加者がオリジナルのWebサービスを完成できるよう応援していきたいです。そして私も新しいWebサービス作るぞ!!!
そんな感じです。楽しい活動だと思うので今後も良い感じに取り組んでいこうと思います〜。