CopilotとDeepLを使って(ほぼ)何も考えずにElixirでAtCoderの問題を解いてみた
GitHub Copilotが一般開放されたので、さっそく使ってみたいと思います。TypeScript、JavaScript、Go、Python、Ruby、Javaの例は公式サイトでも取り上げられているので、私としてはやはりElixirで試したいところです。
実験設定
Copilotは、コメントやメソッド名から実装を書き出してくれるというのが面白いポイントなので、できるだけ書いている本人が何も考えずに、Copilotにいわれるがままで実現できそうなお題が必要です。そこで、AtCoderの最近のA問題から2つほどピックアップしました。
A問題の設問は、以下のような端的な文によって構成されていることが多いので、Copilotに読ませる文として都合が良いだろうと考え、競技プログラミングの問題を試してみることにしたのでした。
以上の整数 100 が与えられます。 N の下 N 桁を出力してください。 2
A - Last Two Digits
この設問をDeepL翻訳で英文に翻訳したものをコメントとして用いることで、英文すら考えることのない(=日本語で書かれた設問を読む必要すらない)状況を作り出すことができました。
実験結果
上記の課題設定に基づいて、実際に試したのが以下の動画です。「何にも考えずに」とまでは行きませんでしたが、多少は楽ができたということはいえるだろうと感じました。
問題文をそのままDeepLにコピペした結果をさらにエディタにコピペするだけで、なんとなくそれっぽいコードは出てきました。ただし、動画内でもある通り、そもそもElixirのコードとしておかしなコードが生成されており、手直しが必要でした。他の言語だともっと上手くいくのかもしれません。
意外だったのが、コメントやメソッド名を書いた時点のみならず、関数内のコードを書いている間にも補完が走っているようであったことです(3:48)。ただし、パイプ演算子|>
によって第一引数が省略されることを読み取れてはいなかったようでした。普通に事例はたくさんあったはずだろうとは思うのですが。
考察
現時点では、問題文をコピペすれば「何も考えずに」解けるというわけではないのかもしれません(そもそも今回の実験では入出力に関する文を与えてないというのはありますが)。しかし、競技プログラミングのような条件と結果が明示的な問題は、そのうち一発で解かれるようになるんだろうなあという気もします(そういうタスクを解くことが、アカデミアにおけるアジェンダの中で何か意味があるとみなされるのであれば)。
これを逆にいうと、システムへの要求のような大きな問題を、Copilotがさくさくと解いてくれるような小さなサブ問題に分割できるスキルが、今後より問われていくのかもしれません(それ自体は今でも必要なスキルですが)。それは、Google翻訳が飛躍的に性能向上を果たして以降いわれている、機械翻訳が訳しやすい言葉で文章を書くスキルが重要、ということとも少し似ています。
そういう意味では、Copilotや、もっと大きくいえばAIによって自動化が進むことで、ソフトウェアエンジニアとしての本質的なスキルがよりクリアに見えてくるということもあるのかもしれないというようなことを思ったりもしました。といっても、リテラルな水準が重要でないとは思えなくて、機械翻訳がいくら進んでも言語学習が無駄になったりはしないように、プログラミングにおいても手を動かすことの意義というのはあり続けるのでしょう。
Discussion