12月に入社したサカモトです。
私は元々SONYとかNintendo機向けの家庭用のゲーム開発を生業にしてきましたが、ついこの前からSNSアプリの開発をしています。
私と同じように、家庭用ゲーム機のプログラマーからSNSゲームのプログラマーに転身したいと考えている方のお役に立てればと思い、私の経験を元に '転職するために必要なもの' のお話をさせていただきたいと思います。
採用されるために必要なもの
ご自身で事業を始める場合には必要の無い事ですが、どこぞの会社さんに所属したいとなるとまず雇って頂くほかありません。そこで、採用されるために必要とされるスキルや経験を挙げてみたいと思います。
身近なところで弊社ZyngaJapanのエンジニアの採用ページを見てみると「必須スキル・経験」として以下のような事が書いてあります。
3年以上のプログラミング業務経験
または、個人でwebサービス/ソーシャルアプリを作成したことがある
または、オープンソース活動で実績があること
プロジェクトの管理経験(業務経験ありの場合)
チームのリーダーとしての経験(業務経験ありの場合)
web系の開発に携わったことがある
LinuxとRDBMSの経験がある
2011年1月31日現在
これらを元に、一般的に必要とされる、必要なスキルと経験についてお話させていただきます。
プログラミングの経験が必要
まずプログラミング経験についてです。
経験の場については業務経験でも個人でも良いと謳ってますが、家庭用ゲーム開発(以下ゲーム屋さん)は基本的に業務で行っていると思いますので、ここでは「3年以上のプログラミング業務経験」が必要ということになります。
3年という時間については、一つでも高級プログラミング言語(今時アセンブラしか書けませんという方はあまり居ないと思いますが念のため「高級」つけときます)を意のままに使いこなせることが必要、という基準なのかなと思います。が、確認はしていないので定かではありません(汗)石の上にも3年て言いますし、そういうことなのかなと思います。
なぜマスターすることが必要なのか?というと、個人的にも周りをみてても思いますが、一つでも言語をマスターしていれば、PHPだろうが、Javaだろうが、Pascalだろうが大概は理解ができるものだからです。SNSのゲームの開発では開発言語として、PHPとかJavaとかRubyとかPerlとか、ゲーム屋さんにはあまり縁のなかった言語を採用している事が殆どなので、CとかC++ではない新しい言語をマスターする必要があります。そのための素養としても、相応のプログラミングの経験が求められます。
尚、マスターの定義が曖昧なので、ここでは「他人に教える事ができるレベル」に定めたいと思います。
というわけで必要な事の一つ目として、
「高級言語を一つ以上マスターしていること」
を挙げます。
また、エンジニアをしていく上で必要なのは、プログラミングの能力だけではありません。
そこに該当してくるのが弊社の募集要項にある「プロジェクトの管理経験」や「チームのリーダーとしての経験」で求められているものなのかなと思います...しかしこちらも確認していないのでやっぱり定かではありません(泣)
ただこれはけっこうハードルが高い条件だと思います。プログラマのリードはやってても、プロジェクトの管理は普通やっていないと思います。現に他社ではまず見ない条件です。
ということで、こちらの件には触れないでおきたいと思います。
web系開発の知識が必要
次に「web系の開発に携わったことがある」ですが、webアプリはPOSTとかゲットとかの仕組み知らないと作れなかったり、適当に作るとヤバいものが出来てしまうので全般の知識が必要です。仕組みについては「ネットワークはなぜつながるのか」あたりに書いてあるhttpの仕組みの知識があれば良いのだろうと思います。ただ、弊社の要項が具体的に何を求めているかは、確認していないので正確にはわかりません(本当にごめんなさい泣)。ただ家庭用ゲームが、ゲーム機の仕様がわかっていないとゲームが作れないのと同じように、webの仕様がわかっていないとちゃんとしたアプリは作れません。
というわけで必要な事の二つ目として、
「web開発の知識が必要」
を挙げます。
具体的には、自分でWebのアプリを作ってみるとかのアクションが必要になると思います。そういった職種に一旦転職するとかの選択肢もありますが、時間がかかりすぎるので現実的ではありません。
ちなみに私は、一時期ゲーム屋を離れてシステム屋になったときに知識を得ました。ゲーム屋からSEになるのはそんなに難しくありません。ちゃんとした社会人で「ゲーム屋とはもう縁を切ります」と言えれば雇ってくれますw
RDBMSの知識が必要
設計に関わるので、使いこなせるレベルの知識が必要です。またDBの部分は速度的にボトルネックになる部分なので、負荷の高くないクエリを書く為の知識や、最適なデータ構造を作るための設計知識が必要です。
平和なゲーム屋さんの場合、このRDBMSが一番縁遠いところだと思います。
ただ使う分にはまったく難しいものではないので、自分でWebのアプリを作る等して知識を身につければよいと思います。ただし負荷問題に関わる部分の知識は、負荷のかからない状況下ではなかなか身に付かないと思います。最適な学習法は思いつきませんが、耳年増的にそういったことがあるという事を知っておくだけでも違うと思うので、書籍等から情報を得てください。手練のゲーム屋さんの皆様には言うまでもないことですが、動けば良いというものではプログラムもDBのクエリもロクなものができません。常にこれが最適解なのか?と、疑って甘んじない姿勢が大切だと思います。
というわけで必要な事の三つ目として、
「RDBMSを使う為の知識が必要」
を挙げます。
Linuxの知識
殆どのアプリケーションサーバーがLinux(もしくはUnix系OS)を採用してると思いますので、当然Linuxでオペレーションができないと困ります。実際就職先を探すにあたり、募集要項を確認したすべての会社がLinuxもしくはUnix系OSの知識を求めていました。
オペレーションについて具体的に挙げるとファイル操作系のコマンド全般(ls,cp,mv,rm,chown,cd,mkdir,cat),検索系のコマンド(find,grep),その他(pwd,history,less)が使えて、さらにエディタ(vimとかemacs)が使えればなんとかなると思います。
というわけで必要な事の四つ目として、
「Linuxの基本的なオペレーションが出来る事が必要」
を挙げます。
その他
他社の募集要項では上記以外にも
MVCを理解していること
オブジェクト指向プログラミングの知識
ゲームが好きであること
などが挙げられています。
「ゲームが好きであること」は「ソーシャルネットワークゲームが好きであること」に言い換えたほうがいいと思います...
MVCはsymfonyのチュートリアルで勉強してください。
オブジェクト指向は...まったくの心得が無い方は「オブジェクト脳のつくり方」がオブジェクト指向とはなにかを教えてくれると思います、多分。
「歓迎するスキル」
歓迎するスキルに書いてあるものは重要です。当てはまるものがあればあるほど、転職に於ける自身のマイナス点(年齢とか、転職回数とか)を補ってくれます。
他社のものも交えてざっと挙げると以下のようなものになると思います。
大規模なシステムの開発経験
Webサービス開発経験
ソーシャルアプリ開発経験
携帯サイト開発経験
PHPを利用した開発経験
Railsやsymfonyなどのフレームワークを利用した開発経験
Flash/Flash Liteを用いた開発経験
iPhone/Androidなどのスマートフォンアプリ開発経験
Amazon EC2を利用した開発経験
オブジェクト指向設計、UMLなどの知識
アジャイル開発(テスト駆動開発など)に関する知識
実務系の経験や、より具体的な要件、必須にすると応募数が少なくなりそうなもの、または、あったらいいな的なものが並びます。
独学出来るもの、たとえばPHPやSymfony、Flash、テスト駆動開発等々は最初に述べた理由により取り組む価値が高いと言えます。
まとめ
まとめると、家庭用のゲーム開発者がSNSゲーム開発者に転身するために必要となる技能は最低でも以下のものが必要です。
「高級言語を一つ以上マスターしていること」
「web開発の知識が必要」
「RDBMSを使う為の知識が必要」
「Linuxの基本的なオペレーションが出来る事が必要」