この記事は カオナビ Advent Calendar 2023 シリーズ2 22日目の記事です。
はじめに
はじめまして、株式会社カオナビの新卒1年目エンジニア、菊川です。
チームでのコーディングにときどき悪戦苦闘しながらも、何とか立ち向かってきました。特にペアプロは、正直言って手強かったです。
本当に学べているのかな?とか、自分は本当に理解してるのかな?といった自問自答が頭をよぎることもありました。でも、そんな中で何点か大切なことを学んできたんです。
そこで今回は、私が陥った失敗や気づきについて皆さんに共有できればと思います。
陥っていた失敗
小さい頃『すごい人に教わると自分もすごい人になれる』と信じていたのではないでしょうか。少なくとも自分は社会人になった最近までこの考えを抱いていました。その結果、ペアプロでタスクを進める際に以下のような事態が発生しました。
言われた通りにしか実装しない
この状態は「すごい」人や「憧れ」の存在に対するレッテルから、全てが正しいと聞こえてしまい、自分の考えより、その人のアイデアを実装する方が正しいという思い込みが生じてしまいました。この考え方に囚われ、私は指示待ちとなってしまいました。指示通りに実装を終えた後、次に何をすべきなのかを待つ、まるで餌を待つ金魚のような状態になってしまいました。この結果、本来ペアプロの目的である相互の成長が達成できず、指示を出す人とそれに従う人の役割分担が固定化し、私は指示待ちの状態に留まり続け、一人立ちする機会を逸しました。
完全に理解した(つもりになっている)状態
この状態は「すごい人とペアプロしているから自分もすごい」という先入観から生まれる状態です。
私がこの状態に気付けたのは、隣のソースコードをただコピペし、該当部分を修正しただけのMRをレビュー対応したときでした。コピペしたコードはレビューが通っているから今回のMRもすぐに通ると考えていたのですが、「なぜこのロジックで実装したの?」と問われたとき、答えることができませんでした。コピペしただけの私にはわかるはずがありません。ここで私はただ機械のように言われたことをしていただけで何も理解していなかったのだと気付きました。
では、なぜこの状況に陥ってしまったのでしょうか。それは、わからないことをそのまま放置していたからです。
すごい人には多くの知識や経験があります。彼らは、その経験や知識をもとに、「why」を説明してくれます。そして、それを聞いた私は、自分が知っている単語が出てくると、「自分は理解している」と錯覚してしまっていました。本来、理解するためには「why」が大切なはず。しかし、私はすごい人が言ったことは正しいのだと思い込み、「why」の部分をしっかりと理解せず、「完全に理解した!」という気持ちになっていました。その結果、その実装部分についての理解だけで、同様の処理を再現する力がなく、一から調査をしなければならない状況を繰り返していました。
意識したこと
思ったことを声に出す
自分が何に困っているのかを相手に伝え、また、理解できない部分について素直に質問することで、解説する側も理解していないことが明確になります。また、伝える側はどういう過程でその考えに至ったかなど、頭で考えていることを声に出すことで相手にもその過程が共有され、理解が深まります。このように、思ったことを声に出すことでわからない状態を減らすことを意識しました。
仮説を持って質問する
「もし〇〇の状況だと△△になるという認識で合っていますか?」「〇〇の問題対策として△△のような実装が採用されているのですか?」と言うように、自分なりの仮説を持って相手に提案し、どの部分が異なり、どこまで理解しているのかを確認するように意識しました。
どんな効果を得たのか
プロセスを知る機会が増えた
以前は、「〇〇を書いて」と毎回指示をしてもらう状態でしたが、「〇〇どうしたらできるやろー」と声に出すと「△△に似た実装があるから、一緒に読んでみよう」と共に考え、理解を深める機会が増えました。また、実装以外でも「この操作めんどくさいなー」と声に出したときに、こういったショートカットキーを使うと便利だよ」といった形で、普段は手元が見えないため気づかなかった点についても学べるようになりました。
主体的にすべきことを考えるようになった
仮説を立てるためにはデータが必要です。そのため、ソースコードを読むことや公式ドキュメントを読む機会が増え、次に何をすべきかを考えて行動するようになりました。(考えているアピールにもなるらしい)
最後に
この経験を通じて、私はペアプログラミングの重要な側面を理解しました。それは、単に学ぶだけでなく、能動的な姿勢を保つこと、自己の理解度を常に確認し、わからないことは積極的に質問すること、そして思考を声に出して共有することです。
また、ペアプログラミングは一方的なものではなく、互いの成長を促す機会であるべきだと理解しました。指示を待つだけでなく、自分で考え、アクションを起こすことが大切です。そして、効果的に学び、それを適用することで、私はエンジニアとしてのスキルを確実に向上できているはず。
このような認識の変化は、私のキャリア初期の重要な成長点であり、この貴重な経験を共有することで誰かのお役に立てればと思います。