(その2)ソフトウェアの基礎知識を学ぶ
前回、「ハードの知識を吸収したいなら、コンピュータの歴史を紐解いていくのが一番だ」と記述した。特にCPU、メモリ空間の歴史を追っていくとコンピュータの実像が何となく見えてくる。
一見、この理解は非常に遠回りで ひどく効率が悪く感じるが、SEの道として非常に近道と私は思う。コンピュータの歴史を知ることは、その後の理解度に大きな差となるからだ。
言語開発の基礎知識を持たずに面接で、「今、Java言語を勉強しています」等を答えたことはないだろうか? これはJava言語の奥深さと開発工程を知らない故に答えてしまう大胆な発言だ。
Java言語を使ってシステムを稼働させることは、Java言語の文法を知っているだけでは到底補えない沢山のバックエンドがある。
つまり、Java言語を覚える前に(覚える後に) 沢山の知っておくべきことがある。それが何かを知らずに、自分が勝手に言語優先主義を唱え「ひとまず、流行りのJavaを勉強しておこう」となっているだけだ。
「じゃあ何が大事でどうすれば良いの?」と思う人は、暫くお付き合いください。
さて、CPUやメモリの歴史を紐解いていくと、自然にプログラム言語が登場してくる。そのコンピュータを制御する最初に登場する言語がアセンブラだ。
アセンブラ言語は、CPU、メモリ、ハードディスクを直接制御するプログラムであり、コンピュータの基本を一番手っ取り早く理解することが出来る。
メモリ上のアドレスを指定し、CPUのどのレジスタを使用するとかを記載する。特定のハードウェア前提でプログラムを組むからだ。
コンピュータの基本原理は同じだから、アセンブラ言語を経験することは必然的にハードウェアの基本原理が理解できる。
但し、アセンブラ言語をしっかり覚える必要なんか全くない。どういうものか概念を知っておくだけで十分だ。
アセンブラ言語はハードウェアに依存するし、生産性が悪く高機能なソフトウェア開発なんか出来ない。
そこで登場したのが、COBOLやFORTRANであり、C言語となる。