【IT】96%が屈辱の「初級以下」判定、AtCoderのプログラミング実力判定試験の深層

■ このスレッドは過去ログ倉庫に格納されています
0001田杉山脈 ★2020/01/22(水) 19:33:12.86ID:CAP_USER
プログラミングの実力を測るのは難しい。対象者が書いたプログラムを人の目でチェックするには、時間も手間もかかり、評価者に高いプログラミングの能力が求められるからだ。かと言って一般的な試験問題では、プログラミングの知識を測ることはできても、プログラムを書く力を測るのは困難だ。

 この問題に真正面から挑戦しているのが、様々なプログラミングコンテストを運営しているAtCoderである。受験者にプログラムを書かせて実力を自動判定する新型の検定試験「アルゴリズム実技検定」を始めた。

この検定は、1からプログラムを作成する能力を問うものだ。同社によると「知識型ではない」「受験者が得意なプログラミング言語を選べる」「アルゴリズムの実力を測る」といった特徴を持つという。オンラインで参加する形式なので、自宅など好きな場所で受験できる。

 同社は、この検定の第1回試験の結果を2020年1月15日に公表した。実施日は2019年12月14日で、458人が受験したという。

 出題される問題数は15問で、100点満点。配点は、1問目が9点、2問目と3問目がそれぞれ8点、4問目から6問目がそれぞれ7点、7問目から15問目がそれぞれ6点になっている。

 受験者は、獲得した点数に応じて5段階のランクに分けられる。25点から39点が「エントリー」、40点から59点が「初級」、60点から79点が「中級」、80点から89点が「上級」、90点から100点が「エキスパート」に認定される。24点以下は「未認定」になる。

 AtCoderは、第1回検定を受験した458人のランクの割合を公表している。
https://cdn-tech.nikkeibp.co.jp/atcl/nxt/column/18/00001/03494/01.jpg

最も多かったのは初級で約33%。ほぼ3分の1に相当する。以下、人数が多い順に、中級、エントリーと続く。

 意外だったのが、上級よりもエキスパートのほうが多かったことだ。全体の14%に相当する66人がエキスパートのランクを獲得した。さらに、そのうちの38人は100点満点を獲得していた。

コンテストの参加経験があるかどうかで成績に大差
 同社は、受験者をAtCoderの定期コンテストへの参加経験がある「AtCoderユーザー」と、AtCoderの定期コンテストへの参加経験がない「一般受験者」の2つに分けて、各ランクごとの比率を公表している。一般受験者は全受験者の3割弱である126人だった。
https://tech.nikkeibp.co.jp/atcl/nxt/column/18/00001/03494/

0094名刺は切らしておりまして2020/01/25(土) 18:44:17.37ID:mIluwUGf
という意味では最低限ソフトウェア開発の実務ができて、
想像力を働かせて相手が欲しがっているものを上手く作るやつが
世間的に「優秀なプログラマー」という風に認知されるのかなと思う。

つまり、プログラマーといいつつ実は言語で解決できない領域を扱う職種なのよ。

文学や論文では表現できないから振る舞いを帯びたソフトウェアという形にする、
というのがプログラマーのお仕事というかな?

もちろんそれを実現するための基礎知識、基礎技能としての情報処理技術はあるんだけどさ。
知識や漫然とした経験だけあってもまったく役に立たないのがこの職種。

という意味では天性の洞察力、想像力をとても求められる職業と言えるか。

0095名刺は切らしておりまして2020/01/25(土) 18:51:27.15ID:mIluwUGf
で、「俺はこんなに優秀なのになぜ認められないんだ!!」とか
家で無修正海外サイトを見てシコシコしている「自称報われないプログラマー」に言いたいのは

「お前、そもそも相手が欲しがってるものをしっかり想像して作ろうとしてるか?」

ってこと。
相手が今欲しがっているもの、これから必要になるであろうもの、
そういうことをしっかり考察、想像した上でプログラム書いてるか?

1ミリもしてないだろ。
だからお前はこんなに稼げる職種についても安月給なんだよ。

発注者が考えていること以上のことまで考えて形にするのがプログラマーのお仕事。
そもそも先回りして考えるということをしてないだろ?
言われたらやろっと。みたいな調子でいるから
「こいつプログラミングはできるらしいけど駄目なやつだな」という評価なんだよ。

