実務経験3年目になって今さら『コンピュータはなぜ動くのか』を読んだ

はじめに

最近、『世界一流エンジニアの思考法』を読みました。

blog.kanezoh.com

上記の記事中にも書きましたが、IT技術というものに対する根本的知識の欠落を感じたので、恐らく一番の基礎とも言えるコンピュータの動き方についてまで立ち返ることにしました。そこで開いたのが『コンピュータはなぜ動くのか』です。もうタイトルからして最適ですね。

前書きに以下の記述がありました。

多くのコンピュータ技術があるように思われる現在では、一つひとつの技術に深く取り組む余裕がほとんどないからです。ちょっとマニュアルを見て技術の表面的な使い方だけを学び、「なんとなく目的を達成している」というのが現状のようです、それだけでもそれなりに学習時間がかかります。

まさにここが自分が本書を開いた目的がこれです。最後の「それだけでもそれなりに学習時間がかかる」というのもまさにそう。業務の場で本質的理解をするには時間が足りないため、こういう知識はあらかじめ仕入れておく必要があります。私のような情報系の専門教育を受けていない文系は特にそう。ちなみに、プログラミングの勉強を始めた大学生の時に図書館で借りて読んだ記憶はあるのですが、「はえ〜」と思ってそっ閉じした記憶があります。

本書はハードウェアからアセンブリ→高級言語→その他応用技術(アルゴリズム,データ構造,DBなど)というように、下から上に説明が展開されていきます。その中でも自分が特に得たかったのはハードウェアやアセンブリといった低水準の領域なので、そこを中心に読み込みました。後半にはオブジェクト試行やXMLなどについての説明があり、これはなんというか、この本が出版された当時の雰囲気を知ることができて面白かったです。現代に初版が発行されていたらXMLの章はJSONの章になるでしょうし。
話題が逸れました。各章ごとに気になった箇所を書いていきます。

各章の内容

第1章 コンピュータの3大原則とは

  1. コンピュータは、入力・演算・出力を行う機会である
  2. プログラムは命令とデータの集合体である
  3. コンピュータの都合は、人間の感覚と異なる場合がある

まあ当たり前と言えば当たり前かもしれませんが、改めて原則と言われるとなるほどという感じ。 筆者のエピソードで、「昔のカナ入力で自分の名前を入力しようとしたら、半角カナしか入力できず、濁点が一文字なことを知らなくて矢澤がヤサワになった」というのを紹介していました。コンピュータ黎明期を過ごした人は、こういう機械特有の事情にぶち当たる経験があるから強いのだろうなと、ちょっと羨ましく思えました。

第2章 コンピュータを作ってみよう

回路図レベルでコンピュータの内部がどのように構成されているかを解説してくれる章です。ハード的知識が全くない私には嬉しい内容でした。

コンピュータの基本的な構成要素

  • CPU
  • メモリ
  • I/O
  • クロックジェネレーター

コンピュータの動作について

  • CPUはクロック信号を受けて動作しており、3GHzなら一秒間に30億回の信号が送られる。この数値が大きいほどCPUの動作が早い=性能が高い。
  • CPUにはレジスタと呼ばれる箱があり、これを通して演算などを行っている。
  • CPUはメモリとデータ線、アドレス線が接続されている。データ線ではやりとりするデータの値を、アドレス線ではデータの書き出し、読み出しするアドレスを指定している。

どれも基本的なことでしょうし、改めて書くのが恥ずかしいレベルですね。基本情報の範囲では学ぶんでしょうが、私は取ったとしても資格のためだけに勉強して一瞬で忘れそうな気がしています。

第3章 一度は体験してほしいアセンブラ

アセンブラと、その実行時のレジスタ、メモリの状態を確認できるソフトを使って、プログラム実行時のCPU・メモリ間のやり取りを感じることができる章です。ただし、紹介されてるソフトはWindows専用でMacでは実際に試せなかったのが残念でした。

以降の章ではデータ構造、アルゴリズム、データベース、ネットワークなど自分にとっては既知の事項が多かったので詳細は省きます。一応全部目は通しましたが、ネットワーク、暗号化の章は特に説明が分かりやすかったです。

まとめ

自分が特に知りたかったハード的な内容については回路図を用いて説明されており、タイトル通りコンピュータの動作が具体的にイメージできました。それ以降の章でも現在のソフトウェア開発において必須の概念の基礎について説明がなされていて、良い復習になりました。初心者が一発目に読む本としては内容が難しい気もしますが、ある程度好きにコード書いてプログラミングを楽しめるようになった一年目くらいに読んでおくと良さそうだと思います。

この本と同時に同じシリーズの「プログラムはなぜ動くのか」も買いました。この章ではハード的な説明に紙面の多くを割いていましたが、そちらではソフト的な動作がより深ぼられているので、次はそっちを読もうと思います。

それでは〜。