Pythonの勉強会(入門編)の事例紹介 ―― アプローチを変えてみる

特にこういった方によんでいただけたら・・・

今回のブログは主に次のような方に向けて、Python の社内勉強会を開催した事例を紹介します。

  • Python に興味があって学習したいと考えているが何から手をつけてよいかわからない
  • Python などプログラミング言語の勉強会をこれから開こうと考えている
  • TA(テクニカルアーティスト)やスクリプターなどに Python の使い手をもっと増やしたいと考えている

プログラミング言語を学ぶ側と教える側、両方の方にとって何か少しでもヒントになれば幸いです。

 

今回のブログで伝えたいこと

Pythonの勉強会(全4講演を予定)の入門編である第1回目の講演について予想以上に盛況となった自身の成功体験から得た知見を最初に共有させていただきます。

  • プログラミング(Python)を学びたいと思っているオトナでかつプログラミング経験ゼロないし初心者に対する入門としてはビジュアルプログラミング作業分解が教材としては有効である
  • いきなりPythonに手をつけることは一旦我慢して、まずはプログラミングの基本(順次処理条件分岐繰り返し)を学ぶことが近道である
  • 先にたっぷり自信をつけた上で少し困難なことにチャレンジして成功体験を得られるサイクルになるようになるべく交通整理することで挫折せず継続できる

 

それではPythonを学びたい方、教えたい方への入門の参考教材として、
勉強会当日の内容についてご紹介しようと思います。

第1回目の勉強会の内容とは

当日はワークショップ形式にて開催しました。ワークショップ形式にすることで、

  • グループ内での協力
  • 発想の違いの発見
  • 安心感の向上
  • チームメンバを意識することで集中力の向上

などの効果を期待して設定しました。

またパソコンは使わずに、運営側で鉛筆とプログラムを書くための用紙を準備して、手ぶらでも参加できるようにしました。

 用紙イメージ
f:id:sgtech:20200426204520p:plain

時間の使い方としては、

  • 事前説明に5分
  • 順次処理の学びに30分(ビジュアルプログラミング)
  • 順次処理+条件分岐+繰り返しの学びに25分(作業分解)

で設定しました。

順次処理の学びについて

最初はビジュアルプログラミングを通して、順次処理だけに集中して学んでいただきました。
ここでは、

  • 「自分はできるんだ」
  • 「プログラミングって想像してたより簡単かも」

などといった、自分に自信をつけていただくことが最大の目的です。後半の作業分解の課題の難易度が1段上がることがわかっているため、ここでどの程度自信をつけていただくかによって、後半の課題に対する印象がガラッと変わります。

あともう1つ大事な目的があります。それはプログラミングすることで課題を解決する力を高めることです。

 

教材としては、コマンドをつかってキャラクタを操作して宝箱まで導くといったプログラミングのアナログ的なゲームを準備しました。

それでは、コマンドから見ていきましょう。

コマンドの紹介

キャラクタは各コマンドの内容にしたがって動かすことができます。 

コマンド(記号) コマンドの内容

f:id:sgtech:20200426204457p:plain

向いている方向に1マス進む

f:id:sgtech:20200426204501p:plain

時計回りに90度回転

f:id:sgtech:20200426204505p:plain

反時計回りに90度回転

コマンド3つを理解したところで早速課題に移りたいと思います。

 課題その1

下図の青いキャラクタを先ほど学んだコマンドをつかって宝箱まで到着できれば、課題クリアです。参加者にはプログラムを書く用紙の縦1行を使って、コマンドを鉛筆で書き足してプログラムを完成させていただきます。

正解はたくさんあります。正解の1例としては、下図右側の「プログラム例」をご覧ください。

f:id:sgtech:20200426204509p:plain



またこの課題その1において難易度をあげたければ、以下のような条件を加えてあげましょう。

  • 課題その1-A:コマンド(どれでも構わない)を9つぴったり使って宝箱まで導いてください
  • 課題その2-B:3種類すべてのコマンドを使って宝箱まで導いてください
 課題その2

新しいルールとして「岩」を追加します。岩のあるマスはキャラクタは通ることができません。課題クリアの条件は課題その1と同じですが、参加者は岩をうまく避ける形でプログラムを作成する必要があります。ルールを追加することで課題の難易度をバランスよくあげていきます。

こちらも正解はたくさんあります。正解の1例としては、下図右側の「プログラム例」をご覧ください。

f:id:sgtech:20200426204514p:plain

マスを増やしたり、岩の位置や数を変える(必ず宝箱には到達できる並びにしました。)ことで、難易度を調整することもできます。その場合はよりプログラムが複雑になり、コマンドを書き込む枠を増やす必要があるかもしれません。

ぷちエピソード

勉強会当日、道を岩で完全に塞ぐように配置して宝箱への道を絶ったあとに参加者の皆様に「この場合、どういうプログラムを書けば、宝箱まで到達できますか」と無茶ぶりな質問をしてみました。

