TopCoderの各コンテストについて適当な紹介
自分はSRMしか参加したことがないけど、TopCoderのコンテストにはいろいろと部門がある。
アルゴリズム部門以外のTopCoderのコンテストが全然わからなかったので簡単に調べてみた。
とても読みにくいので注意。
Copilot Opportunities(共同開発機会)
TopCoderのコンテストを利用してあるプロジェクトを遂行したい顧客のために、企業と共同で一連の開発工程を運営する、というお仕事。
顧客との対話や他のコンテストの実施、成果物の納入など、TopCoderのソフトウェアコンテスト運営の重要な役割を担っている。
最初にプロジェクトの基本戦略や、コンテストの開催ロードマップなどを最初にWord・Excelで提出し、選別のためのコンテストを行う。
その後、コンテストをパスした人たち(コパイロットと呼ばれる)によって他のソフトウェア開発コンテストが実施される。
上記のようにこのコンテストはとても重要なものなので、参加するには以下の条件を満たしている必要がある。
- 過去1年間に3種目以上のコンテスト(SRMとMarathon Matchesは除く)に参加し、
スクリーニングレビューをパスしている - 少なくとも1つの部門で緑色コーダー以上である
- 過去1年間にレビュアーになったことがあり、レビュアー権限を剥奪されていない
- 過去6か月間にコパイロット権限を剥奪されたことがない
Design(設計)
- Studio(スタジオ)
- デザイナー向けのコンテスト。
- ワイヤーフレーム作成やアイコン作成などいろいろな部門があるけど、ここでは詳しく解説しない。
- Conceptualization(概念化)
- Specification(仕様化)
- Architecture(アーキテクチャ)
- Component Design(コンポーネント設計)
Development(開発)
- Component Development(コンポーネント開発)
- 仕様を満たす部品(コンポーネント)を実際に開発するコンテスト。
- 過去2年間のコンテストを見た限り使用する言語は、ほとんどJava、時々.NET、JavaScript、C++、まれにObjectiveC、PHP、PL/SQL、VBAといったところか。
- 実際のコンテストの形式で模擬練習ができるらしいですよ。
- Assembly(組立)
- よくわからない。部品から実際に動くアプリを作るコンテスト? 試作版が完成されているアプリケーションに機能追加するコンテスト?
- とりあえずアセンブリ言語は関係ない。
- 英語の解説でも"Assembly competitions are hard to define."と言ってる…。
- Test Suites(テストスイート)
- Reporting
- 謎。説明がないし今まで一度もコンテストが開かれてない。
UI Development(UI開発)
- UI Prototype(UIプロトタイプ)
- RIA Build(RIA制作)
- RIA(リッチインターネットアプリケーション)のデザインをコードに落とすコンテスト。
- 使用する言語はFlex/Flash/ActionScriptやHTML/CSS/JSがほとんど。ASとJSの両方を書くものも多い。たまにJavaや.NETもある。
- Content Creation(コンテンツ作成)
- コンテンツを作るコンテスト。
- コンテンツは色々。Word・Excel・PowerPointのテンプレートとか。翻訳とか。SRMの歴史解説記事を作ってくれ!っていうのもあった。
QA and Maintenance(品質保証と保守)
- Test Scenarios(テストシナリオ)
- テストケースを作るコンテスト。
- DevelopmentのTest Suitesとほぼ同じコンテストで、開催されるときのプロジェクトの工程が異なる。
- Bug Race
Algorithm(アルゴリズム)
- Single Round Matches(SRM)
- アルゴリズムに関する短時間の定期コンテスト。
- TopCoderのコンテストの中で最も参加者が多い。
- Marathon Match
- アルゴリズムに関する長時間の定期コンテスト。
High School
高校生向けのコンテスト。アルゴリズム問題。
The Digital Run
その月で部門別で一番DRポイントを稼いだ人に賞金をあげますよという話。
DRポイントはソフトウェア開発コンテストで参加してスクリーニングをパスすると、成績に応じてもらえる。
ソフトウェア開発コンテストの大まかな流れ
個々のコンテストによっては違う部分も多いけど、ほぼ次のような流れで共通している。
- 登録(Registeration)
- 自分が参加したいコンテストのページへ行き、参加登録をする。
- 参加登録をすると、そのコンテスト専用のフォーラムにアクセスできるようになる。そこで、登録前では得られない追加情報を入手できる。
- 投稿(Submission)
- 作るべきものを作って、投稿する。
- 必要があれば、専用フォーラムで質問をすることもできる。コンテストによっては、専用フォーラムでの対話が作業の中核になるものもある。
- 評価(Review)
- 投稿期間が終わったら、自分の作成物をコンテストのレビュアーに評価・採点してもらう。
- もし自分の評価点が不当に低いと感じたら、専用フォーラムでスコアの修正を要求することができる。最終的なスコアは修正要求を吟味した後に決まる。
- サポート(Support)
- もしコンテストで勝利したら(最も高いスコアを得たら)、このフェーズに入る。
- 一定期間(多くの場合30日間)、自分の制作物で見つかった不具合を修正したり、続く開発工程でのコンテスト参加者からの質問に答えたりする。
- 期限後はバグが見つかっても修正する必要はないが、修正したら追加の報酬金を得られることもある。
その他まとまりのないこと
- ものすごい勢いで色々な作業がマニュアル化されている。すげー
- そのせいか、ソフトウェア開発コンテストがガチガチのウォーターフォールモデルになっていて、LL言語によるプロジェクトがPHP除いて圧倒的に少ない。
- ソフトウェア開発コンテストは、SRMに比べて1コンテスト当たりのサブミッター(コンテスト参加者のうち制作物を投稿した人)が少ない。
- 開発工程のコンテストでは、サブミッターが1人しかいないことも割と頻繁にある。これとかこれとかこれとか。
- Assemblyは半数近くがサブミッター1人な印象
- サブミッター0人も、あるよ。(ただしそのようなコンテストは履歴からは見えない)
- なので、「コンテスト」というよりは「コンテストを利用したアウトソーシング」といった方が正確だと感じた。
- 英語版Wikipediaのページにもそのようなことが書かれている。
- 開発工程のコンテストでは、サブミッターが1人しかいないことも割と頻繁にある。これとかこれとかこれとか。
- フォーラムやサポートでの対話が発生するので、ある程度の英語力は必須だと思う。
- 設計部門のコンテストだとガシガシ文章書かないといけないから、ある程度では済まないだろうけど。
- 開発部門なら、英文書くのはコードのドキュメンテーションと、成果物の変更リスト、フォーラム上の会話くらい。
- 成果物に書くことは部門ごとにテンプレがあるから、それに倣えば深く考えなくてもよさそう。もちろん、テンプレはきっちり読まないといけない。
- フォーラムでの会話は、他のフォーラムの書き込みを参考にすれば大丈夫…か? 参加したことがないので自信がない。
- TopCoder Forums: Getting Started in TopCoder Competitions にあるトピックで自分に関係がありそうなのは読んどくとよさげ
- SRMと比べてとても敷居が高いけど、その分野の知識があるのなら気軽に参加していいと思う。参加費は無料ですし。