0096名刺は切らしておりまして2020/01/25(土) 18:52:45.14ID:wuwVf0J6
>>2
そりゃそうだよ
土方の方が楽に稼げるだもん
アメリカみたいに腕を磨けばプログラマで年収5000万円や1億円を稼げる社会とは違う

0097名刺は切らしておりまして2020/01/25(土) 18:56:25.16ID:mIluwUGf
>>2
というより、プログラマーのお仕事についての理解が浅い。
知識という部分では別にアメリカも日本も違わんよ。

という意味ではプログラマー云々以前に、
「俺の仕事ってなんだろうな?」と職業人として考えられるやつが少ないんだと思うわ。

そういう連中見るたびにマックス・ヴェーバーくらい嫁って思うけどな。
俺に相談するんじゃなくてさ。

0098名刺は切らしておりまして2020/01/25(土) 19:04:44.15ID:mIluwUGf
という意味では、プログラマーって職業はその人間がどの程度誠実で有能かってのが赤裸々になるとこあるんだよ。
逆に優秀なやつにとっては自らの優秀さを示すためにこれ以上ドヤれる職業はない。

いくらプログラミングに詳しくても相手を理解できる誠実さと有能さがなきゃ
良いソフトウェアとしての形にはならん。

まあ、何もかもをプログラマーのせいにするのも可哀想ではあるが、
そのくらい影響力がある職業ではある。

そりゃ相手が考えていることを1聞いたら10読み取って、
コンピューターを駆使して計算しちゃうのだから
優秀なプログラマーってのはちょっとニュータイプというか
できない人から見れば怖いと感じることすらもあるだろう。

0099名刺は切らしておりまして2020/01/25(土) 19:05:18.57ID:RguSLQV2
>>94
どこまでも専門性は認めない立場なのね。

> という意味では天性の洞察力、想像力をとても求められる職業と言えるか。
ただのプログラマーがそんなもん駆使しないといけない時点でおかしいと思わないのか。

0100名刺は切らしておりまして2020/01/25(土) 19:07:16.38ID:RguSLQV2
>>95
プログラマーや会社組織についてどんだけ夢見てんだw

0101名刺は切らしておりまして2020/01/25(土) 19:08:29.93ID:mIluwUGf
だから、わりと多くの日本の会社は優秀なプログラマーは欲しいと言いつつも、
優秀すぎるプログラマーは怖いから嫌だって気持ちも結構あるの。

ちょうどいい感じに馬鹿なプログラマーがいいな?みたいなニーズw

0102名刺は切らしておりまして2020/01/25(土) 19:09:20.93ID:vLaIYycL
>>94
いちおうPGの話でしょ
想像されちゃうと困っちゃうのよ
塩梅よくやられちゃうとシステムとしての健全性に問題がおきちゃったり。

有名な話ならMSのEXCELだね。
セルの中、文字単位で色が変えられるのよ。
これ、「優秀な」たぶん「空気が読める」PGさんが実装したの。
でも、このPGさんは黙っていた。
誰も気づかずにリリースされてしまった。
その後、この機能が問題を起こした。
この機能を実装し続けるためにソースコードは必要以上に複雑になっていった。
仕様となってしまった以上、機能を削除することはできなかった。

誰がどこまで決めるのか、なにを決めるのか、はっきりしていないということはないはず。
ただ、ユーザーはいろいろと要求するけど本当に何がほしいのかはわかっていないことが多い。
ID:mIluwUGfがいうのはその部分だろうね。

0103名刺は切らしておりまして2020/01/25(土) 19:11:24.94ID:mIluwUGf
>>99
専門性のニーズは情報処理に限らずどの分野にも存在しているが、
まあ、そこは研究職ということでお給料は安い。

テレビゲーム以上に水物で1000の研究をして1つでも当てればいいって分野だからな。
専門性を活かして研究するお仕事だと年収500も貰えたら、まずまず評価されてると思っていいだろう。

0104名刺は切らしておりまして2020/01/25(土) 19:14:43.24ID:mIluwUGf
まあ、どんなお仕事でも言われたことだけやるやつは
年収400ってとこでしょ、実際。

それは別にプログラマーに限った話じゃない。

0105名刺は切らしておりまして2020/01/25(土) 19:15:01.50ID:vLaIYycL
>>96
違うと思うな。
昔の話だけど、圧倒的に低レベルのSEを募集していたのをみた事がある。
それは俺が専門の特殊なマシンだったから多少高めというのはあったが、それでも違い過ぎた。
それでも給料は倍。

