« 小川一水「天冥の標Ⅷ 新世界ハーブC」ハヤカワ文庫JA | トップページ | Andy Oram, Greg Wilson編 Brian Kerninghan, Jon Bentry, まつもとゆきひろ他著「ビューティフルコード」オライリージャパン 久野禎子,久野靖訳 2 »

2014年11月21日 (金)

Andy Oram, Greg Wilson編 Brian Kerninghan, Jon Bentry, まつもとゆきひろ他著「ビューティフルコード」オライリージャパン 久野禎子,久野靖訳 1

多くの場面において、正しい問題を解こうとすることが、美しいプログラムを作り出す上での大きな一歩となるものです。
  ――1章 正規表現マッチャ(ブライアン・カーニハン)

【どんな本?】

 C言語で有名なブライアン・カーニハン、「珠玉のプログラミング」のジョン・ベントリー、rubyのまつもとゆきひろなどのプログラマたちが、「美しいコード」というテーマで綴った、ソースコードたっぷりのエッセイ集。

 それぞれがテーマを一つに絞り、どんな問題があるのか・最初はどう解決したか・どう改良していったかを、各段階のソースプログラムを示しながら解説する、プログラマ向けの教養書。

【いつ出たの?分量は?読みやすい?】

 原書は Beautiful Code, Edited by Andy Oram and Greg Wilson, 2007。日本語版は2008年4月22日初版第1刷発行。単行本ソフトカバー横一段組みで本文約612頁。8ポイント49字×38行×612頁=約1,139,544字、400字詰め原稿用紙で約2,849枚。文庫本の長編小説なら7冊分の巨大容量で、しかもソースコードがたっぷり。

 日本語は、まあ、O’Reillyならこんなもん。問題は中身、というか、たっぷり詰まっているソースコード。当たり前だが、そもそも「何をやっているか」、つまり「正規表現とは何か」「Subversionとは何か」が分からないと、何を言っているのかわからない。

 出てくるプログラミング言語は、c・c++・ruby・perl・Java・Fortran・Python・Haskell・VisualBasic・Sheme・(Emacs)Lispなど。全てを読み書きできる人は滅多にいないだろうけど、とりあえずcがJavaかJavaScriptが分かれば他の言語は何とかなります、たぶん。というか、「知らない言語でも一応は読んでみよう」という気になる人向け。

Scheme と LISP は文法が異様なので一見とっつきにくく感じるけど、意外と中身は素直と言うか構造的と言うか、普通に構造的なプログラミングを心がけている人には受け入れやすい言語でしょう。難しいのは Haskell。アレは「プログラミング」という言葉の意味そのものが違うというか、思考法が全く違うというか、そんな気がする。いやわかってないで書いてるけど←をい

【構成は?】

 各章は独立しているので、興味がある所だけを拾い読みしてもいい。

  • 序/推薦のことば/訳者まえがき/序文
  • はじめに
  • 1章 正規表現マッチャ(ブライアン・カーニハン)
    プログラミング作法/実装/議論/代替案/発展/結論
  • 2章 Subversionの差分エディタ:存在論としてのインターフェース(カール・フォーゲル)
    バージョン管理とツリーの変換/ツリーの差分を表現する/差分エディタのインターフェース/これは芸術だろうか?/監視点としての抽象化/結論
  • 3章 私が決して書かなかった、一番美しいコード(ジョン・ベントリー)
    私が書いたことのある、一番美しいコード/より少ない行でより多くのことを/展望/プログラムを「書くこと」とは?/結論/謝辞
  • 4章 ものの見つけ方(ティム・ブレイ)
    時間について/問題:ブログのデータ/問題:誰が、何を、いつ取り出したか?/大規模な探索/結論
  • 5章 正しく、美しく、速く(この順番で):XML検証ソフトの設計から(エリオット・ラスティ・ハロルド)
    XML検証の役割/問題/第1版:素朴な実装/第2版:BNF文法を真似て、O(N)で/第3版:最初の最適化で、O(logN)に/第4版:2回目の最適化で、重複チェックを省略/第5版:3回目の最適化で、O(I)に/第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人の非線性/あぶない傾き/三角形の不等性/「紆余曲折」をする/「ダァー!」これがアハ!体験だあ/結論/参考文献
  • 『ビューティフルコード』日本語版発刊記念対談
    久野靖×まつもとゆきひろ「コンピュータサイエンスをなめるな!」
  • おわりに
  • 著者・訳者紹介/索引/著者あとがきに代えて――日本のみなさんへのメッセージ/訳者あとがき

【感想は?】

 長くなりそうなので、感想は次の記事から。

【関連記事】

|

« 小川一水「天冥の標Ⅷ 新世界ハーブC」ハヤカワ文庫JA | トップページ | Andy Oram, Greg Wilson編 Brian Kerninghan, Jon Bentry, まつもとゆきひろ他著「ビューティフルコード」オライリージャパン 久野禎子,久野靖訳 2 »

パソコン・インターネット」カテゴリの記事

書評:科学/技術」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: Andy Oram, Greg Wilson編 Brian Kerninghan, Jon Bentry, まつもとゆきひろ他著「ビューティフルコード」オライリージャパン 久野禎子,久野靖訳 1:

« 小川一水「天冥の標Ⅷ 新世界ハーブC」ハヤカワ文庫JA | トップページ | Andy Oram, Greg Wilson編 Brian Kerninghan, Jon Bentry, まつもとゆきひろ他著「ビューティフルコード」オライリージャパン 久野禎子,久野靖訳 2 »