金曜日はプログラムとは何かについて学習します。  
@
2進数の世界
A
OSとアプリケーション
B
ユーザープログラム
C
プログラミング言語
D
データーベース
E
入出力
F
ロジック
G
注意

@ 2進数の世界
コンピューターは2進数(0と1だけ)の世界ということはご存じですよね。
0と1があれば高度な画像処理や膨大な取引データーを処理できてしまうのです。
2進数は2になる時に桁上がりする表示法です。
  001 010 011 100 101 110 111 ・・・
これではコンピューターの細かな話をする場合には不便です。
実際には、16進数、で表現する場合がおおいですね。
  0 1 2 3 4 5 6 7 8 9 A B C D E F 10 11 12 13 14 15 16 17 18 19 1A 1B ・・・
16進数は0と1が4桁分と同じ内容になります。
  0000=0 、 1111=F
0と1の8桁分を16進数2桁で表現することもよくあります。
  0000 0000 = 00 、 1111 1111 = FF
0と1を表現できる1桁分を「ビット」といいます。
  回線速度が 100Mb/s (メガビット/秒) という場合などに使われます。
0と1の8桁分を「バイト」といいます。
  ハードディスクの容量が 320MB (メガバイト) という場合などに使われます。
ビットとバイトはともにアルファベットのビーですが通常は小文字と大文字で区別されています。
 
K、M、G,という単位もよく目につきますね。
  Kはキロ(1,000)、Mはメガ(1,000,000)、Gはギガ(1,000,000,000)です。
  コンピューターに限らない一般的な表記法です。
コンピューターの場合には正確に1,000倍になっていません。
  1K=1,024 になっています。
  0と1が10桁あると、0000000000〜1111111111、これは 0〜1,023 になります。
コンピューターは2進数で表現すると便利なので、
  1,000に近い1,024を便宜上1,000即ちKとして表現しています。
  これは昔はコンピューターがごく限られた人のものだった為暗黙の標準となりました。
M(メガ)は、1,000x1,000、1024x1024、1000x1024、のいずれの場合もあるようです。
G(ギガ)も同様に、1,000Mだったり1,024Mだったりします。
  製品カタログには小さい字でMやGの実際の値が備考欄に記載されています。
笑い話?
  昔10MBのハードディスクがありました。
  メーカーはおよそ10MBという意味で表示や広告をしました。
  ある購入した人が厳密にユーザーが利用できる分を調べました。
  その結果 9,9xx,xxxしかありませんでした。
  購入した人はメーカーにクレームをつけメーカーは謝罪しました。
  ハードディスクの物理的な容量は10x1024x1024を越えていました。
  しかし、実際にユーザーが使える分は10x1000x1000より少なかったのです。
  ハードディスクが今よりはるかに高価だったという背景もあります。
 
コンピューターはプログラムを実行できるようにした機械です。
内部は全て0と1の組み合わせでできています。
高速化と大容量化によりK、M、G、T、という単位が時代とともに主役を交代しています。
  大雑把には、1970年代=K、1980年代=M、1990年代=G、2000年代=T、ですかね。
  パソコンの世界に限れば、1980年代=K、1990年代=M、2000年代=G、でしょうね。
 

A OSとアプリケーション
コンピューターは0と1しか扱えません。
それをいちいち気にしていたらプログラムを作るのにとても手間がかかります。
そこで重要な機能やよく使う機能はオペレーティングシステム(OS)にまとめられました。
OSに含まれていない機能はアプリケーションソフトとして開発する事になりました。
この方法が固まったのは今から40年以上前の1964年のことです。
その後ハードとOSとアプリケーションは三つ巴で進化してきました。
今のパソコンのOSはWindowsです。
EXCELやWORDや年賀状ソフトや業務用システムはアプリケーションソフトです。
アプリケーションソフトはOSがあるお陰で作るのが無い時よりは随分楽になっています。
その分アプリケーションの機能拡張にエネルギーを投入できます。
そうは言っても「やってること」が昔とは雲泥の差ですから+−で言えば今のほうがキツイですね。
 
OSとアプリケーションの境は実はそう簡単ではありません。
OSの基本は、
  1.プログラムの実行の要求を受け付け、実行させ、終了後の後始末をする。
  2.プログラムがメモリーやハードディスクや表示装置など利用する手助けをする。
  3.プログラムが異常状態になったら整然と終了させ何事もなかった状態に戻す。
