この記事について
ペアプログラミングを通して得られた気づきや変化をここにまとめています。
プロフィール
- 新卒で入社3年目
- 学生時代は工学系を専攻
- 配属後、Javaの開発業務を担当
- プログラミングについて学習したのは社会人から
背景
自分の中で業務に必要な理解や整理が追いついていないと感じる場面が増えていました。問いの軸がぶれ、相手に意図が伝わりにくい場面がありました。また、Javaをはじめとした開発知識そのものも不足しており、ロジックの組み立てや思考の流れを整理することにも課題を感じていました。これらの弱点を一つずつ見える形にし、実践的に改善したいと考えた結果、リアルタイムで思考の進め方や知識の使い方を学べると思い、ペアプログラミングを始めることにしました。
ペアプログラミングとは
2人のプログラマーが1台のコンピュータを共有し、役割分担しながら共同でプログラムを開発する手法です。役割としては、以下の通りです。
- 「ドライバー」:実際にコードを入力する
- 「ナビゲーター」:レビューや方向性を示す
取り組んだ内容
上司からプログラミング問題が提示され、それを二人一組で解いていく流れで進めています。完成後は、動作確認するためのテストケースを作成し、デバックまで実施します。
二人一組で行うため、ペア相手を社内で募集して他の課のメンバーの方々に協力していただきました。
年内目標として48回(週に1回のペース)の開催を目指しました。
実際の問題例
これまでの問題の中で印象に残ったものを抜粋して紹介します。
問題概要
白を0、黒を1として表現する二次元配列と座標が与えられます。
指定された座標は黒のマスで囲まれているので、囲まれている範囲を黒で塗りつぶしてください。
- 実行と回答の例
実行例
以下の入力と2, 2が指定された場合
0 0 0 0 0 0
0 1 1 1 1 0
0 1 0 0 1 0
0 1 1 0 1 0
0 0 1 1 1 0
回答例
0 0 0 0 0 0
0 1 1 1 1 0
0 1 1 1 1 0
0 1 1 1 1 0
0 0 1 1 1 0
この問題が印象に残ったのは、単に0を1に置き換えるだけでなく、囲まれた領域を正確に把握し、境界条件を意識しながら一つずつ塗り進める必要があり、思考の整理や手順の確認の大切さを実感できたからです。
課題解決に向けて注力した取り組み
ペアプログラミングを進める中で、課題を明確にし解決へ向かうために、以下の点を意識して取り組みました。
思考の整理を丁寧に行うこと
課題に取り掛かる際は、まず紙やホワイトボードを使い、考えを外に出しながら整理するよう心掛けました。頭の中だけで進めず、手を動かして可視化していくことで、問題の構造や進むべき道筋がつかみやすくなるようにしました。また、整理した内容はペアと共有し、認識のズレがないかをその都度確認することで、同じ方向を向いて進めるように意識して取り組みました。
ソースコードの意図を説明すること
自分が書いたコードについては、その意図や流れをペアに説明しながら進めていきました。言語化することで理解が曖昧な部分が浮き上がり、必要な修正点にも気づきやすくなると考えたからです。ここでも、ペアとの受け取り方に違いがないかを確認し、共通の理解を持った上で次のステップに進むことを心がけました。
取り組みで得られた成果
思考を可視化しながらペアと認識を合わせていく習慣は、これまで自分が気づきにくかった曖昧さをひとつずつ表に引きずり出してくれました。始めた当初は、頭の中だけでロジックを追って、どこかの前提を散り違えていても気づけず、気がつけば道筋が分からなくなってしまった結果、最初から思考を巻き戻したり、いま何を解こうとしているのかを考える時間が増えていくほど自分自身の立ち位置が曖昧になってしまう場面が頻繁にありました。
紙やホワイトボードに書き出し、ペアと共有しながら確認するプロセスは、こうした"見えているつもり"の落とし穴を埋める役割を果たしてくれました。また、自分の理解の揺らぎや、判断の根拠が曖昧な箇所が明確になり、その都度修正しながら前に進むことで、ロジックの流れを掴み直しやすくなりました。
まとめ
今回のペアプログラミングを通じて、思考を可視化し整理する習慣を身につけることができました。曖昧さに気づき、適切に扱うことで問題へのアプローチが以前よりも安定し、判断や修正もスムーズになった気がします。年内目標の48回には届きませんでしたが、年内に計24回開催できました。今回の活動をきっかけに、普段あまり関わりのなかったメンバーとも交流でき、良い経験となりました。
上司からのコメント
始めた当初はいきなりコードを書こうとしたりする点がありましたが、後半はホワイトボードで事前に問題を整理できるようになったと思います(樹形図でパターンを整理したりとか)。応用パターンの問題を出した際に前回の実装を思い出して方針を出せた時は大きな成長を感じました。