設計と設計概念とモジュール化
プロダクトコードをレガシー化させて人員追加時の学習コストを強いるより、プロダクトコードをリファクタして機能を切り出したほうが皆幸せになるとは思うんだけど、それできてるの優秀な人間だけで固めてるクックパッドぐらいしかなさそう
— 性格は糞 (@mizchi) 2013, 10月 12
クックパッドは複数のサービスじゃなくて単一サービス内の機能追加だから機能がモジュール化していることに対してインセンティブがでかい。ゲーム作りまくるような環境だと前の環境そのままコピペしていらない部分削ってスタート、みたいになってしまうのはわかる。
— 性格は糞 (@mizchi) 2013, 10月 12
ゲーム開発、おそらく性質上モジュールの再利用性低い、というか再利用を試みるとポリモーフィズムぐっちゃぐっちゃになってやばくなる。概念的な話だけど、ゲーム的な過激な演出 = 前提を壊す = コードベースの根っこに手を入れるって感じになる。
— 性格は糞 (@mizchi) 2013, 10月 12
よっぽどきれいな設計じゃない限り異なる環境でのモジュールの再利用性は幻想だし、再利用性が高いモジュールとは設計概念そのもの、みたいな話になってしまう。タスクシステムの実装はプロダクトごとに別だが、度のゲームでもタスクシステムの概念は多かれ少なかれある。
— 性格は糞 (@mizchi) 2013, 10月 12
今まで見たチュートリアルの実装コード、どれもこれも異常に汚かった。おおよそできてるシステムに上から追加するから、元のコードがチュートリアルという概念を注入されることを意図してない。その結果、判定する箇所で if is_tutorial … みたいなコードがダイナミックに挿入される
— 性格は糞 (@mizchi) 2013, 10月 12
チュートリアルのコードが汚いのはゲームだけではなさそう。mixin時にメソッドオーバーライドできるような機能がある言語なら比較的マシに書けそうだが、正直それができる言語は自制して使わないとコンテキストがぐちゃぐちゃになりそう。(pythonのデコレータとかだろうか)
— 性格は糞 (@mizchi) 2013, 10月 12
あー、たまにチュートリアルコンテキストを実装するのに元のコードを復旧することが不可能になって、全体初期化かけるゲームありますね。何とは言わないが。
— 性格は糞 (@mizchi) 2013, 10月 12
概念レベルのものをコード化することができるレイヤーは、積極的にコード化すべきだが、外に対するAPIではなく内側に抱え込む挙動が多いとモジュール化しづらいイメージ。
— 性格は糞 (@mizchi) 2013, 10月 12