今回は「コンピュータはなぜ動くのか」の書評を行っていきます。
いろんなところでエンジニアにお勧めの本として挙がっていたので、一度読んでみたいと思っていたのです。
各章で気になったところをコメントしていきます。
■第1章 コンピュータの3大原則とは
コンピュータやプログラムの根本について話をしています。
数学でいうところのy=f(x)っていまだにイメージが湧かないのですが、f(x)の部分が関数だっていわれるとわかりやすいですね。
多くのところはこんにちはマイコンで説明していたことと同じ。
そう考えると30年前にそう言った概念に触れているというアドバンテージはおおきいなあと、あらためて思いました。
■第2章 コンピュータを作ってみよう
回路図とかコンピュータの仕組みについての章。
お題に挙がっているZ80はゲームボーイのCPU。
いまだにパチンコだと使っているとかいないとか。
回路図はアセンブラでプログラムを組んでいた時には、何度か読めた方が良いとは言われていました。
でも教えてくれる人も適当な書籍も無かったのでやらないままでしたね。
※この本は私がアセンブラやっていた頃には出版されていません。
この本に沿って回路図をつないでみたらかなり感覚が掴めましたね。
あとDMAがどういう仕組みなのかもわかりました。アセンブラが分かってても、この辺りはわかっていないものなのです。
■第3章 一度は体験してほしいハンド・アセンブル
アセンブラについての説明。
アセンブラ懐かしいな。
私がマシン語に触れたのは「マイコンベーシックマガジン」(略ベーマガ)。
ベーマガは基本ベーシックのプログラムが掲載されていましたが、面白いゲームはマシン語を使用してることが多かったのです。
何十年も経ってやっと実現方法がわかったわけですね!
※まあアセンブラ組んでた時にはだいたいわかっていました。ハンドアセンブルせずにコンパイルしていましたが。数値を見てどの命令かくらいはわかっていました。
アセンブラ一つ習得していれば、他のCPUのニーモニックも予想がつくことが多いです。
レジスタの数は違ってもだいたい理解できるし。C言語で作成していて、おかしい原因がわからない時でもアセンブラに変換された物を見るとわかることがあります。
※大概はC言語の仕様を理解していなくて起きています。
あとテストの際にエビデンス作る時にも役に立つことが。コンパイラで最適化されると、記載しているプログラム通りに動作していないことがあります。
※短いループの足し算はそのまま繰り返し加算されていたり。
その際に正しい動作をしているかどうかのエビデンスを作るのにはアセンブラが分かってないとちゃんとできないことがあるのです。
でもまあ実際にハンドアセンブルしてたらミスりますけどね。
■第4章 川の流れのようにプログラムは流れる
プログラム、というかコーディングの話。
一気に簡単なわかりやすい話になりましたね。かなり敷居が高い導入で、くじける人が多いと思うのですが。
構成をもう少し考えても良いかも。わかっている人はわからない人のことはわからないのか。
後半でいきなり割り込みの話が入ってくるのも唐突感があるなあ。
■第5章 アルゴリズムと仲良くなる7つのポイント
アルゴリズムの説明。
うーん、これも誰向けなんだろうという難易度。この章は完全に初心者向け。
基本情報のアルゴリズム勉強の前に読むと頭に入りやすいかも。
実際に仕事でプログラムを使うのであれば、アルゴリズムは知っているか知らないかが大きい。
数多く知っているとこれはありそうだとか、何から調べるとあるかないかがわかりやすいとかが変わってきます。
そのために使わないアルゴリズムでも知っておいた方が良いですね。
でもまあここまで番兵にページをさかんでもとは思う。よっぽど感心したんですねえ。
■第6章 データ構造と仲良くなる7つのポイント
データ構造を実際のプログラムを使って説明。
出版された2003年なら良い内容なのでしょう。
私はC言語がわかってるので、普通に理解できている内容でした。逆に知らない人にはわかりにくいよなあ。
今となってはそのためにC言語を勉強するのもなんだし。書きてある内容は良いのですが、知っている人にはあんまり意味がなくて、知らない人にはどう理解するのが良いか提案しづらい内容ですね。
まあ普通にアルゴリズムの該当する説明を読めば良いか。
■第7章 オブジェクト指向プログラミングを語れるようになろう
オブジェクト指向の説明。
非プログラマがオブジェクト思考を理解するのには良い文章なのかも。でも今となってはもっとわかりやすい説明もたくさんあるだろうからなあ。
構造化にしてもオジェクト思考にしてもデザインパターンにしても、どういうことに気を付けてプログラムを組むかという話です。
■第8章 作ればわかるデータベース
データベースの説明をしているのですが、これも使ってるソフトウェアが古いのであまり今時の参考にならないかも。
わかりにくわけではないのだけど、いかんせん古いねー。
■第9章 簡単な実験7つでTCP/IPネットワークを理解する
ネットワークに関しての説明。
説明はわかりやすく、応用情報などの説明よりも親切。
ただ間違っていないかは保証できない。
■第10章 データを暗号化してみよう
主に通信時の暗号化に関する話ですが、流石に説明が大雑把過ぎる!
大まかな概念を知りたいのであれば良いかもしれないが、この知識を最初に持って試験勉強したりはかえって邪魔になるかと。
■第11章 そもそもXMLって何だっけ
XMLに関しての説明。
XMLのフォーマットには明るくなかったのでためになった。大事なのはXMLのフォーマットの仕組みを知ることではないです。
いろんなフォーマットを調べて理解することができると言うことと、その手順の一端を知ることが有意義です。
ゲームでもバイナリデータを開いて特定のフォーマットを調べて利用するということがあります。
やったことがない人はパニックになるのですが、こう言う知識がある人はヒントが少なくてもたどり着けたりします。
■第12章 SEはコンピュータ・システム構築の現場監督
コンピュータはなぜ動くのか、と言う書籍になぜこの章が入ってくるのかが謎。
確かにこの本の購買層には興味のありそうな内容だとは思うけれども。何の本なのかわからなくなるけど、まあここまでも節操がなかったけど。
■総評
最後まで読んだ感想を書くと、基本情報を勉強する前の導入で読むのが良い本なのかなとおもいます。
でもまあそうだとすると2、3章はむずかしすぎるかも。
2、3章は他の本で書いてない、エンジニアであれば理解してほしいところ。
ある程度知識があるエンジニアはなら2、3章を読むだけでいいかも。
それだけのために購入する価値はあります。
1~3章とそれ以外は別の本だと思った方が良いです。
基本情報受けるつもりはないけど大まかな知識が欲しいなら4章以降を読むがいいですかね。ゲームプランナーとかが読むのに良いかも。
割といろんなところで勧められる書籍ではあるのだけど、いかんせん古いよねー。
再構築した本を出して欲しいとこです。