May 07, 2006

プログラムはなぜ動くのか


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

キーワード:
 プログラム、メモリ、アセンブラ、CPU、ハードウェア、OS
日経ソフトウェアという雑誌で連載されていたものが書籍になったもの。プログラマが知っておくべきプログラムの動き方について書かれている。

扱う内容が、CPUからなのでハードウェアよりになっている。そこからCPUの動き、レジスタの役割、メモリとスタック、キュー、ネイティブコードができるまで、OSとアプリケーションの関係、アセンブラなどへと続く。

著者曰く、ハードウェアのメモリの番地まで詳細に理解しながらプログラムを組めることが重要とある。そこまで理解していないと、直せないバグなどがあり、またよいプログラムを作る上でもハードウェアよりの部分を理解していることは必須とある。なるほどと思った。確かにC言語では、常にメモリを意識しながらmallocで領域を確保し、使い終わったらfreeで開放するということが必要になる。しかし、Javaではポインタでメモリを詳細に指定するということがあまりないから、そういうことを意識なくても良くなる。とはいっても、やはりJavaでも効率的なプログラムを作るには著者が主張するように番地などを理解していたほうがいいんじゃないかと思う。

この本は2001年初版ということもあり、OSの具体例としてWindowsが挙げられているが、XPが出てこない。たった5年前なのに、XPが出てこないというのも違和感を覚えるというか、時の流れは早いなと思った。

サンプルプログラムで出てくる言語は、Visual BasicやC言語である。サンプルプログラム自体は簡単なものが多い。また、C言語のコンパイルからアセンブリ言語のソースコードを出力し、高級言語のCがアセンブリではどのように動いているかを示している。これは結構勉強になった。アセンブリに低級化することで、よりレジスタなどの動きがわかってよい。こんなことができるんだとも思った。

プログラムの動き方がメインなので、ケーススタディ的にどのようにプログラムを組むべきかということは書いていない。それは言語に依存すると思われるし、各言語に共通に通用する基本を知ってもらいたいからこのような内容になっているのだと思われる。

大学の講義ではハードウェアとかOS系はあまりよくわからなくて苦手意識があったけど、これを読んでしっかり理解することができた。最初は、今更この本を読む必要はないと思っていたが、結構知らない部分とか曖昧な理解になっている部分があった。しっかり理解するために、読むのに結構時間がかかった。また忘れたりするだろうから、繰り返して読む必要のある本だと思う。

読むべき人:
 ハードウェアよりの仕組みがよくわからない、C言語のポインタがいまいち理解できない、アセンブラを手軽に学びたい、Javaからプログラム言語を学び始めた、2進数でのデータ構造がわからない



トラックバックURL

コメントする

名前:
URL:
  情報を記憶: 評価:  顔   星