- Amazon.co.jp ・本 (355ページ)
- / ISBN・EAN: 9784756136497
作品紹介・あらすじ
カーニハンとパイクによるプログラミング解説書の決定版!プログラミングをする際に出会うさまざまな問題について、実例コードを示して実践的にアドバイス。C/C++/Java等で記述された現実のコードも多数掲載。
感想・レビュー・書評
-
コーディング規約からアルゴリズム,CSVファイル読み込み実装まで
プログラミングに関する手法についていろいろ説明している。具体的にはC言語を例としてどういうコードを書けばよいかについてサンプルをいろいろ掲載している。
個人的に特に有用だったのは1章のコーディングスタイルとCSVファイルの読み込み方法。読みやすいコードを書くには,「リーダブルコード」という本も参考になる。一部重複している内容があった。
CやC++にはCSVファイルを読み込む標準的な方法やライブラリはなく自分で実装する必要がある。プロトタイプを作りながら,汎用的にするにはどうすればいいか具体的に書かれており参考になった。
テストやプロファイルなど広範に渡っており有用な書籍だと思った。詳細をみるコメント0件をすべて表示 -
これは必読
-
あまりに昔すぎて何が書いてあったかよく覚えていない。
当時はすごく良い印象を受けた記憶がある。
再読する。 -
コードの書き方の注意点など。文法を習得したら、次に読んでほしい。
-
2011/10/22
-
-
初版が2000年出版(原書は1999年)、購入後15年くらい積読だった本。コードはほぼC言語(ときどきJava)で書かれており、読むタイミングを逸した感あり。文章も割りと文字が小さく詰まっている印象なので圧迫感あり。「グローバル変数にはわかりやすい名前を、ローカル変数には短い名前を付けるべし」という記述は、確かにと思った。
-
# 1周目完了 2022-11-25
素晴らしい内容だった。20年以上前に書かれた本とは思えない、今でも全然通用する。今まで読まずにいたのが悔やまれる。当時の自分には理解できる能力はなかっただろう。それでも、とにかく読んでおくべきだった。経験を積めば自然と理解できるようになる。
練習問題をすべてスキップした。問題には一応は目は通していった。極端に難易度の高い問題はないが、どれもそこそこの思考錯誤が必要で、手間がかかりそうな問題ばかりだ。何より数が多すぎる。2周、3周とするつもりなので、そのときに消化していく予定。
## 9章を読み終えた
「記法」
ミニ言語を自作することのすすめ。そんな大掛かりなものではなく、例えば、printfの書式などが挙げられる。
簡単な正規表現や仮想マシンの実例がある。やや高度な話題に感じられた。今の所、それらを自作する必要性を感じたことはない。あくまでこの2つは例であって、他にも自作言語を活用できるケースがあるかもしれない。
## 8章を読み終えた
「移植性」
### なぜ移植性を考えるのか
移植性を考えることは、様々な環境でプログラムを動作させることができるということに加えて、コードを良いものにしてくれる効果がある。プログラムの設計と構造が向上するより徹底的にテストされる
### 「結び」と「交わり」
交わりのアプローチの方が好ましい。
### 算術シフトと論理シフト
x86_64、Linux、GCCでは、符号付き整数のシフト演算は算術演算となるようだ。つまり、右シフトしたとき、符号ビットが右にコピーされていく。
int8_t x = 0x80;
x = x >> 8;
assert(x == int8_t(0xFF));
### 国際化
ワイド文字のことがよく分かっていない。localeで設定した文字セットを使用するようになるのは実験したことがあって、ロケールと関連していることは判明している。
どのように活用されるのか分かっていない。Unicodeとは直接関係しない。
## 7章を読んだ
「性能」
時間と空間(CPUとメモリ)、それぞれの面について書かれている。この本は20年以上前に書かれた本で、使用されているマシンは、CPUが200Mhzとかで、RAMが64MBとかそういう時代だ。それでも、CPUは高速で、メモリも豊富にあると言っている。
最初のアドバイスは、「最適化するな」と「(メモリは)気にするな」となっている。もし必要なら、必ず測定する必要がある。これらのアドバイス現代でも通用する。というかあんまり状況は変わっていない。
## 6章を読んだ
「テスト」
現代のプログラミングでは、何かしらテスティングフレームワークを利用するのが主流となっている。この章ではそういった話はまったくなく、もっと基本的な話になっている。フレームワークを利用しないからといって、全て手作業でテストするというのではない。テストケースを生成して、自動化させるためのテクニックや考え方が述べられている。更に重要なのは、境界値条件など、どこをテストするのか、テストコードをどのように扱うか、回帰テストとは何か、などなど。プログラマーなら絶対身につけておきたいことが書かれている。精進しなければ。
## 5章を読んだ
「デバッグ」
基本がぎっしり詰まっている。経験から自然に身につくことではある。改めてそれらを言語化することにより、曖昧で感覚的だったものを、確実なツールとして定着させることが可能となる。デバッガの使用についても触れられているが、具体的なツールは指定していない。どのようなデバッガであっても、共通して通用する手法、考え方が述べられている。そのため、ごく基本的な利用法にとどまり、高度な利用法は紹介されていない。そのような高度な利用法は、簡潔さを重視するこの本の趣旨にも合わない。この章に書かれていることは、確実に自分のものにするようにしておきたい。
## 4章を読んだ
「インターフェイス」
素晴らしい内容。CSVを読み取る処理を例に、インターフェイスの重要性が説かれている。
プロトタイプから始める(そして捨てる)。
## 3章を読んだ
「設計と実装」
マルコフ連鎖アルゴリズムをCで書いてから、別の言語でもやってみるという章。
Java
C++
AWK
Perl
マルコフ連鎖アルゴリズムとは何か?ここでは、入力されたテキストを元に、それっぽい新たなランダムなテキストを生成するという目的で利用する。用途は他にも色々あるのか、あるいは本来は違った用途があるのかもしれない。
このアルゴリズムは興味深いところがある。Cのバージョンは込み入っている。解説とコードが一致していなくて、どうしても理解できない部分もある。
この章の目的は、マルコフ連鎖アルゴリズムを完全に解説することでも、分析することでもなく、プログラムの作成に置いて、データ構造を正しく選択することの重要さを示すことにある。そういうわけで、マルコフ連鎖アルゴリズムをこの短い章で完全にマスターしてしまう必要はないだろう。
完全に理解できないことへの言い訳でもある。
## 2章を読んだ
「アルゴリズムとデータ構造」
定番の話題。
+ バイナリサーチ
+ クイックソート
+ 配列
+ リスト
+ 二部探索木
+ ハッシュテーブル
リストを過大評価しているように思えなくもない。少なくともC++では、リストは期待するほど性能が出ない。単に、挿入や削除がO(1)で可能というところだけに着目すると、便利そうに見える。しかし、std'::vectorとstd::listを比較すると、かなりの数の要素があったとしても、それほど大きな効果は見られない。ということを、過去に一度計測したことがある。だいぶ前、5年以上前に一度やっただけなので、改めて有効性を主張されると自信がなくなってきた。もっと深く研究して見る必要がある。
## 1章を読んだ
「スタイル」
コメントはあまり身についていない。コメントをつけるのではなく、コードがドキュメント性を持つべきだという理由から、最近ではほとんどコメントをつけなくなった。良いコードは基本的にコメントが必要ない。良いコメントを書くことを身につけるのではなく、良いコードを書くことを身につけたほうが良い。その訓練の意味もあって、ほとんどコメントはつけていない。しかし、それが当てはまらないケースもあり、そういう場合はちゃんとコメントを書くべきだろう。 -
2006/08/30読了
-
SEなら読むべき
-
C言語の父、カーニハンによるプログラミングの作法指南。C++や、Javaでの解説もあり、父は子供や曾孫にまで気を配るのかと関心(C++やJava はCを直系の先祖とする)。内容は、当たり前なのであるが、これができていないソフトウエアエンジニアが実に多い。コードコンプリートを読む前に読むと、コードコンプリートに対する理解が深まる。カーニハンに敬意を表すためにも、星5つです。