GGG

プログラミング言語やソフトウェア開発について思ったことを書いてます

自分の書いたコードをもう一度見直そう

 ゲームプログラマのためのコーディング技術

 

ゲームプログラマのためのコーディング技術

 

〇購入の経緯

発売以前からamazonで見つけて気になっていた。

実際は書店で購入。立ち読みしたら平易に書かれている印象があったため

読み物として電車の中で読んでみようかと思った。

 

〇読み終わるまでの期間

3日間(電車の中で)

〇感想

タイトルは、いかにもゲームプログラマ向けの書籍であるが

中身はすべてのC++または、他のオブジェクト指向言語でコードを書かれる方を対象にしている。

私にとっては非常に平易に書いてある印象で非常に読みやすかった。

しかし、書いてある内容をある程度理解するには下記の知識があった方が良いと思う。

  1. C++での言語知識(STLC++11の知識)
  2. オブジェクト指向に関する知識(クラス、継承、ポリモーフィズム)
  3. それらの使われ方をまとめたデザインパターン
  4. クラス図(UML)を読める。

概要としては

保守しやすい、分かりやすいコードとは?

どうやって、どういう観点で直していけばよい?コードを書けば良い?

これを関数、クラスという視点から書いている。

 

基本的には、カプセル化、凝集、疎結合

 

非常に当たり前のことが書いてあるのだが、実践できていないのが歯がゆい。

本書は、数年後には読んでないと恥ずかしいと言われるくらい名著になるんじゃないかと言える。

C++書いて慣れてきた方がステップアップするために必要な書籍だと思う。

 

一点、ハッとしたことがある。

SOLID原則の一つである下記の原則。

DIPDependency Inversion Principle

昔、これについて勉強した際に何を言っているのか理解できなかった。

本書を読んで理解できた気がする。ただ、うまく説明ができない。

まだしっかり理解できていないのだなと理解した。

コードは分かるし、書いてある説明も分かるが昇華しきれてないようだ。

 

あとで、自分が読むためにURL貼っておく。

Dependency inversion principle - Wikipedia, the free encyclopedia

www.oodesign.com

http://www.objectmentor.com/resources/articles/dip.pdf

【メモ】

  1. カプセル化、凝集度、結合度
  2. 継承<委譲
  3. SOLID原則
  4. デザインパターン
  5. コードメトリクス
  6. 問題と実装の分離
  7. 名前重要

 

どんなに言語仕様の詳細まで勉強したとしてもクリーンなコードを書くためには

本書を理解して実践しなければ、その境地にはまだたどり着けないのだと理解した。

 

特にクラスを設計する場合は、開発者視点で考えてしまいがち。

ビジネスロジックを中心に考える必要がある。分かってはいるができていない。

それは分かっていないのと同義だ。

 

ほとんどの内容を知ってはいた。

知識はあったが自分の道具・武器にまで昇華できていない。

歯がゆい。何をやってきたんだ。

 

◆追記

本書にも書いてあったことでハッとしたこと。

コードメトリクスについて、ハッとした項目がある。

現職の企業では、静的解析ツールを使っている。有償のツールです。

 

業務フローの成果物の一つして、静的解析結果のリストがある。

・静的解析結果が0件の指摘 → 大変品質が良いコード 

という認識で指摘されないようなコードを皆さんが書くようになった。

 

しかし、下記のようなステキな結果になった。

 

静的解析をパスさせるためのコードを書くようになった。

静的解析に絶対の信頼。これさえパスすれば大丈夫!

静的解析により指摘されないコードを書くのが目的になった。

(分かりやすいコード、バグを生みにくいコードではない。)

指摘されないコードをコピーして、一部だけ変更するような愚行も出始める。

魔界化