プログラムはなぜ動くのかを読んだ
要約などは他に記事がたくさん存在するのでそちらにおまかせする。自分の感想だけ書いておく。
読んだ本
『プログラムはなぜ動くのか 第 3 版 知っておきたいプログラミングの基礎知識』
読むと決めた背景
- 低レイヤー知識の不足を痛感したので、知識を習得したかった。
- 今年の前半はクラウドインフラの運用保守や構築を担当する機会が多かった。業務を進めていく中で、低レイヤーと言われる部分に対する理解が不足していることを痛感した。
- 特に普段自分が書くコードが、コンピューターにどのように処理され、プログラムとして動作する状態になるのか、ちゃんと理解できていなかったことは、いろんな場面で弱点として露呈した。
- そういう背景からこの本を読むこととした。
読んでみての感想
- 目標にしていたプログラムが処理されて動作するまでの過程を知ることができた。
- 言語によって差はありそうだけど、C 言語だと大まかにはこんな感じなのかな。
- プログラムを書く
- プログラムをコンパイルをしてオブジェクトコードを生成する
- オブジェクトコードをリンクさせて exe ファイルを生成する
- exe ファイルを実行する
- exe ファイル内のプログラムがメモリにロードされる
- CPU がメモリにロードされたプログラムを読み込み演算する
- これまでこういうことを意識してコードを書いてこなかったのが、如何にまずいことだったかを痛感した。
- 言語によって差はありそうだけど、C 言語だと大まかにはこんな感じなのかな。
- メモリの説明が印象的だった。
- この本を通じて一番印象的だったのがメモリの説明だ。自分がメモリについて曖昧な理解をしていた部分が多くあったせいか、曖昧な部分の解像度が上がる瞬間が多く、印象に残ったのだと思う。
- 特にスタック、ヒープ、ポインタ、あるいは配列やリスト、二分探索木などは、メモリの説明を読む中で理解を深めることができた。
- 業務中に見かける機会があったが上辺だけの理解に留まっていた swap やメモリリークという言葉の解像度が上がった。
- C 言語やアセンブリ言語に触れることができたので良い機会だった。
- 特にアセンブリ言語で書かれた if 文や loop 文、あるいは関数や変数などを見た時に、「自分が書いたコードはこんな仕組みで動かされていたのか」ということを知ることができ、また理解ができて嬉しくなった。しかしそれと同時に、「こういうことを知らないまま、普段コードを書いていたのか自分は」と感じやや自己嫌悪に陥った。
まとめ
他にもたくさんのことを学んだが、特に印象に残っていることをここでは挙げた。
忘れかけた頃にまた読み返したいと思う本だった。