【IT】96%が屈辱の「初級以下」判定、AtCoderのプログラミング実力判定試験の深層
■ このスレッドは過去ログ倉庫に格納されています
プログラミングの実力を測るのは難しい。対象者が書いたプログラムを人の目でチェックするには、時間も手間もかかり、評価者に高いプログラミングの能力が求められるからだ。かと言って一般的な試験問題では、プログラミングの知識を測ることはできても、プログラムを書く力を測るのは困難だ。
この問題に真正面から挑戦しているのが、様々なプログラミングコンテストを運営している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/ という意味では最低限ソフトウェア開発の実務ができて、
想像力を働かせて相手が欲しがっているものを上手く作るやつが
世間的に「優秀なプログラマー」という風に認知されるのかなと思う。
つまり、プログラマーといいつつ実は言語で解決できない領域を扱う職種なのよ。
文学や論文では表現できないから振る舞いを帯びたソフトウェアという形にする、
というのがプログラマーのお仕事というかな?
もちろんそれを実現するための基礎知識、基礎技能としての情報処理技術はあるんだけどさ。
知識や漫然とした経験だけあってもまったく役に立たないのがこの職種。
という意味では天性の洞察力、想像力をとても求められる職業と言えるか。 で、「俺はこんなに優秀なのになぜ認められないんだ!!」とか
家で無修正海外サイトを見てシコシコしている「自称報われないプログラマー」に言いたいのは
「お前、そもそも相手が欲しがってるものをしっかり想像して作ろうとしてるか?」
ってこと。
相手が今欲しがっているもの、これから必要になるであろうもの、
そういうことをしっかり考察、想像した上でプログラム書いてるか?
1ミリもしてないだろ。
だからお前はこんなに稼げる職種についても安月給なんだよ。
発注者が考えていること以上のことまで考えて形にするのがプログラマーのお仕事。
そもそも先回りして考えるということをしてないだろ?
言われたらやろっと。みたいな調子でいるから
「こいつプログラミングはできるらしいけど駄目なやつだな」という評価なんだよ。 >>2
そりゃそうだよ
土方の方が楽に稼げるだもん
アメリカみたいに腕を磨けばプログラマで年収5000万円や1億円を稼げる社会とは違う >>2
というより、プログラマーのお仕事についての理解が浅い。
知識という部分では別にアメリカも日本も違わんよ。
という意味ではプログラマー云々以前に、
「俺の仕事ってなんだろうな?」と職業人として考えられるやつが少ないんだと思うわ。
そういう連中見るたびにマックス・ヴェーバーくらい嫁って思うけどな。
俺に相談するんじゃなくてさ。 という意味では、プログラマーって職業はその人間がどの程度誠実で有能かってのが赤裸々になるとこあるんだよ。
逆に優秀なやつにとっては自らの優秀さを示すためにこれ以上ドヤれる職業はない。
いくらプログラミングに詳しくても相手を理解できる誠実さと有能さがなきゃ
良いソフトウェアとしての形にはならん。
まあ、何もかもをプログラマーのせいにするのも可哀想ではあるが、
そのくらい影響力がある職業ではある。
そりゃ相手が考えていることを1聞いたら10読み取って、
コンピューターを駆使して計算しちゃうのだから
優秀なプログラマーってのはちょっとニュータイプというか
できない人から見れば怖いと感じることすらもあるだろう。 >>94
どこまでも専門性は認めない立場なのね。
> という意味では天性の洞察力、想像力をとても求められる職業と言えるか。
ただのプログラマーがそんなもん駆使しないといけない時点でおかしいと思わないのか。 >>95
プログラマーや会社組織についてどんだけ夢見てんだw だから、わりと多くの日本の会社は優秀なプログラマーは欲しいと言いつつも、
優秀すぎるプログラマーは怖いから嫌だって気持ちも結構あるの。
ちょうどいい感じに馬鹿なプログラマーがいいな?みたいなニーズw >>94
いちおうPGの話でしょ
想像されちゃうと困っちゃうのよ
塩梅よくやられちゃうとシステムとしての健全性に問題がおきちゃったり。
有名な話ならMSのEXCELだね。
セルの中、文字単位で色が変えられるのよ。
これ、「優秀な」たぶん「空気が読める」PGさんが実装したの。
でも、このPGさんは黙っていた。
誰も気づかずにリリースされてしまった。
その後、この機能が問題を起こした。
この機能を実装し続けるためにソースコードは必要以上に複雑になっていった。
仕様となってしまった以上、機能を削除することはできなかった。
誰がどこまで決めるのか、なにを決めるのか、はっきりしていないということはないはず。
ただ、ユーザーはいろいろと要求するけど本当に何がほしいのかはわかっていないことが多い。
ID:mIluwUGfがいうのはその部分だろうね。 >>99
専門性のニーズは情報処理に限らずどの分野にも存在しているが、
まあ、そこは研究職ということでお給料は安い。
テレビゲーム以上に水物で1000の研究をして1つでも当てればいいって分野だからな。
専門性を活かして研究するお仕事だと年収500も貰えたら、まずまず評価されてると思っていいだろう。 まあ、どんなお仕事でも言われたことだけやるやつは
年収400ってとこでしょ、実際。
それは別にプログラマーに限った話じゃない。 >>96
違うと思うな。
昔の話だけど、圧倒的に低レベルのSEを募集していたのをみた事がある。
それは俺が専門の特殊なマシンだったから多少高めというのはあったが、それでも違い過ぎた。
それでも給料は倍。
どうも海外の開発に夢を見ている連中が多いけど、ほとんどはそんなレベルにない。
俺程度でも十分な開発者が高給取り。
ほんの一部の連中をみて何言ってるのって感じがする。 >>103
客の求めるもの作ってるうちは儲からないってことに気付こうぜ >>105
お客様の求めるものを作っている限り年収500万なんだよ。
海外は自分たちの作ったもので商売してるから低レベルな技術者にも高級払えるほど儲かる。 >>106
それ、会社の事業に寄生するシステム部みたいなやつかw
そういう連中は最終的にシステム子会社化されておしまいだと思うけどな。 >>102
つらいよねぇ。 そういうの。 自分が作った仕様としても、カタストロフィックな構想ミスだと気づいたときは既に時オスシ。
今は、アジャイルだぁ、SOLID原則だぁと言い訳して強引に仕様切り捨てができるようになったが、かつてはデスマーチの要因になった。
ファーストリリースで、何がカタストロフィックかを嗅ぎ分けられるプログラマーが優秀なんだろうとオモ。 >>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に対して線形オーダー >>110
ちなみに電車移動中なのでPCも開いてないし、紙とペンも使ってない
全部頭の中だけで5〜10分くらい
所詮そんなもん、子どもの遊び、馬鹿馬鹿しい できる奴が能力をひけらかしている場面を今まで見たことが無い。
人生最初の出来事をみているのか、それとも? >>112
こんなの馬鹿しかやらない
他人と比較して満足する趣味はないのでね
そろそろ電車降りるので仕事に戻る まぁプロコンなんて信仰の一種だからね
できるやつはやらない >>114
アルゴリズムは考え方が全て
この問題は出た目に対してそれ以降の期待値が決まることに気づくことと、目の大きい順に数学的帰納法でそれらが全て求まることが分かれば、あとは簡単な計算だけなので、ここから先の実装で躓く人はいない
>>115
自分で経営してる会社なので
>>116
マウント大好きな人しかやってる人知らない >>117
すまん、3番目に選んだAijでも同様で、、ってところから分からん
同様でどうなるんだ >>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倍をそれを含むサイコロのところに加算してやれば、各時点での各サイコロの期待値も同時に帰納法的に求まっていく おお天才か?
理解できた気がする
明日思い出したら実装してみようかな >>21
wwwwwwwwww
全部グローバルってwwww
確かに男気溢れてるわwwwww
最初は一回限りのコードの予定だったんだよね?
それが何故か残ってしまったんだよね?
そうだと言ってくれ! 少なくとも趣味でプログラムやっている自分からしたら時間の無駄だわ
勉強や開発やってたほうが有意義 >>92
もうひとつあるんよ。
後の人に分かりやすく、手を加えやすいってこと。
地味でその場ではろくに評価もされないけど、
後々人の噂になるし、良くも悪くも口伝えで評判広がるんだ。 >>21
天高くそびえたつ糞の塔から逃げるのは男気が無いとはいわない
賢明な判断 >>98
なんで素人さんがそんなに熱く語ってるの? 結局普段から競技プログラムやってる奴が高得点取れるってだけでしょ?
業務プログラムとは関係ないとは思わないけど、それだけで仕事が出来るかと問われると >>128
初級シスアドは、もう・・・
ITパスポートなんて試験が存在してる時点でお察しくださいって感じだわ >>117
口だけの人と思ってたわ
正直ごめんなさい
>>113の「こんなの馬鹿しか」は
マウントじゃないんか、って不満はあるけど
なんか負け惜しみっぽいから寝ます >>1
>プログラミングの実力を測るのは難しい。
簡単でしょ
記述で処理効率ではなく処理能力のあるコーディングができること
それすら分からないあんたはクズだね 宣言 Aは実数である
Aに2.88を代入する
Aを小数点以下第一位までを有効とする関数を通す
戻り値はどうなる?
Aは2.8 か2.9 か答えられないだろ?
>>1 もう一つ
ユーザをユーザー
プログラマをプログラマー
と記述する時点でアウト 英語の読み方がイギリス式かアメリカ式の違いがあるだけだろ
イギリス人は後置するrを殆んど無視する(´・ω・`) タイピングとプログラミングを混同してるレベルの
ジャップには無理 プログラミングの実力って判定側の好みで判断されそうだな >>141
自動テスト通れば合格、通らなければ不合格だよ >>142
テスト作った奴の趣向が反映されるんじゃね そりゃどんな検定でもそうだろ
問題に左右されない検定なんかねえよ ■ このスレッドは過去ログ倉庫に格納されています