ビューティフルコード

[cover photo]
TOPICS
Programming , Business/Essay , Ruby
発行年月日
PRINT LENGTH
672
ISBN
978-4-87311-363-0
原書
Beautiful Code
FORMAT
PDF
Ebook
4,180円
Ebookを購入する

『プログラミング言語C』のブライアン・カーニハン、『珠玉のプログラミング』のジョン・ベントリー、XMLの父ティム・ブレイ、そしてRubyのまつもとゆきひろ氏ら、一流プログラマたちが「美しいコード」についての思い入れを語る珠玉のエッセイ集です。世界でも指折りのハッカーたちが、優美で表情豊かな美しさに満ちたさまざまなコードをさまざまな角度から紹介しています。超一流の開発者たちの哲学、考え方、ものの見方の一端に触れることができる貴重な一冊です。

正誤表

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

第1刷正誤表

1刷正誤表

ビューティフルコード 第1刷正誤表

2008年5月29日更新

位置
p123
コード例の
直前の行頭
フィルタ要素ための
フィルタ要素ための
p124
下から
8-7行目
メソッドFilter
MethodILで行ったのは
メソッドFilterMethodILで行ったのは
(改行を取り、下から8行目と7行目を続けてください。)
p172
最後の段落
作業場での6か月が、ライブラリ開発時の10分間に相当する
独自に開発すると6か月要するものが、ライブラリを使えば10分間でできる
p266
下から15行目
そしこれからも
そして、これからも
p290
最後の段落の
1行目
参照カウントを行い
参照カウントを保持し
p295
8行目
ハードディスク上のファイルシステムのデータ
ハードディスク上のファイルシステムのデータ
p296
2番目の
コード例の
上の段落
エンジニアリングの熟成という点で
エンジニアリングの熟成という点で
p299
19行目
デザインパータン
デザインパターン
p309
箇条書きの下
2-3行目
Pythonがインストールされていないなら、
Pythonがインストールされていないなら、
p506
例29-2(a)
6行目
if (n == ptr[i]) return i;
if (n == ary[i]) return i;
p523
2段落目
例えば、instantという単語を入力するとしましょう。他にinstantaneousという単語もあり、これはinstantで始まっているので、instantは葉ノードではありません。このため、instantと入力するには、7 文字ともひとつひとつ選んでいき、instantがハイライトされたところでボタンを長押しして、長押しメニューからTypeThisを選びます。
※この段落を同ページ4段落目「予測データベースは複数の表です。……この表はSpellerサブツリーを通じていつでも参照できます。」と5段落目「別の表としては、単語1、単語2……」の間に移動。

第2刷正誤表

2刷正誤表

ビューティフルコード 第2刷正誤表

2008年5月29日更新

位置
p123
コード例の
直前の行頭
フィルタ要素ための
フィルタ要素ための
p124
下から
8-7行目
メソッドFilter
MethodILで行ったのは
メソッドFilterMethodILで行ったのは
(改行を取り、下から8行目と7行目を続けてください。)
p172
最後の段落
作業場での6か月が、ライブラリ開発時の10分間に相当する
独自に開発すると6か月要するものが、ライブラリを使えば10分間でできる
p266
下から15行目
そしこれからも
そして、これからも
p290
最後の段落の
1行目
参照カウントを行い
参照カウントを保持し
p295
8行目
ハードディスク上のファイルシステムのデータ
ハードディスク上のファイルシステムのデータ
p296
2番目の
コード例の
上の段落
エンジニアリングの熟成という点で
エンジニアリングの熟成という点で
p299
19行目
デザインパータン
デザインパターン
p309
箇条書きの下
2-3行目
Pythonがインストールされていないなら、
Pythonがインストールされていないなら、
p506
例29-2(a)
6行目
if (n == ptr[i]) return i;
if (n == ary[i]) return i;

第3刷正誤表

3刷正誤表

ビューティフルコード 第3刷正誤表

2008年5月29日更新

位置
p123
コード例の
直前の行頭
フィルタ要素ための
フィルタ要素ための
p124
下から
8-7行目
メソッドFilter
MethodILで行ったのは
メソッドFilterMethodILで行ったのは
(改行を取り、下から8行目と7行目を続けてください。)
p172
最後の段落
作業場での6か月が、ライブラリ開発時の10分間に相当する
独自に開発すると6か月要するものが、ライブラリを使えば10分間でできる
p266
下から15行目
そしこれからも
そして、これからも
p290
最後の段落の
1行目
参照カウントを行い
参照カウントを保持し
p295
8行目
ハードディスク上のファイルシステムのデータ
ハードディスク上のファイルシステムのデータ
p296
2番目の
コード例の
上の段落
エンジニアリングの熟成という点で
エンジニアリングの熟成という点で
p299
19行目
デザインパータン
デザインパターン
p309
箇条書きの下
2-3行目
Pythonがインストールされていないなら、
Pythonがインストールされていないなら、

