プログラムはなぜ動くのか(第二版) コンピューターはなぜ動くのか 情報はなぜビットなのか

プログラムはなぜ動くのか 第2版 知っておきたいプログラムの基礎知識

プログラムはなぜ動くのか 第2版 知っておきたいプログラムの基礎知識

第1章 プログラマにとってCPUとはなにか
●CPUの中身をのぞいてみよう
●CPUはレジスタの集合体
●プログラムの流れを決めるプログラム・カウンタ
●条件分岐と繰り返しの仕組み
●関数呼び出しの仕組み
●ベースとインデックスで配列を実現する
●CPUにできることは、いたって単純


第2章 データを2進数でイメージしよう
●コンピュータが情報を2進数で取り扱う理由
●ところで2進数とは?
●シフト演算と乗除算の関係
●コンピュータ処理に都合のいい「補数」
●論理右シフトと算術右シフトの違い
●論理演算をマスターするコツ

COLUMN あなたなら、どんなふうに説明しますか?
  ピカピカの小学生にCPUと2進数を説明する


第3章 コンピュータが小数点数の計算を間違える理由
●0.1を100回加えても10にならない
●小数点数を2進数で表すには
●コンピュータが計算を間違う理由
浮動小数点数とは
正規表現とイクセス表現
●実際にプログラムで確かめてみよう
●コンピュータの計算間違いを回避するには
●2進数と16進数


第4章 四角いメモリーを丸く使う
●メモリーの物理的な仕組みはシンプル
●メモリーの論理的なイメージはビルディング
●ポインタなんて簡単だ
●メモリーを工夫して使うための基本は配列だ
●スタックとキュー、さらにリング・バッファ
●リストは要素の追加や削除が容易
●2分探索木は効率的にデータを探せる


第5章 メモリーとディスクの親密な関係
●メモリーに読み出さないと実行できない
●ディスク・アクセスを高速化する「ディスク・キャッシュ」

●ディスクをメモリーの一部として使う「仮想記憶」
●メモリーを節約するプログラミング手法
●ディスクの物理構造も見ておこう


第6章 自分でデータを圧縮してみよう
●ファイルにはバイト単位で記録する
●ランレングス法の仕組み
●ランレングス法の欠点
モールス符号にハフマン法の基礎を見た
●ハフマン符号は木を用いて作る
●ハフマン法で圧縮率が大幅に向上
可逆圧縮非可逆圧縮

COLUMN あなたなら、どんなふうに説明しますか?
  ゲームに夢中な中学生にメモリとディスクを説明する


第7章 プログラムはどんな環境で動くのか
●動作環境 = OS + ハードウエア
●CPU以外の違いを乗り越えたWindows
APIはOSごとに違う
ソースコードを簡単に利用できるFreeBSDPorts
エミュレータを使えば別の環境が手に入る
●どこでも同じ実行環境を提供するJava仮想マシン
BIOSとブート・ストラップ


第8章 ソース・ファイルから実行可能ファイルができるまで

●コンピュータはネイティブ・コードしか実行できない
●ネイティブ・コードの内容を見てみよう
ソースコードを翻訳するのがコンパイラ
コンパイルだけでは実行可能ファイルが得られない
●スタートアップとライブラリ・ファイル
●DLLファイルとインポート・ライブラリ
●実行可能ファイルの実行に必要なことは?
●ロード時に作られるスタックとヒープ
●ちょっと高度なQ&A


第9章 OSとアプリケーションの関係
●歴史に見るOSの機能
●OSの存在を意識しよう
●システム・コールと高水準言語の移植性
●OSと高水準言語がハードウエアを抽象化してくれる
WindowsというOSの特徴

COLUMN あなたなら、どんなふうに説明しますか?
  携帯電話が大好きな女子高生にOSの役割を説明する


第10章 アセンブリ言語からプログラムの本当の姿を知る
アセンブリ言語はネイティブ・コードと1対1に対応
コンパイラアセンブリ言語ソースコードを出力
●ネイティブ・コードに変換されない「擬似命令」
アセンブリ言語の構文は「オペコード+オペランド
●最もよく使われるmov命令
●スタックへのプッシュとポップ
●関数呼び出しの仕組み
●関数の内部で行われる処理
グローバル変数のための領域は常に確保されている
●ローカル変数のための領域は一時的に確保される
●繰り返し処理の実現方法
●条件分岐の実現方法
●プログラムの生の動きを知らなければわからないことがある


第11章 ハードウエアを制御する方法
●アプリケーションはハードウエアと無関係?
●ハードウエアとの入出力を支えるのはIN命令とOUT命令
●入出力の実験プログラムを作ってみよう
●周辺装置が割り込みを要求する
●割り込みでリアルタイムな処理が実現する
●大量のデータを短時間に転送できるDMA
●文字やグラフィックスが表示される仕組み

COLUMN あなたなら、どんなふうに説明しますか?
  近所のおばあちゃんにディスプレイとテレビの違いを説明する


