D IT Y

タマキ工務店のIT日記

おーい磯野、ペアプロしようぜ!

f:id:shirotamaki:20211220234501p:plain

フィヨルドブートキャンプ Advent Calendar 2021

このエントリーは、Part1の21日目の記事です。

昨日20日目のエントリーは、

でした。素敵な記事ありがとうございます〜✨

はじめに

フィヨルドブートキャンプの32期生のタマキと申します。現在はプログラマ転職を目指し、RailsJavaScriptを学習中です。

テーマはペアプロです。以下(中島メンターと磯野くん)のやり取りをご覧いただき、その効果楽しさを感じてもらえると幸いです。

著者がペアプロを経験し学んだこと、個人的な思いや考えがミックスされた記事ではありますが「ペアプロって楽しそうだな〜」「ペアプロやりたいな〜」と、興味を持っていただけると嬉しいです。

対象読者

注意事項

今回題材として扱うペアプロは、実務で行う実践的な内容(ペアプロによるソフトウェア開発)とは違い、スクールで学習している生徒側からの質問の延長線上に存在するペアプロを想定しています。プログラミングの他に、タスクの洗い出し、コードの設計など、ペア(メンターと生徒)になって行う活動全般を含みます。

本題

あらすじ

磯野ぴよるど君は、フィヨルドブートキャンプに通う生徒でプログラマを目指し日々学習中です。 そんな中、あるプラクティスで長い間詰まっており、日々悶々とひとり悩み苦しんでいました。 そんな彼を見かけ心配した中島メンターは、ある日、磯野くんへ電話を掛けたところから物語は始まります。。。

登場人物

🐔 中島メンター

フィヨルドブートキャンプのメンターを務める凄腕プログラマ

札幌市在住

趣味は野球で右投げ左打ち。日ハムとスープカレーが好き

🐤 磯野ぴよるど

フィヨルドブートキャンプに通う32期生

ノルウェー生まれの世田谷区在住

最近太り気味で乾燥肌なのが悩み。毎日の筋トレと角の保湿は欠かせない

ペアプロって何ですか?

🐔中島:おーい磯野、ペアプロしようぜ!

🐤磯野:あれれ!?中島メンターじゃないですか。急にどうしたんですか?

🐔中島:磯野くんの日報を確認してたら詰まっていてツラそうだったから、ペアプロでもどうかな〜って思って連絡してみたよ。

🐤磯野:ペアプロって何ですか?おいしいですか?

🐔中島:食べ物ではないよ...(汗) フィヨルドブートキャンプ Part 1 Advent Calendar 2021 、12日目のcafedomancerさんの記事に詳しく書かれているので読んでほしいんだけど、ペアプロは、ペアプログラミングの略で、磯野くんが抱えている問題を解決する手がかりになる魔法のようなプログラミング手法だよ。

🐤磯野:へー、初めて知りました。このようなプログラミング手法があるんですね。ぜひお願いしたいです!

🐔中島:ヨシ!それじゃあ一緒にペアプロしてみよう。以下、紹介している本の記事もお薦めなので時間あるときにぜひ読んでみてね。

🐤磯野:おぉぉ〜!これは、テスト駆動開発で有名なt_wadaさんが書かれているペアプロについての記事ですね!面白そう!

gihyo.jp

基本のスタイル

🐤磯野:ペアプロはじめてなのですが、どんなスタイルでやるのですか?

🐔中島:「ペアプロはこうでなければならない」という事細かな明確なルールはないけど、ある程度は以下のスタイルに沿って実施されることが多いよ

  • 1つのディスプレイ、マシン、キーボードを共有する
  • ロール(役割)を決める。ドライバーとナビゲーター
    • ドライバー: キーボードを操作しコードを書き進めていく人
    • ナビゲーター: ドライバーの横(画面の向こう側にいる人)に座り、ドライバーと会話しながら導く人
  • ペアの種類(3パターン)
    • 新人とベテラン
    • ベテランとベテラン
    • 新人と新人

🐤磯野:へー、なるほど〜。ちなみに中島メンターとはオフラインでは会うことは難しいので、今回はDiscordを使った画面共有でペアプロを行うのですね!

