ぱろっと・すたじお

技術メモなどをまったりと / my site : http://parrot-studio.com/

「女子大生とペアプロ問題」の言語別通過率を分析してみる

先日私も参加した「女子大生とペアプロするだけのの簡単なお仕事」ですが、
最終的な結果がBlogで公開されました

【結果発表】女子大生プログラマの心を鷲掴みにした最強のコード8選 - paiza開発日誌

これの言語別通過率が興味深かったので、
もうちょっと突っ込んだ分析がしてみたくて、
通過率をグラフ化してみました(´・ω・)っ



ここからいろいろなことがわかると思いますが、
まずはTwitter上でいくつか挙げてみたのをメモっておきます


大前提として、「最速」はある一人のエンジニアにより達成されるものですが、
「通過率」は統計的な値であり、言語に関わるエンジニアの傾向を、
ある程度表していると推測されます

もちろん大前提として、以下の要因を満たす人の範囲で、ですが

  • 「エンジニア」である
    • プロかアマかは無関係ですが、おそらくはプロが多かったのではと
  • この手のチャレンジ的なものに興味がある
  • あの仕様を理解し、何らかのコードに落とし込めるスキルがある
    • 理解できないのであれば、コードが書けない or 通らないはず

それをふまえた上で、私が仕事で使ったことがある言語の範囲で
いろいろ推測してみますと・・・

Javaは言うまでもなく、業務系のシステムでよく使われる言語です
言い換えれば、フレームワークに乗せて終わり、といった
単純な開発は少ないと思われます

一方、Rubyを含めたWeb系言語は、
比較的フレームワーク上で完結してしまうケースが多く、
特にRubyRailsの出来が良すぎる*1ため、そこに特化している人が少なくないのではと

今回の問題は、純粋にアルゴリズムとチューニングを要求される問題であり、
「独自の仕組み」を自分で考えないといけません

また、Web系システムにおけるチューニングがフロントエンド主眼だとすると、
業務系システムのチューニングは大規模データに対するものが多いでしょう

それこそ、TwitterはフロントエンドこそRubyですが、
バックエンドはScalaで書かれている*2わけですし、
言語にはやはり得意分野があります

あくまでこのキャンペーンに挑戦した人達の範囲で考えたとしても、
RubyのエンジニアよりもJavaエンジニアの方が、
大規模データに対する問題解決とチューニングに慣れている、ということかもしれません

ただし、今回の問題でJavaはC等と同じコンパイル系言語として扱われていますし、
スクリプト言語であるRuby等に比べると、
チューニングのやりやすさで優位、という側面もあるかとは思います

実際の開発においても、Ruby等で無理矢理チューニングするよりも、
バックエンドはJavaという事例が多くなり、
Rubyにおけるチューニングノウハウが浅い、という可能性はあるかもしれません

あと、個人的に気になるのはPHPです

どうもPHPが揶揄される傾向にありますが、
「エンジニアではない人をエンジニア視点で評価している」だけな気がしていて、
PHPエンジニア」のレベルはある意味「他と変わらない分布」*3なのではと思っています

実際、今回の結果を見る限り、RubyよりもPHPの方がむしろ好成績なわけで、
PHPがWebフロントエンドだけでなく、バックエンドでも使われており、
バックエンドのエンジニアのレベル分布は他の言語とそう変わらない、ということかと*4


なお、今回一番勉強になったのは、
この手の問題を解くためのアルゴリズムが存在していたことですΣ(・ω・ノ)ノ

いもす法 - いもす研 (imos laboratory)

最速のコードはこれをふまえてチューニングされていたわけですが、
これを知らないまま独自にCase7を突破できたことは、
それなりに価値があったと信じたい・・・・・・(´・ω・`)

*1: しかも、追加で何か要求があったとしても、gemを追加すれば解決してしまうという、優秀なエコシステムもありますね

*2: 以前はそうだったはずですが、今はどうなんですかね・・・(´-ω-)

*3: スーパーエンジニアもいれば、普通の人もたくさんいるという、当たり前の構図

*4: 実際、私がPHPで仕事をしていた時は、バックエンドもPHPでしたし、一方でJavaを使ったりもしていました