##0.はじめに
プロゲーマー を辞めて、知識0から ゲームプログラマー になり2年が経ったので、
アプリを8本リリースしたりしながら得た知見を備忘録代わりに記事にします。
また、理系でもなくプログラムに一切触れずに生きてきて、音大志望だった私がこの業界に飛び込み、
プログラマーとしての__「あるべき思考回路」や「一般的な視点」__を習得するまでに大変苦労したので、2年前の自分が知っておきたかった心構えも後半にまとめます。
あと個人的な事ですが…能動的に露出する事に抵抗を覚える人間なので、その苦手意識を克服したいという目的もあります。
##1.どんなプロゲーマーだった?
プロゲーマーの定義が多種多様なので、まず私自身がどのようなプロゲーマーだったのか軽く触れておきます。
私がプレーしていたのはLeague of Legends(通称LoL)という世界で最も競技人口が多く月間約1億人がプレイしているゲームで当時LoLでは__日本1位のチーム「DetonatioN」に1年半所属__していました。
LoLのチームはゲーミングハウスといわれるシェアハウスで、「選手」「アナリスト(ゲームを分析、チームを改善する人)」「栄養管理士(シェフ)」「コーチ」「スタッフ」…等おおくの人が共同生活を送り、日々世界一を目指して活動しています。
私は__「選手」として契約__していて、衣食住の確保、スポンサーからの支援(Logicool、NVIDIA、KDDI etc)、大会の賞金などがあり、プロゲーミングチームとして日本初の月額給与制を取り入れたチームでもあり、とても恵まれた環境でゲームに競技として真剣に向き合う事ができました。
##2.プログラマーになるまで
現役を引退した時に、__ゲームをプレイする側から作る側__にシフトしたいと考え、就職活動を開始しました。
人生は環境ゲーな所があるので、技術習得がしやすいか、将来像がマッチしてるか、人間関係が良好そうかを
判断基準にとりあえず自分の希望に合った会社を探して行きました。
転職支援サービスをふんだんに使い、
大雑把に目星を付ける(300社)→優先順位を付け書類を送る(100社)→優先順位が高い所から書類を通し面接していくという流れでした。
知識0未経験の人間がただ書類を出すだけでは通ると思えなかったので、
各会社用に企画書を作ったり元プロゲーマーとしてのキャリアをどう活用できるかをアピールしたりした結果、
幸いにも興味を持って下さった会社が複数あり、いくつかの内定を頂けました。
その中に、自分にマッチしていると感じる会社が見つかったので、およそ3カ月で就活終了。
面接の中で印象的だったのは、
未経験なことを受け入れてポテンシャルを見ようとしてもらえる会社から、圧迫面接でテンプシーロールを食らわせてくる会社まで様々だったことでした。プロゲーマーという肩書きは興味を持ってもらうところまでは効果ありますが、__その後は「ゲームとどうやって向き合ってきたか」__が問われる気がします。
##3.プログラマーとして
ソシャゲの開発&運用、VR、AI…等をやっている会社で働きました。
初期は本当に何もわからなかったので__UnityとC#__ を中心に勉強をはじめ、ゲームのレベルデザイン、バグ対応、ソシャゲ運用(中級コンテンツの作成)などに携わり徐々にプログラマーとしての知識を蓄えていきます。
技術力が身につくと共に__ソシャゲ開発チーム__に配属されたり、__個人でアプリを開発する__ような業務を任されるようになりました。
ちなみにプログラマーとして歩み始めた頃は、__独習C#をざーっと読んだり、Unityの玉転がしで阿鼻叫喚したり、Unity猫本で猫と戯れたり、会社から無理難題を投げつけられ__火を吹いたり色々しました。
また、運用中のソシャゲのバランス調整やレベルデザインを適切なものにするにはゲームを誰よりも理解している必要がある→まず__ランキング1位__になる必要があるのでは、ということで実際に__対人要素で1位__までやりこんだこともあります。
このあたりは__プロゲーマーのスキルが直接役に立った__部分です。
幸運なことに、会社の先輩は人柄が良く尊敬できる方ばかりでした。こんな未経験の雑魚が業務に携われるようになったのはひとえに親身に教えて下さった方々のおかげなので、とても恵まれた環境の中でプログラマーとしてのキャリアをスタートできたと思います。
プログラム チョット デキル
##4.アプリリリース8本する
入社して1年ちょっとでアプリ開発をはじめ、これまでに__カジュアルゲームといわれるアプリを8本リリース__しました。
その中で身にしみた、__プログラマーとしての忘れたくない(独断と偏見による)心構え__を3つ書き記します。
##5.プログラマーとしての3つの心構え
###①わからないことを明確にする
「ゲーム作りたい。でもなんか難しそう。」「ゲーム上手くなりたい。でも何すれば上手くなるのかわからない」「水飲みたい。でも水って何?どれ?」「なんかよくわかんない」
.
わからないことがわからない状態
そんな状態は自分も他人も誰も解決できません。
これはプログラマーにとってとても危険な状態ですが、私も入社時はこの状態になることが多くありました。
はじめはわからない事をわかる(理解する、解決する)ようにならなくてもよくて、
わからない事を明確にする事(何がわからないのか?)が重要だと考えを切り替えるのが最初の一歩。
... 何がわからないかが明確になれば、あとはgoogle先生が答えを見つけてくれるんだ。
.
.
勿論、はじめから理解している量が多ければ多いほど良いけれど、プログラムの世界において全部記憶しておくのはほとんどの人間にとって無理だし、この__「わからないことを明確にして」、「googleに答えを見つけてもらう手法」__さえ構築すれば生きていけるとわかりました。
私自身は、__その認識__に辿り着くまでに無駄な努力を多く挟んでしまいました。これは覚えておかないととか、これは絶対に理解しておかないとという強迫観念に追われて時間を使うよりも、その都度わからないことを調べて__解決するフローに徹した方が、技術力が上がるスピード__も上がりました。
googleさんに効率的に助けてもらううえで役に立つのは、英語で検索する力をつけること、Debug Log信者になること、今の状態を言語化して考えること…等でしょうか。
.
.
###②物事を細分化して考える
何か目的に向かっていく時、細分化して考えたほうが解決が早くなります。
例えば
「RPGゲームが作りたい」
→ 「Unityで」
終わり
のように、抽象的に物事を完結させて行動するよりも、
「RPGゲームが作りたい」
→「戦闘の実装をターン制にする」→「攻撃/魔法/防御コマンドをまず作る」→「攻撃時の処理」
→「会話シーンを作りたい」→「会話シーン用の汎用的な実装を作るべき」→「会話シーン発生時に呼び出す処理をかく」→
「会話シーン用に適切なメッセージを呼び出せる処理と会話データベースを作る」
といった風に、細かく具体的であればあるほど解決が早くなります。
ゲームでいえば
思い返せばプロゲーマーの時も同じことをしていたような気がします。当時の思考を辿るとこんな感じでしょうか。
「対人ゲームが上手くなりたい」
「何が問題点か?」
・「操作精度が悪い」→「試合前に30分ミスしやすい操作を練習する」、「入力の仕方を見直す」
・「使用キャラクターの理解度が低い」→「仕様を理解する」、「上級者の動きを動画で学ぶ」
・「何で負けてるのかわからない」→「試合ごとにターニングポイント(勝敗に最も貢献した時)を明確にする」→
「その原因を試合ごとに言語化して、脳内でよく反芻する」
ということをよくしていました。あくまで私の場合はですが、プログラミングを学習するうえで、__ゲームの上達方法を応用できる部分は想像以上に多かった__と感じています。
また、この能力を培う為には日々、__考える視点を持つ__ことが効果的です。
例え:
上級者のゲームプレイ動画を見た時... 自分なら同じことをするか? できるか? 彼らが何をしているか理解できてるか?
新しいゲームアプリを見た時... このゲームのこの部分はどういう実装になってるのか?
音楽を聞いた時... 曲を聞いた時に楽器構成、曲の構成を認識して脳内で遊ぶ。
外で歩いている時(美術)... あの屋根は自分ならどういう風に描くか? どういった画材を使いどういう風に色を混ぜるか?
こういった__視点の癖__をプログラマーとして持つ事によって、 __頭の中でコードを創造する技術__が上がる事に気がつきました。
###③形にする
とにかく「完成」を目指す。この時目指すものは「完璧」ではなくていい。
Twitterで見た開発者ツイートで印象的だったのが(ソース紛失)
リリースできる人とできない人の違い
できる人
「β版0.9リリースしました」
「バグ修正のβ版0.95リリースしました」
「機能追加のβ版0.98リリースしました」
「諸々修正のβ版0.99リリースしました」
できない人
「UIもっとよくしたい」
「戦闘部分改良中」
「デザインもっとかっこよいのにしたい」
「バグ沢山あるので修正してる」
というのがとても的を射ているなぁと。
プロゲーマーなんかは特に__完璧主義__ な人が多いと思うのですが、そういうタイプの人って__「リリースしない人」__になりがちな気がします。
なんか許せないんですよね。自分で納得できない状態で人前に出すのが。
しかし、ここは__「開発」__です。
__「犬」を作りたいならば、犬の「目」を完璧に作ってから「足」を完璧に作るなんて事してたら__途方に暮れてしまいます。
__「犬」を作るなら「最低限犬と認識できるもの」をまず作るのが優先で、「骨格」と「色」__くらい作っとけば
とりあえず β版完成 です。リリースしないにしても、開発の全体像に目を向けずに欲望で細かいところにこだわっていても完成しません。
.
.
今よりも良い実装なんて探せば何かしら存在するだろうし、納得する形を求めだしたら欲望の底なし沼に嵌ります、拘り出したらキリがないのが開発だと思いました。
__今ある力で実現可能な中で最高の完成__を目指せば良いのであって、その為には不必要な完璧は断捨離しないと、いつまで経っても完成品ができない。
.
.
これは極論ですが、UnityでUpdateにGetComponentするという__死刑級の事__をしても、処理上問題なく動く形になってるならまずはそれでいいんです。初学者なら特に。次の修正版でより良い実装を調べて改善すればいいし、まずは完成させるための事だけに傾注すべきです。
.
.
最終型を頭に描いてまず作ってみる、やってみるという姿勢は、リリースできるかどうかだけでなく自分の成長にも大きく影響してくると感じています。
これもプロゲーマー時代の知見ですが、
プロゲーマーの先駆者ウメハラさんの__「結果としての勝敗そのものは、それほど重要視するものではない。...継続的なところにこそ、本当の勝利はある」という考えに触れて、私がプロゲーマーだった時も「その時の勝敗ではなく、将来の強さにつながる行動」の重要性を意識するようになりました。
棋士の羽生善治さんも、「常に一番強い手でいってはいけない。その局面において一番強い手が最善の手ではない。...先を見越した一手には、見通す目と理性が必要」__と言っています。
ゲームにおいて、__目の前の試合で勝てる行動__と__将来的に長く勝てるようになる行動__が違うように、開発においても__完成に目を向けずに局所的な最適化をする「今の完璧」__と、__自分の開発力が結果的にあがる「将来の完璧」__は違うように思います。※1※2
将来の力を上げる上で、とにかく「完成」を目指す。
今、こんなものが作りたい__と思う気持ちがあるなら__半年後に作れる姿になる為の最適な行動とは? と考えると
人に見られて恥ずかしいとか、プライドがどうとか、自分が許せないとか、そういう邪魔な要素を排除して、とにかく半年後から逆算した思考でやるのが大切な気がしました。
この記事を書いてるのも、アウトプットの選択肢として文章も持っていた方が強いので、その練習の一環という意味もあったりします。
##6.プロゲーマーとしてのキャリアがどのようにプログラマーとして活かされたか?
野球の選手にしろ、棋士にしろ、プロゲーマーにしろ、何かの世界でトップを目指す人の中には、__どんな物事に取り組んでも上に行くための筋道を立てる思考__を鍛えている人が多いと思います。私の場合も、ゲームを極めようとした方法論が、プログラムの習得に想像以上に応用できた感覚があります。
特に私は現役時代から、1つの特殊な山を登る能力よりも、どんな山でも登れる普遍的な能力を意識して生きてきたので、プログラマーとしても実際に0知識から山を登り始めている感覚を持てて喜んでいます。
とりあえず、__ゲームをプレイするだけだった人でもゲームを作る人(まだそれがゴミコードでも)になれる__らしい。
##7.あとがき
ここ最近、また新しい分野に手を出していて自分の考え方とか知見を振り返る事が多く、将来の自分のために一度整理しておきたかったのに加えて、何も知識がない人間が少しずつ色んなことができるようになる過程を見て勇気を持つ人がいればと思いまとめました。少しでもプログラムの楽しさに触れる人が多くなれば嬉しいです。いまのところ、プログラミングはゲームに負けないぐらい楽しいです。
実践というより精神論的な話ですし、文章を書くことに不慣れでわれながら稚拙ですが、内向的な性格との決別も込めて投下します。
未熟者ゆえどうかお手柔らかに。
##参照
プロゲーマー時代の自分のTwitter https://twitter.com/yumeoti_lol
プロゲーミングチーム「Detonation」http://team-detonation.net/aboutus
※1 直感力(羽生善治著)
※2 勝負論~ウメハラの流儀~(梅原大吾著)