アルゴリズム忘備録

競技プログラミングとかデータ分析とか

「インドのプログラマーでちゃんと自動コンパイルできるコードを書いているのは36%」の意味

gigazine.net

 

「自動コンパイル」という謎の造語が出てきて、コメント等をみてもいまいち記事が正確に伝わってない気がします(Gigazineの翻訳の問題かもしれませんが…)。英語の原文だと「Compilable」とかになっていましたが、これはオンラインのコーディングチェックとか競技プログラミングをやったことある人じゃないとかなり伝わりにくい内容に見えました。

 

 

これはざっといえばAtCoderやPaizaなどのオンラインのコーディングチェックのような問題を2問出して、Submitできてかつコンパイルエラーにならなかった人が36%しかいなかった、という意味になります。以下で詳しく説明します。

 

まず、オンラインのコーディングチェックというのは通常次のような形式で問題が提出されます。

入力A(1<=A<=1,000,000,000,000)に対して、A+1を標準出力に出力するようなプログラムのソースコードを提出せよ。実行時間は2秒以内とする。入力はすべて標準入力からなされる。

注意すべきところは 提出すべきものはA+1はなく、実行バイナリでもなく、ソースコードであるという点です。これを提出すると次のような作業が始まります。

  1. サーバー側で提出されたソースコードコンパイルされる
  2. コンパイルされたバイナリに対して自動でテストケースが実行される
  3. テストケースの結果をまとめて提出した人に返す

 この時、1番でコンパイルエラーにならなかった人が全体の36%というのがこの記事の言いたいことです(少なくともそう読み取れました)。

 

さて、ここまで書くとそもそもコンパイルできないソースしか書けない人なんているのか?という話はあるのですが、実はこれ思っているよりも結構難しいです。

例えばソースコード提出時に言語を選ぶのですが、この言語を間違って選択してしまった場合や、提出するコードにゴミが混じってしまっていた、認められてない(サーバ側にインストールされていない)ライブラリを使ってしまっていた、gccのバージョンが違っていた、Javaであればパッケージを分けてしまっていた、などの可能性が考えられます。

また、問題が難しくてそもそもどういうコードを書けばいいかわからなかったというのもあるでしょう。(上の例ではそんなことありませんが、難易度の高い問題だと結構あります)

 

http://www.aspiringminds.com/sites/default/files/National%20Programming%20Skills%20Report%20-%20Engineers%202017%20-%20Report%20Brief.pdf

 

原文のレポートはこちらにあるのですが、さらに3.が終わってすべてのテストケースに通った人は全体の2.21%だったそうです。

 

また、このシステムの目的として更にテストケースに通った人の中でメンテ可能なコードを書ける人、効率的なコードを書ける人の割合を示しており、いずれの要素も満たすプログラマは2.21%の中の更に6割ぐらいしかいなかった、と書いてありました。