どうも海外の開発に夢を見ている連中が多いけど、ほとんどはそんなレベルにない。
俺程度でも十分な開発者が高給取り。

ほんの一部の連中をみて何言ってるのって感じがする。

0106名刺は切らしておりまして2020/01/25(土) 19:16:33.29ID:RguSLQV2
>>103
客の求めるもの作ってるうちは儲からないってことに気付こうぜ

0107名刺は切らしておりまして2020/01/25(土) 19:21:20.50ID:RguSLQV2
>>105
お客様の求めるものを作っている限り年収500万なんだよ。
海外は自分たちの作ったもので商売してるから低レベルな技術者にも高級払えるほど儲かる。

0108名刺は切らしておりまして2020/01/25(土) 19:27:38.20ID:mIluwUGf
>>106
それ、会社の事業に寄生するシステム部みたいなやつかw
そういう連中は最終的にシステム子会社化されておしまいだと思うけどな。

0109名刺は切らしておりまして2020/01/25(土) 19:34:13.84ID:rurw+Bch
>>102
つらいよねぇ。 そういうの。 自分が作った仕様としても、カタストロフィックな構想ミスだと気づいたときは既に時オスシ。
今は、アジャイルだぁ、SOLID原則だぁと言い訳して強引に仕様切り捨てができるようになったが、かつてはデスマーチの要因になった。
ファーストリリースで、何がカタストロフィックかを嗅ぎ分けられるプログラマーが優秀なんだろうとオモ。

0110名刺は切らしておりまして2020/01/25(土) 19:57:51.42ID:RreIF3bG
>>93
アホらしいけど1問だけ
一番最後の問題の持久戦でいいかな

目Aijが出たときの、それ以降の操作回数について最善策の場合の期待値が決まるので、各Aijについてそれを求める
まずAijを大きい順に並べ替え

1番目に大きいAijでは次に絶対終了なので最善策でもその後の操作回数は1
2番目に大きいAijでは次に出る目が1番目に大きいやつ以外は終了するので、最善策ではそれを含んだサイコロを選ぶことで 1+1/6
3番目に大きいAijでも同様で、、、
k番目に大きいAijでは1番目〜k-1番目の結果から各サイコロを選んだ場合のそれ以降の期待値が求まるので、一番大きいのが最善策の場合の期待値

これを一番小さいAijまで続けると全てのAijに対して最善策の場合のそれ以降の期待値が求まる
最後に1回目に振るサイコロについて期待値を求めれば、その最大のものが最善策の期待値
(Aijにダミーの0を追加しておく方法をとれば最後のこの計算はしなくてもいい)

これだけだと計算量はサイコロの数Nに対してN^2のオーダーだけど、もっと速くできる

上でk番目のところで書いた、各サイコロのそれ以降の期待値だけど、ここの計算を減らせる
サイコロの数Nのサイズの配列を用意して0で初期化しておいて、各Aijでの最善策でのそれ以降の期待値が求まった時点で、その値の1/6を先の配列の対応するサイコロのところに加算すればよい

この方法でサイコロの数Nに対して線形オーダー

0111名刺は切らしておりまして2020/01/25(土) 20:01:33.03ID:RreIF3bG
>>110
ちなみに電車移動中なのでPCも開いてないし、紙とペンも使ってない
全部頭の中だけで5〜10分くらい
所詮そんなもん、子どもの遊び、馬鹿馬鹿しい

0112名刺は切らしておりまして2020/01/25(土) 20:05:35.23ID:vLaIYycL
できる奴が能力をひけらかしている場面を今まで見たことが無い。
人生最初の出来事をみているのか、それとも?

0113名刺は切らしておりまして2020/01/25(土) 20:08:56.85ID:RreIF3bG
>>112
こんなの馬鹿しかやらない
他人と比較して満足する趣味はないのでね
そろそろ電車降りるので仕事に戻る

0114名刺は切らしておりまして2020/01/25(土) 20:42:53.87ID:GhpcCgEA
んーよく分からん
実装も含めて問題なんだけどな

0115名刺は切らしておりまして2020/01/25(土) 20:57:09.44ID:ChqQUehm
どうでもいいけど土曜の夜に仕事なのか

