Slide 1

Slide 1 text

#osc20do #javado モブプログラミングを勉強会に取り入れよう! 実践事例からの知見 山川広人 
 Javaエンジニアグループ北海道(Java Do), 公立千歳科学技術大学 1

Slide 2

Slide 2 text

#osc20do #javado 公立千歳科学技術大学 情報システム工学科 専任講師
 R&D: Experimental Development of ICT Systems (ex: City-Bus Tacking System) 
 Computer in Education, Programming and Programmer's Learning 
 
 Communities: YAMAKAWA, Hiroto : @gishi_yama 2

Slide 3

Slide 3 text

#osc20do #javado 最近のJava OpenJDK14 がでて、文法面などにもモダンな考え方を取り込もうとしています!
 オススメは Recodes です!(Kotlinのdata class、Scalaの case class、C#のrecord class と同様の機能) 次のLTSバージョンのJDKまであと1年ちょいです! Javaエンジニアグループ北海道 (Java Do ) 3 ご当地Duke: ひぐまDuke 北海道のJavaユーザーグループです! 札幌を中心に、道内各地でJavaに関わる初学者やユーザー、 エンジニアの皆さんの交流とスキルアップの場として
 イベントや勉強会を開催しています。 最近はJavaだけでなく、派生技術や開発運用面など、
 幅広いテーマでの勉強会や交流会を行っています。 https://javado.connpass.com/

Slide 4

Slide 4 text

#osc20do #javado モブプログラミングとは 4

Slide 5

Slide 5 text

#osc20do #javado モブプログラミング(モブワーク, モビング) とは 5 マーク・パール (著)、長尾高弘(訳)、
 及部敬雄(解説):
 モブプログラミング・ベストプラクティス ? モブプログラミング: 
  複数人の質疑や議論の結果で進み、
  フロー効率の向上やチームの成長に
  寄与する ○ 難しい課題に複数人の知識、
    スキル、ノウハウを総動員し取り組める
 ○ 相互に異なる知識・スキルを
    共有・継承できる
 ○ 開発とレビュー(確認)・改善を
    兼ねられる ! ひとつのプログラミング課題に、複数人のチームメンバーが、
 同じ場所で、ひとつのパソコンを使って、解決方法を議論しながら
 開発を進める手法 参考文献:

Slide 6

Slide 6 text

#osc20do #javado 1. 3名以上で一カ所に集まる 2. タイピスト(1名)とモブ(そのほか)に分かれる。タイピストは、パソコンの前に座る。 3. 活動する時間と、時間内に到達を目指すゴール、タイピストの交代のタイミング(5〜15分ごと)を決める
 〈モブ〉
 ・ ディスプレイに表示される画面を全員で見ながら、
   解決すべき課題や問題点に集中し、問題解決のための方法を考え・推測・提案する
 ・ わからないことはわかるまで質問して、学ぶ
 〈タイピスト〉
 ・モブ全員の合意がとれた操作やコードの入力をする 4. タイミングがきたら、タイピストを交代する。 5. ゴールが達成できたら、みんなで喜ぶ(ハイタッチ!) 6. モブ終了の時間がきたら、次回のモブにむけてふりかえりを行う モブプログラミングの流れ 6 モブ タイピスト モブ モブ モブ モブ

Slide 7

Slide 7 text

#osc20do #javado 実際のモブの風景 7 https://youtu.be/9pVNmY3Psfs

Slide 8

Slide 8 text

#osc20do #javado モブプログラミング(実演の風景) 8 モブ モブ モブ タイピスト • モブは問題解決にむけて積極的に議論する • モブ間の合意がとれた操作依頼をタイピストが反映する
 (誰か一人の独断では操作しない) • タイピストは一定時間(10分前後)で交代する • ゴールに到達したらみんなで喜ぶ • 分からないことや疑問を残さず確認する • 終了時には、次回にむけた振り返りをする

Slide 9

Slide 9 text

#osc20do #javado モブプログラミング(タイピストの交代⇒議論と反映⇒ゴール) 9 モブ モブ モブ タイピスト • モブは問題解決にむけて積極的に議論する • モブ間の合意がとれた操作依頼をタイピストが反映する
 (誰か一人の独断では操作しない) • タイピストは一定時間(10分前後)で交代する • ゴールに到達したらみんなで喜ぶ • 分からないことや疑問を残さず確認する • 終了時には、次回にむけた振り返りをする

Slide 10

Slide 10 text

#osc20do #javado モブプログラミング(疑問をそのままにしない) 10 モブ モブ モブ タイピスト • モブは問題解決にむけて積極的に議論する • モブ間の合意がとれた操作依頼をタイピストが反映する
 (誰か一人の独断では操作しない) • タイピストは一定時間(10分前後)で交代する • ゴールに到達したらみんなで喜ぶ • 分からないことや疑問を残さず確認する • 終了時には、次回にむけた振り返りをする

Slide 11

Slide 11 text

#osc20do #javado モブプログラミング(次回に向けた振り返り) 11 モブ モブ モブ タイピスト • モブは問題解決にむけて積極的に議論する • モブ間の合意がとれた操作依頼をタイピストが反映する
 (誰か一人の独断では操作しない) • タイピストは一定時間(10分前後)で交代する • ゴールに到達したらみんなで喜ぶ • 分からないことや疑問を残さず確認する • 終了時には、次回にむけた振り返り・準備をする

Slide 12

Slide 12 text

#osc20do #javado (オフライン)勉強会への導入 12

Slide 13

Slide 13 text

#osc20do #javado IT勉強会にもどんどん取り入れてみる 13 Javaに関して、チームでテーマを決め
 モブプログラミングで取り組む 某プログラミングコンテストの問題を題材に
 Kotlin&モブプログラミングで挑む

Slide 14

Slide 14 text

#osc20do #javado

Slide 15

Slide 15 text

#osc20do #javado 15

Slide 16

Slide 16 text

#osc20do #javado • テーマに対して、初心者と経験者をできるだけ混ぜる
 それぞれの観点から、チームの成長を実感してもらう
 (特に新しい技術などを取り上げる場合) • まずは自己紹介
 Drucker Exercise などを最初に挟んでも良い(アイスブレイク、意識あわせ) • ゴールは各チームに決めて貰う
 ただし最初は近い・簡単なゴールにする。
 チームの現況の把握、このチームならどこまで行けるか?も自己調整的に進めて貰う。
 (チームの進め方も、モブで合意をとる) • タイムキーパーはスタッフがする・モブのトレーナー的な役割をスタッフがする
 「順番交代をとばす」「特定の人が主導してしまう」「発言できない」
 「モブの合意の方法が決まってない」「ゴールが来てもハイタッチできない」...
 などの「ついやってしまう」を見つけてうまく解きほぐす 勉強会へのモブプログラミングの取り入れ方の要点 16

Slide 17

Slide 17 text

#osc20do #javado 1. 〈全員〉 分からないこと・確認しておきたいことを残さず解決する
 どんな質問・確認であっても受け入れ全員の不明点を解消する(心理的安全を作り出す) 2. 〈全員〉 時間や順番を守る
 役割の交代や全体の時間を厳守する 3. 〈タイピスト〉 モブ全体の合意がとれた操作だけを行う
 モブ全員がOKを出した段階で、PCの操作やコード化をする(合意がとれているか確認する)
 タイピストは自分の想像や知識だけで操作してはいけない。必ずモブに操作を確認する。 4. 〈モブ〉 議論が白熱しても攻撃や差別、ハラスメントにならないように気をつける
 意見の衝突や感情がこもりそうな時は、誰かが休憩を促す 5. 〈全員〉 悩む時や調べものをするときは、みんなで行う
 「タイピストが何もできない」状況をつくりださないよう、調べものは全員で行う
 (特例:タイピストが全く何もできなかった・モブが何も指示できなかったときは、タイピスト を継続してもよい) 「モブプログラミングの注意点」を配布しておく 17

Slide 18

Slide 18 text

#osc20do #javado • テーマとなった技術を使って、経験者も初心者も同じ土俵で進める
 ⇒ 日頃、なかなか踏み出せていなかった疑問や知識不足の解消
 ⇒ 技術以外の部分でも、例えばPCやIDEの操作方法さえ、知識やノウハウの共有の対象になる • テーマとなった技術の手習いではなく「これを使ってチームで作ってみよう」の実践体験になる 
 ⇒ アルゴリズム、モデリング、コードへの落とし込み、テスト...幅広い範囲にチームで対応する
 ⇒ 得意分野の活用(技術面ではなく、ファシリテーションなども)
 ⇒ 問題点に対し、各々の知識・経験を合わせることでの解決 • 新入社員の研修でやりたい! という感想が、中堅層から出てくる
  ⇒ モビングをやりたいと思ったときに、できるメンバーが沢山増えると素敵だと思います セミナーやハンズオンをやっていたときよりも好評(に感じてます) 18

Slide 19

Slide 19 text

#osc20do #javado IT勉強会での導入では、環境の整備が重要 19 普通の貸し会議室ではなかなかモビングはやりづらい  ⇒ 〈複数のプロジェクタ、ホワイトボード、動かしやすい椅子・机〉 × グループ分
  ⇒ できれば、他のグループとの干渉がおこりずらいスペース(グループ間の距離、部屋)
     素敵な設備が整っている企業の会議室をなんとか貸していただくことで解決
     ご協力いただいている企業様に改めてお礼を申し上げます 入力デバイス問題(かなり問題になる)  ⇒ JPキーボード vs USキーボード、OSの違い、ファンクションやスペシャルキーの位置の違い、
     ショートカット、etc...  入力ミスとなって予想以上にタイピストへ牙を剥く
  ⇒ モブプロの現場には、1つのPCに2つのキーボードをつなげたりする 毎回、運営側でがんばって用意したもの  ⇒ 特定環境(IDE,バージョンなど)が必要な場合は、環境整備済みのノートPC
    もちろん、チームの中で誰かが持参したものでもよい。
  ⇒ モブやテーマ技術に慣れたトレーナー(アドバイザー)
     ※ Java Doスタッフがトレーナーをやれるように、スタッフだけでモブ体験会 図引用: マーク・パール (著)、長尾高弘(訳)、 及部敬雄(解説):モブプログラミング・ベストプラクティス

Slide 20

Slide 20 text

#osc20do #javado 〈COVID-19後を考える〉
 オンライン勉強会への
 モブプログラミング導入の挑戦 20

Slide 21

Slide 21 text

#osc20do #javado (先行事例)及部敬雄, リモートモブプログラミング 21 出典: https://speakerdeck.com/takaking22/remote-mobprogramming-stay-home-with-team

Slide 22

Slide 22 text

#osc20do #javado Zoom部屋 AWS Workspaces 遠隔タイピストPC 画面のみ共有 Workspaceクライアントで
 接続・タイピスト操作 タイピスト役 音声・カメラ
 共有 音声・カメラ共有 モブ役たち IntelliJ IDEA, Mobster,
 Zoom を起動 10分程度で交代
 モブ役→タイピスト役は
  Workspacesクライアントを起動
 タイピスト役→モブ役は
 Workspacesクライアントを終了 Workspacesクライアントと Zoomを起動 Zoomを起動 遠隔タイピストPCの画面を
 Zoom部屋で確認しながら
 モブ役達でディスカッションし、
 タイピストへ操作依頼 モブトレーナー
 (※慣れないうちは) 進め方の助言 マネして作ったオンラインモブ環境
 11:00~G会場 で実演できているはず...! 22

Slide 23

Slide 23 text

#osc20do #javado 23 画面例(さっきのやつです)

Slide 24

Slide 24 text

#osc20do #javado オンライン勉強会で実際にやるには?(試案) 24 ・
 ・
 ・ オンラインモブの環境を複数用意し、 ZoomのBreakout Rooms や、Remo.co のような
 サービスと組み合わせる? 金銭的なコストはかかりそう...? ・
 ・
 ・ オンラインホワイトボードなどのツールも必要そう 図引用: remo.co

Slide 25

Slide 25 text

#osc20do #javado 他の手段 (remotemobprogramming/mob) 25 出典 https://github.com/remotemobprogramming/mob

Slide 26

Slide 26 text

#osc20do #javado まとめ 26

Slide 27

Slide 27 text

#osc20do #javado モブプログラミング  複数人のチームメンバーが、同じ場所で、1つのパソコンを使って、1つの問題を
  知識・スキル・ノウハウ・知恵を総動員して議論し解決する開発手法
  ⇒開発のフロー効率だけではなく、チームの成長などにも寄与が期待される モブプログラミングの(オフライン)勉強会への導入  テーマとする技術の手習いを、テーマとする技術を用いた実践的な体験に変える
  ⇒アルゴリズム、モデリング、コードへの落とし込み、テスト、チーム運営まで、
   幅広い問題をモブプログラミングで解決する体験ができる
  ⇒ 機材や環境などの準備が必要... モブプログラミングのオンライン勉強会への導入(道半ば)  先行事例のように、DaaSなどをうまく活用すればできそう。
  (ただし、コストはかかる...)
 ⇒ うまく準備が進めば、この夏にJava Doでリモートモブプログラミング勉強会をしたい まとめ 27