ゲーム作るためのこと学ぶぶろぐ(’ー’)/チャラン

【目標】毎日必ずTVゲームとプログラミングする。

大手通信会社での2つのプロジェクトを終えた。

この業界の人じゃなくても知ってるであろう大手通信会社の2つのプロジェクトに 2014年1月から並行して参入していたのですが、12月末で脱退することになったので振り返っておきます。

自動化の良さを実感出来た

junitでテスト自動化の良さを実感出来た

このプロジェクトは何かと仕様変更も多い。そしてリリースの3時間前とかに無理やりいれちゃえ、みたいな短時間での修正も頻繁。(YESマン過ぎたかな?:))

junitでそれぞれのクラスのテストコードを作っていたおかげで、

  • 手動に比べてすべてのクラスを再試験をすることにわずかな時間しかとられない。(当然なはなしですが)
  • 親クラスを修正したときの子クラスへの影響とか、直した後の再試験の範囲を考えなくても(これがいいとは言わないけど)すぐに全クラスのテストコードを実行して済む話になった!!

ということに助けられました。

手動でひとつひとつテストをしていたら、確実に間に合わなかったですし、即時対応も出来なかった。 junitがなかったら本当にやばかったです。

それまでのプロジェクトではテストの自動化ということをやっていなくても回るぐらいの仕事量しかこなしてなかったのだと思います。 それに仕様変更が頻繁なプロジェクトにいなかった為、1案件の中で何回も試験をやることがなかったのです。

だから今まではテストコード書く方が大変と思っていてテスト自動化の良さを感じれていなかったのですが、 そんなことは全然ないですね。

というか、必須です!今後は必ずテストコードを書きます。

自分自身が実感出来て初めて必要性がわかったので、今回はよかったと思います。

ただ、これがわかるまでにここまで時間がかかってしまったのは、本当に心苦しいので、 何かを知るときには、便利さや必要性を感じれるところまでやる必要があることがわかりました。

junitは使ったことあったけど、便利か?という疑問をずっともった状態で留まっていたので。

* テストコードを書くのが面倒に感じるから

テストの自動化は必須!

と感じれながらも、テストコードを書くことは実際のコードよりも量も多いし面倒…ということにすぐぶつかりました。 コード実装後にテストコードを書くと、テストコードの実装が大きなタスクとなり億劫なのです。

そこで テストファーストエクストリーム・プログラミング というものに興味を持ち始めるきっかけとなりました。

テストにかぎらず、何か手動でやっていることを自動化させるということは、 今思えばプログラミングの醍醐味のような話ですが、絶大なパワーです。僕の能力だけでは出来ないことを余裕で助けてくれます。 これは改めてかなり魅力的なことだと思いました。

だからそういうツールを自然と取り入れられるようになること、そしてそういうものを自分でも作り出せるようになること。 今後はそういった部分を伸ばしていきたくなりつつあります。

* 環境によってうまく使えなかった。【反省】

他シス連携がないと動かせなかったり、DBや基盤システム(固有のフレームワーク的な)をローカルに持つようにすることのコストが高く、 あるサーバ上でしかアプリを動かすことができないことがありました。

ローカルではeclipseのリモートデバッグを使ってサーバにあるアプリをデバッグすることは出来ました。

こういった状況のときに リモート先にあるアプリに対してテストコードを実行、ということが出来ませんでした。 ググったことでTPTPというツールで、出来そうな話もありましたが導入に踏み切れませんでした。

今思えば、DBや基盤システムがなくても動かせる部分を細分化(というかメソッド分け)すれば、 その部分だけでもローカルでjunitを使って実行出来たはずです。

そういうことを考える余裕もなかった、ってことなんですが。今後はそうします。

体制的なはなし

* お客さんとコミュニケーションを取ることが疲れる

この1年間のうち、半年以上は僕の席のまわりには誰もいない状況でした。

自分に給料を払ってる会社はちいさな会社で、大手にいるのは下請けの下請けの下請け…というようなかんじです。

なので、どこの会社からをお客さんと区切って、 かっこ悪い部分を見せないようにするだとかの基準は感覚的な問題なのですが、 自分の場合は、自分以外の人間はお客さんでした。

