ルールズ・オブ・プログラミング

―より良いコードを書くための21のルール

[cover photo]
TOPICS
Programming , Game , C/C++
発行年月日
PRINT LENGTH
452
ISBN
978-4-8144-0041-6
原書
The Rules of Programming
FORMAT
Print PDF EPUB
Ebook
3,080円
Ebookを購入する
Print
3,080円

全世界で1,000万本に迫る実売数を誇り、日本でも累計実売数100万本を突破(2023年5月時点)した大ヒットゲーム『Ghost of Tsushima (ゴースト・オブ・ツシマ) 』をはじめ、『怪盗スライ・クーパー』などで著名なゲーム制作スタジオ、Sucker Punch Productions(サッカーパンチプロダクションズ)の共同創設者であるChris Zimmermanによる、プログラミングのベストプラクティス集。
全部で21の「ルール」から成り立っており、すべてのプログラマーが知っておくべき本質的な知恵と、熟練したプログラマーにとって示唆に富む洞察を含んでいます。また、コードを書く際だけでなく、デバッグや最適化の際に有用な知識にも触れています。ゲーム領域に限らず、幅広いプログラマーを対象とした、必読のプログラミング哲学。
本書で触れられるコード例はC++で書かれていますが、C++の知識は必須ではなく、オブジェクト指向の基礎知識さえあれば問題なく読むことができます。また、付録に「Pythonプログラマー/JavaScriptプログラマーのためのC++コード読解法」を掲載しています。

●「本書への賛辞」より


『ルールズ・オブ・プログラミング』は、初心者向けの素晴らしい手引きを、その道の玄人すら啓発する絶妙な教訓と、統合している。加えてZimmermanは、本書を終始笑いの絶えないものとし、楽しいことと教育的であることは両立可能だとの証明を行ってみせるのだ。

――Mark Cerny、リードシステムアーキテクト、PlayStation 4 & PlayStation 5


『ルールズ・オブ・プログラミング』は、新人コーダーと熟練コーダー双方に向けて、素晴らしい見識を提供してくれる。Zimmermanの語り口のおかげで、本書の読書体験は痛快なものとなっている。そして21個のルールは、ビジネスと社会のあらゆる場面にテクノロジーが浸透した時代におけるソフトウェアの改善へ向けた、重要な貢献に他ならない。

――Paul Daugherty、テクノロジー担当グループチーフエグゼクティブ兼 最高技術責任者、Accenture


『ルールズ・オブ・プログラミング』には、どんなソフトウェアエンジニアでも自己のスキルを次のレベルへ引き上げるために使える、実用的経験則としてのルールが満載だ。簡潔で鋭い言い回しと、詳細かつ具体的な事例との配合が素晴らしい。例えば、「一般化には3つの例が必要」は、紹介されるルールを多数のコード例とともに実践へと落とし込む。自分のキャリアの初期にChrisから直々にこうした教えを受け、またそうしたルールを多種多様なソフトウェア分野全般へと適用するのに成功し、私は幸運だった。本書を手にしたあなたも、同じ道を歩む機会に恵まれている。

――Chris Bentzel、ソフトウェア担当ディレクター、Boston Dynamics


Chrisは一方で、議論を呼ぶ意見を指摘してみせることをそれなりに好む。そして読者にもたらされる的確な事例のおかげで、自分自身の考え方を疑ってかかることがずいぶん楽になっている。他方でChrisは、ぼくらが直感的にやってるようなことを、言語化してみせた。Chrisは新人教育をだいぶやりやすくしてくれたのだ。必読!

――Julien Merceron、CTO、Bandai Namco



●「日本語版への推薦文」より


『Ghost of Tsushima』(ゴースト・オブ・ツシマ、ソニー・インタラクティブエンタテインメント、2020)はグラフィックスもゲームシステムも、世界最高水準で作られた世界的大ヒットゲームである。ツシマの大地を駿馬で縦横無尽に走り回るオープンワールド型ゲームとして、また、その日本的世界観をつきつめたゲームデザインとビジュアルにより、世界をあっと驚かせた。このゲームの開発会社であるSucker Punch Productions(サッカーパンチプロダクションズ)は、サンフランシスコで毎年行われるゲーム開発者会議でもプログラミングの講演を多数行ってきた実績を持ち、果敢に高い技術的挑戦を達成し、常に新しい風をデジタルゲームに持ち込んできた。本書は、そのエンジニアであり共同創設者でもあるクリス・ジマーマン氏による技術書である。ゲームエンジニアはもちろん必読の書であるが、大規模なプログラムを作ろうとするソフトウェア設計者、プログラミングのエッセンスを知りたいプログラミング初学者も大きな恩恵を受けることは間違いない。


