ビューティフルコード


ビューティフルコード (THEORY/IN/PRACTICE)


オライリー・ジャパン


編集:Andy Oram、Greg Wilson
著者:Brian Kernighan、Jon Bentleyまつもとゆきひろ、他
訳者:久野禎子、久野靖



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

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点の共線性
あぶない傾き
三角形の不等性
「紆余曲折」をする
「ダァー!」――これがアハ! 体験だあ
結論
参考文献

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

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

書籍目次

Posted by shi-n