実力を測るのにFizzBuzzも二分探索も使えない

2011/06/10 16:09:24

 FizzBuzzをサービスにする「CodeEval」が面白い、というエントリーは、プログラマ採用に必要なスキル判定とリクルーターのマッチングをサービスとして提供するベンチャーの紹介でした。

 しかし「良いプログラマ」というのがいるとして、それを見るのに、アルゴリズムのコーディングなんか必要なのか、そんなもので測れるのかという根本的な問題があるように思えます。

 最近、RubyInsideで見かけた「Practical Tips for Hiring Ruby Web Developers」(RubyのWeb開発者を雇うための実践的なティップス)と題されたエントリは、まさにこれに答える内容で興味深いです。オーストラリア人開発者のTim Gohさんは、CのatoiだのQuickSortだのを書かなきゃいけなかったことなんて最近ないでしょ、Fizzなんてプロダクション環境で出力したことねぇよとして、次のような課題が良いのではないかと挙げています。

  • Twitter APIでパブリックTLのJSONを取ってきて、“Ruby”という文字列が含まれるツイートからなるArrayを返せ
  • 同じくパブリックTLのJSONからフォロワー数でソートしたツイートのArrayを返せ

 これに対する候補者のコードを見れば、例えばinjectを使うべきときに、冗長なコードを書いたりしていないかが分かるといいます。それは日々のコードベースにマイナスの影響を与えるプログラマをフィルタするためのテストということです。外部からのデータのサニタイズやHTTPのタイムアウトを考慮しないコードも、日々の業務で足かせになるので“No Hire”だろうとしています。

 既存のコードベースに対して作業ができることも現代的なプログラマの要件だとして、Tim Gohさんは、

  • Sinatraフレームワークのsend_fileメソッドを改変して、NginxのX-Accel-Redirectをサポートせよ
  • アプリ起動になぜ時間がかかるのかを調べるために、Gem(Rubyのライブラリ)のロードタイムのプロファイリングをしたい。BundlerもしくはRubygemsが必要な統計情報を出力するよう改変するdiffを示せ

という課題も挙げています。

 このほか、高度なアルゴリズムに関する質問によって複雑さにどれぐらい対応できるかを見る、HTTPやDNSといったプロトコルに関する質問もする良いだろうといいます。プロトコルの質問は、

  • イメージファイルのリンクをクリックしたら表示されずにダウンロードが始まる。どうやって直すか?
  • HTTPのトラフィックを調べるにの好きなツールは? 実際にHTTPヘッダを見てデバッグする必要があった場面について説明せよ

といったものです。

 候補者のインタビューで何よりも大事なのは、「どのように」ではなく「なぜ」を問うもので、すぐに答えが出るようなものは聞いても仕方がないともいいます。トレードオフの関係にあるもの、例えば設定をYAMLに書くべきか、Rubyのコードに埋め込むべきか、そのメリット・デメリットはなにかといったことについて聞くべきだ、と。国際化のためには、ブラウザのAccept-Languageヘッダを見るべきか、それともIPアドレスによる地理情報を使うべきか、なども良い質問の例だといいます。

 Tim Gohさんの言い分は説得力があって、よくよく考えると、CodeEvalではあまり現実的なスキルが測れないのではないかという気もしてきました……。もちろん、複雑なデータ構造やアルゴリズムが扱えて、Apacheの設定を覚えるのに難儀するというようなことはないでしょうから、アルゴリズム系のコンテストにも意義があるように思えるのですけどね。

FizzBuzzをサービスにする「CodeEval」が面白い

 一般企業にとっても、自社製品や自社サービスの開発を行っている企業にとっても、プログラマ採用は難しい問題のようです。どこでどうやって良いプログラマを見つけてくるのか、あるいはどうやってプログラマの力量を測ればいいのかという問題です。

 どんなコードが書けるかを見ればいい、というのは、特にブログやオープンソース活動が盛んになった今では良く聞くところですが、それをシステマティックにサービスとしてやろうという動きもあります。

コンテストサイトが雇用市場で重宝される

 例えば、プログラミングのコンテストサイトとして知られる「TopCoder.com」があります。TopCoderは、プログラミング能力、特に多様なアルゴリズムを駆使して実装する能力を競うコミュニティというかプラットフォームです。TopCoderでは、実際にブラウザ越しに書いたコードをサブミットすると、向こう側でそのコードがコンパイルされて走り(使える言語はJavaとC++)、そのコードが正解を出力したかどうか、実行に要した時間は規定内だったかなどで評価されます。

Topcoder