本書では、豊富な経験に裏打ちされ、精選された21個のプログラミングのためのルールが解説されている。コードの海を泳ぎ切るための教えが、惜しげもなく提供されている。これらのルールは理論的に正しいだけでなく、実際に著者が大規模なゲームを制作する何十万、何百万行のコードを踏破して得たルールである。そして、それを実践し、教え、磨きをかけ、こうして一冊の著書としてまとめあげた。本書を吸収することで、これからのプログラミングに新しいインスピレーションを得るだろう。


この本にはたくさんの規範となるコードが書かれている。しかし、本書はコーディングの詳細も書かれているが、それは導入であり本書の目的の半分である。残りの半分は、コーディングを通じて、プログラミングの次の一手、大きな発想について、確かな構想を得るための指針を示している。プログラミングの最中に誰もが道を見失うことがある。次の1行というよりも、自分のプログラムを支える次の大地をどこに求めればよいか、分からなくなってしまうことがある。そんな時、大きな指針を示してくれるのが本書である。


本書はプログラミングを始めたばかりの人には親切なガイドとして、ベテランには練りこまれた設計思想として読めるはずである。著者ほどの達人プログラマーであれば、プログラミングが必ずしも単純なルールで割り切れないことを知っている。しかし、あえて分かりやすいルールとして提示することで、圧倒的な経験値を形にして多くのプログラマーの一助とならんとしている。行き過ぎた原則を避け、さまざまなケースがあることを念頭にしつつ、尽くせぬ説明を尽くそうとする。本書はまさに、プロフェッショナルによって書かれたプログラミング指南書である。


なお本書のコードは著者がゲームプログラマーということもあって、C++で書かれている。しかし、C++の知識は必須ではない。C++を知っていれば読みやすいかもしれないが、本書はプログラミングの背景にあるソフトウェア設計の本である。オブジェクト指向の基礎知識さえあれば問題なく読める。著者は親切にも「Pythonプログラマー/ JavaScriptプログラマーのためのC++コード読解法」という付録も用意してくれている。本書はあらゆる言語の違いを超えて有用なものとなるだろう。


――三宅 陽一郎(ゲーム開発者)

正誤表

ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷版、刷り年月日をご確認の上、ご利用ください。

正誤表


第2刷までの修正
2024年4月更新

■P.68 2行目
【誤】
getDistance(sign->location(), location) >= distance)
【正】
getDistance(sign->location(), location) <= distance)

■P.276 下から11行目
【誤】
bool tryUnpack(const Value & value, void * data) const override;
【正】
bool tryUnpack(const Value & value, bool * data) const override;

■P.276 下から7行目
【誤】
bool tryUnpack(const Value & value, void * data) const override;
【正】
bool tryUnpack(const Value & value, int * data) const override;

■P.276 下から3行目
【誤】
bool tryUnpack(const Value & value, void * data) const override;
【正】
bool tryUnpack(const Value & value, double * data) const override;

■P.277 2行目
【誤】
bool tryUnpack(const Value & value, void * data) const override;
【正】
bool tryUnpack(const Value & value, string * data) const override;

目次

本書への賛辞
日本語版への著者まえがき
日本語版への推薦文
まえがき

ルールにまつわる物語
ルールに反対する方法
ルール1 できるだけ単純であるべきだが、単純化してはいけない
ルール2 バグは伝染する
ルール3 優れた名前こそ最高のドキュメントである
ルール4 一般化には3 つの例が必要
ルール5 最適化に関する教訓その1は、「最適化するな」
幕間 ルール5 の章への批判として
ルール6 コードレビューが役に立つ3 つの理由
ルール7 失敗が起こる場合をなくす
ルール8 実行されていないコードは動作しない
ルール9 集約可能なコードを書け
ルール10 複雑性を局所化せよ
ルール11 倍良くなるか?
ルール12 大きなチームには強い規則が必要
ルール13 雪崩を起こした小石を探せ
ルール14 コードには種類が4 つある
ルール15 雑草は抜け
ルール16 コードから先に進むのではなく、結果から後ろ向きにたどれ
ルール17 大きな問題ほど解決しやすいこともある
ルール18 コードに自らの物語を語らせろ
ルール19 作り直しは並列で行うこと
ルール20 計算をやっておけ
ルール21 とにかく釘を打たなきゃいけないこともある
結論 ルールを自分のものにする

付録A PythonプログラマーのためのC++コード読解法
付録B JavaScriptプログラマーのためのC++コード読解法

訳者あとがき
索引