すると1人の優秀な方が、「マスの外は歩けないというルールは聞いてないので、マスの外に出て迂回して移動するようにコマンドを書けば良いと思います」という異次元の回答を出してくれました。

f:id:sgtech:20200426204524p:plain



「とっても素晴らしい正解です!」と賞賛させていただきました。

回答者の方が一枚上手でした。

わたしはまだまだプログラマとして、ルールの詰めの部分で修行が足りていなかったというわけです。。。

プログラミングの世界ではこういったルール抜け、欠陥のことをバグといいます。バグによってこちらが意図しないような想定外の問題を引き起こします。

色々な状況や問題を事前にすべてもれなく想像できるようになれることが最高です。

 

このブログを今よんでくださっているあなたも時間が許すようなら鉛筆と紙を準備して、今回の課題のプログラムをご自分の手で書いてみてください。

プログラミングと聞くとパソコンで何か作業をするイメージがとても強いですが、実はそうではないことがわかっていただけたのではないでしょうか。

順次処理がどういったものかイメージはつかめたでしょうか?

プログラミングって意外とカンタンではありませんか?

今回、記号(絵)を使ってプログラムを書きましたが、絵や図を用いるプログラミングを ビジュアルプログラミング といいます。ビジュアルプログラミングとして有名なものとして「ScratchJr(スクラッチジュニア)」、「Scratch(スクラッチ)」などがあります。無料のアプリケーションですので気になる方は調べて触ってみてください。

ちなみにPythonはというと、文字や数字、また記号を用いるプログラミングで テキストプログラミング といいます。


前半は以上となります。

順次処理に加えて、繰り返し、条件分岐の学び

後半では作業分解を行うことで、プログラミングの三種の神器である

  • 順次処理(シーケンスともいいます)
  • 繰り返し(ループともいいます)
  • 条件分岐

について学んでいただきました。

どんな作業でもこの3つを駆使すれば再現できます。

では、当日準備した教材についてご紹介します。

カレー作りの工程を作業分解して学ぶ

まずはカレー作りの工程の例をあげて、「作業分解する」ということがどんな感じなのか学んでいただきました。

わたしなりにカレー作りの工程を作業分解したものがこちらになります。

  1. 野菜の皮をむいて野菜やお肉を一口大に切る
  2. 野菜やお肉を油で炒めて鍋に入れて水を足す
  3. 煮込む
  4. 野菜がやわらかくなったか?
    Yesなら5へ、Noなら3へ
  5. ルゥを溶かして煮込む
  6. カレー完成(※作業ではないですがわかりやすくするために)

f:id:sgtech:20200426204528p:plain

基本的には1から順に行う順次処理となりますが、ポイントは4の作業です。
野菜がやわらかいのかそうでないかでその後の進むべき道が枝分かれすることが条件分岐の考えです。
そして「野菜がやわらかくなる」という条件が満たされるまでひたすら3→4→3→4→…を繰り返して野菜を煮込み続けることが繰り返しの考えです。

几帳面な方だと、3と4の間にアクをとる作業を追加で入れたりするかもしれません。

また人によっては2と3の間に隠し調味料を入れる作業を追加するかもしれませんし、野菜を水で洗ってないことには気づきましたか。あなたならどこに追加しますか?

「作業分解する」ことについて、なんとなくイメージは掴んでいただけましたでしょうか。

 

次は参加者に日頃よく行っているあることについて、実際に作業分解を行っていただきました。

お題は「洗濯」

当日はグループごとにメンバ全員で相談し合って「洗濯」の作業を分解していただきました。

複数人で考えることで、他のメンバの考えを聞いて何か発見があったり、あと前半よりも難易度が上がっている点にみんなで考えれば怖くないといったことなどに期待しました。

また自由に想像・発想してほしかったこともあって、あえてこちらからは条件はつけずに、どういう設定でどこまで細かく分解するかも含めて考えていただきました。

当日の回答を少しだけ

参考に勉強会当日に、あるグループが作成した洗濯の作業分解の回答を1つだけのせておきます。

f:id:sgtech:20200426204532p:plain



条件分岐と繰り返しをちゃんと理解して使っていることがわかります。
今回紹介した回答はブログで掲載するためにぱっとみてわかりやすいものを選びましたが、他の回答ではもっと複雑に作業分解されているものも多くあったり、どのグループも理解力の高さに驚かされるものがたくさんありました。
たまたま賢い方ばかりが勉強会に参加されていた可能性も十分に考えられます。

あなたが日頃無意識に行っている洗濯ではどういう手順で行ってますか?試しに書き出してみると、意外と色々なことを行っている自分(人)の優秀さに気づくかもしれません。

もしロボット(コンピュータ)に洗濯させるとなると一から十まですべて手とり足とり教えてあげないといけません。

 

以上が勉強会の内容となります。

