今日は、自分が尊敬している、凄い成果を出されている先輩エンジニアの方と一緒にペアプログラミングする機会がありました。
めちゃくちゃ学びがあったので、忘れない内に文章に残しておきます。
- TODOリストを作り頻繁にアップデートする
- 休憩する
- タイムボックスを作り、守る
- 様々な制約を無視して理想の状態は何か思考する
- テストを頻繁に回し、プログラムをコントロールする
- 書いたコードが自然言語に近い形で読める
- 理解をすぐに言語化する
- 常人にも再現できるコーディングをする
- 感想
TODOリストを作り頻繁にアップデートする
最初に、何ができればゴールかを整理したTODOリストを作成し、どんどんチェックをつけていきます。
TODOリストの粒度は細かく、完了条件が明確で分かりやすいです。
そのため、TODOリストは次々に更新されていき、仕事にリズムを生んでいました。
また、コードに改良の余地が見つかったものの手を止めたくない時やプログラミングしていて気になることが出てきた時も、TODOリストに即座に移動させていました。
目の前のTODOだけに集中する状態を常に維持させることで、パフォーマンスにムラがありませんでした。
休憩する
鬼のようなスピードで実装したいことを言語化してコードを書くのですが、一定時間経つと、ぱっと休憩を取ります。
そのため、パフォーマンスが落ちる気配がなく、何時間経っても鬼のようなスピードでコーディングをし続けます。
タイムボックスを作り、守る
休憩にしても調査にしても実装方針の検討にしても、常に時間を決めてタイマーで測ります。
タイマーが鳴るまでは作業に没頭するのですが、タイマーが鳴るとすぐに作業を中止し、次の仕事に移ります。
様々な制約を無視して理想の状態は何か思考する
納期までに達成可能かや影響範囲の大きさ等、全ての制約を無視して思考していました。
思考したことはタイムボックスを決めた上で必ず実験し、理想の状態が何か確認した上で現実解を見つける、というステップを踏んでいました。
テストを頻繁に回し、プログラムをコントロールする
テストを書き、コードを1行でもいじるとすぐにテストを回します。
修正→修正によってプログラムがどうなるのか言語化→テストを回してすぐに確かめる→修正...のサイクルを回していて、プログラムを完全にコントロールしていました。
書いたコードが自然言語に近い形で読める
書いていったコードがほぼ自然言語に近いコードなので、抜群に読みやすいです。
コメントも一切なく、読んでいて楽しいコードでした。
理解をすぐに言語化する
理解した内容を全て言語化するので、コードを書く前に今から何が起こるのかが毎回分かります。(コードを見て、ああこういう風に書くんだ、みたいな驚きが一度もない)
また、言語化された言葉は一つの解釈しかしようがないもので、理解にあやふやさが一切ありませんでした。
常人にも再現できるコーディングをする
何人か凄い成果を出されている方のプログラミングを見たことがあったのですが、自分が見た殆どの人は、頭でコードを組み立て、紙に少し整理した後に凄まじい勢いで実装をしている印象でした。
その姿には圧倒されて感動も覚えるのですが、全く真似できる気はしない雲の上の存在という印象でした...
しかし、今日一緒にペアプロした先輩のコーディングは全て真似しようと思えばできるもので、再現性がありました。
勿論努力は必要ですが、トレーニングで身につくものばかりなので、どうすれば先輩のようになれるのかの道筋が見えた気がします。
感想
また一緒にペアプロしたいなーと思いました。次にペアプロをする時は少しでも追い付けているように、努力を続けます。
最近は仕事でプログラミングが全然できていないこともあったのか、充実感を感じる幸せな時間を過ごせた金曜日でした!