くらいのことです。
アプリケーションから見ると、まだまだこれだけでは不十分です。
データーベースの読み書きや通信の遣り取りや画面への画像表示なども欲しい所です。
そこで、OSでもアプリケーションでもないソフトがどんどん開発されました。
それらはOSから見ればアプリケーション、アプリケーションから見ればOSという事になります。
これらのソフトの大半はOSとは別の会社が開発し販売しています。
従って利用する場合には複数の会社から購入し自分の責任で組み合わせて使わねばなりません。
Windowsにはこれらのソフトがいっぱい詰まっています。
少なくとも個人やSOHOで利用するものはWindows+マイクロソフトの製品で殆ど揃えられます。
マイクロソフトは利用者に利便性を提供して莫大な利益を得ました。
しかし公正な競争や適正な利潤だったかについてはいろいろな意見があります。
 
アプリションは「プログラム」「システム」「ソフト」などの言い方をします。
使い分けの厳密なルールはありません。
パソコン単体で使える場合には「プログラム」か「ソフト」と言います。
  表計算ソフト、年賀状ソフト、など
仕組みがやや複雑になると「システム」と言う場合が多いです。
  登録システム、オンライン発注システム、など
概ねプログラムは単品またはシステムの構成要素の1つを指す場合が多いです。
 

B ユーザープログラム
自分ではプログラムを作る必要はないとお考えの方が多いでしょうね。
大抵は必要なソフトがほとんど入ったパソコンを買われるでしょうし、
もし不足していてもパソコンショップ等で買ってインストールすれば十分ですものね。
これら購入できるソフトはユーザープログラムとはいいません。
それでは、フリーのソフトをパソコンで利用した場合はどうでしょうか。
またフリーのソフトをウェブサーバー上で利用した場合はどうでしょうか。
  他人が作り他人が著作権を持っているのだから自分のプログラムではありません。
  動作形態はOSでもアプリでもないのでユーザープログラムだと言わざるをえません。
  プログラムの不具合の責任の所在からもユーザープログラムとみなされます。
従って、自分が作ったか否よりも、利用保守責任の所在が重要な判断材料になります。
特にインターネット上でフリーのソフトを利用する場合には、
  自分が作ったものでなくても自分が作ったのと同じくらいの責任が伴う
ということを覚えておいて下さい。
 
EXCELで集計をした事はありませんか。
EXCELのセルに指定する計算式はプログラムではありませんが似たものです。
  =IF(B8="","",D7+B8)
  セルB8が未記入なら消去しセルB8が記入済ならセルD7との和を書き込めという式です。
  「判断」と「計算」が僅かな文字数で表現されています。
プログラムの先頭と終わりには特殊な約束事がありますが途中はこれと似ています。
どんな複雑なプログラムでも、この呪文のような命令文が延々と続いているだけです。
機能的には、
  1.データーの読み込み
  2.判断
  3.データーの加工
  4.データーの書き出し
に分類できます。
それぞれ多くのパターンがあり命令文もEXCELのような簡単なものだけでは済みません。
しかし基本的な構造は単純なものです。
 

C プログラミング言語
プログラムの構造や中のロジックはそう難しいものではない事が分かりましたよね。
EXCELの計算式と同じ書き方でどんなプログラムもできているわけではありません。
プログラムを効率よく作れるようにたくさんの手法が開発され続けています。
手法の一つにプログラミング言語というものがあります。
文法に従って言葉を並べるという形態から言語という言い方をしています。
  1.BASIC
  2.FORTRAN
  3.COBOL
  4.PL/I
  5.APL
  6.PROLOG
  7.PASCAL
  9.PERL
  10.C
  11.PHP
  12.JAVA
など数えればきりが無いほどあります。
別の手法として「開発ツール」というものがあります。
表示させる画面を決めてから画面上のボタンを押した時に実行する内容を記述する、
といった方法でプログラムを部品を組み合わせる方式で作成できるようにしたツールです。
この方法だと真白な紙に一行づつ命令を記述するよりもずっと簡単にできます。
 
さて、皆さんが実際に関わりを持ちそうなプログラミング言語は何でしょう。
EXCELに出てくるのはVisualBasicというものです。
  EXCELには「式」だけでなく「マクロ」という便利なものが標準装備されています。
  マクロと呼んでいますがプログラムにきわめて近いものです。
  そこで使われている言語がVisualBasicですが「式」で使うものとほぼ同じです。
ホームページがらみで出てくるのはPHPとPERLとJAVAがほとんどでしょう。
どれも使いこなすには相当の勉強と実務経験が必要なものばかりです。
MiniSchoolで扱えるレベルではないので、興味のある方は別途勉強して下さい。
 
プログラムは「実行できるもの」ですが、実行の仕方には2種類あります。
1つは、本当にコンピューターの中でOSの監視下で実行するものです。
  FORTRANやCなどの言語で書かれたプログラムはこの仲間です。
  文字列が入ったファイルに対しコンパイルという処理をして実行できるファイルにします。
  パソコンなら .exe というファイルにする事です。
