【感想・ネタバレ】プログラムはなぜ動くのか 第2版 知っておきたいプログラミングの基礎知識のレビュー

ユーザーレビュー

購入済み

良本

タク 2020年03月05日

今まで見た本の中でもかなりわかりやすかった。
章の始まりがクイズからというのもあまりなくて、珍しいなと思った。
こういう本は初学者が読むものだと思うので、難しい言葉を使わずに説明してくれているこの本はとても良いと思う。

このレビューは参考になりましたか?
ネタバレ

Posted by ブクログ 2019年11月10日

コンピュータサイエンスの基礎として非常におすすめ 2進数故の計算誤差やアセンブリ言語の読み方、コンパイラの概念、メモリ・スタック・レジスタの使い分けなど低レイヤーのことが詳しく書かれている
C言語を前提に書かれているのでCでHello Worldや四則演算程度は書けるようになってから読み進めるといい...続きを読むかも アセンブリ言語の知識はほとんどいらない
ITに携わるならほぼ必読といった印象を受けた
特に、レジスタの種類やメモリの読み込みの挙動、APがHWを動かすためにどのようなものが挟まるかといった話が体系だって学べるのが良い


1章
コンピュータのハードの基礎
CPUの構造(制御装置、演算装置、クロック、レジスタの4つ)とメモリの構造(8bitにつき1アドレスで)について説明され、CPUがクロックに合わせた制御装置によってメモリからデータを読み出したり書き込んだりしてる
プログラマーはCPUの4つのうちレジスタを特に強く意識する必要がある(プログラムの対象となるため)
レジスタにもいろんな種類がある(表1-1)この種類は全て大事
CPUはプログラムの命令を1つ1つレジスタにいれ、順番に従って実行する(これは条件分岐やfor文にも適用、関数呼び出しも)比較演算用にフラグレジスタがある
そもそもCPUの命令は4通り(データ転送、演算、ジャンプ(条件分岐や繰り返し)、関数呼び出しと戻り)しかない


2章3章
コンピューターが2進数だけでどうやって機能を実現させているか
正整数は簡単だが負整数や少数はちょい難しい たとえば少数の計算は必ずしも現実と一致しないという問題も2進数故


4章
メモリについて
データ型によって確保するメモリの大きさは異なる ポインタがあると便利
配列やスタック・キューはメモリを効率的に使うためのもの
リスト型(次の要素が書かれている配列)は更新や削除が用意


5章
メモリとディスクに関して
ディスク→CPUは低速なので、ディスク→メモリ→CPUが効率的
ディスクとメモリの中間にキャッシュがある
その他効率的にメモリを使うプログラミング手法についても書かれている
ディスクの物理的構造について(セクターなど)


6章
データ圧縮について
ランレングス法(AAABB→A2B1)ってやつは場面によっては非効率な時もある
文書はだめ EXEファイルや画像に効果的
ハフマン法は登場頻度の多い値に低ビットを割り当てる ハフマン記号の作り方も簡単


7章
プログラムの動作環境(OS+HW)について
最近はアプリケーションの違いにかかわらずOSがHWを制御してくれる そのOSのAPIにあわせて作られたプログラムならどのHWでも動かせる
CPUが違うとマシン語が異なるのでその場合はコンパイラをなんとかしよう
Java仮想マシンやエミュレータを使えば別OSをあるOS上に作れる
BIOSは周辺機器やマシンの起動時制御用


8章
ソースファイル→実行ファイルまでについて
どんな言語も翻訳してしまえば同じ言語のネイティブ言語になる
コンパイラは元言語、CPU種類、OSの3つに依存
コンパイル→リンク(参照関数とかライブラリファイルも込みにする)によって実行可能(EXE)ファイルになる
EXEファイルは再配置情報、変数のグループ、関数のグループ、スタック、ヒープのメモリ領域が作られる 後ろ二つはファイル内でなくファイルロード時に確保される
メモリ上のプログラムは変数、関数、スタック、ヒープの4つの領域からなる
スタックは自動だがヒープはmallocなど明示的に確保する


9章
OSとAPについて
OSは制御プログラム、言語プロセッサ、ユーティリティなどの集合体
OSがHWを制御してくれるのでAP作成時はHWでなくOSを意識して作ればいい
OSのHW制御機能は小さな関数の集合体(システムコール)AP作成時にシステムコールはあまり使わないし、使うと移植性が下がっちゃう
ネットワークとかDBとかの機能はOSに近いけどOSではなくミドルウェア ミドルウェアはOSと違って交換が任意


