プログラミングの基礎「変数」からの理解の広がり。 | 株式会社スーパーワン 代表ブログ

株式会社スーパーワン 代表ブログ

あと戻りはしない。だけど、現在遠回り中。

スーパーワンでは、一流のプログラマとして世界で働く事ができるスキルを要請するための、カリキュラムと教材を制作しています。
 
一流のプログラマにあって、二流以下のプログラマにないものとは何か?という事で考えてきた結果、それは基礎である。という結論に至りました。
 
世界の多くの一流プログラマは、大学などで専門の学習を行なっており、「コンピュータ・サイエンス」を履修している事が、当たり前です。
 
コンピュータはそもそもサイエンスの産物であります。サイエンスは基礎無くしては語れません。
 
だから、プログラミングには、基礎が必要です。
 
たった3ヶ月、研修を受けるだけで、プロとして顧客に送り出されるような人をプログラマと呼ぶ日本で働くなら、基礎を学ぶより、世あたりを学んだ方が良いと思いますが、ワールドワイドで働ける一流プログラマを育てるなら、基礎を学ぶ必要があります。
 
まずは、「基礎」という、あまりモチベーションの上がらないものに対して、興味やその有用性を理解してもらうための学習教材が必要です。
 
基礎を学ぶより、ゲーム感覚でプログラミング体験が出来るものや、プログラミングコードを入力しながら回答していくことで学べるものなど、手を動かしながら、すぐに何かの結果が得られるものが人気です。
 
しかし、基礎は出すべき具体的な結果はないので、回りくどかったり、その有用性を感じる前に、多くの人が辞めてしまいます。
 
しかし、前述の通り、基礎はプログラマのスキル形成にとって、非常に重要なものですので、耐え忍んででも学ぶべきです。
 
そのようなわけで、辛いだけで少しも面白くない学習となるのが基礎なので、嫌になってくる前に、短期間で終わらせる必要があると思います。
 
学習者が子どもであっても、大人であっても、まとまった時間を確保するのは、かなり難しい今日ですので、コツコツ、空いた時間を費やせる、積み上げ型のオンライン教材が良いかと思っています。
 
そのようなわけで、教材の構成を考えながら、このブログを書いています。
 
前置きが長くなりました。
 

「変数(へんすう)」とは何でしょうか?

 
プログラミングの基礎を考えた時に、まず理解すべきは「変数」だと思います。
 
字の通り、「変化する数」なのですが、プログラミングの基礎を覚えたいなら、私はまず、この「変数」を理解する必要があるのではないかと思っています。
 
私のような昭和人間は、最初に始めた言語は機械語、アセンブラ言語でした。
 
昭和人間ならわかると思いますが、アセンブラは言語といえども、CPUが解釈可能な16進数の列挙に他なりません。
 
こんな感じのコードになります。
25F2:1200 B80001        MOV     AX,0100
25F2:1203 B82010        MOV     AX,1020
下の部分は、「アドレス」を示します。これが書かれている場所、位置になります。
 
25F2:1200
 
この部分は、機械語で、3バイトの16進数の羅列に成ります。右のアセンブラ変後が機械語に置き換えられた結果です。
 
B80001
 
ここが、アセンブラ言語の部分です。AXレジスタに16進数で0100を代入(設定)しています。
 
MOV AX,0100
 
ここで「レジスタ」というものが出てきましたが、これが、アセンブラ言語における「変数」です。
 
レジスタ(汎用レジスタ)は、8086というCPUのシリーズの場合、AX,BX,CX,DXの、なんと4種類しかありません。
 
つまり、アセンブラ言語では、このたった4つのレジスタ(=変数)しか使えないのです。
 
当然、4つでは変数は全然足りませんので、このレジスタをメモリにストア(保存)したり、ロード(読み出し)したりして、使いまわすのですが、普通の変数と同じように、演算や分岐などに使うときは、このレジスタを使うしかありません。
 
JavaやC#といった言語は、このレジスタの数が多いとか、任意の名前が付けられるとか、そういうわけではありません。上記のように、レジスタをメモリにストア(保存)したり、メモリからロード(読み出し)したりといった事を、コードとして書かなくても、コンパイラが自動的にそのようなコードを出力してくれる、というわけです。
 
このような、機械語レベルの変数の仕組みがわかると、
 
整数はなぜ、-32768から32767までしか表せないのか?
 
コンピュータで扱う数字が256や512、1024などの、すごく切りの悪い数字なのか?
 
ということが理解できます。
 
ただ、それが理解できることが基礎なのではなくて、コンピュータの原始的な部分から理解することが重要だと思っています。
 
VRだって、人工知能だって、結局はものすごくシンプルな機械語によって動いており、これら自体は大したことができず、それこそ、人の歩行を筋肉の伸縮のレベルで指示するようなもので、何もかも指示しなければなりません。
 
それではあまりにも指示する人間が大変なので、コンピュータのハードウエアやO/Sや言語が、多大なお世話をして、人間の指示をCPUの理解できる形に変換してくれているのです。
 
このことがわかると、ハードウエアやO/S、言語の存在する意味がわかります。
 
これが、基礎の強さなのです。
 
意味を理解することで、イメージできる世界はぐんと広がります。
 
世界が広がると、多様性に対応できる柔軟な考え方ができます。
 
多様性に対応できることこそが、プロフェッショナルの資格です。