第12章 コンピュータに「考え」させるためには
●「道具」としてのプログラムと「考え」るためのプログラム
●人間の考え方をプログラムで表す
●人間の癖をプログラムで表す
●プログラミングに乱数を生かす方法
●記憶を生かすことで、より人間らしい判断を行う
●思考パターンをプログラムで表す

COLUMN あなたなら、どんなふうに説明しますか?
  行きつけの居酒屋のマスターにコンピュータが考える仕組みを説明する


補 章 レッツ・トライ C言語

おわりに

索引


第1章 プログラマにとってCPUとはなにか
●CPUの中身をのぞいてみよう
●CPUはレジスタの集合体
●プログラムの流れを決めるプログラム・カウンタ
●条件分岐と繰り返しの仕組み
●関数呼び出しの仕組み
●ベースとインデックスで配列を実現する
●CPUにできることは、いたって単純


第2章 データを2進数でイメージしよう
●コンピュータが情報を2進数で取り扱う理由
●ところで2進数とは?
●シフト演算と乗除算の関係
●コンピュータ処理に都合のいい「補数」
●論理右シフトと算術右シフトの違い
●論理演算をマスターするコツ

COLUMN あなたなら、どんなふうに説明しますか?
  ピカピカの小学生にCPUと2進数を説明する


第3章 コンピュータが小数点数の計算を間違える理由
●0.1を100回加えても10にならない
●小数点数を2進数で表すには
●コンピュータが計算を間違う理由
浮動小数点数とは
正規表現とイクセス表現
●実際にプログラムで確かめてみよう
●コンピュータの計算間違いを回避するには
●2進数と16進数


第4章 四角いメモリーを丸く使う
●メモリーの物理的な仕組みはシンプル
●メモリーの論理的なイメージはビルディング
●ポインタなんて簡単だ
●メモリーを工夫して使うための基本は配列だ
●スタックとキュー、さらにリング・バッファ
●リストは要素の追加や削除が容易
●2分探索木は効率的にデータを探せる


第5章 メモリーとディスクの親密な関係
●メモリーに読み出さないと実行できない
●ディスク・アクセスを高速化する「ディスク・キャッシュ」

●ディスクをメモリーの一部として使う「仮想記憶」
●メモリーを節約するプログラミング手法
●ディスクの物理構造も見ておこう


第6章 自分でデータを圧縮してみよう
●ファイルにはバイト単位で記録する
●ランレングス法の仕組み
●ランレングス法の欠点
モールス符号にハフマン法の基礎を見た
●ハフマン符号は木を用いて作る
●ハフマン法で圧縮率が大幅に向上
可逆圧縮非可逆圧縮

COLUMN あなたなら、どんなふうに説明しますか?
  ゲームに夢中な中学生にメモリとディスクを説明する


第7章 プログラムはどんな環境で動くのか
●動作環境 = OS + ハードウエア
●CPU以外の違いを乗り越えたWindows
APIはOSごとに違う
ソースコードを簡単に利用できるFreeBSDPorts
エミュレータを使えば別の環境が手に入る
●どこでも同じ実行環境を提供するJava仮想マシン
BIOSとブート・ストラップ


第8章 ソース・ファイルから実行可能ファイルができるまで

●コンピュータはネイティブ・コードしか実行できない
●ネイティブ・コードの内容を見てみよう
ソースコードを翻訳するのがコンパイラ
コンパイルだけでは実行可能ファイルが得られない
●スタートアップとライブラリ・ファイル
●DLLファイルとインポート・ライブラリ
●実行可能ファイルの実行に必要なことは?
●ロード時に作られるスタックとヒープ
●ちょっと高度なQ&A


第9章 OSとアプリケーションの関係
●歴史に見るOSの機能
●OSの存在を意識しよう
●システム・コールと高水準言語の移植性
●OSと高水準言語がハードウエアを抽象化してくれる
WindowsというOSの特徴

COLUMN あなたなら、どんなふうに説明しますか?
  携帯電話が大好きな女子高生にOSの役割を説明する


第10章 アセンブリ言語からプログラムの本当の姿を知る
アセンブリ言語はネイティブ・コードと1対1に対応
コンパイラアセンブリ言語ソースコードを出力
●ネイティブ・コードに変換されない「擬似命令」
アセンブリ言語の構文は「オペコード+オペランド
●最もよく使われるmov命令
●スタックへのプッシュとポップ
●関数呼び出しの仕組み
●関数の内部で行われる処理
グローバル変数のための領域は常に確保されている
●ローカル変数のための領域は一時的に確保される
●繰り返し処理の実現方法
●条件分岐の実現方法
●プログラムの生の動きを知らなければわからないことがある


第11章 ハードウエアを制御する方法
●アプリケーションはハードウエアと無関係?
●ハードウエアとの入出力を支えるのはIN命令とOUT命令
●入出力の実験プログラムを作ってみよう
●周辺装置が割り込みを要求する
●割り込みでリアルタイムな処理が実現する
●大量のデータを短時間に転送できるDMA
●文字やグラフィックスが表示される仕組み