10章
アセンブリ言語
アセンブリ言語の文法について書かれている 構文は基本的にオペコード+オペランド


11章
HWの制御方法
たとえばIN命令OUT命令はポート番号とレジスタ間でデータをやり取りする ポートを橋渡しにしてキーボードやディスプレイとやり取りする
割り込み要求をうけたCPUはレジスタの退避などを行う
ディスプレイの情報はVLAMに記憶し、GPUを使ってる
結局のところHW制御とは入出力命令によって周辺装置とデータのやり取りをしてるだけ


12章
ソフトな内容
乱数や条件分岐、データの蓄積を用いることでAIのようなじゃんけんプログラムが作れる

このレビューは参考になりましたか?

Posted by ブクログ 2014年09月14日

とにかくプログラミングを始めようと思っている人にはかなりいい本だと思う。局所的に難しい内容があるが、著者もそれを考慮した上でプログラミングの基礎が丁寧に書かれている。サンプルコードはC言語で書かれており、初心者の自分には理解し難い部分もあったが、C言語を理解していなくても読み進めることができる内容な...続きを読むので、臆せずに学ぶことができる。

このレビューは参考になりましたか?

Posted by ブクログ 2013年02月19日

まったく知らない人でも、「あぁ、こうやってコンピュータって動いているんだ」ということがわかる本です。

あと、個人的に目からうろこだったのが、「C言語のポインタ」への理解です。

この本を読んでいるときにすとんと落ちてきました。

これまでのプログラムの本を読んでいてわからなくて、この本を読んでな...続きを読むんでわかったのかを考察してみると、一つのポイントがありました。

この本が、ハードウェアの観点から書かれていること。

これまで読んできた本は、C言語の本でソフトウェア側から書かれている。
そして、プログラムその物の中途半端な知識でそれを読むから意味が分からないところが出てくる。

そして、本書はその中途半端な知識の部分をしっかりと埋めてくれる。

だから、ポインタの知識も入ってきやすい。

いやはや、もっと早い段階でこの本に出会えていたら、よかったなと思いました。

そして、長年のなぞがまさかC言語の専門書でもないこの本を読むことで理解できるとは、いやはや驚愕の事態でした。

このレビューは参考になりましたか?

Posted by ブクログ 2011年11月13日

日経ソフトウェアで10年以上前に掲載された連載記事を書籍化した良書。プログラムが動作する仕組みを実にわかりやすく説明している。いわゆる『プログラミング解説本』ではなく、『メモリーにロードされたマシン語のプログラムがCPUによって解釈・実行され、それによってコンピュータというシステム全体の制御やデータ...続きを読むの演算を行う』という観点で解説が進んでいく。コンピュータはそこそこ詳しいが、動作原理を他人にすらすら説明するのがちょっと怪しい人向けに◎。

このレビューは参考になりましたか?

Posted by ブクログ 2011年09月26日

面白かった。「コンピュータはなぜ動くのか」より面白い。
プログラム書く人なら基本情報の勉強する前にこの本を読むべきだと思う。

このレビューは参考になりましたか?

Posted by ブクログ 2020年05月10日

第二版とはいえ情報は結構古いが、CSとか全くやっていない私には色々とためになることがあ多かった。
特に前半の、符号、補数、基数とか小数の扱い、ICメモリの仕組みとかは知らなかったので面白かった。
後半は意外と知っていることが多かった。

このレビューは参考になりましたか?

Posted by ブクログ 2020年01月30日

パソコンの仕組みが知りたい場合、最初に読むと良い
ただ実機確認ができないので、1部イメージしにくいところがあるかもしれない
そういった時は他の本で補完すると良い

メモリー管理について、少し説明が浅いような気もする
(メモリ管理は、というかプログラムをメモリに展開して、レジスターに展開するときにどう...続きを読む動くかって言うのをやったほうがいいんじゃないかなって思った)
しかし初めてパソコンの仕組みを知りたいって言う人に対しては、このレベルで良いと思う

このレビューは参考になりましたか?

Posted by ブクログ 2019年08月27日

プログラムの動き(特にデータの確保、参照方法)とプログラムの作り(ソースコードから実行可能ファイルまで)が記載されている。ITの分野で1,2年ほど働いている人におすすめ。個人的には謎めいていたファイル圧縮の仕組みが記載しており、嬉しかった。

このレビューは参考になりましたか?

Posted by ブクログ 2017年07月25日

