ビューティフルコード
- Andy Oram, Greg Wilson 編、Brian Kernighan, Jon Bentley, まつもとゆきひろ, 他 著、久野 禎子、久野 靖 訳
- 2008年04月 発行
- 672ページ
- ISBN978-4-87311-363-0
- フォーマット PDF
- 原書: Beautiful Code
内容
『プログラミング言語C』のブライアン・カーニハン、『珠玉のプログラミング』のジョン・ベントリー、XMLの父ティム・ブレイ、そしてRubyのまつもとゆきひろ氏ら、一流プログラマたちが「美しいコード」についての思い入れを語る珠玉のエッセイ集です。世界でも指折りのハッカーたちが、優美で表情豊かな美しさに満ちたさまざまなコードをさまざまな角度から紹介しています。超一流の開発者たちの哲学、考え方、ものの見方の一端に触れることができる貴重な一冊です。
関連書籍
目次
序 推薦のことば 訳者まえがき 序文 はじめに 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点の共線性 あぶない傾き 三角形の不等性 「紆余曲折」をする 「ダァー!」――これがアハ! 体験だあ 結論 参考文献 『ビューティフルコード』日本語版発刊記念対談 久野靖 × まつもとゆきひろ「コンピュータサイエンスをなめるな!」 おわりに 著者・編者紹介 索引 著者あとがきに代えて――日本のみなさんへのメッセージ 訳者あとがき