もう1つは、その言語専用の実行代行プログラムを介して実行する方法です。
  実行代行プログラムや言語そのものをインタープリターともいいます。
  BASICやPERLやPHPはこの仲間です。
  文字列の入ったファイルはそれ自体では実行できません。
  中身の1行づつを実行してくれるプログラムがあるので実行と同じ結果を得られます。
  パソコンには通常インタープリターが入っていないので実行させる事はできません。
  ウェブサーバーにはインタープリターが入っているので実行させる事ができます。
 

D データーベース
ほとんどのプログラムはデーターを参照したり更新しています。
データー(データーファイル)の総称としてデーターベースと呼ぶ場合もありますが、
今からお話しするのは言わば狭義のデーターベースです。
 
データーベースはデーターを保存しておく方法の一種です。
他の保存方法と比べて下記の特徴があります。
  1.専用のプログラムを介して読み書きを行う。
  2.複数のプログラムから同時に読み書き要求があっても正しく処理できる。
  3.データーの物理的な配置を知らなくても項目名だけで読み書きできる。
  4.高速に読み書きできる。
大変便利ですが小さな単純なデーターの場合にはかえって面倒です。
やや複雑な内容のデーターであれば自分専用でもデーターベースにしたほうが便利です。
4つの特徴について詳しく見てみましょう。
 
1.専用のプログラムを介して読み書きを行う。
  このプログラムをデーターベースマネージャーと呼びます。
  MySQL、SQL、ACCESS、ORACLE、DB2、などたくさんのデーターベースがあります。
  大半は開発会社が販売していますが無料で使えるものもあります。
  国産のDBソフトはごく僅かで、大半は外国製を日本語対応させたものです。
    当校の校長はDB/360という純国産DBソフトの著作権を所有しています。
    しかしDBの世界では非主流から飛躍できず今はお倉入りの状態です。
  専用のプログラムを介す事で安全性やプログラムの効率性が良くなっています。
 
2.複数のプログラムから同時に読み書き要求があっても正しく処理できる。
  ちょっとクイズです。
  @Xに100という数字が入っています。
  AプログラムAからXを読み込み要求がありました。
  BプログラムBからもXの読み込み要求がありました。
  CプログラムAは+1して書き出すよう要求しました。
  DプログラムBは−2して書き出すよう要求しました。
  さて、結果はどうなったでしょう。
  データーベースを利用していると@ABCDは順番には処理しません。
  @ACBDの順になります。
    Bの要求はCの要求が終わるか、Aの要求の取り消しがあるまで待たされます。
 
3.データーの物理的な配置を知らなくても項目名だけで読み書きできる。
  データーを項目に分けて項目に名前を付ける事は普通にやっていますよね。
  例えば氏名、郵便番号、住所などです。
  でもEXCELやメモ帳などのデーターでは項目の並び順も分かっていなければなりません。
  データーベースでは並び順は知る必要がありません(プログラムは、です)。
  もっと言うと、プログラムに不要な項目については有るか無いかも知らなくていいのです。
  こればプログラムを簡素化できますし管轄外のデーターの保護にもなります。
 
4.高速に読み書きできる。
  データーベースマネージャーは多くのテクニックを使って高速処理をしています。
  1.大量の索引を用意して必要なデーターを瞬時に探し出す。
  2.読み込んだデーターは再利用される確率に合わせてメモリーに保持する。
  3.可能な限り読み書きは暇ができた瞬間にまとめて行う。
  4.要求の待ち行列や処理の完了管理テーブルなどを効率よく監視する。
  などを駆使してプログラムからの要求を素早く処理しています。
 
どうですか。
プログラムにとってデーターベースは本当に頼もしい相棒なのです。
但し、データーベース管理者は全体を把握しておかなければなりません。
その為には多くの知識が必要になります。
またデーターのバックアップや復元は普通のファイルよりはるかに難しくなります。
従ってデーターベースと普通のファイルはケースバイケースで使い分けなくてなりません。
 

E 入出力
コンピューターの主要な構成要素は何でしょうか。
  1.中央演算処理装置(CPU)
  2.主記憶装置(メモリー)
  3.外部記憶装置(ハードディスク装置など)
  4.入力装置(キーボードやマウスなど)
  5.出力装置(ディスプレーやプリンターなど)
  6.通信装置(LANアダプターなど)
基本的にはこれらの組み合わせでできています。
3.〜6.は入出力装置ともいいます。
1.2.が超高速なのに対し、3.〜6.はそれに比べれば超低速という特徴があります。
 