co-edoの本棚で。 一通り目を通したが、本質的な理解を得るためには、何回も読み返す必要がありそうだ。なんとなく書いていた関数や配列の概念を、メモリ上の実際の動きで解説していた章では、なにかすごいものを得た気になったが、もう既に記憶が朧気なので……読者(私)の能力のアレが出ているというか。 なんに...続きを読むせよ、3年後くらいにもう一回目を通すと、また得るものがありそう。良書だろう。

このレビューは参考になりましたか?

Posted by ブクログ 2014年12月20日

ソフトウェアとハードウェアの関係の基礎的な事を記した本。情報処理系の試験勉強の傍らに読んでいると、試験のテキストで色々書かれたハードウェア関連の単語が、ソフトウェアとどうかかわるのか理解できてよいと思う。

このレビューは参考になりましたか?

Posted by ブクログ 2013年11月16日

休み休み読んでて2週間もかかった。かなり分かりやすい!理解しきれてないけど、良書なのは間違い無さそう。買っても良いかな。

このレビューは参考になりましたか?

Posted by ブクログ 2013年09月21日

文系でも読めるくらいに分かりやすいし、理系にとってもコンピュータの基本動作を理解することの重要性を知るきっかけとなる良書。
入門の入門におすすめ。

このレビューは参考になりましたか?

Posted by ブクログ 2012年12月12日

プログラムの基礎の基礎から丁寧に説明されている。プログラマもノンプログラマも土台をつくる上で読んでおきたい本。プログラムの裏側で、大元でなにが起きているのか、なぜ動くのかを知るための本。

このレビューは参考になりましたか?

Posted by ブクログ 2012年03月31日

プログラムの基礎をわかりやすく解説しています。
これまでもコンピュータの仕組みはいろいろ勉強してきたつもりでしたが、意外と知らないことが多かったなと痛感しました。

レジスタの動きや、メモリがどの領域に確保されるのかなど、特に組み込みなど制限された状況下でのプログラムの際にはとても役立つ知識だと思い...続きを読むます。

オススメです。

このレビューは参考になりましたか?

Posted by ブクログ 2012年02月17日

基本的なレベルで、だけれど
けっこう細かいところも見せてくれているのかな、という印象

門外漢には最初の1,2章は少し読みづらかった
内容が難しいというより、言葉に慣れない印象
その先は少しペースをあげて読める

なんどか戻ってくると理解がだいぶあがりそうな気がする
ある章で詳しく説明している部分も...続きを読む、他の章でさわりをやっていたりする
そのさわりが、ポイント同士の関連を理解するのにとても重要

入門より先にいっていないけど、
先に進むためのステップとしてきっとすばらしい本なんだと思う
実生活でも耳にするような言葉を取っ掛かりとして、
大きな論点を俯瞰して説明してもらっている感じを受ける

メモリの物理的な構造から
アドレスの指定方法やデータの入出力が二進法と親和性があることだとか、
ディスクのクラスタは512バイトである証明だとか、
メモリーとディスクが相互に能力を補って動作をしているだとか、
OSの革命性だとか
プログラムをコンパイルしてマシン語に変換するとか
マシン語とアセンブリ言語の1:1の関係性を確認して、
プログラムでバグが発生する理由を把握するだとか
なんだか難しそうなことも概要はつかむことができたと思う
圧縮の理論もおもしろかったね、そんなこと気にしたこともなかった
世の中にはカシコイ人がいるもんだね

このレビューは参考になりましたか?

Posted by ブクログ 2012年01月15日

プログラミングには以前からちょこっとかじったりして興味を抱いていたけど、そもそも一体プログラムってどうやって動いてんだよ!というずっとひっかかっていた疑問に答えてくれる本でした。コンピュータは2進数の言語を理解して動くといったことは把握していたが、それを物理的なレベルまで落とし込んで説明してくれるの...続きを読むは非常に嬉しい。CPUはレジスタの集合体であるとかデータの格納、演算の仕組みとかモヤモヤしていた基本的なところが理解できた。

このレビューは参考になりましたか?
ネタバレ

Posted by ブクログ 2011年09月03日

今の自分には基礎の復習。
1年後期とか2年前期とかに読んでたら、演習がちょっと楽しくなったかも。
10章以外は読みやすかった。

このレビューは参考になりましたか?

Posted by ブクログ 2014年01月15日

内容は非常に易しくてはわかりやすい。ある程度プログラムを書ける人がプログラムの動く仕組みを改めて理解するにはちょうどいい。

このレビューは参考になりましたか?

Posted by ブクログ 2019年04月07日

実際にプログラムを書いてみないと、言っていることが良くわからない。実践しながら併読するにはいいものだとは思う。

このレビューは参考になりましたか?