🐔中島:そうだね。ちなみにペアのパターンとしては、「新人とベテラン」の種類に該当するよ。フィヨルドブートキャンプの受講生同士のペアプロも可能だけど「新人と新人」のパターンは立ち往生して先に進めなくなることも多く、注意が必要だよ。

🐔中島:また、ロール(役割)を交代して行うと効果的だけど、新人とベテランのペアの場合は、新人が主にドライバーを務めるケースが多いかな。ドライバーは理解できなかったときにはブレーキを踏んでナビゲーターに助けてらもらえるし、手を動かすことでより理解が深まるからね。

時間はどれくらい?

🐤磯野:ちなみに、今夜は地域のRubyコミュニティに参加したいので、それまでの時間なら空いてますが、ペアプロはどれくらいの時間やるのですか?

🐔中島:いい質問だね。基本のスタイルでも伝えたように明確なルールはないので、時間もその時々によって変わるよ。ワシの経験則にはなるけど、短いと5分程度から、長いと3時間以上と、取り掛かるプログラミングの内容によって時間は変わってくるね。上で紹介した本の中でt_wadaさんは、2時間くらいで到達できそうな目標を設定しペアプロを実施されていることが多いようだね。ただワシの感覚では、フィヨルドブートキャンプの場合は、生徒からの質問の延長線上にペアプロが存在しているので、ガチガチにスタイルを決めてやることは少ないと思うよ。

ペアプロを申し込もう

🐤磯野:まだ朝の9時なので大丈夫そうですね!でも、中島メンターの貴重な時間を奪ってしまい心苦しいです…

🐔中島:そんなことないよ。もちろん、磯野くんが抱えている問題解決を目標に取り組むことにはなるので、新人(磯野くん)に大きなメリットがあるのは間違いないけど、ベテランのワシにも教えることで自分のスキルの棚卸しにもなるし、学べることも多いんだよ。

🐤磯野:そうなんですね…(嬉泣)

🐔中島:今回はワシから声を掛けたけど、今後は磯野くんから積極的にペアプロを申し込むといいよ。フィヨルドブートキャンプならDiscordに専用のチャンネルもあるしね!

🐤磯野:でも、例えば利害関係の少ないコミュニティでペアプロをお願いしたいときもあると思うのですが、そういう時はさすがに引け目を感じてしまいますね...

🐔中島:たしかにその気持ちはわかる。でも、あるコミュニティの主催者がワシと同じことを言っていたんだけど...

「誰しも最初からできる人はいない。最初はみんな初心者だ。我々も多くの先輩方にペアプロしてもらい成長してきた。今の自分があるのはRubyコミュニティの存在が大きい。今は自分が受けてきたものをコミュニティを通じて好きで返しているだけ。気にする必要はない」

🐔中島:磯野くんもコミュニティに参加してわかると思うけど、多くの人はプログラミングが好きだからやっているし、ペアプロをお願いして嫌がる人はコミュニティには参加してないんじゃないかな〜

🐤磯野:神!(嬉泣) そんなこと言われたら惚れてまうわぁ...

🐔中島:そうだね(笑) ペアプロは、現代の徒弟制度みたいなものかもね。磯野くんも成長したら、後輩らにペアプロをすることで、Rubyコミュニティを盛り上げていってね!

ペアプロをお願いする姿勢

🐔中島:『授人以魚 不如授人以漁』......

🐤磯野:んんん!?急にどうしたんですか?

🐔中島:ごめんごめん。中国の古い格言(諸説あり)でさ、こんな言葉があるんだよ。知ってるかい?

「魚を与えれば一日の飢えをしのげるが、釣り方を教えれば一生食べていける」

🐤磯野:魚は大好きですが、この言葉は知りませんでした...(汗)

🐔中島:正直なところ、答えを教えるほうが、聞き手も答える側も手短に済むよね。でもそれでは、聞き手側の成長には繋がらないんだ。ペアプロに限らずだけど、「魚をください」ではなく、「魚の釣り方」を教えてもらう。この姿勢はとても大事だから覚えておいてね。もちろん、ペアプロ以前にまず最初は「魚の釣り方」を自分で調べて何とか問題を解決できるように努力することはマストだよ。