COLUMN あなたなら、どんなふうに説明しますか?
  近所のおばあちゃんにディスプレイとテレビの違いを説明する


第12章 コンピュータに「考え」させるためには
●「道具」としてのプログラムと「考え」るためのプログラム
●人間の考え方をプログラムで表す
●人間の癖をプログラムで表す
●プログラミングに乱数を生かす方法
●記憶を生かすことで、より人間らしい判断を行う
●思考パターンをプログラムで表す

COLUMN あなたなら、どんなふうに説明しますか?
  行きつけの居酒屋のマスターにコンピュータが考える仕組みを説明する


補 章 レッツ・トライ C言語

おわりに

索引

[rakuten:hmvjapan:11371414:detail]
お話その1 音声をデジタル化する
●コンピュータが取り扱う情報の定義
●情報の最小単位と基本単位
●ただの計算機が万能の機械になったわけ
●オリジナルのコードを作ってみよう
●音声の情報だって符号化できる

お話その2 一筆書きの可否を判定する
●無駄なく渡ろうケーニヒスベルグの橋
●グラフにモデリングすれば問題の解法を見出せる
●とってもハッピーな結婚問題
●地図は何色あれば塗り分けられるか?

COLUMN あなたなら、どんなふうに説明しますか?
かわいい我が子に、ビットと情報量を説明する

お話その3 最も儲かるようにお菓子を詰める
●どら焼きと大福
●客を待たせない占い師
●ライバル会社に負けない戦略を選ぶ
●まったく余裕のない工場はどこだ
●ORと書いて「オーアル」と読む

お話その4 身の回りのデータを解析する
●大量のデータを1つの代表値で示す
メジアンは70点で、モードは65点だよ
●データのばらつきを示す必要もある
●標本から母集団の傾向を推定できる
●データの関係を数式で示す回帰分析
●データの関係の度合いを示す相関分析

COLUMN あなたなら、どんなふうに説明しますか?
べらんめえ調の亭主が、女房に偏差値の意味を教わる

お話その5 コンピュータとじゃんけんする
●3つのモデリング技法と図示方法
●じゃんけんをPOAモデリングする
●じゃんけんをDOAモデリングする
●じゃんけんをOOAモデリングする

お話その6 どっちの手順がよいか判定する
アルゴリズムって、どんなリズム?
●コンピュータが動作すると変数の値が変化する
●同じ結果が得られるアルゴリズムは1つじゃない
アルゴリズム定量的に評価する方法
アルゴリズムが複雑なのは、問題が難しいからだ

COLUMN あなたなら、どんなふうに説明しますか?
IT企業に勤務する息子が、母親に計算量とlogを説明する

お話その7 プログラムでパズルを解く
アルゴリズムを考えるためのネタがある
●パズルが魔法のように解ける再帰
●わがままな女王様たち
●ギャンブルで円周率が求まる

お話その8 機械に言葉を解釈させる
●「○○とは、△△である」で言語が定義できる
プログラミング言語の文法を定義するBNF記法
形式言語を解釈する機械
●架空の機械がコンピュータの原形
●状態の変化を繰り返して入力を受理する
プログラミング言語の通訳と翻訳家

お話その9 スイッチで計算を行う
●真と偽だけを対象とした不思議な演算
●コンピュータは多数のスイッチからできている
●論理演算を組み合わせれば四則演算ができる
●マスク処理といっても風邪ではありません

COLUMN あなたなら、どんなふうに説明しますか?
キザな軟派野郎が、インテリ女子大生に論理演算を教わる

お話その10 情報を表形式で整理する
●現在の主流はリレーショナルデータベース
●「何を知りたいか?」で始まるデータベース設計
●列と列の悪い関係を断ち切ろう
●第一正規形から第三正規形まで
●ボイス・コッド正規形
●第四正規形と第五正規形

お話その11 情報伝達の仕組みを階層的に整理する
OSI基本参照モデルで情報伝達の仕組みがわかる
●「オープンセットね、デーブ」と覚えてください
OSI基本参照モデルの階層探検ツアー
OSI基本参照モデルでインターネットもわかる
●階層が違えばプロトコルも識別番号も異なる
●階層をたどるごと管理情報が付加される

COLUMN あなたなら、どんなふうに説明しますか?
居酒屋で上司が部下に、OSI基本参照モデルを説明する

お話その12 コンピュータで社会貢献した人たち
●コンピュータ界のノーベル賞
●ハードウエア主導からソフトウエア主導へ
プログラミング言語の開発者たち
人工知能への応用
●便利なアルゴリズムの考案者たち
●2つのデータベースモデルの考案者たち
●現在のOSの基礎となったアイデア
●パソコンの発明者たち

おわりに
索引


雑感

まとめて読んだ。

どれも非常にわかりやすい。著者が大好きな事について「これも知ってよ! 楽しいよ!」ってノリノリで話してる感じが良い。

ただ、ただね。

コラムの内容ははっきり言ってかなり寒い……。

オタが一般人に迷惑をかけているようにしか読めません。
ウザいオタの典型です。

すいません……。