0116名刺は切らしておりまして2020/01/25(土) 21:56:26.85ID:gxGNHdBY
まぁプロコンなんて信仰の一種だからね
できるやつはやらない

0117名刺は切らしておりまして2020/01/25(土) 23:57:49.30ID:RreIF3bG
>>114
アルゴリズムは考え方が全て
この問題は出た目に対してそれ以降の期待値が決まることに気づくことと、目の大きい順に数学的帰納法でそれらが全て求まることが分かれば、あとは簡単な計算だけなので、ここから先の実装で躓く人はいない

>>115
自分で経営してる会社なので

>>116
マウント大好きな人しかやってる人知らない

0118名刺は切らしておりまして2020/01/26(日) 00:03:38.38ID:PnnkeWxD
>>117
すまん、3番目に選んだAijでも同様で、、ってところから分からん
同様でどうなるんだ

0119名刺は切らしておりまして2020/01/26(日) 00:48:36.54ID:8HXH/S1t
>>118
3番目に大きいAijが出てまだ終了でない場合(前の目が1番目や2番目でない場合)、
次に出る目が1番目に大きいAijか2番目に大きいAijのときだけまだ続けられる

(A) 1番目と2番目が同じサイコロにある場合
そのサイコロを選べば1/6の確率で1番目が出て、余分にもう1回サイコロを振れる
また1/6の確率で2番目が出て、余分に 1+1/6 回サイコロが振れる
なのでこのサイコロを選べば、期待値的には
1+1/6*1+1/6(1+1/6) 回続けることができる
それ以外のサイコロを振れば1回で終わってしまうので、これが最善のサイコロになる
3番目に大きいAijが出た後に続けられる回数の期待値はこの値になる

(B) 1番目と2番目が異なるサイコロの場合
1番目のAijを持ってるサイコロを選んで振れば、1/6の確率で1番目のAijが出るので、
1+1/6*1 回続けられる
2番目のAijを持ってるサイコロを選んで振れば、1/6の確率で2番目のAijが出るので、
1+1/6(1+1/6) 回続けられる
これ以外のサイコロだと1回振ったら終わり
なので最善なのは2番目のAijを持ってるサイコロ
3番目に大きいAijが出た後に続けられる回数の期待値はこの値になる

すごく丁寧に書くとこうなる
あとはこの繰り返し

サイコロ毎の期待値の計算が一見面倒そうだが、サイコロの個数のサイズの配列を作って、その個々に各サイコロを選んだ場合の期待値を持たせるようにする
そうするとk番目のAijが出た後の期待値が求まる度に、その値の1/6倍をそれを含むサイコロのところに加算してやれば、各時点での各サイコロの期待値も同時に帰納法的に求まっていく

0120名刺は切らしておりまして2020/01/26(日) 00:52:22.85ID:PnnkeWxD
おお天才か?
理解できた気がする
明日思い出したら実装してみようかな

0121名刺は切らしておりまして2020/01/26(日) 01:12:04.80ID:8E9g3gA4
>>21
wwwwwwwwww
全部グローバルってwwww
確かに男気溢れてるわwwwww

最初は一回限りのコードの予定だったんだよね?
それが何故か残ってしまったんだよね?
そうだと言ってくれ!

0122名刺は切らしておりまして2020/01/26(日) 01:15:07.19ID:tBVU2ffj
少なくとも趣味でプログラムやっている自分からしたら時間の無駄だわ
勉強や開発やってたほうが有意義

0123名刺は切らしておりまして2020/01/26(日) 01:19:06.46ID:8E9g3gA4
>>92
もうひとつあるんよ。
後の人に分かりやすく、手を加えやすいってこと。
地味でその場ではろくに評価もされないけど、
後々人の噂になるし、良くも悪くも口伝えで評判広がるんだ。

0124名刺は切らしておりまして2020/01/26(日) 01:23:13.96ID:P4WSjXBs
>>21
天高くそびえたつ糞の塔から逃げるのは男気が無いとはいわない
賢明な判断

0125名刺は切らしておりまして2020/01/26(日) 01:23:18.22ID:8E9g3gA4
>>98
なんで素人さんがそんなに熱く語ってるの?

0126名刺は切らしておりまして2020/01/26(日) 01:24:42.98ID:vALKcul5
値段下げるためだからね。^^

