こんにちは。
プログラムはなぜ動くのか 第2版を読み終わったので内容を忘れないように学んだことを要約したメモを載せます。
このエントリは完全な個人のメモです。
自分のお勉強のためにこの本を読んだので、内容を覚えるためにQuestioning(クエスチョニング)を行います。
この本の内容の要約はこちら。
早速やっていきます。
1.この本の問題意識は何か。
高水準言語を書いているだけでは意識することがないメモリやCPUの働きを知ることができない。
プログラムが実際にどのように動くのかを知ることでプログラマとして1歩成長することができる。
2.この本はどのように始まり、どのように終わったか。
まずはCPUやメモリの話から入り、ネイティブコードとアセンブリ言語の概要説明、OSの役割、ハードウェア制御などを順に学んでいく構成。
たまに脱線してファイル圧縮の話とかが挟まる。
3.自分はこの本から何を学んだか。
(高水準言語で書いた)プログラムがどのように動作するか。
プログラム→コンパイル→ネイティブコードをメモリにロード→CPUが実行
4.本のキーポイント、コンセプトは何か。
プログラミングしているだけでは意識しないプログラムの動作原理を知る。
5.その本のチャートや図、写真、グラフ、用語集から何が得られたか。
メモリアドレスのイメージやCPUの構成要素などは図があってわかりやすかった。
6.この本が他の本と似ているところ、違うところは何か。
メモリとかについては他の本でも似た表現を多々見かける。
ハードウェア制御、OSの役割など広い範囲のことを扱っているのが異なるところ。
特にファイル圧縮の話は特異。
7.この本を読んでどんな感覚になったか。
知っていることも多いけど知らないことも多かった。
概ね楽しく読めた。
8.この本は(自分にとって)なぜ重要なのか。
エンジニアとして、プログラマとして少しでもいいから成長に繋がると考えて読んだ。
知識は増えたと思う。
9.作者は読者にどう考えてほしいと思っているのか。
プログラミング言語だけでなく、実際のネイティブコードはどうなっているのか、どう動作しているのかを知ってほしい。
10.この本のタイトルは適切か。
適切。
強いて言えば「プログラムはなぜ動くのか」ではなく「プログラムはどう動くのか」の方が良いかも。
11.専門用語をピックアップして、その単語に対して作者はどう言っているか。
未知の専門用語はそんなに多くなかった気がする。
Intel系のCPUをx86系というのは知らなかった。
APIやOSの定義については深く考えたことがなかったので良かった。
12.章を一つ選んで、要約する。
要約記事を書いたので、そちらを参照。
13.前書きは本の理解に役に立ったか。
この本の目的や、書いてある内容がなぜ重要なのかをさらっと説明しているので役に立った。
14.作者は本を面白くするためにどんな工夫をしているか。
例え話と図が多かった。
途中コラムを挟んで緩急をつけていた。
15.作者は読者を引き込むためにどんなトピックを展開しているか。
章の最初で、その章で説明する内容の簡単な問題を出している。
いかも意外とスパっと答えられない。
16.作者の主張のどこに賛成できるか。
エンジニアとして成長するためには、物事の本質を理解し知る必要がある。
この本はそれを助けるためのもの。
17.その本の特徴的な点は何か。
プログラムの書き方でなく、プログラムの動作原理やプログラマが意識しないレイヤの話がメイン。
18.本の終わり方はよかったか。
正直12章は蛇足感がある。
ただし、プログラムにものを考えさせるには人間の思考プロセスをプログラムに起こすという考え方は大事。
19.テーマを説明するために作者はどういう例を出しているか。
メモリのアドレスをビルのフロアに例えているのが印象的。
20.この本で最も大事な1文はどれか。
「何事にも言えることですが、ものごとの本質を知ることは、とても大切なことです。」
前書きから引用。
プログラムの動作原理を知るためにこの本を読んだため。
21.本の内容を説明するために作者はどんな特別な言葉やフレーズを使っているか。
ネイティブコード。
特別な言葉っていうわけではないが、やはりプログラムを書くときにあまり意識しないため。
この本では頻出単語。
22.本を振り返って一番自分の心に刺さったのはどこか。
10章の内容。
機械語の命令にどんなものがあるのか。
我々が普段書いているプログラムも最終的には機械語になるので、機械語の命令と1対1対応しているアセンブリ言語の理解は今後役に立ちそう。
大体こんな感じです。
これやるのめっちゃ時間かかります。
途中、めっちゃ飽きた。
でもいい振り返りにはなったと思います。
おわり。