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

自分にとって、新境地を開拓していくときにその一番基になるところから攻略していきたいという願望は、殆どムダしか生み出さない。なぜなら、結局自分にはそれを継続していくだけの動機も能力も備わっていないからだ。(少なくとも自分のような)人間は、その必要に迫られた状況に陥ることでのみ自主的に行動を起こすようだ。悲しいけど。

そんなことは百も承知だけど、結局は無駄に終わることはわかっているけど、「今度こそは!」って期待してる自分がいるんだよな。


長い前置きはさておいて、ちょっとはプログラミングにも触れておこうと思い立った。自分は今までに、c++をちょっといじった事があるのと、fortranソースコードを見た事があるって程度の人間です。
この計画を成功させることにおいて一番のネックは、「目標をどこに設定するか」がわからないこと。目的は「ある程度プログラミングに慣れること」ですが、実際、何をさせる事が出来るのかもわからず闇雲にいじってるだけじゃ、モチベーションが維持出来ずに自然消滅するのは必至だし。

そんな中、生協でこの本を見つけてしまった。

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

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

悪い癖だとは思いつつ、しかし手を付ける分野を一から全て把握したいと願うのは自分にも物理屋の血が少しは流れている証拠であると(実力は伴わないが)自分を慰めながら、レジへ向かった今日この頃。まぁ、とりあえず第一段階としてこれ読めばいいか。なんていう、数々の自然消滅を辿ったミッション(@長期休み)と全く同じ具体性の無い動機と、ある1冊の本に沿って進めると言う安易なプログラム。ダメだったらまた他の事をするさ。


第1章

CPU(プロセッサともいうらしい)が大事。

  • プログラム→コンパイル(CPUが解釈出来る言語(マシン語)に変換)→実行→メモリー上に、コンパイルされたファイルがコピーされる→CPUがプログラムを解釈、実行
  • CPUはレジスタ(処理対象となる命令、データを格納する領域)の集合体のイメージ
  • CPUにはクロックという、CPUが動作するタイミングを決める信号を発生する機能もあって、これがCPUの動作速度を決めている。ちなみに、今使ってるこれ(iBook G4)は1.33GHz。意外に速そう、けど実際は遅い。
  • レジスタには種類があってそれぞれ格納する物が違う。演算対象のデータ、次の命令が入ったメモリーのアドレス、命令そのもの、など。
  • プログラムの流れは、CPUがレジスタの中にある[命令の入ったメモリーのアドレス]からその命令を読み出して実行、の繰り返しになっている。
  • CPUが実行出来るマシン語は主に4種くらい。
    • レジスタやメモリーの間でデータを読み書き
    • 演算
    • 条件分岐、繰り返しなど
    • 関数呼び出し、元に戻る(CPUが、順番通りにレジスタから命令を読み出すようにする為に必要)
  • 高水準言語→アセンブリ言語(マシン語の命令に1対1で英語の名前をつけたやつ)→マシン語。の順で、人間→CPU、となっております。

CPU、レジスタ、メモリー、アドレス等の用語の説明。これだけの知識でも、パソの購入時、ある程度役に立ちそう。