0127名刺は切らしておりまして2020/01/26(日) 01:38:14.89ID:6R/8tGa2
結局普段から競技プログラムやってる奴が高得点取れるってだけでしょ?

業務プログラムとは関係ないとは思わないけど、それだけで仕事が出来るかと問われると

0128名刺は切らしておりまして2020/01/26(日) 01:39:08.68ID:XD7nvdxV
初級シスアドの俺が合格できないとかおかしいだろ

0129名刺は切らしておりまして2020/01/26(日) 01:45:48.98ID:D/b7D9Yk
>>128
初級シスアドは、もう・・・
ITパスポートなんて試験が存在してる時点でお察しくださいって感じだわ

0130名刺は切らしておりまして2020/01/26(日) 02:02:02.18ID:LZtN2tQK
>>117
口だけの人と思ってたわ
正直ごめんなさい

>>113の「こんなの馬鹿しか」は
マウントじゃないんか、って不満はあるけど
なんか負け惜しみっぽいから寝ます

0131名刺は切らしておりまして2020/01/26(日) 02:12:16.88ID:PnnkeWxD
>>119
興味ないだろうけど競プロ未経験?でこれ数分で解けるの相当凄いから
暇だったらもっとハイレベルな問題考えてみてほしい

持久戦と同じくらいの難易度
https://atcoder.jp/contests/agc026/tasks/agc026_c

もう1段階ハイレベル
https://atcoder.jp/contests/keyence2020/tasks/keyence2020_e

0132名刺は切らしておりまして2020/01/26(日) 02:13:17.33ID:PnnkeWxD
URL2つまでしか貼れないからレス分ける

>>119
さらにもう1段階
https://atcoder.jp/contests/dwacon6th-prelims/tasks/dwacon6th_prelims_c

解けたらランカークラス
https://atcoder.jp/contests/ddcc2020-qual/tasks/ddcc2020_qual_f

0133名刺は切らしておりまして2020/01/26(日) 02:35:09.34ID:kHivDNAz
プログラミングなんて派遣や非正規の仕事

0134名刺は切らしておりまして2020/01/26(日) 02:35:36.89ID:0fN1k7L0
>>1
>プログラミングの実力を測るのは難しい。
簡単でしょ
記述で処理効率ではなく処理能力のあるコーディングができること
それすら分からないあんたはクズだね

0135名刺は切らしておりまして2020/01/26(日) 02:41:11.25ID:0fN1k7L0
宣言 Aは実数である
Aに2.88を代入する
Aを小数点以下第一位までを有効とする関数を通す
戻り値はどうなる?
Aは2.8 か2.9 か答えられないだろ?
>>1

0136名刺は切らしておりまして2020/01/26(日) 02:49:44.56ID:0fN1k7L0
もう一つ
ユーザをユーザー
プログラマをプログラマー
と記述する時点でアウト

0137名刺は切らしておりまして2020/01/26(日) 15:46:03.62ID:AskDPmor
英語の読み方がイギリス式かアメリカ式の違いがあるだけだろ
イギリス人は後置するrを殆んど無視する(´・ω・`)

0138名刺は切らしておりまして2020/01/28(火) 20:48:33.05ID:2OY987EZ
ゴフのデザインパターン暗記すればいいじゃないの?

0139名刺は切らしておりまして2020/02/08(土) 10:03:24.78ID:8+DA5qOs
>>138
今どき小学生でも知ってるわ爺

0140名刺は切らしておりまして2020/02/12(水) 10:07:55.20ID:AVgzM11+
タイピングとプログラミングを混同してるレベルの
ジャップには無理

0141名刺は切らしておりまして2020/02/12(水) 10:12:33.34ID:fv0pEdP4
プログラミングの実力って判定側の好みで判断されそうだな

0142名刺は切らしておりまして2020/02/12(水) 13:38:40.99ID:+p1BqxKO
>>141
自動テスト通れば合格、通らなければ不合格だよ

0143名刺は切らしておりまして2020/02/12(水) 14:19:51.70ID:uskl9oof
>>142
テスト作った奴の趣向が反映されるんじゃね

0144名刺は切らしておりまして2020/02/15(土) 15:26:29.03ID:feNRpBzY
そりゃどんな検定でもそうだろ
問題に左右されない検定なんかねえよ

■ このスレッドは過去ログ倉庫に格納されています