プログラミングのコンテストサイトとして知られる「TopCoder.com

 TopCoderは、あたかも頭の良い少年少女たちの競争心を煽って点数を競わせるだけのサイトにも見えかねませんが(サイトの色使いや雰囲気がワナビーぽい)、実はGoogleやFacebookが優秀な人材を乱獲する“漁場”として機能していて、結構大きな市場となっていると言われています。だからこそ、TopCoderはある時期からサービスを横展開し、Webデザイナ向けにデザインを競うサービスも立ち上げたりしています。UMLを使うアーキテクトや、テストエンジニア向けのコンテストなんていうのもTopCoderではやっているようです(盛り上がっている気配が感じられませんが)。

システマティックに有料サービスとしてマッチング

 TopCoderは、あくまでもコンテストサイトとして立ち上がり、今もそのスタンスを保っているように見えます。一方、そうしたゲーム感覚の競争ではなく、リクルーターとプログラマのためのマッチングサービスとして最近登場したのが「CodeEval」です。ブログを見ると1年ほど前から徐々に開発を進めているようですが、米TechCrunchによれば6月9日から一般公開されたようです。

Codeeval

リクルーターとプログラマのためのマッチングサービス「CodeEval」

 あらかじめ、オープンチャレンジ問題としてEasy、Medium、Hardの3分類で37問用意されています。仕事を探している人や腕試しをしたいプログラマは、こういう餌に食い付くものですよね。回答はJava、C、C++、JavaScript、PHP、Ruby、Perl、Clojureなどの言語でサブミットできます。ざっと問題を見た感じ、FizzBuzzから始まって、1000以下の素数の合計値を求めよという問題、システムのエンディアンを判定せよという問題、2つの文字列の最大一致文字列を求めよという問題などがあります。Google Code JamやICFPのようなハードコアなプログラミングコンテストや、Dropboxが採用向けに出しているような難易度の高い問題に比べると、パンチ感は緩いですが、実用性がありそうです。カンニング対策をどうするのか、気になるところです。

Fizz

1問だけFizzBuzzを一般化した初級問題をサブミットしてみた。実際のコードとその問題の全体での正答率のほか、LinkedInやGitHub、StackOverflowのアカウントへのリンクも集約されている

 CodeEvalは、いわゆるフリーミアムモデルでプログラマとして登録する方は無料。採用希望の企業から利用料を取るモデルです。

 小規模な人材採用(1カ月に5人の候補まで)なら無料。あらかじめ用意されたEasy、Mediumの問題を2つまで使って候補者を無制限にフィルタできる「Plus」なら月額199ドル、Easy、Medium、Hardの全ての問題を無制限に使って候補者を無制限にフィルタしたり、ピアレビューシステムも利用できる「Premium」(月額399ドル)の3つのモデルを用意しています。商売上手だなと思います。

Price

個人じゃなくてチーム単位でリクルーティング「Group Talent」

 プログラマ採用向けサービスで最近「これは」と思ったのが「Group Talent」です。すでにスタートアップやOSSプロジェクト、あるいは企業や学校で一緒に仕事をしたことがあるプログラマのグループと、雇用者を結びつけるサービスです。

Gt

 すでにチームとして一緒に開発したことがあるプログラマ同士が一緒に仕事をしたがっているということなら、相性や生産性の点で、むしろ好ましそうです。プロフィール欄にGitHubのレポジトリや、LinkedInから情報をインポートしておけば、潜在的な雇用者に成果が見せられます。雇う側から見れば、個々人を雇うよりも手っ取り早い。優秀なプログラマは優秀なプログラマとつるみがちで一緒に仕事をしたがるという法則に真実味があるのだとすれば、結構説得力のあるアイデアだと思います。ワークスタイルとしても今風で、「いよいよ21世紀っぽくなってまいりました!」と言いたくなるサービスです。

 ところで、アルゴリズムのコーディング能力なんか必要なのか、そんなものでプログラマの実務能力が測れるのかという根本的な問題がありますよね。これについては次のエントリで。


Rails開発はスタートアップよりも受託の規模が大?

2011/04/25 23:48:51

