こんにちは、いっとくです。
PC作った人って本当すごいと思います。
PC買うにしても、メモリがどうとか、プロセッサが何だとか、CPUがうんたらかんたらといろいろ知ったような顔して吟味していますが、それらが何しているのかなんて、なんっっっっも知りませんからね。
聞いても多分、わからないことがめっちゃあるだろうし。
そんなわけわからないものを創り出した人って一旦どんな天才なんだろうと思います。
でももうできているんだからそんなことはもうやり方を知っている人に任せようではありませんか。
むしろ今回はプログラミングをするにあたって、コンピュータ自体の仕組みを知っている必要はあるのかということ。
というわけで参考資料はこちら。
まず始めに本書の説明から。
こちらの「プログラムはなぜ動くのか」は、そのタイトル通り、プログラミングを使ってコンピュータに指示を出し、それがどのように作用してプログラムとして動くのかという仕組みを丁寧に解説した本です。
内容はCPUやメモリ、入出力などのハードウェアの部分から、それを制御するOS、そして実際にコンピュータに指示を出すためのプログラミング言語がネイティブコードに変換されて実行されるという仕組みが、かなりわかりやすく書かれています。
どれくらいわかりやすいかというと池上彰さんのニュース解説喰らいわかりやすく書かれています。
それでは今回のメインテーマですが、プログラミングを学ぶにあたってコンピュータの仕組みを知っておく必要はあるのでしょうか??
結論から言うと、必要ではありません。
仕組みを知らなくてもプログラミングをしていく上で困ることはあまりありません。
特にもし初学者の方であれば、まずはプログラミング自体の知識を深めるべきだと思います。
でも、そのまずはプログラミングできるようになるというステップを経たのであれば、この内容の学習はすごく良いことなんじゃないかと思います。
例えるならゲームと同じです。
多分ゲーム強くなるために、そのゲームが裏でどういうプログラムが書かれているかとかハードウェアがどんな動きをしているか知る必要ないと思うんです。
でも変態的な強さの人まで行くと、ゲーム自体の細かい仕様とかコントローラへの入力が処理されるまでの時間とか、ソフトやハードの仕様みたいな部分を把握した上で、テクニックを磨いている人が現れますよね。
プログラミングをやっていく上で本書に書かれているような内容を学習するっていうのは、その仕様把握の部分をやっていく作業だと思います。
もしかしたら、その仕様を知っていることによって、より効率的な処理ができるハックを生み出せるかも知れません。
ただ、ハードの機能もドンドン上がっているので、そうした細かいテクニックに依存したハックによる差っていうのはどんどん縮まってくるように思えます。
だから必須ではない。
けど知っておくことで、なぜFloatが細かい少数を表現できないのかとか、プログラムを勉強するなら当たり前のように使用している制御構文がどんな動きをしているのかとか、データ型がコンピュータにとってどんな意味を持っているのかがわかるので、今までなんとなくで流していた情報をキャッチできるようになるかも知れません。
つまり、やっぱり知っておくことで、プログラミングを学習する時に入ってくる知識をより深いレベルで理解できるようになるかもしれないので、大事といえば大事なのです。
色々ぶれてますが、必須ではないけど、知っておくと良さそうというが結論ですね。
ただし、ある程度プログラミングを学習してからじゃないと、ただうんちくを暗記する作業にしかならないと思います。
ちなみに個人的には、かなり知れてよかった内容でした。
特にアセンブリの部分がとても興味深い。
PHPやRuby、Javaなどの高級言語を使ってプログラミングする際に、扱っているデータをどのレジスターにどれくらいの領域を確保して保存や演算を行うかなんてことは全く考える必要がありません。
でも裏側ではコンパイラがいい感じに変換して、そんな感じでデータを扱っているんだよって考えたら、なんかある程度プログラミングできるようになってきたと思ってたけど、それはあくまで巨人(偉大なコンパイラを作った過去のエンジニア)の肩の上に立っているだけだったんだな〜ということを痛感させられます。
少なくとも今後プログラムを使って仕事をしていく上で、このような低レイヤーの部分の知識がなくても食っていけることは間違いないでしょう。
ただそれを知っているのと知らないのでは、にじみ出る説得力に差が出ると思います。
特に僕のように大学でプログラミングをやらずに、社会人になってからエンジニアなったという人は、プログラムは書けるけどコンピュータ工学的な部分の知識はからっきしという状態になりやすいと思うので、ぜひ知っておくと知識に幅が出て良いのではないかなーと思いました!
そしてこの「プログラムはなぜ動くのか」は、そういった低レイヤーの内容がめっちゃわかりやすく書かれています。
恐らく実務でプログラムを書いたことがある人なら、読み進めながら、Ahhh…なるほどね…!という感覚と一緒に読みすすめることができます。
やっぱり知識が広がっていくと、今まで点だった知識が繋がって線になる瞬間というのがあるので、それがまた奥深くて楽しいところですね!
あとはWebを支える技術ってのも、同じタイプの面白さがあるのでおすすめです。
以上、いっとくでした!さよなら!
コメント