Upgrade to Pro — share decks privately, control downloads, hide ads and more …

『ルールズ・オブ・プログラミング』を2倍楽しむための1つのルール

 『ルールズ・オブ・プログラミング』を2倍楽しむための1つのルール

2023年9月12日にYoutube Liveで開催された、「『ルールズ・オブ・プログラミング』を2倍楽しむための1つのルール - FL#30」(https://forkwell.connpass.com/event/294762/ アーカイブ動画 https://www.youtube.com/watch?v=AoQv-TDJPxg )の講演資料です。書籍『ルールズ・オブ・プログラミング ―より良いコードを書くための21のルール』(https://www.amazon.co.jp/dp/4814400411/ )について、まだ読まれていない方や、まさに読み始めようとしている方を主な対象として、この本を読むことで得られる効果や、前提知識として押さえた上で読むとより良い学びが得られるポイントについて、ざっくばらんに語ります。

Avatar for Ryuichi Kubuki

Ryuichi Kubuki

September 13, 2023
Tweet

More Decks by Ryuichi Kubuki

Other Decks in Programming

Transcript

  1. 書籍『ルールズ・オブ・プログラミング』 • オライリー・ジャパン様から2023年8月28日刊行 • O‘Reilly Media様原書刊行から半年強での刊行 • 電子書籍版 • オライリー・ジャパン様サイトから購入可

    • 452ページ/税込3080円 • 原書は 5000円超 • 付録にPython/JavaScriptプログラマー向けC++読解法 • 日本語版追加要素 • 原書への正誤表+他修正点を全て反映 • 日本語版読者向け著者序文 • 三宅陽一郎氏序文 • C++サンプルコードへの解説 5
  2. 『Ghost of Tsushima(ゴースト オブ ツシマ)』 • Sony PlayStation 4(PS4)向けの、日本の対馬がモンゴルの侵 攻を受けた元寇に着想を得た、時代劇ゲーム。2020年発売

    • 販売数は全世界1000万本を超えると推定される • 日本でも100万本を超える 販売数を達成 • 映画化企画進行中 6
  3. 著者Chris Zimmerman氏 • Microsoftで10年勤務後、『Ghost of Tsushima』を開発した企 業Sucker Punchを1997年に共同創業(=35年のキャリア) • Sucker

    Punchは『怪盗スライ・クーパー』『InFAMOUS』シ リーズといった独自IPヒット作を継続的にリリース • 新IP『Ghost of Tsushima』の開発をプログラマーとして担当 しつつ、開発チームのマネージメントも行う • 『Ghost of Tsushima』の開発が始まった当時、50歳頃だった と思われる 7
  4. 「ルール(rule)」という語の意味 • 英語の辞書が定義するrule • 1: 規則、行動規範 (例: 競技のルール、コード開発の掟) • 2:

    一般法則 (例: 積の法則(rule of product)) • 3: 支配 • 「法則」には、law(法)やprinciple(原理・原則)の語も使 われる • ローカルな規則、グローバルな法則 9
  5. 本書における「ルール」 • ルールとは、格言である • ルールは • 短く簡潔 • (自分が)覚えやすい •

    (自分と他者から成るチームに)伝えやすい • (自分と他者が行う)実践の際に念頭に置きやすい • (基づいて下す意思決定が)速い・安い・うまい 11
  6. 1つ目の軸: 新人向け / 上級者向け • 著者は、第1章の1ページ目で、「プログラミングがちょっとく らいはできる人」が読んでいるはず、と述べる • 一般的想定: 企業のチームに入る「新人」=コーディングインタ

    ビューを経て採用されるだけのプログラミングスキルを最低限持 つソフトウェアエンジニア • プログラミング初学者が、いきなりこの本を読むのは、時期尚早 • プログラミング言語1つと、アルゴリズムやデータ構造といった 基礎を一通り、前提知識として学んだ上で読むのがお勧め 18
  7. 1つ目の軸: 新人向け / 上級者向け • では上級者は? • 世界最高峰のエンジニアたちが、上級者も得るところがあり面 白く読めると推薦しているのだから、素直に信じる •

    本の内容としても、実製品での事例に関連するコードを例示し つつ、手加減無しに書かれている • 極端な話、コード例は例にすぎないので、初心者はコード例を全部飛 ばして読んでも、得るものはあるはず • とはいえ、効率的に読めるように、文脈を補った方が良いコード例に は、訳注で解説している 19
  8. 1つ目の軸: 新人向け / 上級者向け • 「新人向け/上級者向け」の二者択一ではなく、両方向け • 最上級のスーパーエンジニアでさえ気をつけないと失敗につながるポ イントが、「ルール」 •

    ましてや、新人なら、「ルール」を無視すると失敗は不可避 • この本の中に、読んでも分からない文章やコードが多少あっても、心 配することはない • むしろ、自分の現在位置や、足りないものを知るのに役立つ • 「死にゲー」的難易度高めバランスなので、長期にわたって何度でも読んで 楽しめる • 時期尚早ではあるものの、プログラミング初学者でも、とにかくレベ ルアップするぞという野心のある方には、ぜひ読んでほしい 20
  9. 2つ目の軸: ゲーム開発者向け / 非ゲーム開発者向け • ゲーム開発者である読者が、本の内容を自分の環境に当て はめやすいのは確か • といっても、チームで開発している開発者もいれば、個人開発者 もいる

    • といっても、納期や売上目標がある開発者もいれば、無い開発者 もいる • といっても、低レベルコードを最適化しているエンジニアもいれ ば、そうでないエンジニアもいる 21
  10. 近年のゲーム開発事情 • ゲームエンジン: ターゲットハードウェア上でゲームを駆動するシステ ムと、PC上で使うゲーム作成用ツールチェインから成るソフトウェア • 内製ゲームエンジン • 予算が極めて大きなゲームや、対応プラットフォームが限られるゲームのみ •

    『Ghost of Tsushima』はSucker Punch内製エンジン • 開発遅延等の事情により外部エンジンに乗り換える例もあり • 既成ゲームエンジン • その他は、クロスプラットフォーム対応で再利用可能な有償ミドルウェアと してのゲームエンジン(Unreal Engine、Unity等)を外部から調達し、そのエン ジン上で動作するスクリプトを作成したり、可能な範囲でそのエンジンをカ スタマイズして利用 22
  11. • 低レベルのエンジンコードと、高レベルのユーザー コード(スクリプト)から成る、2層システム ゲームエンジン: プログラマーが、計算量をできるだけ抑えて短時間 かつ省資源で動作するようアルゴリズムを最適化して、 数学や物理 に基づく、 C++やシェーダープログラムによるコードを書き、ハード ウェアであるCPUやGPUを直接操作して、1/30秒または1/60秒毎に画

    像(フレーム)を描画 ゲームコードの構造 グラフィックス描画 物理 AI アニメーション API スクリプト: デザイナー/プログラマーが、大局的なゲームの流れや、 ゲーム内オブジェクトの挙動を、コードやデータやビジュアルシステ ムで記述(UnityならC#、Unreal EngineならBlueprint/Verse/C++) サウンド 『ルールズ・オブ・プログラミ ング』は、どちらかといえば、 こっちのコードの話 UnityやUnreal Engineを利用する ゲーム開発者は、どちらかとい うとこっちの話が多め 23
  12. • ウェブ開発や、AI用プロンプトエンジニアリングの時代になっても、アル ゴリズムやデータ構造といった基礎の重要性は、(少なくとも転職市場で は)変わらない。メタバースや、空間コンピューティングもある ゲームエンジン: プログラマーが、計算量をできるだけ抑えて短時間 かつ省資源で動作するようアルゴリズムを最適化して、数学や物理に 基づく、C++やシェーダープログラムによるコードを書き、ハード ウェアであるCPUやGPUを直接操作して、1/30秒または1/60秒毎に画 像(フレーム)を描画

    非ゲーム開発者 グラフィックス描画 物理 AI アニメーション API スクリプト: デザイナー/プログラマーが、大局的なゲームの流れや、 ゲーム内オブジェクトの挙動を、コードやデータやビジュアルシステ ムで記述(UnityならC#、Unreal EngineならBlueprint/Verse/C++) サウンド コーディングインタビューや、 競技プログラミングは、まさに 最適化のプロセスを問うもの。 本の1章には、例としてこうし たアルゴリズムが出てくる データベースエンジンにSQLで 問い合わせたり、クラウド上の マネージドサービスを使う限り では、こちらの話に留まる 25
  13. 2つ目の軸: ゲーム開発者向け / 非ゲーム開発者向け • 「ゲーム開発者向け/非ゲーム開発者向け」の二者択一ではなく 両方向け • 本の題名が示唆するように、プログラミング一般を志向している •

    一般的なソフトウェアエンジニアの採用試験では、コーディング の他、チーム開発や、ビジネス上の要件を満たすシステム設計に ついても問われる。この点は、製品が何であろうが同じ • 個人開発で納期も無いという状態とは異なる、プロの現場での実践的判 断が問われる 26
  14. 3つ目の軸: C++プログラマー向け / 非C++プログラマー向け • 巻末付録にPython/JavaScriptプログラマー向けのC++読解法が記載 • コード例には訳注で解説 • 難しいとされるポインターについても、他言語でいう参照的なも

    のと考えておけば十分 • とはいえ、本書における「新人」としての準備は、あった方が楽 • 型の概念や、型を発展させるテンプレート/ジェネリクスの概念や、*が 型の右にあるとポインター型で*が変数の左にあると参照外し、等知っ ておくだけで、かなり幸せになれる 27
  15. なぜ『ルールズ・オブ・プログラミング』を読むのか • 著者が、世に認められる商業的成功を挙げている • この本には、コードが汚いか綺麗かというような表層的なレベルや、 学者や学校の先生による整理や理論の話ではない、実践的経験則が 収められている • だが経験則は、結果を出したものだからこそ、参考にする意味がある •

    日々製品開発に向き合うプロが、成果を出して勝つための手の内を さらけ出した、極めて現実主義的な本 • 残酷な現実に正面から取り組んだ結果を、読者を見くびらず、手加減せ ずに伝える、真剣勝負の本 • だが、その語り口はあくまで優しく、ユーモアにあふれている 29
  16. 2倍楽しむための1つのルール • 『ルールズ・オブ・プログラミング』を2倍楽しむための1つのルール: 「汝自身を知れ」(古代ギリシアの格言) • 著者は、自身をよく知るからこそ、自身を律することができた • この本を読んで驚いたのは、自分語りに留まらず、自己を客観視した上で 本の外側にまでメタ言及し、読者に行動を促す開かれた本であること •

    この本には、自省を促す効果がある • 本を読みながら、分からなかった部分、響かなかった部分を書き留め、読 後には、個々の「ルール」が自分の環境で使えるか、自省してみよう • 使えるなら、「ルール」を実践してみよう • 使えないなら、理由を分析し、新たな「ルール」を作ってみよう 32