Gregg_2

 Ruby on Rails界のセレブの1人、Gregg Pollackさんが来日していて、少しだけ会って話すことができました。Railsの公式サイトにあるRails3の解説動画や、オンラインでRuby on Railsが学べる「Rails for Zombies」など、解説動画コンテンツで有名な「Railsアクティビスト」と呼ばれる人です。アップルの「I'm a Mac. And, I'm a PC...」というCMのパロディーで、JavaやPHPとRailsを比較した一連の動画(賛否両論激しい動画シリーズです)でも有名です。Greggさんは、4月20日に東京のクックパッドで開催されたTokyo Rubyist Meetupに参加していました。4月22日、23日とシンガポールで開催された「RedDotRubyConf」で講演するためにフロリダから東京で乗り継いで向かう途中でした。

 私はGreggさんの動画のファンですが、実は何をやって生計を立てているのか、よく知りませんでした。それで、実際に会うことができたので聞いてみました。

 ちょっと驚きだったのですが、Greggさんはフロリダ州のオーランドでEnvy Labsという会社を興して、職種的にはRailsのコンサルティングと受託開発のセールスエンジニアをやっているというのですね。つまり日本でいえば、SIerです。「社長自ら営業」という種類のです。そういわれてみればEnvy Labsのページには電話番号が掲載されていて、SaaSやPaaSの専業という企業とは違う感じがします。現在20人ほど社員がいて、10人強がRuby開発者、3人がデザイナ。ただ会社といっても組織っぽいところはあまりなく、みんな自主的に働く社風だということです。

 私がちょっと意外そうにしているのを見て、Greggさんは「欧米のRailsエンジニア=スタートアップ=世界を変える自社サービス」とか「Rails著名人=Railsフレームワークを、ごりごりハックする人」というのは良くある誤解だといいます。37signalsのイメージで誤解しがちだけど、クライアントの要求に応えるのもアート。楽しいことだよ、と。今はEnvy Labsの社員が自分の好きなRubyで仕事をしてハッピーであるという環境を作り出して維持できていて、それに満足している、こうしてRails関連のイベントで旅行に出たりできるのが楽しいよ、という話でした。

 オープンソース関連の活動については、自分はRailsの開発に参加できるほどスマートじゃないんだよと謙遜しつつ、映像コンテンツによる貢献が自分にとってのオープンソースなんだとも言います。そして、書籍などと異なり、映像コンテンツは製作コストとパブリケーションのバランスが良いのだとも、Greggさんは指摘していました。専門書籍は1冊書き上げる労力が大きい割には売れる部数は少なく、実入りが少ないもの。このため多くの人は本を書くのはパブリケーションや実績作りと割り切るものですが、映像系コンテンツはそのバランスが良いのだという話でした。

 そうそう、通常書籍はあまり儲からないものですが、Greggさんによれば、オンラインで無償のRailsチュートリアルコンテンツを出して、その同一コンテンツを書籍やPDFとしても販売するという変わった戦略を取ったMichael Heartlさんは、15万ドル(1200万円)ほどの収益になっているという話でした。英語圏だからこその数字かもしれませんが、広く読まれる、広く見られるコンテンツ、ということの意味は小さくなさそうですね。

ライフスタイル・アントレプレナーも多い?

 37signalsのDHHはRuby on Railsをオープンソースとして世に出していますが、それはあくまでも副産物。自分(たち)に必要だから作っただけで、本業は中小規模向けの有償コラボレーションWebアプリの提供です。多くのファンを掴んでいて、非常に儲かっているといいます。先日もDHHが特注スーパーカーを発注したということが、実しやかに噂となって流れていました。

 DHHは、あちこちで講演するたびに、こんなことを言っています(例えばこの動画)。

 メディアのバイアスによって、WebスタートアップといえばFacebookとかTwitterばかりに目が行きがちだけど、ユーザーが何億人いようとビジネス規模とは直接は関係がないんだ。むしろ儲かっている会社というのは、社名なんか宣伝もしないし、有名になりたいなんてことも思っていない。

 何でも無償のWebはおかしい。みんな分かってない。ちゃんと対価を払ってもらえるサービスで人を幸せにするという何百年も続いてきたビジネスの基本方程式を実践することで、良いビジネスが築けるし、Webアプリもそうするべきだ。せっかく育てたサービスを売り抜けて金持ちになるために起業するなんてバカげている。どうして地元で愛されるイタリアンレストランのように、ちゃんと年間数億円の売り上げを出してファン層をつかむビジネスをWebアプリとして構築しないんだ。起業した会社を売るのが幸せなのか? 継続できる自分のビジネスを持ったほうがいいじゃないか。

 “ミリオンダラービジネス”というと大きく感じるかもしれないけど、計算して見れば分かること。2000人のリピーターに月40ドル払ってもらえれば、それで年商1億円(ミリオンダラー)。

 実際、37signalsのWebサービスは、プロジェクトマネジメントの「Basecamp」、コンタクト情報管理の「Highrise」、グループ内共有ツール「Backpack」、チャットツール「Campfire」と4つありますが、どれも30日間の無料お試しサービスこそあるものの、月額12ドルから99ドルの有償サービスです。フリーミアムなどということは言いません。いや、Ruby on Railsがフリーで、それによって得た知名度によって自社サービスのファンを掴んでいる、と見ることも可能だとは思いますが。

 37signalsのように、少人数で推定数億円規模の売り上げではないにしろ、1人か2人で良いWebビジネスを築き、継続してサービスを提供するようなものを、最近は「ライフスタイル・アントレプレナーシップ」などと呼んだりしますよね。ちょっとネガティブな意味で使われる言葉という印象もありますが。ともあれ、成長がすべてではないし、みんながみんなFacebookにならなくても良くて、むしろ目指すべきはFortune500ではなく、Fortun500万だろうと、DHHは言います。確かにちょっといいレストランチェーン程度なら、500万はなくても、かなりの数あるでしょう。

 いずれにしても、Rails界で一番声がデカいDHHが、自社サービスでお金を稼ぐということを喧伝しているので、誤解が広がっているのではないかというのがGreggさんの指摘かと思います。受託開発も市場は大きいし、システム化するべき業務というのは多くある、Railsもそういうケースで使われる、と。なんだか当たり前の話ですけどね。

