「女子大生とペアプロ問題」の言語別通過率を分析してみる
先日私も参加した「女子大生とペアプロするだけのの簡単なお仕事」ですが、
最終的な結果がBlogで公開されました
【結果発表】女子大生プログラマの心を鷲掴みにした最強のコード8選 - paiza開発日誌
これの言語別通過率が興味深かったので、
もうちょっと突っ込んだ分析がしてみたくて、
通過率をグラフ化してみました(´・ω・)っ
ここからいろいろなことがわかると思いますが、
まずはTwitter上でいくつか挙げてみたのをメモっておきます
昨日のJDペアプロの件、通過率をグラフ化してみるとよくわかる やはりRubyの通過率が他と比べて低い(´-ω-) http://t.co/1iO0Hg7MWX
— ぱろっと (@parrot_studio) May 22, 2014
さっきのは見づらかったので、軸とかいじっていくつか言語を間引くとこんな感じに(´・ω・)っ http://t.co/YsBHKaw2ZY
— ぱろっと (@parrot_studio) May 22, 2014
Perlはそもそも参加者が少ないし、Cの系譜はガチな人が多いから置いておくとしても、PythonやRubyの通過率が、JavaやPHPの通過率を下回るってのが面白い…φ(・ω・`) やはり扱うシステムの差だろうか・・・(´-ω-)
— ぱろっと (@parrot_studio) May 22, 2014
第1回の問題は、仕様を理解してそこそこきれいに書ければSが取れたのだけど、第2回の問題はアルゴリズムの検討とかチューニングを要求される問題だったわけで、この言語別の差はちょっと気になる(´-ω-)
— ぱろっと (@parrot_studio) May 22, 2014
あと、JavaとRubyはCase6から7で通過率の低下が激しい つまり、他の言語に比べてCase7をあきらめた人が多かった、ということ…φ(・ω・`)
— ぱろっと (@parrot_studio) May 22, 2014
大前提として、「最速」はある一人のエンジニアにより達成されるものですが、
「通過率」は統計的な値であり、言語に関わるエンジニアの傾向を、
ある程度表していると推測されます
もちろん大前提として、以下の要因を満たす人の範囲で、ですが
- 「エンジニア」である
- プロかアマかは無関係ですが、おそらくはプロが多かったのではと
- この手のチャレンジ的なものに興味がある
- あの仕様を理解し、何らかのコードに落とし込めるスキルがある
- 理解できないのであれば、コードが書けない or 通らないはず
それをふまえた上で、私が仕事で使ったことがある言語の範囲で
いろいろ推測してみますと・・・
Javaは言うまでもなく、業務系のシステムでよく使われる言語です
言い換えれば、フレームワークに乗せて終わり、といった
単純な開発は少ないと思われます
一方、Rubyを含めたWeb系言語は、
比較的フレームワーク上で完結してしまうケースが多く、
特にRubyはRailsの出来が良すぎる*1ため、そこに特化している人が少なくないのではと
今回の問題は、純粋にアルゴリズムとチューニングを要求される問題であり、
「独自の仕組み」を自分で考えないといけません
また、Web系システムにおけるチューニングがフロントエンド主眼だとすると、
業務系システムのチューニングは大規模データに対するものが多いでしょう
それこそ、TwitterはフロントエンドこそRubyですが、
バックエンドはScalaで書かれている*2わけですし、
言語にはやはり得意分野があります
あくまでこのキャンペーンに挑戦した人達の範囲で考えたとしても、
RubyのエンジニアよりもJavaエンジニアの方が、
大規模データに対する問題解決とチューニングに慣れている、ということかもしれません
ただし、今回の問題でJavaはC等と同じコンパイル系言語として扱われていますし、
スクリプト言語であるRuby等に比べると、
チューニングのやりやすさで優位、という側面もあるかとは思います
実際の開発においても、Ruby等で無理矢理チューニングするよりも、
バックエンドはJavaという事例が多くなり、
Rubyにおけるチューニングノウハウが浅い、という可能性はあるかもしれません
あと、個人的に気になるのはPHPです
どうもPHPが揶揄される傾向にありますが、
「エンジニアではない人をエンジニア視点で評価している」だけな気がしていて、
「PHPエンジニア」のレベルはある意味「他と変わらない分布」*3なのではと思っています
実際、今回の結果を見る限り、RubyよりもPHPの方がむしろ好成績なわけで、
PHPがWebフロントエンドだけでなく、バックエンドでも使われており、
バックエンドのエンジニアのレベル分布は他の言語とそう変わらない、ということかと*4
なお、今回一番勉強になったのは、
この手の問題を解くためのアルゴリズムが存在していたことですΣ(・ω・ノ)ノ
最速のコードはこれをふまえてチューニングされていたわけですが、
これを知らないまま独自にCase7を突破できたことは、
それなりに価値があったと信じたい・・・・・・(´・ω・`)