だから今まではおっさん共がやってくれてた価値のない進捗会議にもスーツをきて出なくてはいけなくなるし、 きれいな報告書を書かなくていけなくなる。つまらない言い訳も考えねばならなくなる。

そういった他人がいるためにやらなくてはいけないことが仕事に含まれてきました。

これは自分の意思とは反していて、かなりイラつきます。ガキっぽい本音をいいますが、

悪いけど僕22才なんですけど(´Д`)?プログラミングだけに集中させてくんねえかな(´Д`)?もらってる給料も死ぬほど安いんですけど(´Д`)?

なんで、マネージャー共に混じってこんなゴミみたいなこと僕の仕事じゃねえだろ。という本音ですw

* 困るのは自分だけなので、早めに動く

しかしこういった状況によって成長出来た部分も多々あります。

他人は本当に他人が困ることを平気でやるので、 仕事が終わったと思ったら、本当はこういうルールでやらないといけないんだとかで 全やりなおしみたいなこともおきます。 言ってなかったじゃん、と戦った部分もありましたけど、そうもいかない部分もありました。

まあでも、これは僕がこの現場特有のルールを知らなかったが故におきたことで、 そういうものが存在するかどうかもわからないから聞きようがないと思っていましたが、 困るのは自分だけなので、 思いつくことの範囲では事前に確認をするようにしました。

こういった他人が絡むことに関しては、僕もコミュ障なので後回しにしがちでしたが、 仕事をする上ではなんてことないといまいまになって吹っ切れたので、 自分のいいように他人を使うやり方が前よりもうまくなれたと思います。

* 時間をかけてもまわらなくなるし、気力ももたなくなってきた

この年になってようやく体力的な面と、作業量的な意味でゴリ押しがきかないことを知ります。

これまでの僕は、仕事の消化が追いつかないときに時間をかけることしかしてきていませんでした。

今回のプロジェクトに関しても、早朝出勤や残業、徹夜ということでなんとか帳尻を合わせようとしていたのですが、 本当に気力がなくなり、時間をかけても仕事をやらなくなってきました。(;´Д`)ヒィ

徹夜するために一人で会社に深夜残っていても、僕は仕事をだらだらとやってるだけ。 または休憩時間と称したゴロゴロしている時間が増えるだけになりました。 そして次の日は午後から出社したり…と、勤怠的にも適当な期間がとても多くなってしまった。

自分の気力が持たなくなってきたこともありますが、 仕事の量も今までの仕事の中では単純に量が多かったし、多くなってしまったと思います。

もうきっと年齢的に体力も気力も持たないので、 そうならない為の工夫の必要性が出てきました。*1

上で書いた自動化はとくにそれで、作業を単純化することは今まで必要と感じてやってきましたが、 単純化したものを自分以外のプログラムにやってもらう方法に移行します。

プロジェクト脱退の経緯

* ひとつのプロジェクトに長くいることに

恐怖を感じてます。新人のころからずっとです。

これはひとつのプロジェクトにいるよりもいろいろなプロジェクトを経験した方が仕事からもらえる経験や技術が多く得られると思っているからです。 (本当に本気でやりたいと思えるようなプロジェクトに当たれば話は変わってきます。) だいぶ仕事にとらわれずに自分を伸ばす方法も少しだけですが見つかってきたので、以前よりは冷静にいられます(笑)が今でもやっぱり本当はそう思ってます。

* プロジェクト脱退を願い出た

実は今回のプロジェクトというか案件は終わっていません。リリースもしていません。 でも僕は脱退希望を会社に申し出て、脱退させてもらうことにしました。

このプロジェクトは長いです。余裕で年単位で携わることになります。

僕のように自社開発をやれている会社にいなくて、 客先に外注されるプログラマはたぶん世の中にいっぱいいると思います。

このような立場にいるのなら*2、いろいろな現場を経験すべきというか、しないわけにはいきません。 本当に自分にとって熱を出せるプロジェクトにあたったなら、ずっといるべきだと思うけど。*3 *4

この立場は自分にとって悪い部分も当然ありますが、 良い部分はまさに職を失わず*5複数のプロジェクトに携われる点です。