🐤磯野:深いですね...胸に突き刺さります。ぼくはついつい気が焦ってしまい「魚をください」と質問していることが多いので、この格言は腕にタトゥーとして刻んでおきます...

🐔中島:腕じゃなくて心に刻んでね(笑) でも、フィヨルドブートキャンプで学習しているほとんどの生徒は、卒業、就職を目標としている人が多いので、この考え方はとても大事だね。komagataさんがブログでも書かれているけど、 戦力として計算できるエンジニアになるには、「魚の釣り方」を身につける必要がある。エンジニアとしては自走力が必ず必要になるからね。「なぜプログラミングを学んでいるのか?」その目的を見失わないようにね!

ペアプロ前の事前準備

🐤磯野:ペアプロをはじめる前に必要な準備はありますか?

🐔中島:Discordなどに繋いでの画面共有にて実施していくので、マイクやディスプレイ、エディタは問題なく使えるか?使い方に不安がある場合は事前に調べておくといいよ。あと、メモ用の紙やペン(iPadやWeb上のツールでもOK)、そして飲みものは用意しておくと安心だね。「冗談抜きで、水、だいじ」

🐔中島:それから一番大事なことだけど、ペアプロで扱う内容は事前に準備しておこう。必要であれば関連書籍、Webサイト、コードや現状の問題(エラーなど)、調べたこと、試したこと、考えたこと、詰まっていること、このあたりをペアプロ前にまとめておくとベストだね。

🐤磯野:準備大事〜。ペアプロの相手に伝えたい内容を事前に準備しておくと焦らずにスムーズに対応できますね。あと質問は、相手にエスパーさせないことも重要ですよね。

🐔中島:そのとおり!上手な質問については、こちらの伊藤さんのブログ記事もおすすめなので読んでみてね。

ペアプロの進め方(コードを書く前にやること)

🐤磯野:最初は何からはじめていくのですか?

🐔中島:まずは、基本的な進め方を説明するよ。

  • コードを書く前に方向付けを行う
  • 最終目標を定める。(ペアプロを行う時間内で目指す最終目標を決める)
  • ペアプロに入る前にTo-Doリストを作成しておく。
  • To-Doリストは、ナビゲーターが手にしている「地図」のようなもの。
  • 完璧なリストには拘らず、ざっくりしたものでOK。その都度、修正、更新していく。
  • ポイントは、タスクを小さくすること。

🐔中島:必ずしも上記のように進めていくわけではないけど、ひとつの指針として覚えておいてね。

コードを書きながら会話し考えを共有する

🐤磯野:今日のカツオのたたきはおいしかったな〜

🐔中島:旬だからね〜、っておい!......(困) それはさておき、ペアプロで一番大事なのは「会話」だよ。考えていることを口に出すこと。これから書こうと思っていることや、迷ってモヤモヤしていることをまずは言葉にしてみる。ひとりで悩まずにペアプロで取り組んでいる問題、悩みを共有するわけだね。

🐤磯野:独り言のようなものでもいいのですか?

🐔中島:もちろん!具体的なことに越したことはないけど。頭に浮かぶ言葉を口に出すことが大事だよ。沈黙が一番ダメ。「難しい〜、わからない〜」でも、磯野くんの考え、気持ちを言葉にしてね。

🐤磯野:なるほど。考えを共有することで、ナビゲーターはドライバーの考えを聞き、助力してくれるのですね。

ロール(役割)を交代する

🐤磯野:ロールケーキが食べたいな〜

🐔中島:君は食べ物の話しばかりだな〜(困)

🐔中島:ペアプロでは、ロールを交代すると効果的だと言われているよ。主に以下の3つのスタイルでロールを交代することが多いかな。

  • 時間で交代する
  • ステップで交代する
  • 自由に交代する

🐔中島:冒頭でも説明したけど、新人側がドライバーを務めることが多いので、このへんは相手(ベテラン)と相談しながら決めていくのがよいね。