第4刷正誤表

4刷正誤表

ビューティフルコード 第4刷正誤表

2009年6月8日更新
位置
p71
15行目
case '@': return true; case '@': return false;
p127
中央
これはスタック上に8ビットの実数 これはスタック上に8ビットの実数
p504
下から
6行目
Ruby500行で達成できること Ruby 500行で達成できること
p508
例29-4
ruby "test/unittest.rb" ruby("test/unittest.rb")

目次

序
推薦のことば
訳者まえがき
序文
はじめに

1章 正規表現マッチャ(ブライアン・カーニハン)
    プログラミング作法
    実装
    議論
    代替案
    発展
    結論

2章 Subversionの差分エディタ:存在論としてのインタフェース(カール・フォーゲル)
    バージョン管理とツリーの変換
    ツリーの差分を表現する
    差分エディタのインタフェース
    これは芸術だろうか?
    監視点としての抽象化
    結論

3章 私が決して書かなかった、一番美しいコード(ジョン・ベントリー)
    私が書いたことのある、一番美しいコード
    より少ない行でより多くのことを
    展望
    プログラムを「書くこと」とは?
    結論
    謝辞

4章 ものの見つけ方(ティム・ブレイ)
    時間について
    問題:ブログのデータ
    問題:誰が、何を、いつ取り出したか?
    大規模な探索
    結論

5章 正しく、美しく、速く(この順番で):XML検証ソフトの設計から(エリオット・ラスティ・ハロルド)
    XML検証の役割
    問題
    第1版:素朴な実装
    第2版:BNF文法を真似て、O(N)で
    第3版:最初の最適化で、O(logN)に
    第4版:2回目の最適化で、重複チェックを省略
    第5版:3回目の最適化で、O(l)に
    第6版:4回目の最適化で、キャッシングする
    教訓

6章 テストのための統合的フレームワーク:脆さから垣間見る美しさ(ミカエル・フェザーズ)
    3つのクラスからなるソフトウェア受理テストのフレームワーク
    フレームワーク設計の挑戦
    オープンなフレームワーク
    HTML解析器はどれくらいシンプルか?
    結論

7章 ビューティフル・テスト(アルベルト・サボイア)
    やっかいな2分探索
    JUnit入門
    2分探索を暴く
    結論

8章 画像処理のためのその場コード生成(チャールズ・ペゾルド)

9章 下向き演算子順位解析(ダグラス・クロックフォード)
    JavaScript
    記号表
    トークン
    優先順位
    式
    中置演算子
    前置演算子
    代入演算子
    定数
    スコープ
    文
    関数
    配列リテラルとオブジェクトリテラル
    発展と考察

10章 高速ビットカウントを求めて(ヘンリー・S・ウォーレン, Jr.)
    基本的な方法
    分割統治法
    その他の方法
    2語のビットカウントの和と差
    2語のビットカウントの比較
    配列のビットカウント
    応用分野

11章 安全な通信:自由のための技術(アシシ・グルハッチ)
    はじまりの心意気
    セキュアなメッセージ送信の複雑さを解決する
    大事なのはユーザビリティ
    基盤
    テスト群
    動作するプロトタイプ
    整理し、つなぎ換え、動かす…
    ヒマラヤ山脈でハックする
    見えざる手が動く
    速度が実際に問題である
    個人の権利のための通信プライバシー
    文明をハックする

12章 BioPerlにおける美しいコードの成長(リンカーン・シュタイン)
    BioPerlとBio::Graphicsモジュール
    この章のコードを読むために
    Bio::Graphicsの設計プロセス
    Bio::Graphicsを拡張する
    結論と教訓

13章 遺伝子ソータの設計(ジム・ケント)
    遺伝子ソータのユーザインタフェース
    ウェブ上でのユーザとの対話管理
    少しのポリモルフィズムを使いたおす
    フィルタで関連する遺伝子のみに絞る
    大き目のコードにおける美しさ
    結論

14章 エレガントなコードはハードウェアに合わせて進化する:ガウス消去法の場合(ジャック・ドンガーラ、ピョートル・ラスツゼック)
    コンピュータアーキテクチャが行列アルゴリズムに及ぼす影響
    行列分解
    単純版
    LINPACKのDGEFAサブルーチン
    LAPACKのDGETRF
    再帰的LU分解
    ScaLAPACK PDGETRF
    マルチコアシステムのためのマルチスレッド化
    誤差解析と操作数について
    研究の将来動向
    参考文献

15章 美しいデザインの長期にわたる恩恵(アダム・コラワ)
    私の考える美しいコード
    CERNライブラリの紹介
    外側の美しさ
    内側の美しさ
    結論

16章 Linuxカーネルのドライバモデル:一緒に働くことの恩恵(グレッグ・クローハートマン)
    控え目なはじまり
    さらに小さくする
    数千個のデバイスへの規模拡大
    ゆるく結合された小さなオブジェクト

