Copilotを使ってみて
最近、自然言語周りの機械学習や深層学習に興味があって、CourseraにあるAndrew Ngの「Neural Networks for Machine Learning」やfast.aiの動画(⬅️オススメです)を見たり、RNN、LSTM、Transformerなどの論文を読んだりしていました。
進化が速く、とてもおもしろかったのですが、自分の中で「プログラミング」に使うのはどことなく抵抗があって、避けてきてました。
ただ、そんな中
⬆️みたいに、いろいろなところでCopilotについて良い話を聞くようになって、「まあ、使ってみるかー」と思い、2ヶ月ぐらい前から使っています。
Copilotとは
Copilotは GitHub が開発した機械学習の技術を利用したコード補完ツールです。 OpenAI が開発した Codex というモデルをベースにしています(ちなみにCodexはChatGPTと同じ GPT-3 を使っています)。
2ヶ月間使ってみて、上で紹介した Andrej Karpathyさんとまったく同じ感想です 。
どんどん依存する自分がいて、最近は一回Copilotの補完候補を待つようになってきました。ただ、みなさんも想像できるかもしれませんが、やはりそのまま鵜呑みにはできない面もありました。
今回はCopilotを使ってみての感想や、将来のプログラミングについて思ったことを書いてみました。
ペアプログラミングみたい
「うまい」と思われるかもしれませんが、この表現はShopifyの創業者CEOであるTobi Lütkeが Behind the Tech with Kevin Scott podcast でがインタビューされたときに言っていたことの受け売りです。
Honestly, working with Copilot is actually very close to this. Like, it really reminds me of, like, of pair programming with someone who’s always available.
本当にペアプログラミングに近いです。Copilotを使っていると、いつでもペアプログラミングしているような気分になります。 (島本意訳)
自分は数回しかペアプログラミングをしたことがありませんが、確かにそうだな、と感じています。
Copilotであればコメントを打つと、そのコメントに対して補完候補が出てくるのですが、ペアプログラミングのときに相手が「それはこう書いたら?」と言ってくれるのに似ていますし、使うかどうかを決める際に他の候補を試したりするのも、ペアプログラミングのときに相手と議論している感覚に似ています。
Copilotも常に正しいとは限らない(普通に間違える時もあります)のですが、詰まったところで補完をしてくれたり、(運がよいと)正しそうな方向に導いてくれたり、自分が知らないような書き方を提案してくれたりします。 最後に自分で決められるし、強力な相棒がいるような感じですね。
Second Brain(第二の脳)みたいに使える
最近、Copilotが自分の「Second Brain(第二の脳)」みたいに使えるな、と感じています。
第二の脳について Lifehack.orgの記事から抜粋させていただくと
It involves building an external system that captures, organizes, retrieves, and archives the ideas and thoughts that come to mind. The second brain enables you to optimize how you record, organize and recall information.
思いついたアイデアや考えを捕捉、整理、検索、保管する外部システムを構築することを意味します。第二の脳は、情報を記録、整理、検索する方法を最適化することを可能にします。
(島本意訳)
あまり日本では見ない表現ですが、要はデジタルツールとかを使って、自分の頭の中の情報を整理して、検索できるようにする、ということです。
Copilotは「自分の頭の中」を使っているわけではないのですが、当然ながらプログラミングの知識については大量に抱えています。
複数の言語を同時に使っていたり、プログラミング以外のこともやっていたりすると、特定の言語やフレームワークなどの知識が頭に定着しにくく、思い出すのに苦労することがあります。
例えば、8割の時間を特定の言語を使っていて、残りに2割で別の言語を使っていたとして、2割の方の言語のfor文とかすぐに思い出せます?毎回検索してたりしてたりしません?
自分は本当にこの状態です。最近はエンジニア・マネージャーとして働いており、まとまってプログラミングすることが少なく、コーディングをする際になかなか文法とかAPIを思い出せない自分がいます。
Copilot があるとコメントで「// ループする」とかって書くと、Copilotがそこそこ良い提案をしてくれます。ピッタリ当てはまるコードではないかもしれませんが、 文法やAPIを思い出すのには重宝します 。
短いコードがお好み
Copilotはファイル1つとかクラス1つまるまる書いてくれるわけではありません。だいたい最大でも10行くらいのコードを補完してくれる感じです。人が書いたコードでもそうですが、長くなれば長くなるほど、精度は下がりがちで、そのまま使えないことも多いです。逆に短い(よって自然とシンプルな)コードに関しては、精度が高いです。
なので、短いコードや関数などを好むスタイルが合うと感じています(そもそも一般的にもそっちの方が良いですしね!)。
まだ試していませんが、Haskellみたいな関数を細かく分解して書くスタイルを推している言語では威力を発揮するのではないかな、と思います。
Copilotを通して見える未来のプログラミング
CopilotとかのAIツールが発展するとエンジニアが不要になる、という説がときどきありますが、 自分はそうは思いません。
精度が高いとは言え、提案されたコードが間違えていたり、目的とズレている場合があります。自分が使っている範囲でも if
文の条件を意図とは逆に出している場合や、普通にバグが入っている場合もありました。提案されたコードを最後は「人」が見ないといけないですし、それは常に変わらないと思います。
自分たちのコーディングするときの流れは変わってくる可能性があると思います。ゼロからすべて自分で打つのではなく、一度Copilotに書いてもらって、それをベースにして修正していけば、ボイラープレートなコードを打つ手間が省けたりすると思います。しかし、それによって人がコーディングを知らなくて良い世界ではなく、むしろ、コードを読む、レビューする力がより求められるようになると思います。提案されたコードを理解する必要があるので、今よりも高いスキルが求められるようになると思います。
その他: Copilotの利用方法については以下のTwitterスレッドが参考になります。