🐔中島:あと、長い時間ペアプロするときは適時休憩を挟んでね。区切りがいいところで、ふりかえりをしてもいいかもね。

ペアプロをはじめてみよう

🐔中島:ここまで来たら、いよいよペアプロをはじめてみよう!

🐤磯野:まだ不安です…(震)

🐔中島:最初は誰でも不安だよ。でも、勇気を出して一歩踏み出せば世界が広がるはずだよ。さあ、一歩踏み出してペアプロの世界に飛び込もう!!

ペアプロの効果

数日後・・・・・

🐤磯野:中島メンターお久しぶりです〜

🐔中島:お〜、磯野くん元気そうだね〜

🐤磯野:あの日からペアプロの良さを知ってしまい、最近はちょくちょく色々なところでペアプロしてます!

🐔中島:いいね〜、どんな効果があった?

🐤磯野:いろんな効果を感じているので一言ではいい表せないのですが、以下のような効果を感じています!


  • 問題解決

    • デバッグ手法を学べる
    • タスクの洗い出し、切り分け方を学べる
  • コードレビューによるさまざまな効果

    • レビュー内容がリアルタイムにコードへ反映される
    • 読みやすく保守性に優れたコードを学べる
    • ミスが生まれにくい。二人の目と脳とで監視することで抜け漏れを防止できる
  • 思考の整理

    • 今自分が考え、これから行うことは何なのかを常に相手に共有することで、思考の整理ができる。コードを書いてから間違いに気づくのではなく、話している最中に気づけることも多い
  • 知識と学びの共有

    • Git操作、エディタの便利機能など、凄腕プログラマが日常使っている技術を目の当たりにできる
    • 技術力の底上げ、高い教育効果を発揮
    • 結果(コード)だけではなく、過程(プログラミング)を共有することで得れる知識やスキル
    • 暗黙知の共有(経験や勘に基づく知識のこと。言葉で表現が難しいもの)勘所やバグの原因究明など、ドキュメントでは伝えづらい重要なスキルを共有できる

🐤磯野:などなど、さまざまな効果を感じています。そして、何よりペアプロは楽しい!メンターやアドバイザーはもちろん、卒業生や現役生、外部コミュニティでもペアプロを体験したのですが、どれもこれも楽しく学びの多いペアプロでした!

🐔中島:楽しいことは何よりだね。ペアプロ情報伝達効率を最大にすることでプログラミングの質を高めることができる、本当に素晴らしい手法だと思う。これらも色々な壁にぶち当たると思うけど、ペアプロを活用して困難を乗り越えて言ってね!

🐤磯野:はい!ありがとうございます!

おまけ

AIとペアプロ

🐔中島:RubyWorld Conference 2021のMatzの基調講演は観たかい?

🐤磯野:まだ観ていないですぅ…

🐔中島:MatzがRubyの未来のヴィジョンについて話しているんだけど、近い将来、Rubyを使ったツールで「AIとペアプロができる日がくるかもしれないよ。

🐤磯野:AIとペアプロ!?凄い未来だ〜!

🐔中島:52:25 ぐらいからその話しになるので、興味があったら観てみてね♪

youtu.be

モブプロって何ですか?

🐤磯野:中島メンター、そういえばモブプロなる美味しそうな名前もよく耳にしますがこれはなんですか?

🐔中島:お!さすがお目が高い。モブプロはね、ペアプロを発展させた手法だよ。

🐤磯野:へ〜、なんかこれも面白そう!

🐔中島:モブとは「群衆」のことで、3〜5人を想定したペアプロを発展させたプログラミング手法のことを指すよ......と、今日はこのへんで詳細は次回のブログにまとめたいと思うから、その時のお楽しみに!

  • 輪読会でレインボー
  • 三鷹でわいわいアプリ作成
  • はるぐち先生とじゃんけんプログラム

以上の3テーマを予定しているよ

おわりに

タマキです。

最後までお付き合いいただきありがとうございました。

今までペアプロに何度も救われた身として、この記事を書けたことを嬉しく思います。

ペアプロ未経験の方へ少しでも参考になれば幸いです。

さて次回は、

の2本です。

それではまた明日もみてくださいね〜!