プログラミング・IT・英語・数学とか

英検1級、TOEIC満点(990点)、セキュリティスペシャリスト、DBスペシャリスト、ネットワークスペシャリスト。英語とITとか。いろいろ試してみたことを書いていきます

【やってみた】アルゴリズム実技検定(のサンプル練習問題)をやってみた。

アルゴリズム実技検定(のサンプル練習問題)をやってみた

最近ニュースになっていた、アルゴリズム実技検定。なんでも実践的なプログラミングスキルを測ることができるらしい。ふむふむ。

これでもプログラマーとして7年ほど働いてきたわたくし、どんなものかやっぱり気になります。(ずっとウェブアプリの開発保守でした)

ただ、試験自体はまだ始まっていないようなので、公開されている練習問題をやってみました。

軽く書くはずが、めっちゃ長くなってしまったので、時間ない人は最後のまとめだけどうぞ。

アルゴリズム実技検定とは

一応。
このページに行き着いた人はもう知っていることとは思いますが、プログラミングコンテストを運営するAtCoderが今月から開始する、「『アルゴリズムをデザインしコーディングする能力(=1からプログラミングをできる能力)』を測る」(公式サイトより引用)検定です。

公式サイトはこちら↓
https://past.atcoder.jp/

練習問題

まだ試験自体は始まっていないので、サンプル問題をやってみます。問題はここから見られます。↓
https://atcoder.jp/contests/past-sample/tasks

実際にやってみた感想。本当にプログラミング能力を測ることはできるのか?

サンプル問題の難易度は?

ここ数日間でサンプル問題に取り組んでみましたが、まず問題の率直な感想を言うと、サンプル問題、めっちゃ難しいです・・・w

「いや、なにこれw え、みんな、この問題とかスラスラ解けるの・・・??」って感じで、できなすぎて笑えて涙が出てくるくらい難しかったです自分には。解けなすぎてびっくりしましたよ、ほんと。

最初の1、2、3問目は楽勝。だったのですが、そのあと急激に難しくなり、F - Green Binからまったく解けません・・・。「7年の経験が・・・」、とか言ってた自分を殴ってやりたい。

難易度は適切か?

これはどんな業界でプログラミングに関わるのかによりますが、おそらく、ほとんどの業界でここまで高度なアルゴリズムの理解は必要ないと思います。少なくても、自分が関わってきたウェブアプリ系の仕事ではここまでシビアな実行時間制限とメモリ制限について考慮しなければいけないことはありませんでした。

もちろん、知っておいて損はないと思います。効率の良いアルゴリズムを知っている方が良いに決まっていますから。すごいシビアな制限がある業界で働きたいのであれば必要かもしれません。(どういう業界かはわかりませんが・・・。ビッグデータを扱う業界とかなのかな?)

本当にプログラミング能力を測れるのか?

難しさはさておき、この検定が実践的なプログラミングスキルを測ることができるのかというと、もし、本試験がサンプル問題のような形式であれば、自分は、できると思います。

正直、問題を全部解ける必要はないと思います。自分は全然解けなかったでしたしw

ただ、最低でも1~3問目くらいはすぐに解けないと「自分はプログラミングできる」とは言ってはいけないレベルだと思います。日本語を読んで問題を理解する力、解決策を考える力、それをプログラミングにできる力、わからないことは時間内に調べられる力、といった力を測るのにはとても役立つと思います。これらの力はとても根本的で大事な力です。そういった意味で、できる人とできない人を分けるのにはとても有効だと思います。

そして全問解けた人、それはもうものすんごいプログラミングスキルを持った人だと思います。スーパープログラマーですほんと。きっと足の指でもキーボード打てる人です。まじすごい、尊敬です。

アルゴリズム実技検定できる != プログラマーとして成功できる

ただ、「おーし、全部問題とけたぜー!ひょーい、プログラマーとして成功間違いないぜー!」っていうと、ちょっと違うんだと思います。あ、別に自分ができないからって難癖つけてるわけじゃないです、念の為。

というのも、効率良いプログラムを作ることも大事ですが、それと同じくらいかそれより大切なことがあるんです。

