LLMと共に歩む新人プログラマ

ChatGPT をはじめとした LLM のツールが、まるで昔からあったものであるかように人々に受け入れられている。 新型コロナウイルスが収束し、気づいたらみんなマスクを外しているように人々は社会の変化をなんなく乗り越えていくみたいだ。 Google の検索量は chatGPT が普及する前後でどれだけ変わってしまっただろうか。技術系のサイト (Stack Overflow とか) へのトラフィックは減少しているのではないだろうか。

GPT-4 が登場したあたりから、プログラマという職業は将来無くなってしまうのではないかという疑問が現実味を帯びるようになった。 LLM 同士がレビューし合って改善を重ねていけば、ある程度のシステムなら作れてしまう世界がくるのだろう。 合間で適宜人間がフィードバックをいれれば大きく道を逸れることもないと思う。私たちはレビューエンジニアになるのかもしれない。

私がコードを書く日常を送るようになったのは、ちょうど新型コロナウイルスが猛威を奮っていた 2020 年 4 月、学部 4 年で研究室に所属してからだ。(コードを書く日常をおくるようになったのは研究でというのもあるけど、AtCoder を毎日解くようになったからという理由が大きい) 修士 1 年になることには GitHub Copilot がリリースされた。どのタイミングで Copilot を使い始めたのかもう忘れてしまったけど、修士 1 年の夏頃か秋頃くらいから GitHub Copilot を使うようになった。 その後有料のサブスクリプションサービスになったけど、学生は無料で使うことができたから学生の特権を行使して修士 2 年まで使い続けた。(社会人になってからは個人的に購読している)

Copilot の強力さは、利用者それぞれに OSS を読み尽くしたベテランエンジニアが常に隣に座っているような感覚になれることだと思う。 最初は Copilot が早とちりしてトンデモコードが数十行出てきたりするけれども、それをはねのけてコメントを書いたりコードを書いたりしているうちに徐々に Copilot がやりたいことを理解してくれる。 補完してくれるコードは時々時間感覚がバグっているから、言語やライブラリのリリースノートを追っかけるように目を通しておけば古い書き方をしていることに気づくことができる。

Copilot の補完を頼りに開発をすると、木を見て森を見ずのようになりがちで、たくさんコードを書いているとすぐにメンテナンスができなくなってしまう。 どうすればシステムが大きくなっても開発しやすい状態で維持できるのか悩んだときに、GoF のデザインパターンを読んで研究用のツールボックスの開発に取り入れて試した。 Copilot が補完するにも方針は示してあげないといけないので、Matrin Fowler のリファクタリング本も読んで勉強するとちょっときれいなコードが書けるようになった気がした。

LLM が存在する以前のリモートワークが一般的でなかった頃のプログラマの世界では、 ペアプログラミングやラバーダッグ・デバッグということがもっと頻繁に行われていたのだと思う。 ラバーダッグデバッグというのは、いつも同僚や上司にプログラムの誤りを相談するわけにいかないから、仕方なくおもちゃのアヒルに向かって話しかけて、整理しているうちに解決策が頭におもい浮かぶというデバッギング手法のことだ。 コンピューターと話すようなオタクの世界だから、人に迷惑をかけなければなにをやってもある程度諦めてもらえる雰囲気を感じる。

近年は chatGPT がそれの代わりを担ってくれていて、chatGPT に向かってああでもないこうでもないと話しかけていると解決するから、もうおもちゃのアヒルに向かって話しかけるプログラマはほぼ絶滅してしまったと思う。 ネットが使えない閉鎖空間で開発しないといけない環境では今でも現役でラバーダッグが活躍することもあるかもしれない。

ペアプログラミングの利点は PDCA サイクルが高速に回ることだろう。プルリクエストのレビューを待つことなくコードを書いたそばからフィードバックが来るから、教育的にとてもいい取り組みらしい(やったことない)。 今はこれを Copilot (LLM) がやってくれる。Copilot がリリースされたのは 2021 年 6 月のことだから、今年も 3 年間毎日ちょっと間抜けなベテランエンジニア (LLM) とペアプログラミングしていたジュニアエンジニアが片隅でコードを書き始めている。

プログラマとして今の会社に入社したときまず驚いたことは、Copilot の使用が認められていないことだった。 Copilot を導入するにあたって、先輩は「JavaDoc が高速に書けるようになります!」と首を立てに振らないマネージャー陣を説得してくれて、PoC としてなんとか 3 人分の予算を確保してくれた。 先輩の努力によってライセンスを頂いている身なので JavaDoc はできるだけ親切に書くようにしている。

Copilot は作業効率化目的ではなく教育目的で積極的に新人に配っていくべきなのではないかという仮説をもっている。 今年新人も入ってきたのでこの話を先輩に相談したら内容をよく読まずにトンデモコードをぶら下げてレビューをもらいに来るだろうから、Copilot をむやみに与えないほうがよいんじゃないかと意見をもらった。 確かにツールを与えておけばみんながみんな勝手に PDCA を回してくれるわけではないのかもしれない。 Copilot で勉強するためには、数学の問題みたいに理解するまで一行一行を吟味するみたいな訓練を行う必要があるのだろうなと思う。

comments powered by Disqus