日頃の業務において何か改善したいと思ったときに、どういう手順でどの作業を行って解決するか、その一連の流れを考えることがとても大事です。作業分解を実際に行うことで、この課題を解決するための力、すなわちプログラミング能力を高めることが大いに期待できます。

講師としての成功体験とは

Pythonの勉強会の講師を行っての成功体験をいくつかご紹介しようと思います。

  • 参加人数110人は過去最高を記録
  • アンケート結果がおおむね良好で、特に講演の理解についてはアンケート結果的に全員理解できた様子なのでわたし自身の目標としていた脱落者0についてはおそらく達成できた
  • アンケートの所感欄でも非常にポジティブな所感を多くよせていただいた
実際のアンケート結果

設問:当セッションの内容は如何でしたか?
f:id:sgtech:20200426204535p:plain

設問:講演の内容は理解できましたか?
f:id:sgtech:20200426204542p:plain

設問:講演は今後の業務に役に立ちそうですか?
f:id:sgtech:20200426204546p:plain

印象に残る所感として

60個程度の勉強会に対する所感をいただきましたが、どの所感もわたしにとってはありがたい内容ばかりで、その中でも特に印象に残るものをピックアップしました。 

  • グループの方と交流しながらできたのは楽しかったです。プログラミングへの難しそうという意識がなくなった気がします。

  • ムズカシいのを覚悟していたのですが、非常に楽しく参加できました!

  • 分かりやすかった。プログラミングに対する恐怖感が減った気がした

  • プログラミングに苦手意識があったので、絵を使った導入で、これなら自分でも続けられるかも・・・?と思いました。Pyson使える様になればよいな・・・最後ちょっと慌ただしかったかも?

  • プログラミングをしたことがなかったので、理解できるのか不安でしたが、理解することができました。ありがとうございます。

以上の所感からは参加者の中にはやはり苦手意識や不安などをお持ちの方がそれなりにいらっしゃって、そういった方がプログラミングに対して自信を持ってくれたことが自分としては一番の成功体験でした。

また「次回も楽しみ」といった次への前向きな所感も数多くよせていただいたことも講演者としては非常にありがたく、第2回目への準備にもさらに力が入るきっかけを与えてくれました。

 勉強会あとの反響として

今回はまだ第1回目ということもあって反響は少ないものの、資料に関するお問い合わせがあったり、別のグループ会社様からプログラミングの勉強会に関する相談の打ち合わせをさせていただいたりしました。とにかく評判がよかったことだけは確かなようです。 

そういえば。 Python勉強会の開催のキッカケについて

わたしがPythonの勉強会を企画するきっかけを与えてくださったのは何名かのTA(テクニカルアーティスト)の方の以下の声を拾ったからでした。
(声をあげていただいたTAの皆様にはこの場をお借りして心よりお礼申し上げます。)

  • TAをもっと増やしたい
  • Python使いを増やしたい

Pythonの勉強会を開くにしても、ふたをあけてみて需要がなければ開催の意味がないので先に本当に需要があるのかどうか裏をとるために各部デザインセクションのマネージャの皆様のご協力の元で、グループ内のデザイナーの方へのアンケート調査を行いました。
するとアンケート結果から、

  • Pythonの勉強会に参加したい割合は確かに多い(90%)
  • Pythonを触ったことがないもしくは少ししか触ったことがない方の割合が多い(76%)

という非常に興味深い傾向がわかりました。

今回のPythonの勉強会はまさにこの約76%をターゲットにした内容になっています。

またプログラミングの入門から行うのであれば、デザイナーだけに職種を絞る必要はないことなどから職種は問わないように最終的に変更しました。

職種を絞らなかったことが、結果的に参加人数100人を超える勉強会につながりました。
(アンケート結果:デザイナー62%、それ以外の業種38%)

最後はこのブログの「オチ」をあてようのコーナー

最後はこのブログのオチをあてようのコーナーです。

すでに過去のセガの技術ブログに足を運んでいただいた方や、他の企業様のエンジニアブログなどをよくご覧になっている方なら、すでにこのブログのオチがかんたんに予測できているのではないでしょうか?

まだオチがわからない方は、いくつか過去のブログをチェックしてみてください。この記事や、この記事や、この記事などにヒントが隠されてます。

そのまま行って帰ってこない可能性ももちろんありますが、そういったオチも正解の1つだと思います。

 
弊社ではPython勉強会以外にも、月例の勉強会としてグループ内の色々な立場の方が講師を行ってくださっています。社外からゲスト講師をお招きしてすることもあります。また月例の勉強会以外にも SDC各種イベント(GDCやCEDEC)の報告会、プロジェクト内の勉強会などグループ内には多種多様な勉強会があります。

弊社では、勉強会などを通じて自他共栄を行える人を求めています。

みんなで共に成長して感動体験をたくさん創造しあえたら幸いです。(開発技術部 菊川) 

www.sega.co.jp

©SEGA

Powered by はてなブログ