プログラムはなぜ動くのか ― 知っておきたいプログラミングの基礎知識をやっと読んだ

数年前に買ってちらっと見て本棚の片隅に置いてあったのをやっと読んだ。

まだまだ理解できない部分もあったが、今までこんなことも知らずにプログラマとして働いていた自分恐ろしい((((;゚Д゚))))

読んでよかった。第2版を電子書籍で買ってた事を思い出したよ・・・

第1章 プログラマにとってCPUとはなにか

  • プログラム→コンピュータに実行させる処理の順番を示すもの→命令とデータ
  • プログラムはメイン・メモリに
  • 命令やデータはメモリのアドレスに格納される
  • CPUがプログラムを実行
  • CPU→制御装置+演算装置+クロック信号+レジスタ
  • レジスタ→アキュムレータ・インデックスレジスタ・フラグレジスタ・プログラムカウンタ・汎用レジスタ
  • アセンブリ!!!

第2章 データを2進数でイメージしよう

  • ICのピンは1本で2つの状態を表す
  • 32ビット・マイクロプロセッサは情報を入出力するためのピンを32本持っている!(衝撃
  • 一度に32桁(32ビット=4バイト)の2進数の情報を処理できる!(衝撃
  • シフト演算
  • 補数(よくわかってない
  • 論理右シフト、算術右シフト
  • 論理演算

第3章 コンピュータが少数計算を間違える理由

  • 0.1を100回加えても100にならない(えっ
  • 小数点数を2進数で表すには、整数と同様に重みを掛けて結果を加える(ついていけない
  • 浮動小数点数(もうダメだ
  • 正規表現とイクセス表現(もう許してください

この章は全然わからなかった・・

第4章 四角いメモリーを丸く使う

  • メモリーの実態はICと呼ばれる電子部品
  • アドレスを指定してデータを読み書き
  • アドレスはデータを格納する場所を示すもの
  • メモリーの論理的なイメージはビルディング
  • ポインタ→データの値そのものではなく、データが格納されているメモリーのアドレスを持つ変数のこと。
  • 配列
  • スタック→LIFO(Last In First Out)
  • Push, Pop
  • キュー→FIFO(First In First Out)
  • Put, Get
  • リングバッファ
  • リスト要素
  • 2分探索木(聞いたことある

第5章 メモリーとディスクの親密な関係

  • プログラムは記憶装置に格納されていて順次読み出されて実行される
  • フォン・ノイマン
  • パソコンにおける記憶装置→メモリー、ディスク
  • ディスクに記憶されたプログラムがメモリーにロードされてから実行される
  • ディスクアクセスを高速化→ディスクキャッシュ(メイン・メモリー内の領域)
  • ディスクをメモリの一部として使う仮想記憶→ページング方式、セグメント方式
  • ディスクの物理構造
  • 一般的なパソコンではセクター方式

うーん。

第6章 自分でデータを圧縮してみよう

  • ファイルにはバイト単位で記録
  • ランレングス法(?
  • ハフマン法(???

ここもよく理解できず

第7章 プログラムはどんな環境で動くのか

  • 動作環境 = OS + ハードウエア
  • AT互換機とかx86とか

うーん?

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

10年前の新人研修でC言語の上っ面をかすっただけなので全く理解できず。。。

インタプリタの実行イメージがわからん。

実行時にネイティブコードに逐次変換したネイティブコードがメモリにロードされてから実行されるのかな??

第9章 OSとアプリケーションの関係

流し読み

第10章 アセンブリ言語からプログラムの本当の姿を知る

アセンブリ言語面白かったから、もう少し勉強する(予定

第11章 ハードウエアを制御する方法

  • ハードウエアとの入出力を支えるのはIN命令とOUT命令
  • 周辺装置の割り込み
  • DMA

流し読み

第12章 コンピュータに「考え」させるためには

  • 人間の考え方をプログラムで表す(YES!
  • 人間の癖をプログラムで表す(ほぅ
  • 記憶を生かすことで、より人間らしい判断を行う(なるほど

第2版買っていたのでそっちも読みます。

コンピュータともう少し仲良くなったら今からでも成長できるかな!!!