『プログラムはなぜ動くのか』感想
読み始めたモチベーション
プログラミングはしてきたがその基礎部分が弱いと感じたため。自分の取り扱うものがどういう仕組で動くのかや、基礎的な知識を体系的に学びなおしたいと思った。特にメモリなどはフロントエンドでコードを書いていると意識することが少ないため理解が曖昧な部分が多かった。 メモリの仕組みや2進数、どんな環境で自分の書いたコードが実行されているのかを体系的に説明できるようにしたい。
この本の対象になりそうな読者
- プログラムを書いてはいるがコンピュータの中身でどんなことがされているのかを知らない人
- プログラミング初学者
- 体系的なコンピュータの仕組みが知りたい人
全体的な感想
各章のはじめに導入としてウォーミングアップがあり、その内容に答えられるかどうかで自分の理解度がわかるのがとてもいいなとおもった。まずはウオーミングアップをやってみてわからなかった部分や間違いをメモしておいて本章をよみ、本章を読み終わったときにもう一度ウオーミングアップをやってみると言うのを繰り返して読んでいった。 各章は図解もありつつそこまでボリュームがあるわけではないので読み進めやすい。読み進めていて理解が追いつかないときには理解ができていない箇所をググって動画を探して理解すると読み進めやすくなった。
おそらくこの内容は大学や専門学校、高専では入学後すぐにやるような内容なのだろう。恥ずかしながらこういった基礎を避けてエンジニアとして働き始めてしまった私は聞いたことがあるが説明ができない、間違った理解をしているものが多かった。 フロントエンドの実装を多く取り扱うとこのあたりのことを知らないくてもある程度は仕事になってしまうが、知っているのと知らないのでは大違いだ。 どういう仕組で自分の書いたコードが実行されていくのかがわからないというのはエラーの原因やドツボにハマったときに抜け出せるかという点で大きな違いがある。 また、ライブラリやより専門的な内容に触れたいと思ったときに致命的になる。
一度立ち止まってこういう知識を整理し、きちんと学ぶ機会が設けられてよかったと感じた。 学びが多かったのと同じくらい危機感やわからないといままを放置する怖さが勝った。
勉強になった、印象に残った箇所
全章が勉強になったが印象に残ったのはCPUの章だ。 まず自分は実行の流れを説明できなかった。プログラムが機械語にコンパイルするところは説明できたが、メモリに保管しCPUが実行する流れがわかっていなかった。 また機械語へのコンパイルもインタプリタ型言語とコンパイル型言語の説明がきちんとできていなかった。
JavaやScala、TSを扱ってきたがJavaやScalaはコンパイル型言語であることくらいしかわかっておらず、その実行がどのようにされるかを考えてこなかった浅さを思い知った。 こういう基本的なことがおざなりであることが足元を掬われる原因になるので今後も勉強を続けていこうと思った。
OSの章も勉強になったことが多かった。 自分がOSが提供してくれることがまず説明できていない時点で結構やばいなと思った。ハードウェアを動かすのはOSなのでOSに対してアプリケーションを作っている意識を持つことが重要なんだろうなと思った。 思い通りの動きができないときにはOSへの理解が足りていないのかも?と疑う視点を手に入れることができた。今までは考えたことがなかった視点だ。