はじめまして、今年4月に入社しました新卒プログラマーのpiyoです。
今回はプログラミングの設計について私が感じた事や、学生時代に取り組んだことなどをお話させていただこうと思います。
設計について私が感じている事
プログラマー志望の学生は専門学校の先生達から「設計が大事」と言われた事はありませんか?
クロスプラススタジオの新人研修の注意点でも、設計を意識して実装することが挙げられていました。
実際に私が初めて入った現場では、入ったタイミングがイベントの展示直前だったこともあり緊急に実装を行う必要がありました。
その時に、先輩が設計した、使い回しやすく理解しやすいプログラムのおかげで想定よりも早く実装が終わる事があり、研修で言われていた「設計を意識して実装すること」が役立つことを実感しました。
個人でゲームを制作している時は、設計をあまり意識しなくても問題ない事が多いですが、実際の現場はチームでの作業が多く、効率よく開発を進める為には設計が非常に重要でした。そのため、クロスプラススタジオで活躍されている先輩プログラマーの方々は、就活作品を見る際には「設計を行っているか?」をみているそうです。
私の場合は、学生時代に同級生からプログラム関連の質問やバグの修正を手伝ってほしいといった話があったので、自然と他の人のコードに手を加えることが増え、他の人が読んだ際にコードを理解しやすくしたり、扱いやすくするためには設計が重要であると気づきました。
その経験もあり、提出した作品でも設計が評価されたのだと思います。
次に、私が設計のために学生時代から取り組んでいることについて紹介してみたいと思います。
※一応C++を想定して書いていますが、オブジェクト指向の言語(C#、java等)であれば大きな差は無いと思われます。
レベル1:とにかく自分でコードをたくさん書き、問題点を見つける機会を作る
対象
- 初心者の方
- 今まで設計をあまり意識せずにプログラムを書いていた人
やること
- 自分でコードを書き、自分が書いたコードを読み返して読みづらい、扱いづらい、冗長な記述になっていると感じた部分を探して関数やクラスにまとめてみる。
補足
- クラス化は「機能、役割」、関数は「使いまわせる処理」を基準に考えてみるとやり易いかもしれません。
レベル2:他の人のコードを読む
対象
- 自分のソースコードの問題解決に悩む人
やること
- 自分のソースコードと比較し、活用できそうな手法を取り込んでいく。
- 身近に自分よりプログラミングが上手い人がいたらその人のソースコードを読ませてもらうのが良いです。
補足
- コードからクラス単位の設計、全体の設計を逆算出来るようになると
チームでの作業時に自分が書いた部分以外も考慮して考えられるようになり、実装前に他の人の作業内容と競合するような問題に気が付けたり、バグの原因特定がやり易くなると思います。- 全体の設計はクラス単位での設計を考えていたら見えてきやすくなるはず。
- 設計以外に、言語機能の使い方や、細かい書き方等も参考にできると効率よく学べます。
レベル3:外部の情報を見て、気になった部分を調べて、自分なりに実装を試みる。
対象
- 身近な範囲で考えて改善される事が少なくなってきた人向け
- 最初から設計を考えた上でプログラミングできたり、問題を調べて解決できる能力が必要なので、
エンジンやライブラリ側の開発に興味があったり、より深く考えられるようになりたいと思ったらやってみてください。
- 最初から設計を考えた上でプログラミングできたり、問題を調べて解決できる能力が必要なので、
やること
- 書籍、CEDECの講演(中辛以下がおすすめ)、オープンソースソフトウェア(UnrealEngine等)のソースコード等を見て、気になった部分を調べ、設計、実装を行ってみる。
補足
- C++ templateの活用方法を考えてみるのもいいかもしれません(ネット上の資料が多く、自分で調べる難易度が比較的低めなので)
- 興味があるものを自力で理解し設計して実装できた場合、たとえその設計や実装に問題があっても学べるものは非常に大きいと思います。
最後に
実際にコードを書く際に「今後も同じ処理書きそうだし、関数化した方が良いな」や、「将来的に機能を追加、変更する可能性があるので、今のうちに修正しやすくしておこう」等が気になり始めたらプログラムの設計が意識できるようになってきていると思います。
設計には正解がなく「機能の仕様が頻繁に変わる可能性があるか?」や、「この機能は様々な箇所に使われるか?」といった実装しようとしている機能の性質も考慮する必要があります。
また、今回の私のように「イベントへの展示直前や、リリース直前等で明日までに実装を終わらせる必要がある」といった理由により設計を放棄して実装する事が求められる場面もある為、設計を行う事は重要なのですがこだわり過ぎると良くない場面もあったりします。
設計において最適解を選ぶためには知識と経験が重要なので、学生時代から最適な設計を意識する事が大切だと思います。
この機会に設計を考えて実装することを意識してみてはどうでしょうか?
最後まで読んでいただき、ありがとうございました。