プログラマーもサイヤ人のように瀕死からの復活で能力がUPする
漫画ドラゴンボールの設定でサイヤ人が瀕死の状態から復活すると戦闘力が大幅にアップするというものがあります。
この性質を利用してベジータはクリリンに自分を半殺しさせた後、仙豆を食べることによって大幅に戦闘力をアップさせました。
プログラマーの世界にも同じようなことがあります。ある時「そういえば俺って前よりもプログラミング能力上がったな」と思うことってありますよね?
プログラマーも瀕死(難しい仕事)を乗り越えると戦闘力(プログラミング能力)がアップするのです。
私の体験談を交えて、プログラミング能力が上がる仕組みについて紹介します。
Contents
サーバサイド技術者からゲームクライアント技術者への転身で感じた苦労
私は10数年ほど業務系システムをJavaで開発する仕事をしていましたが、ふとしたことからゲーム開発を趣味で行うようになりました。基礎的スキルが身につけていくつかのゲーム開発企業に応募したところ、ゲーム開発職に就くことができました。去年の6月のことです。
Unityを使ってスマホゲームを開発する仕事なのですが、趣味で開発してたよりもずっと難しく、「うわぁ、この仕事出来るかなぁ。やり方がまったく見えない…」という連続でした。それでも、分かるところから手を付けていって詳しく見ていく内に、「こうやればいいのかな!」というのが見えてきて、どうしても分からない時は、チームのメンバーに質問して解決することが出来ました。
そんな苦労の連続ですが、ゲーム開発の方が業務系システム開発よりもずっと面白くやりがいを感じました。
ゲームクライアントの複雑さ
サーバーサイドのプログラムは処理の流れがリクエスト→レスポンスなので、とてもシンプルですが、ゲームクライアントは
- 状態変数が多い
- タイミングに依存する処理が多く、バグの原因究明が難しい
- Prefabをちょっといじったら動かなくなることがあって怖い(これはゲームクライアントというようりUnity特有の問題)
のように、サーバサイドにはない難しさがあります。
また、座標計算やグラフィカルな表示処理になれていないので、いつも手探り状態でした。
私はUnityによるゲーム開発のプロジェクトをこれまでに2社で経験しているのですが、会社によってコードの組み方の差が大きいと感じました。
Unity自体がフレームワークですが、Unityでどうプログラムを書くかについてWebアプリケーションフレームワークに比べると定型化されていません。
ですから、1つ目のプロジェクトで覚えたやり方と次のプロジェクトで作り方が大きく違い戸惑いました。
この他にも
- エンジニアによってコードの書き方がバラバラで分かりにくい
- 仕様のバージョンアップが繰り返されてコードがかなり煩雑化していてごちゃごちゃしている
という問題もありました。
そんなわけで、不慣れなゲームクライアントプログラミングに加えて、統一感がなく、煩雑化したコードという二重苦だったんです。
「今思えばサーバサイドはクライアントに比べてロジックがシンプルで簡単だったな、サーバサイドに戻れば楽だ、この際、業務系システムの開発に戻れば一番楽だ、戻って楽になりたい…?」
とまで思うようになっていました。ゲーム開発を始めたころは、ゲーム作る方がずっと楽しい、業務系になんて絶対戻りたくないと思っていたにも関わらずです。
そんな悶々とした日々を過ごしていたある日、あることに気が付きました。
「なんか最近、以前より仕事が簡単に感じるな!」と。
難しい仕事を乗り越えるとエンジニアとしてのレベルが上がる
学習曲線はある瞬間、急上昇します。
例えば英会話の場合、全然聞き取れない状態がずっと続いていても、勉強をコツコツ続けていくとある時急に外国人がしゃべってることが分かる瞬間が来るそうです。
プログラミングも同じです。
「Unityしんどい、ゲーム開発しんどい」と感じながらも、一つ一つ仕事をクリアしていきました。その度に「しんどいなー、サーバサイドは楽だったなぁ」、「いつまでこの苦しい仕事をしなきゃいけないんだろう」とも思っていました。
これは学習曲線が停滞している時期だったのでしょう。そして、その時期をある時抜けたのでしょう。
つまり、閾値を超えるまでやり続けることが大事なんです。苦しい時をやり過ごしながら、なんとか続けていければ閾値を超えて一気に楽になるんです。
ですから、このことを認識した上で苦しい時期を過ごせば、「今は停滞する時期だけど続けていけば必ず閾値を超える日が来るから頑張ろう」という気持ちになって乗り越えられると思います。
難しさを感じなくなったら、次のステージへ移るべし
仕事が以前よりも簡単になってきたと感じたら、それは次のステージへ移るべき時期なのだと思います。
今思えば、業務系システム開発をしていた頃の私は、とっくの昔に簡単になっている仕事をずっと続けていたように思います。
ここでいう簡単とは難易度という意味で簡単というだけで、簡単だけどめんどくさいことはたくさんありました。
ただ、めんどくささと難しさを混同してはいけません。面倒なことをいくらしても、エンジニアとしてレベルアップすることは出来ません。難しいことにこそチャレンジすべきです。
なぜ、ずっと同じことをしているとレベルアップしないのか?
「瀕死の状態にならないから」なのでしょう。ここでやっと冒頭のサイヤ人が瀕死の状態から回復すると戦闘力が上がる話に繋がります。
同じことをしていると既知のことばかりなので、知識や経験が増えませんし、頭をフルに働かせる必要がありません。それではレベルは上がりません。
レベルが上がると視点が高くなる
苦しい時期に感じていたプロジェクトによってプログラムの組み方が違うとか、エンジニアによってコードの書き方が違うということも、今はそれほど感じなくなりました。
おそらく視点が高くなったからでしょう。
例えばネコと犬を知っている人は動物という概念が分かりますが、ネコしか知らない人は動物という一つ上の概念を理解することが出来ません。知識を多く持つことで物事を俯瞰し抽象化してとらえることが出来るようになるということです。
ゲーム開発の経験が少なかった頃の私は抽象化して捉える能力がなかったため、会社やエンジニアによってプログラムの組み方が違うと感じたのでしょう。経験が増えるに従って視点の抽象度が上がって、今まで自分がやってきたこととの共通点を見いだせるようになったのだと思います。
努力は必ず報われる?
AKB48の高橋みなみが言った「努力は必ず報われる」の本当の意味は
「努力は (閾値を超えるまで続ければ) 必ず報われる」
ということなのでしょう!
その時に、努力しがいのある環境が必要です。以前の私のように、やりたくもない仕事を惰性で続けているという方は、ぜひ勇気を持って、一歩踏み出してみてください!