現代においてコンピューターは欠かせない存在です。
あらゆるものに搭載されていると言っても過言ではありません。
パソコンやスマホ、ゲーム機はもちろん、テレビやオーディオ機器やカメラ、自動車や炊飯器や掃除機、エアコン、電動髭剃りなんかにも入っています。
そして、そのコンピューターを動かすのはプログラムです。
コンピューターはプログラムが無ければ何もできません。
このコンピューターのプログラムってどうやって動いているんだろうと疑問に思うことはありませんか?
私は一応、大学で情報工学を学びましたが、そういう一番基本的なことは教えてもらえませんでした。(それくらい自分で勉強しろってことだった?実はやってたけど私が覚えていないだけ?)
私がプログラムが動く仕組みを理解したのは、社会人になってしばらく経ってからでした。
ソフトウェア開発を担当してプログラムを書いていたものの、根本を理解できていないというもどかしさをずっと感じていました。
そのときに手に取ったのが、矢沢久雄さんの「プログラムはなぜ動くのか」です。

プログラムはなぜ動くのか 第2版 知っておきたいプログラムの基礎知識
- 作者: 矢沢久雄
- 出版社/メーカー: 日経ソフトウエア
- 発売日: 2007/04
- メディア: 単行本(ソフトカバー)
- 購入: 45人 クリック: 646回
- この商品を含むブログ (74件) を見る
正直、私はそんなに文章の理解度が高い方ではないと思っていますが、この本はめちゃくちゃ噛み砕いて書いてくれているので、分かりやすいです。順を追って読んでいけば必ず理解できます。
私が特に役立ったのは、プログラムがコンピューターで実行されるときのCPUやメモリの使い方についての説明です。
この説明のおかげで、実行中のプログラムのメモリの内容や、異常終了したプログラムのダンプ(プログラムの使っていたメモリの内容をファイルに書き出したもの)を解析する素養を身に付けられたと思います。
(少し仕組みを知っている方向けに補足すると、自動変数やスタックがどのようにメモリに配置されるかが分かるので、不具合発生時の関数の引数や自動変数の値などを調べるのに役立ちます。)
プログラムの使っているメモリの内容が分かるようになると、プログラムに不具合があった場合などに、その原因を突き止めるのが楽になります。
プログラムはメモリの内容に従って動いているため、メモリを見れば、ここがおかしい!というのが大体分かるからです。
この技術を身に付けていたことで、何度も仕事上のピンチを乗り越えられました!
と嬉しげに書きましたが、ピンチ自体は二度と味わいたくないものばかりでした。。
ちなみに、「プログラムはなぜ動くか」には、一般的な話が書かれていますので、特定のコンピューターの仕組みを知るには、個別の解説書を読む必要があります。
今のパソコンで最も多く使われているIntelやAMDのCPUはx86アーキテクチャと言われており、WindowsやLinuxやMacは基本これらのCPUで動作します。
このx86アーキテクチャで動くプログラムの動きを理解するのに役立つ本として、うさぴょんさんの「デバッガによるx86プログラム解析入門」をおすすめします。
いきなりディープな本になってしまいますが、デバッガ※とは何ぞやというところから始まり、自分でデバッグを作る方法まで解説されているので、プログラムの仕組みを深く知りたいという方にはうってつけだと思います。
※デバッガとはバグ(プログラムの不具合)の原因を見つけるためのプログラムで、実行中プログラムのメモリ内容や、ダンプの内容を詳細に解析することができます。
すぐに全てを理解するのは難しいかもしれません。
でも、概要だけでも理解できれば、きっと役に立つはずです。
特にC言語やC++などのネイティブ言語(CPUが唯一理解できる機械語に直接翻訳される言語)で開発される方には有効な知識だと思います。(Javaでもネイティブ部分に問題がある場合は役に立つかもしれません。)
最近、この手の技術に詳しい方が減ってきていると感じますので、知っていると、案外重宝されるかもしれません。(私も少しは周りの役に立っていると思います(多分))