例えば、効率が悪くなるけど、ちゃんと部品が分けられてて再利用がしやすかったり、わかりやすいアルゴリズムを使っててスキル低い人でも保守できたり、コメントとかdocstringとかjavadocとかちゃんとついてたり、変数名や関数名がわかりやすかったり、とかです。こういうのはアルゴリズム実技検定では評価対象にならないと思います。

だって嫌じゃないですか?めっちゃできるプログラマーで書くプログラムはすんごい速いし正確だけど、読んでもまったく意味のわからなかったり、後から変更するのが大変だったりするのは。自分は正直それは一緒に働きたくないですw

やっぱ他の人のことを考えたり、全体を考えたりすることも大事なんです。そういうのはこの試験では測れないでしょう。

そして、効率の良いのはもちろん大事なこともありますが、ほぼほぼ、そんなシビアな場面ってないと思います。今は(お金を少し出せば)CPUパワーはあるし、メモリはいっぱいあるし、ディスクも比較的簡単に追加できるし、自分で考えなくてもいろいろな効率の良いライブラリーはあるし。頑張って効率の良いアルゴリズムを自前で考えるよりも少しだけお金を出してメモリとかディスクとか製品を買っちゃった方が逆に安くなることもあります。というかたぶんそっちのケースの方が多いと思います。

また、プログラミング以外にプログラマーはやることがたくさんあります。資料作ったり、新しい技術の調査したり、テスト仕様書書いたりテスト実施したり、運用保守したり、手でデータ直したり、ライブラリのアップデートしたり、タスクの優先度決めたり、会議したり、etc。
それこそプログラミングはプログラマーの業務のたった1つにすぎません。効率の良いプログラムを書く、というのは、さらにそれの一部分に過ぎません。

アルゴリズム実技検定はあまり意味ない?

「じゃぁ、アルゴリズム実技検定って、あまり意味ないの??」って思うかもしれませんが、それは違うと思うんです。

大事なのは、この検定が、自分の今の実力を知り、さらに自分を良くするきっかけになるってことだと思うんです。

この実際に自分がサンプル問題に取り組んで思ったのは、自分はまだまだ知らないアルゴリズムがあるんだな、自分の知らないpythonの機能がまだまだたくさんあるんだな(自分はpythonでやりました)、自分は解けなかったけど他の人はこんなにも正解している人がいるんだな、こんな解決案は思いつかなかった、なんで思いつかなかったんだ!あと一歩だったのに!、と、いろいろな気付きが得られたことにあるんだと思います。

とりあえず受けることが大事だと思うんです。受けてみて初めてわかることってあると思うんです。プログラミングも一緒です。実際に書いてみないとわからないんです。

なんにせよ、アルゴリズム実技検定、受けてみるのがいいと思います。サンプル問題やってみて、自分は受けようと思いました。

あ、いや、受験を勧めてますが、別に自分はAtCoderからお金もらってるわけじゃないですよ。上のリンクをクリックして申し込みしても僕には1円も入りません、悲しいですが。

受けてみて、結果が良かったら「どや!自分はできるやつなんやで!」って自信つくし、結果が良くなくても、これから良くなるきっかけになります。受験料 8,800円 ですし、安いものだと思います。

ぜひ、自分のために受けてみるのが良いのではないでしょうか。

と、無理やりまとめてみたところで、w

まとめ

  • サンプル問題めちゃ難しい!数日間かけたけど自分は半分も解けなかった・・・。(それか俺の能力低いのか・・・?)
  • サンプル問題の3問目くらい解ければだいたいの人は良いと思う!(開き直りじゃないよ)
  • 逆に、3問目くらいまですらっと解けないと、おそらくあまりプログラミング能力高くないと思う。
  • ただ、全問正解した人でも気をつけて!ITで働くには他の大事な要素もあるから。(・・・いや、ほんと、ひがんでるわけじゃないよ)
  • 純粋なプログラミング能力を知るのにはとても良いと思う。そして、知らないことがまだまだたくさんあると自覚でき、スキルアップを目指すきっかけとしては、とても素晴らしい検定だと思います!