2009/03/22

コンピュータはなぜ動くのか 矢沢久雄著 日経BP




 コンピュータとは何か、プログラムとは何か。 知っておくべき基礎知識をまとめたいい本なので、覚えを記す。 矢沢久雄氏が書いたこの本は私のようなズブの素人でも判りやすい。 コンピュータの進化に付き合ってきて、体験で以って本当に判っている人だから書けるのだろうという表現も多い。
コンピュータはなぜ動くのか
■コンピュータの絶対的な基礎
 1.コンピュータは入力、演算、出力を行う装置
 2.プログラムは、命令とデータの集合体

 3.コンピュータの都合は人間の感覚と異なる場合がある

■マイコンの構成要素
 1.CPU
 2.メモリー
 3.I/O (外部装置を接続するInput/Output)
 ※および重要な周辺機器としてはクロックジェネレータ、
  入力スイッチ

■プログラム言語
 1.コンピュータの言葉はマシン語 (2進法)
 2.マシン語を人間に判りやすくしたのがアセンブリ語 (10、16進法)
 3.より人間に判りやすいのがC言語、Java、BASIC
 4.  言語間の翻訳をコンパイル。 翻訳する仕組をコンパイラー。
 ※コンピュータ言語はまさに言語なのだと理解した。 
  未開地の人々と話をするのには通訳を何人も介さねばならぬときがあるが
  それと一緒。
 ※アセンブリ語などは英語そのもの。 コンピュータがアングロサクソン圏で進化した
  からだろう。 またアルファベットは2進法に置き換えるのに向いているように思う。
  漢字では大変。


■フローチャートとアルゴリズム
 コンピュータに何の仕事をさせるかの流れを書くのがフローチャート。 アルゴリズムとは課題の解き方、手順。 故にフローチャートを描くということは、アルゴリズムを書いていることと同義語。
コンピュータは頭が悪いので、フローチャートを描くときは小姑のようにクドク書く必要がある。 
人間では無いのが幸いして、一度行っておけば確実に実行するので、簡潔にしておく必要がある。

■オブジェクト指向プログラム
 開発が大規模になってくると、組織で分業することになるし、すでに世の中に存在しているプログラムを買ってきて部品として組み込むことが必要になる。 これがオブジェクト指向プログラム。 ただし、その管理には経験とセンスが必要で、失敗したり、却って効率が悪くなることもある。 

■データベース
 ハードウェア、プログラムと、このデータベースが広義のコンピュータにとっての3大要素。 
データベースの構成要件は;
 1.データファイル
 2.DBMS (データマベースマネジメントシステム)
 3.アプリケーション
 DBMSはMS Access、Oracleなどが製品として出ている。 アプリケーションはデータファイルを直接読み書きせずにDBMSを仲介して間接的に読み書きする。 DBMSはキー機能、インデックス機能などを利用して簡単にデータ・ファイルを読み書きできるようにし、データを矛盾無く安全に保つ機能を持っている。
 SQLはStructured Query Language。 ISOで策定された標準語で、アプリケーションがDBMSに指示を出すときに使われる。 やはり英語の命令文に似ている。

■TCP/IPネットワーク
 コマンド・プロンプトで出来るネットワークを垣間見る実験。
 1.MACアドレスをipconfig/allで見てみる。
 2.同じ方法でIP Addressを見てみる。
 3.DHCPサーバ(Dynamic Host Configuration Protocol)の役割をマイネットワークで知る。
 4.ルーターの役割を、route printで知る。 また経路をtracert www.xxx.comで知る。
 5.DNSサーバーの役割を知るために、nslookupを実行させ、プロンプト (>)の後にwwwを入れるとIPアドレスが現れるのを確認する。

■データの暗号化
 文字コードをずらす。

■XML
 Extensible Markup Language。 HTMLはWebページを記述するためのマークアップ言語。 XMLは任意でマークアップ言語を定義できるメタ言語。


★総評: この覚えを作るために改めてこの本を眺めると、10分の1程度しか理解できていないということが良くわかった。 とは言え、まずは興味を持たせてもらえたので有難い本だった。 
いくつかこの本を通して利口になったことを挙げる。
 コンピュータは0と1しか判らない機械でしかない。 その機能は、演算と記憶と出力しか無い。 また推測が出来ないから、人間であれば当たり前のことでも噛み砕いて丁寧に、指示する必要がある。  
 プログラミング言語はつまり外国語の勉強のようなもの。 外国語には不規則な法則がいろいろあるが、それらは必要無いことから案外簡単かも知れない。 反面、論理的でなくてはならない。 
人に依頼や指示をするときに、どう話してやれば判るか、どう簡潔に説明するかを考えることがあるが、それと同じ。
 ネットワークについては、いま読んでいる「電話はなぜつながるか」や「ネットワークはなぜつながるか」により詳しいが、つながる相手同士が「私はxxしました、どうぞ。」「了解しました、どうぞ。」とトランシーバーで話しているのと同じ動作を機械的にしている。

 ところで、2009年の目標として、コンピュータとネットワークの基礎知識を身につけることを掲げた。 いまさらという気もするものの、いくつになっても遅いということは無いので、いま月に3冊ペースで本を読んでいる。 もともとベースが無いので読んでも中身が大して理解できないうえに、最近は目が悪くなって文字を読んでいても集中できず頭に入らない。 もどかしいのだが、欲をかかずにこの一年間は続ける。 もうどっさり本を買い込んでしまったので後に引けないし、会社で後輩達に宣言してしまったので有言実行しないと後で恥ずかしい。