17章 もう一段の間接参照(ディオミディス・スピネリス)
    コードからポインタへ
    関数の引数から引数ポインタへ
    ファイルシステムからファイルシステムレイヤーへ
    コードからドメイン特化言語へ
    混合と分離
    レイヤーは永遠か?

18章 Pythonの辞書実装:すべての人々にすべてのものであること(アンドリュー・クッヒリン)
    辞書の内部
    特別扱い
    衝突
    大きさ変更
    繰り返しとダイナミックな変更
    結論
    謝辞

19章 NumPyの多次元イテレータ(トラビス・E・オリファント)
    N次元配列操作における鍵となるチャレンジ
    N次元配列のためのメモリモデル
    NumPyのイテレータの由来
    イテレータの設計
    イテレータのインタフェース
    イテレータの利用
    結論

20章 NASAの火星探査機計画のための高信頼エンタープライズシステム(ロナルド・マック)
    ミッションとCIP(協調的情報ポータル)
    ミッションのニーズ
    システムアーキテクチャ
    事例研究:ストリーマサービス
    信頼性
    頑強さ
    結論

21章 ERP5:最高水準の適応性に向けた設計(ロジェリオ・アテム・デ・カルバルホ、ラファエル・モネラ)
    一般的なERPの目標
    ERP5
    Zopeプラットフォーム基盤
    ERP5 Projectのコンセプト
    ERP5 Projectのコーディング
    結論
    謝辞

22章 スプーン一杯の汚水で(ブライアン・キャントリル)

23章 MapReduceでの分散プログラミング(ジェフ・ディーン、サンジェイ・ゲマワト)
    単語検索の例題
    MapReduceのプログラミングモデル
    MapReduceを使った別の例
    分散MapReduceの実装
    モデルの拡張
    結論
    参考文献
    謝辞
    付録:単語計数問題の解法

24章 美しきかな、並列(サイモン・ペイトン・ジョーンズ)
    簡単な例:銀行口座問題
    ソフトウェア・トランザクショナル・メモリ
    サンタクロース問題
    Haskellにおけるリフレクション
    結論
    謝辞

25章 構文の抽象化:syntax-caseマクロ(ケント・ディヴィグ)
    syntax-caseの簡単な紹介
    展開アルゴリズム
    例題
    結論

26章 労力節約のアーキテクチャ:ネットワークソフトウェアのためのオブジェクト指向フレームワーク(ウィリアム・R・オッテ、ダグラス・C・シュミット)
    簡単なアプリケーション:ログ記録サービス
    ログ記録サーバー用フレームワークのオブジェクト指向設計
    逐次的なログ記録サーバの実装
    並列ログ記録サーバ実装
    結論

27章 ビジネスパートナーをRESTfulにまとめ上げる(アンドリュー・パッツァー)
    プロジェクトの背景
    外部の顧客にサービスを提供する
    ファクトリパターンを使ってサービスを振り分ける
    e-ビジネスプロトコルでデータを交換する
    結論

28章 美しいデバッグ(アンドレアス・ツェラー)
    デバッガをデバッグする
    系統だった方法
    探索問題
    失敗の原因を自動的に見つける
    差分デバッグ
    入力の最小化
    欠陥を狩り込む
    プロトタイプの問題
    結論
    謝辞
    もっと学びたい方へ

29章 エッセイのごときプログラム(まつもとゆきひろ)
    簡潔さ
    保守性
    シンプルさ
    柔軟性
    バランス

30章 世界につながる手段がボタンだけだったら(アラン・メータ)
    基本設計モデル
    入力インタフェース
    ユーザインタフェースの効率
    ダウンロード
    将来に向けて

31章 Emacspeak:完全に音声のみのデスクトップ環境(T. V. ラマン)
    音声出力の生成
    音声版Emacs
    オンラインの情報へのスムーズなアクセス
    要約
    謝辞

32章 働くコード(ローラ・ウィンガード、クリストファー・セイワルド)
    「本のよう」であること
    似たものは似て見えるようにすること
    字下げの危険性
    コードをナビゲートする
    私たちの使うツール
    DiffMergeの波乱万丈の過去
    結論
    謝辞
    参考文献

33章 「本」のためにプログラムを書く(ブライアン・ヘイズ)
    非王道を行く
    括弧嫌いの人に警告
    3点の共線性
    あぶない傾き
    三角形の不等性
    「紆余曲折」をする
    「ダァー!」――これがアハ! 体験だあ
    結論
    参考文献

『ビューティフルコード』日本語版発刊記念対談
久野靖 × まつもとゆきひろ「コンピュータサイエンスをなめるな!」

おわりに
著者・編者紹介
索引
著者あとがきに代えて――日本のみなさんへのメッセージ
訳者あとがき