複数プロジェクトを移動している人に比べて ひとつのプロジェクトにいる人は視野が狭くなってしまう可能性が高いと思っています。 *6

プログラミング技術的なことは勿論だし、開発の周り方なども。

そして、長くいることになってしまった現場がゴミレベルに有害な可能性は残念だけどこの世の中には十分に有り得ると思ってる。

このプロジェクトがひどかったわけでは決してありません。学ばせてもらったこともいっぱいありました。 ただ、単純に僕がやりたいと思うものでなかったことにこれ以上長い時間付きあっていることに、当然価値がないと思いました。

責任放棄すぎて社会人としてどうかと思われもしましたが、 僕の時間を僕が有益なものと感じて使えない環境はさっさとおさらばした方が賢いと思ってます。我慢している価値があるはずがないです。

プログラマーとして今後目指したいと思ったところ

これは仕事とは関係ないのですが、 仕事が楽だった期間にはてなの熱意の高い人たちを知ったり、 尊敬していたプログラマに実際に会って話す機会があり、 仕事だけにとらわれずにプログラミングという技術に関してそれまでよりも多少は視野が広がってきました。

だからこそ、僕がすごいと思う彼らと実際に仕事で会う人や環境にはやはりギャップがあります。 こんなことを言っている人たちはたくさんいると思いますが、僕もそう思ってしまいます。 自分はこのままでいいわけがないです。

自分がどういう方向に行きたいかということに関してピンポイントにこの分野とは未だに模索中ですが 今回のプロジェクトを通してわかってきたことが少しあります。

* 自分はシステムがやってることややりたいことには興味がない

ゲームプログラミングに興味を持ったころ僕はTVゲームというものにただ夢中でした。 ゲーム好き→ゲーム作れるようになりたいのパターンです。(実際にはなかなか叶わないところではあります。) だからこういうゲーム作ったらおもしろいかも!とかは思ったりします。

それに対して僕はシステムの仕様や、何が必要でこんな機能があればいいよね!といったことを考えることに興味がないのです。 そのシステムが何を管理してるだとか、今回でいえば管理対象のネットワーク機器自体に興味がない。こういうのを業務知識というのだろうか?

システムのことは当然夢中になるほど好きじゃないので、SIerのような方向は今後絶対出来ない分野だとわかりました。

自分がシステム開発をやってて興味があるのはプログラミングの部分だけっぽい。 システム保守や運用の仕事なんかも当然絶対出来ない。

* ソースの可読性は大事だね

僕はコレほどまでに読みにくいソースにあたったのは初めてです。

ネストの深さや、case文のケースの多さ、1クラスに10万ステップ近く書かれてたり。 またバージョン管理がないためか、ソースにコメントで add とか書くルールになっている。

昔からあるシステムなので、おそらく実装者がかわるたびに付け足していった結果なのだろう。 僕も結局はそういう既存の作りに合わせることに従ったので、それに対しては否定的なことは言えません。

ここまで酷いと可読性の重要さが逆にすごくわかります。 この分野は伸ばすべきだと思いました。

* ソースに注目した環境にいたい

ソースレビューとかやってほしいんですよ。こんな大手でもスケジュールにはとりあえず書くけど実際は行われない! 今いまの僕以上に能力あるひとは身近でもいると思うので残念です。

私は社会人となって5年近く立ちますが、今思えばソースレビューをまともにやっている環境にあたったことがありません。 レビューのことを書きましたがそれに限らず、もっとソースに注目した体制が整っている環境に身をおきたいです。

なにはともあれ

終わってよかったです。本当にそれだけ。

来年から新しいところなので改めて今回のことを教訓にまたやっていこう!

*1:なまじタフだったのが間違いだった(;´Д`)

*2:それがいいかは別として

*3:今のところないんだよなあ

*4:だから僕はどんどんプロジェクト変わるの推奨派。これも今のところはだけど。

*5:融通がきかないなら職を失ってでも、だ。

*6:勿論、仕事以外で視野を広げることは優秀なひとであれば意識せずに当然十二分にやっているだろうし、 むしろそっちの方が割合が多いと思う。 だけど、仕事からもらえるわずかなメリットも今はほしい。一日の1/3以上は仕事に取られるわけだし。