Rails3認定ブロンズ、ベータ試験の合格率は12.5%

2011/02/08 20:15:13

 こんにちは、@IT編集部の西村です。先日、2011年1月19日(水)と21日(金)に弊社アイティメディア会議室で「Rails 3 技術者認定ブロンズ・ベータ試験」を行いました。受験していただいた皆さまへの結果通知は受験から1カ月でご案内させていただいていますが、速報レポートが出ましたので公開します(私は、@ITのRails Hub担当者として、Rails技術者認定試験運営委員会のコンテンツ作成を担当していて認定試験に関わっております。ですが、試験問題は見ておらず、採点にも関わっていません)。

【更新】一部集計に誤りが発見されました。記事初出時には合格者5人とありましたが、正しくは6人でした。記事は修正済みです。なお、今回の試験、集計は手作業でしたが、本番試験はコンピュータベースです。

●48人中6人が合格、正答率は52%

 試験結果は次の通りです。

 2日で合計48人の方が受験して、合格ラインの70%の正答率を超えたのは6人でした。合格率は12.5%、正答率の平均は52%です。受験者のプログラミング歴の平均は9.4年、Ruby on Rails歴は1.7年でした。ちなみに保有資格としてはRuby技術者認定試験のSilverが圧倒的に多く、やはりベータ試験を受験していただいた方は、Rubyに取り組んでいる人の割合が多かったのかなと思います。

<Railscp02b

Railscp03

Railscp01

 今回のRails3認定ブロンズは、難易度設定としては難しかったということかもしれません。難易度を問うアンケートでは「やや難しい」「難しい」の両方を合わせると全体の約38%と、3人に1人の方がブロンズ試験にしては難しいのではないかという反応でした。

 どのような問題が出るか事前に予想できず、誰も試験準備ができないということを考慮しても、難易度調整の余地がありそうです。運営委員会としては、今回の2回のベータ試験に追加する形でクローズドなベータ試験を行い、問題ごとの難易度のバラつきを平準化し、本番試験では合格率を70~75%程度に調整する意向です。

 詳細なアンケート結果については、こちらのPDF資料をご覧いただくとして、アンケートから主だったご意見を抜粋します。

     
  • ブロンズ試験としては難しい問題もあったと思います。
  •  
  • 「1つ選べ」以外の問題がハードです!でも、良い問題と感じました。
  •  
  • ActionController、特にrouteに関する問題が、実務での比重に比べて難しかった。
  •  
  • 数問難しいものもありましたが、このくらいの方が資格の価値があるかと。
  •  
  • 問題が難しく時間が足りなかった。
  •  
  • テスティングフレームワーク(rspec、cucumber)についての問題もあると良いかと思います。
  •  
  • 約2年やっていても分からない問題は多かった。別途「対策本」でも準備するのでしょうか?
  •  
  • ブロンズとしてはもっと基本的な事項に絞った方が良いと思います。
  •  
  • 普通のRailsプログラマなら、それなり解けるであろう。
  •  
  • 部分的にひねりすぎている問題があったように思われます。
@IT Special 注目企業
@IT Special ラーニング

エンジニアライフ 最新の投稿コラム

@IT自分戦略研究所 新着記事

コラムニスト プロフィール

西村賢
@IT編集部の西村賢がRuby/Rails関連を中心にブログしています。
Ruby on Rails情報の新コーナー「Rails Hub」をよろしく!

- PR -
@IT Special 注目企業
インデックス

イベントカレンダー

アクセスランキング

もっと見る

@IT Special ラーニング