
関連サイト
本書の関連ページが用意されています。
内容紹介
※本書は、『Write Great Code〈Vol.1〉』(2006年1月日本語版刊行)の復刊です。
『Write Great Code』は、自慢できるコード、ほかのプログラマーを感動させるコード、顧客を満足させユーザーに気に入られるコード、人々(顧客、上司、その他)が手に入れるために最高額を支払うことを厭わないコード、そうしたコード――つまり「グレートコード」を書くための方法を伝授するものです。ほかのプログラマーに畏敬の念を起こさせるソフトウェア、伝説に残るようなソフトウェアをいかに書くかがテーマです。
第1巻となる本書では、コンピュータサイエンスや工学の教育課程でも表面的にしか扱われないことが多いコンピュータの低レベルで詳細な事柄について、アセンブリ言語だけでなく、C/C++、VB、Pascal(Delphi/Kylix)、Javaなどの高級言語を使って、詳細に解説しています。
効率の良いコードを書くためにはコンピュータシステムがプログラムをどのように実行するか、またプログラミング言語の抽象概念がマシンの低レベルハードウェア機能にどのようにマッピングされるかを理解しておく必要があります。現在のコンピュータの仕組みをできるだけ効率的に利用する方法を学ぶために、ハードウェア構成を含むコンピュータアーキテクチャの中でプログラマーから見える部分、つまり「システム設計者が特定のシステム設計を選んだ理由」がよく理解できる部分を解説し、ハードウェアリソースをうまく利用するソフトウェアをどのようにして書けばよいのかを示します。
本書に寄せられた賞賛の言葉です。
「正規のトレーニングを受ける機会がないままプログラミングをしている人や、良き指導者に恵まれていない人なら、Randall Hydeの『Write Great Code』シリーズに興味をかき立てられることだろう……最初の5つの章とブール論理の章は、本書を購入するに値する内容である。」 ――UNIX REVIEW
「多くのプログラマーが当たり前と考えていることを詳しく説明している。」 ――COMPUTER SHOPPER(UK)
「とても楽しく読める。」 ――VSJ MAGAZINE
「入門者向けではなく、コンピュータの最も奥深くの仕組みを非常に複雑なレベルで詳細に説明している。そのレベルで仕事をすることに興味があるプログラマーにはとても役立つだろう。」――SECURITYITWORLD.COM
「欠けていた部分をきちんと埋めており、コンピュータサイエンスの学位取得の必読書にもなり得る。……本書を読み終えると、効率的に書かれたコードに対する理解と認識が深まるだけでなく、自らもそれを実践するだけの知識が身に付くだろう。」――MACCOMPANION(本書に満点の5つ星の評価を与えた)
「いかなる言語であれ、アセンブリ言語を習得することなくグレートコードを書きたいと望んでいるなら、『Write Great Code~ハードウェアを知り、ソフトウェアを書く』を必読書に加えるべきである。」――WEBSERVERTALK
「Hydeは、すべての開発の中核に常に位置しているテーマ、すなわちコンピュータアーキテクチャの基礎という問題に取り組んでいる。」――PRACTICAL APPLICATIONS
「よくある『プログラミングの独習書』ではない。……すべての言語、およびすべてのレベルのプログラミング経験とつながりがある。……ぐずぐずせずに今すぐ買って読むべき本である。」――BAY AREA LARGE INSTALLATION SYSTEM ADMINISTRATORS(BAYLISA)
書誌情報
- 著者: Randall Hyde, (株)トップスタジオ(訳), 鵜飼文敏(監訳), 後藤正徳(監訳), まつもとゆきひろ(監訳)
- 発行日: 2014-06-03 (紙書籍版発行日: 2014-06-03)
- 最終更新日: 2014-06-03
- バージョン: 1.0.0
- ページ数: 425ページ(PDF版換算)
- 対応フォーマット: PDF
- 出版社: マイナビ出版
対象読者
著者について
Randall Hyde

『The Art of Assembly Language』(No Starch Press)の著者で、同書はアセンブラ言語に関する書籍として最も推奨できるものの1つである。
また共著に『The Waite Group's MASM 6.0 Bible』がある。専門誌のほか『Dr. Dobb's Journal』『Byte』にも執筆している。他の著書に『Write Great Code〈Vol.2〉 低いレベルで考え、高いレベルで書く』(マイナビ)。
鵜飼文敏

Debian Projectオフィシャルメンバー、元Debian JP Projectリーダー、日本Linux協会前会長、The Free Software Initiative of Japan 副理事長、平成15年度16年度「未踏ソフトウェア創造事業」プロジェクトマネージャー。大学院在籍中に386BSDやLinuxをPC98アーキテクチャで動かして以来、フリーなオペレーティングシステムの世界にはまる。Debian JP Project創設時のメンバーで以後Debianを中心に活動。debian.or.jpおよびlinux.or.jpなどの運用管理を行っている。
後藤正徳

コンピュータ全般の中でも、特にDebian、GNU C LibraryやLinuxカーネルなどオープンソースソフトウェア開発プロジェクトに関心を持って活動。Debian Projectオフィシャル開発者、YLUG発起人。現在、メーカー研究所にてデータストレージ・PCクラスタなどの研究開発に携わる。
まつもとゆきひろ