プログラムは入出力装置があって初めて人間に有用な働きができます。
いろいろなタイプの物があるのでそれらとデーターの遣り取りをする方法も多種多様です。
プログラムはそれぞれに対応して命令を記述しなくてはなりません。
しかし装置毎には同じ仕組みが利用される訳ですから改善の余地はあります。
そこで考えられたのが、デバイスドライバー、という一種の中継プログラムです。
これはインタープリターに似ていますがインタープリターとは呼びません。
 
ホームページでプログラムを利用する場合にも入出力は必ず必要になります。
画面に表示させる場合には、
  print ("日付:".date("Y/m/d")); ・・・PHPの例ですが他でもほぼ同じです。
結構分かり易いですよね。
  LA a,32(R5)
  LA b,48(R6)
  MVC b(8),a
これでは何の事か分かりませんよね。
人間が書いたり読んだりしやすいプログラミング言語を「高級言語」ともいいます。
PHPやPERLはその代表例です。
高級言語とデバイスドライバーのお陰で複雑な入出力も簡単にできるようになっています。
 

F ロジック
5W1Hという言葉がありますよね。
  Who(誰が) What(何を) Where(どこで) When(いつ) Why(どうして)How(どのように)
プログラムでは正確に(厳密に)記述しなくてはなりません。
しかし、Who,Where,When,Whyは常に固定なので、WhatとHowが重要になります。
また、Whatはデーター項目など明確な場合が多いので、問題はHowだけという事になります。
 
「どのように」というのがロジックでありプログラムの価値を決めるものと思っていいでしょう。
では「どのように」とはどのようなものでしょうか。
  1.計算をする。
  2.文字列を加工する。
  3.条件によって違う処理をする。
  4.一定の条件になるまで同じ事を続ける。
せいぜいこれぐらいの事です。
1.計算
  数学(算数)の計算式とよく似ていますからわかりやすいものです。
  A=B+C ・・・ BとCの和をAの値とする(AはB+Cに等しいではありません)
  A=B%C ・・・ BをCで割った余りをAの値とする(これは普通は見かけませんね)
  数学関数と呼ばれる高度な計算結果を簡単に求められる命令も用意されています。
2.文字列を加工する。
  文字列の結合・・・ "本日は"と"火曜日"を結合するなど。
  文字列から一部を抽出・・・2008/01/06の6桁目から2桁を抽出するなど。
  文字列の一部を変更する・・・「本日はTUEです」から英字を削除するなど。
  馴染みが少ないと思いますが極めて重要な処理です。
3.条件によって違う処理をする。
  ほとんど日常語と同じ感覚で使うことができます。
    if a=1 then b=0 else b=1
    if (a==1) { b=0; } else { b=1; }
    if (a==1) { b=0; c=2; d=123: }
  YesNoだけでなく何種類もの分岐処理の方法もあります。
4.一定の条件になるまで同じ事を続ける。
  ファイルを一行づつ最後まで読み込む。
  同じことを10回繰り返す、などです。
  3.と違う点は、
    3.は必ず上から下へ順番に処理し、上に戻る事はありません。
    4.は「同じ事」の最後まで行くと「同じ事」の最初に戻ります。
  プログラムは可能な限り上から下への一方通行になりように記述します。
  4.全体を1つの命令で表現できれば上に戻る形にせずに済みます。
 
プログラムは一部を別のプログラムに分けて記述することができます。
  この分けられたプログラムをサブルーティンとか関数と呼びます。
同じような処理が何度も出てくる場合に同じ内容を何度も記述せずに済みます。
大きなプログラムを主要な処理毎に分けてロジックを見易くすることもできます。
各プログラミング言語とも標準装備の関数が多数用意されています。
プログラミングは、
  実行すべき事を正確に記述する、というロジックを固める作業と、
  関数を駆使して簡潔明解なロジックを実際に記述するという2つの作業から成り立っています。
皆さんがホームページでプログラムを利用する場合には、
  そのプログラムがどんな動きをするのか、だけを確認しておけばいいでしょう。
  中でどんな動きをしているか(どんなロジックになっているか)は深入りせずにおきましょう。
  それと、ユーザープログラムの責任という事を忘れないで下さい。
  困ったり心配事がある場合には早めに詳しい人に相談して下さい。

G 注意
いよいよ2年生コースも終了です。
ここまで学習された方は、
  コンピュータやインターネットについて広く浅くバランスよく知識を身に付けられました。
誰でも知識や経験のバラツキがあります。
人が集まればお互いに助け合うことができます。
初歩的な事を一通りマスターしておけば安心して次のステップに進むことができます。
本当にここまでお疲れ様でした。
最後に注意点を念押しして終わりにしたいと思います。
  1.ユーザーデーターは自分で守らなければいけない。
  2.ユーザープログラムの動作には自分で責任をとらなければいけない。
小論文を送って頂けると嬉しいです。
また会う機会を楽しみにしています。
それではさようなら。