高校生時代からのプログラミング言語おたく、オブジェクト指向おたく。1993年からRubyを開発。1997年から(株)ネットワーク応用通信研究所特別研究員としてRubyの開発をメインとして雇われている。オープンソース/フリーソフトウェアにはうるさい、自称オープンソースエバンジェリスト。最近はRubyの開発よりも文章を書いている時間のほうが長いのが悩み。鳥取県米子市出身。
目次
第 1 章 グレートコードを書くために知っておくべきこと
- 1.1 『Write Great Code』シリーズ
- 1.2 この巻で扱う内容
- 1.3 この巻が前提としていること
1.4 グレートコードを特徴付けるもの
- 1.5 この巻で使用する環境
- 1.6 さらなる知識のために
第 2 章 数値表現
- 2.1 数値とは
- 2.2 記数法
- 2.3 数値と文字列の変換
- 2.4 数値の内部表現
- 2.5 符号付きの数値と符号なしの数値
- 2.6 2進値の便利な特性
- 2.7 符号拡張、ゼロ拡張、縮小
- 2.8 飽和
- 2.9 BCD表現
- 2.1 固定小数点表現
- 2.11 スケール変位形式
- 2.12 有理表現
- 2.13 さらなる知識のために
第 3 章 2進数の算術演算とビット演算
- 3.1 2進数と16進数に対する算術演算
- 3.2 ビットに対する論理演算
- 3.3 2進数値とビット列に対する論理演算
- 3.4 有益なビット演算
- 3.5 シフトとローテート
- 3.6 ビットフィールドとデータのパック
- 3.7 データのパックとアンパック
- 3.8 さらなる知識のために
第 4 章 浮動小数点表現
- 4.1 浮動小数点演算の概要
- 4.2 IEEE浮動小数点形式
- 4.3 正規化と非正規化値
- 4.4 丸め
- 4.5 特殊な浮動小数点数値
- 4.6 浮動小数点の例外
- 4.7 浮動小数点演算
- 4.8 さらなる知識のために
第 5 章 文字表現
- 5.1 文字データ
- 5.2 文字列
- 5.3 文字セット
- 5.4 独自の文字セットの設計
- 5.5 さらなる知識のために
第 6 章 メモリの構成とアクセス
- 6.1 基本システムコンポーネント
- 6.2 メモリの物理的な構成
- 6.3 ビッグエンディアンとリトルエンディアンの構成
- 6.4 システムクロック
- 6.5 CPUによるメモリアクセス
- 6.6 さらなる知識のために
第 7 章 複合データ型とメモリオブジェクト
- 7.1 ポインタ型
- 7.2 配列
- 7.3 レコード/構造体
- 7.4 判別共用体
- 7.5 さらなる知識のために
第 8 章 ブール論理とデジタル設計
- 8.1 ブール代数
- 8.2 ブール関数と真理値表
- 8.3 関数番号
- 8.4 ブール式の代数操作
- 8.5 標準形
- 8.6 ブール関数の簡約化
- 8.7 コンピュータとの関係
- 8.8 さらなる知識のために
第 9 章 CPUアーキテクチャ
- 9.1 CPUの基本的な設計
- 9.2 命令のデコードと実行:ランダムロジックとマイクロコード
- 9.3 命令の実行
- 9.4 並列化—処理を高速化する鍵
- 9.5 さらなる知識のために
第 10 章 命令セットアーキテクチャ
- 10.1 命令セットの設計の重要性
- 10.2 基本的な命令の設計目標
- 10.3 Y86仮想プロセッサ
- 10.4 80x86の命令のエンコード
- 10.5 プログラマーにとって命令セット設計が意味するもの
- 10.6 さらなる知識のために
第 11 章 メモリのアーキテクチャと構成
- 11.1 メモリ階層
- 11.2 メモリ階層の動作方法
- 11.3 メモリサブシステムの相対的なパフォーマンス
- 11.4 キャッシュのアーキテクチャ
- 11.5 仮想メモリ、保護、ページング
- 11.6 スラッシング
- 11.7 NUMAと周辺機器
- 11.8 メモリ階層を意識したソフトウェアの作成
- 11.9 実行時のメモリ構成
- 11.1 さらなる知識のために
第 12 章 入力と出力(I/O)
- 12.1 CPUから外部への接続
- 12.2 ポートをシステムに接続するその他の方法
- 12.3 各種のI/O機構
- 12.4 I/O速度のランク
- 12.5 システムバスとデータ転送レート
- 12.6 バッファリング
- 12.7 ハンドシェイク
- 12.8 I/Oポートにおけるタイムアウト
- 12.9 割り込みとポーリング
- 12.1 保護モードとデバイスドライバ
- 12.11 特定のPC周辺デバイスを探る
- 12.12 キーボード
- 12.13 標準的なPCのパラレルポート
- 12.14 シリアルポート
- 12.15 ディスクドライブ
- 12.16 テープドライブ
- 12.17 フラッシュメモリ
- 12.18 RAMディスクと半導体ディスク
- 12.19 SCSIデバイスとSCSIコントローラ
- 12.20 IDE/ATAインターフェイス
- 12.21 マスストレージデバイスにおけるファイルシステム
- 12.22 マスストレージデバイス上のデータを操作するソフトウェアの記述
- 12.23 USB(Universal Serial Bus)
- 12.24 マウス、トラックパッド、その他のポインティングデバイス
- 12.25 ジョイスティックとゲームコントローラ
- 12.26 サウンドカード
- 12.27 さらなる知識のために