DHC-オンライン講座
文系の人にもわかる プログラミング入門

Lesson 1   プログラミングとは

この講座では, プログラミングについて学びます。 次のLessonから, その具体的な方法を説明しますが, まず, その準備をかねて, そもそも「プログラミング」とは何かを考えてみましょう。

プログラミングはプログラムを作ること

「プログラミング」は英語から来た言葉で, 英語で綴ればprogrammingあるいはprogramingとなります。 programmingは「プログラムを作る」という意味の動詞programのing形です。 前にbe動詞を伴わずに使われているので, このing形は「動名詞」となり, programmingで「プログラムを作ること」という意味になります。 ちなみに, プログラムを作る人のことは「プログラマ(programmerあるいはprogramer)」と呼びます。

programには「プログラムを作る」という動詞のほかに名詞の意味もあります。 普通の世界で「プログラム」と言うと, たとえば, コンサートの「プログラム」などが思い浮かびます。 コンサートの「プログラム」は, コンサートでどんな曲を演奏するか, その曲名と順番, 演奏者などを書いたもの。 プログラムに従って, 演奏が進行していきます。

コンピュータの「プログラム」もこれと似ていて, 「(演奏者ではなく)コンピュータが何をどんな順序で行うかを書いたもの」です。 見方を少し変えると「(何らかの仕事をするために)コンピュータにやってもらう操作をやって欲しい順番に記述した文書」と言えます。

プログラミング言語と自然言語

コンサートのプログラムは, 普通の言葉 ── 「日本語」とか「韓国語」とか「英語」とか, 人間が人間とコミュニケーションを取るための言葉 ── を使って書かれます。 これに対して, コンピュータの「プログラム」を書くときには, それ専用の言語である「プログラミング言語」を使います。

プログラミング言語は, 人間がコンピュータとやり取りをするために(ひとりあるいは何人かの人が集まって決めて作った)人工的な言語「人工言語」です。 これに対して, 「日本語」や「英語」などは, 遠い昔に源を発し, 徐々に徐々に変化してきて, 今も少しずつ変化しているもので, 使われているうちに自然に広まった「自然言語」です。

日本語や英語などの自然言語を使ってコンピュータ用のプログラムを書くことができれば, 新しい言葉をあらためて覚える必要がなくて便利です。 しかし, 残念ながら「自然言語」を, そのままプログラムを書くこと(つまり, プログラミング)に使うのには少なくとも今のところは不可能です。

なぜ, 自然言語をそのままプログラミング言語として使えないのでしょうか? それを考えるために, コンピュータが具体的にどのような作業をしているのか, いくつか例をあげて見てみましょう。

コンピュータによる「世界」の表現 ── 色の表現

自然言語をそのままプログラミング言語として使えない理由として, コンピュータで扱えることが, 人間が扱うこと(考えること)のごく一部でしかないということがあげられます。 コンピュータが扱えるのは, 「数」だけで, これを使った加減乗除などの「演算」しかできません。 「文」や「絵」や「音」を扱うこともできますが, じつはコンピュータの中では文字や数字や音を, それぞれ数字に対応させて, これを並べたり, 入れ替えたりしているにすぎないのです。

コンピュータがそのままに扱えるのは, 「数」だけ, 突き詰めれば0と1だけです。 たとえてみれば, 何億個とか何十億個とかの, 電球がずらーっと並んでいて, 電球がついたり消えたりしているだけの話なのです。 この電球の役目をするのが「メモリ」と呼ばれるものです。 電球の数が多ければ多いほど, つまりメモリの量が多ければ多いほど, 一度にたくさんのものを覚えられるのです。

画面上に色を出す場合を考えてみましょう。 コンピュータの内部にある何千万個, 何億個かの電球のうち何個か(最近のパソコンだと1千万個から2千万個ぐらい)は, 画面の表示を担当するものです。 たとえば, 1千万個の電球全部が消えれば真っ黒な画面が表示されるし, 全部がつけば真っ白な画面になるような仕組みになっているわけです。

ご存じの方も多いでしょうが, パソコンの画面(モニター)は, それぞれが独立に色を表示できる小さな点がたくさん集まってできています。 虫眼鏡を使って画面を拡大して, 画面上の1点に注目してみましょう。 この1点のことを「ピクセル(pixel)」とか「ドット(dot)」と呼びます。

この1点を多くのパソコンでは24個の電球を使って表します。 色の表現方法にはいろいろあるのですが, RGBという表現方法では24個全部の電球がつくと白い点になり, 全部が消えると黒い点に対応させて色を表現します。 この24個の電球を, 8個ずつ3つのグループに分けて, そのうちの第1のグループだけが点灯して, 他の2グループが全部消えた場合は, 点の色が「赤」になるようになっています。 また, 第2グループだけが点灯すると「緑」, 第3グループだけが点灯した場合には「青」になります。

電球がついている状態(オンの状態)と消えている状態(オフの状態)を1と0に対応させれば, 数で表すことができます。 たとえば, 赤い色は第1グループが全部オンで, 第2, 第3グループが全部オフなので, 次のような1または0の並びで表現できます。

  11111111 00000000 00000000 →赤

同様に緑や青は次のようになります。

  00000000 11111111 00000000 →緑
  00000000 00000000 11111111 →青

この手法で他の色も表すことができて, 下のように第2グループの8個と第3グループの8個がオンになった場合は「水色」になります。

  0000000 11111111 11111111 →水色

さて, 赤を表す第1グループの電球のオン, オフのパターンは全部でいくつあるでしょうか? 1個の電球でオンとオフの2つ, 2個の電球で(オン, オン), (オン, オフ), (オフ, オン), (オフ, オフ)の合計4つ, 3個の電球で(オン, オン, オン), (オン, オン, オフ), ..., (オフ, オフ, オフ)と8つのパターンがあります。 同じようにして考えると, 8個の電球がそれぞれ独立に(ほかとは関係なく)オンになったりオフになったりするわけですから, 2×2×2×2×2×2×2×2=28=256通りのパターンができます。 ですから, 8個の電球のグループを使えば, 256個のものに対応させることができる, つまり8個の電球で256の状態を表現できるわけです。

コンピュータでは, この256個を1からではなく, 0から始めて, 1, 2, 3, ...といって, 255までの数字に対応させることに決まっています。 こうすると, コンピュータが使われる前から, 数学者が研究していた2進数という数の表し方と同じになるのです(逆に言うと, 2進数の考え方に基づいてコンピュータが考え出されたとも言えると思います)。

この考え方を使うと, 電球のオン, オフではなく, 0から255の数字3つを使って色を表すこともできるようになります。 (255, 0, 0)で赤, (0,255,0)で緑, (0,0,255)で青, そして(00, 255, 255)で「水色」といった具合になります(図1-1)。

図1-1 RGBという方式の色の指定法(赤丸部分)。 0, 255, 255で「水色」を表す

8+8+8=24個ある電球のある特定の8個の電球がついているにすぎないのですが, この状態に意味を付与してこれを「赤」と呼び, そのような状態のときには, 画面上の対応する1点(ピクセル)が赤くなるように, コンピュータは作られているわけです。

ここまでは画面上の1点(1ピクセル)について見ましたが, 今度は画面全体を考えてみましょう。 少し前のパソコンの画面としては一般的によく使われていた, 横に1,024個, 縦に768個の点がある画面だとすると, 全部で1,024×768=786,432個の点があり, それぞれの点に24個の電球が用意されています。 つまり, この大きさの1画面分を表現するのに, 1,024×768×24=18,874,368個(約1900万個)の電球が用意されていると考えることができるわけです。 なお, 縦横の点の数はパソコン(モニター)によって色々です。 以前は640×480(横に640個, 縦に480個)という大きさが標準的でしたが, その後だんだん大きな画面が増えてきて, 1024×768程度のものが普通になり, そして現在はこれを超える大きさが一般的になってきています。 また逆に, 携帯電話など今まではあまり使われることのなかった小さな画面をもった「コンピュータ」も登場しています。

メモ

1個の電球が表す情報のことを「ビット(bit)」と呼びます。 bitはbinary digit(「2進の数字」の意)の最初のbと最後のitを合わせたものです。 つまり, 1024×768の大きさの画面では, 約1900万ビットを使って, 画面の状態を表現しているわけです

メモ

色の表し方には図1-1に赤丸で示したRGB(Red, Green, Blueの頭文字)という方式の他にもいくつかあります。 図1-1にある「色合い」「鮮やかさ」「明るさ」の3つの数字で表す方法はHSB方式(Hue, Saturation, Brightnessの頭文字)と呼ばれます。 このほか, CYMK, HLSなどの方式があります。

同じ水色を表すのに, RGBでは(0, 255. 255)の3つの数字の組を使うのに対して, HSBでは(120, 240, 240)という3つの数字の組を対応させています。 したがって, 色を表す数字を見たときには, その数字がどの方式を使ったものかがわからないと, 実際の色も決まらないことになります。

コンピュータによる「世界」の表現 ── 文字の表現

上ではコンピュータの内部で色がどのように表現(対応付け)されているかを見ました。 今度は文字について考えてみましょう。 じつは, 文字の表し方も色の表し方と本質的には同じなのです。 つまり, 数字に対して文字を対応させて表現するのです。

コンピュータが使われ出した頃, ひとつの文字は8個の電球, つまり8ビットで表されることがほとんどでした。 この「8ビット」は1文字を表現できる単位ということで, 特別に扱われて, 「バイト(byte)」という単位で呼ばれるようになりました。 つまり「8ビット=1バイト」というわけです。

これだと28=256なので, 1バイト(8個の電球)を使って表現できるのは256の文字だけです。 小文字と大文字のAからZと, 数字の0から9, それに@, &, %などいくつかの記号, そしてフランス語やスペイン語などで使われるçやñなどいくつかの特別な文字だけならばこれで十分なのですが, 漢字やハングル, アラビア文字などをすべて同時に扱うことはできません。

そこで, 最近では16個(16ビット=2バイト), あるいはそれ以上の「電球」を使ってひとつの文字を表現しています。 16個の電球を使えば, 216=65,536字の文字を表現することができます。 これだけあれば日本語に使われる文字を表現するのには, まずまず十分です。 これ以上の文字を一度に扱うには1文字につき3バイトとか4バイトとかを使って表すことになります。

どの数字にどの文字を対応させるかの方法 ── これを「コード系」と言います ── には, いくつかの種類があります。 これまで, 一般のパソコンでよく使われてきたコード系は「シフトJIS」と呼ばれているものです。 シフトJISでは, 33440で「あ」, 33441で(小さい)「ぃ」, 33442で(普通の)「い」, 33478で「と」, 36434で「山」, 37100で「川」, 35827で「空」を表すといった具合に, 数値と漢字が対応づけられています。 したがって, 「山と川」という文字の並び(文字列)は, コンピュータの内部では, シフトJISを使う場合「36434, 33478, 37100」という数字の列で表されているのです。

メモ

色の表現に, RGB方式, HSB方式などいくつかあったように, 文字の表現(文字コード)にも, ここで見た「シフトJIS」のほかにもいくつかの方式(コード系)があります。 主なものとしては, JISコード, EEUCコード, ユニコードなどがあります。 また, これらのコードの中にも, いくつか「変種」があります。

このように日本語を扱うときは, 1文字を表すのに16ビット, つまり2バイト(あるいはこれ以上)を使います。 コンピュータは欧米を中心に発達し, また当初は記憶できるデータの量がとても小さかったので, 1バイトで1文字を表す体系になっていました。 その後日本語などを扱うようになったわけですが, こうなると2バイトで1文字を表現しなければならなくなったので, 1バイトで表せる文字と, 2バイト表せる文字を混在して扱わなくてはならなくなってしまいました。 この処理はかなりややこしくて, 昔から多くのプログラマーを悩ませてきました。

最近のプログラミング言語, たとえばやこの講座で学ぶJavaScript(ジャバスクリプト)などでは, アジアなどで使われている文字数の多い言語のことも考えて, 最初から, 文字は2バイト(あるいはそれ以上)で扱うようになっています。

メモ

参考までに, 先ほど「ビット」を単位にして考えたRGB方式による色の表現を「バイト」を単位として考えてみると, 赤青緑の3つのグループに分けたそれぞれを1バイト(8ビット)で表現できるわけです。 画面上の1点の色を扱うのに, 最近の多くのパソコンでは3バイト使っているというわけです。 画面上のすべての点の色を表現するのには, 一般的なものでは(1024×768×24)÷8=2,359,296バイト必要となります。

メモ

1024バイトのことを1キロバイト(kilobyte, 略してKバイトあるいはKB)といい, 1キロバイトが1024集まった1024Kバイトのことを1メガバイト(megabyte, 略してMバイトあるいはMB)と呼びます。 元々kiloは1,000, megaは1,000,000(百万)を表す言葉ですが, 210が1024で2進数が基本のコンピュータの世界には都合がよいので, 1024倍(つまり210倍)をキロ, 1024倍の1024倍(つまり220倍)をメガと呼んでいます。 一般的な大きさの画面にあるすべての点の色を表現するには, 2Mバイト強のメモリが必要になります。

ちなみに, 1024メガバイトのことを1ギガバイト(giga byte, 略してGバイトあるいはGB)と呼びます。 さらに, 1024ギガバイトは1テラバイト(tera byte)となります。 「Tバイト」とか「TB」などと表記されます。

整数と小数

電球のオンオフで整数や色や文字を表すこと(整数, 色, 文字とビットのオンオフの並びを対応させること)ができるのはおわかりいただけたでしょうか? 簡単に言ってしまうと, コンピュータの中には, 巨大な対応表が入っていて, それを使って色や文字を表しているというわけなのです。

整数の場合は, それぞれの電球ごとに, 1を表すもの, 2を表すもの, 4を表すもの, 8を, 16を, 32を, 64を, 128を, ...と役割を割り振っておいて, オンになっている電球が表す数を足すことで, (電球の数さえ増やせば)いくらでも大きな数を表せます。

色の場合は, (たとえばRGBという表し方を用いるとすれば)色を赤, 緑, 青の3つの要素に分解して, それぞれの度合いを整数で表し, この整数を電球のオンオフで表せます。

文字は1文字ずつ整数を対応させて, この整数をビットのオンオフで表現します。

ところで, 3.14とか, 1.3333などといった小数は, どう扱うのでしょうか。 これは, 整数の場合とよく似た論法を逆方向に使います。 つまり, 1/2, 1/4, 1/8, 1/16, ...を表す電球を用意します。 数学で習ったように(忘れてしまった人がいるかもしれませんが), 1/2は2-1 1/4は2-2 1/8は2-3 ...となります。 0.5ならば, 1/2を表す電球を1個だけオンにし, 1.25ならば, 1を表す電球と1/4を表す電球をオンにします。

しかし問題があります。 たとえば, 3.14を考えてみましょう。 3の方は1と2の電球を付ければよいので, 残りは0.14です。 0.14は1/8より大きいのでまず1/8の電球をオンにします。 残りが0.015になります。 ここまでを式に表すと次のようになります。

  3.14 = 1×21 + 1×20 + 0×2-1 + 0×2-2 + 1×2-3 + 0.015

ここで, 0のところと「1×」を省略するとすると次のように書けます。

  3.14 = 21 + 20 + 2-3 + 0.015

以下, 同様にやってみると

  3.14 = 21 + 20 + 2-3+ 2-7 + 0.00718750
  3.14 = 21 + 20 + 2-3+ 2-7 + 2-8 + 0.00328125
  3.14 = 21 + 20 + 2-3+ 2-7 + 2-8 + 2-9 + .001328125
  3.14 = 21 + 20 + 2-3+ 2-7 + 2-8 + 2-9 + 2-10 + 0.00035156250
  3.14 = 21 + 20 + 2-3+ 2-7 + 2-8 + 2-9 + 2-10 + 2-12 + 0.000107421875
  3.14 = 21 + 20 + 2-3+ 2-7 + 2-8 + 2-9 + 2-10 + 2-12 + 2-14 + 0.00004638671875
  ...

となって, いつまでたっても終わりません。 したがって, 10進数で表した小数をコンピュータで表現するときは, 多くの場合(0.5とか, 0.125とかで終わるのでなければ), ピッタリ表すことはできないのです。 コンピュータの中で, 小数は「近似値」として扱われているのです。

16進数による表記

上で見たように, コンピュータでは多くの場合, 8ビット, つまり1バイトを単位として色々な情報を扱います。 このため, 日常生活で使う10進数ではなく「16進数」を用いて, 数値を表すと便利なことがあります。

16進数では, 0, 1, 2, ..., 9までの10個の数字に加えて, A, B, C, D, E, Fの6文字を使います。 Aが10進数の10, Bが10進数の11, Cが12, Dが13, Eが14, そしてFが10進数の15を表します。

1バイトで表現できる状態(数, 色, 文字など)は28=256個です。 28=24×24=16×16なので, 1バイト(つまり8ビット)を4ビットずつ2つのグループに分けると, それぞれのグループで24=16個の状態を持つことができます。 つまり, 16進数1桁でひとつの4ビットグループを表すことができます。 1桁でひとつの4ビットグループを表せるので, 2桁で2つの4ビットグループ, つまり8ビット(=1バイト)の値を表せるというわけです。

日常生活で用いている10進数で, 1バイト(256の状態)を表現しようとすると, どうしても3桁必要になります。 しかも残りの1000-256=746個の数字は使わずに余ってしまいます。 ところが, 16進数を使うとちょうど2桁で1バイトが表現できるわけです。

メモ

シフトJISコードで文字を表すと, ひとつの文字を表すのに10進数で5桁の数字が必要になります。 たとえば「山」は「36434」という数字の列になります。 16進数を使うと「8E52」4個の「数字」ですむことになります。

練数問題として16進の8E52が10進の36434になるか確認してみましょう(16進数の「E」は10進数の「14」を表すことに注意)。

  8E52 => 8×163 + 14×162 + 5×161 + 2×160
        = 8×16×16×16 + 14×16×16 + 5×16 + 2×1
        = 32768 + 3584 + 80 + 2 = 36434

図1-2のような「漢字コード」を見たことがある人も多いでしょう。 漢字のコードはこの図のように16進数で表示されることが多いのです。

図1-2 「山」という字の漢字のコード

また, 色の指定にも16進数が使われることがあります。 上で見たように, RGBという方式では赤, 緑, 青のそれぞれの成分を1バイト(0から255)で表現するので, それぞれの成分を16進数2文字, 合計で2×3=6文字で表せます(図1-3)

図1-3 16進数による色の指定

アナログの世界を写す自然言語

さて, このLessonの冒頭で何を議論していたのか思い出してください。 プログラミング言語として自然言語を使うことはできるかどうかを考えていたのでした。

上で見たように, コンピュータではすべてのものを数字に置き換えて扱います。 ワープロで入力する文字も数字の羅列として記憶されていますし, 「絵」はひとつひとつが24ビット(3バイト)の色をもつ点の集まりですし, 「音」もそれを表す波(音波)を数値の羅列として表現しています。 つまりすべてが「デジタル」なのです。

これに対して, 人間の世界はすべてをデジタルな形式, 数字には置き換えて扱うことのできない世界です。 数字に置き換えられるものは, 人間が関わる世界の一部にすぎないのです。 かなり遠い将来, コンピュータがずっとずっと発達し, 記憶容量も爆発的に増大して, 処理も爆発的に速くなったとき, ひょっとすると, 世界のすべてをデジタルに表現できてしまうかもしれないしれませんが......。

文学作品, たとえば小説そのものを文字としてコンピュータに記憶することはできますが, その小説の良さはどこにあるとか, どのような印象を読者に与えるとかいったことは, まだコンピュータには扱えません。 良い小説とは何かが, 数字で表せるようになっていないのです(良い小説とはどのような小説をいうのかが人間に分かっていないので, コンピュータがよい小説かどうかを判断するための指示を出すことができません)。

「もうちょっと紫っぽい色」などという表現は, 人間には感覚的に理解できます。 しかし, コンピュータで扱おうとすると, たとえば「RGBのRの要素を2, Bの要素を1だけ増やす」などといったようにすべてを数字で置き換えなければなりません。 これとても, コンピュータが「もうちょっと紫っぽい色」を理解したわけではなく, 「もうちょっと紫っぽい色」と指定された場合には「RGBのRの要素を2, Bの要素を1だけ増やす」という操作を対応させるように, 人間がプログラムの中に指定するのです。

「翻訳ソフト」と称するプログラム, 英語を日本語(らしい文字列の並び)に置き換えてくれるプログラムは開発されてはいますが, 満足できる訳が出てくることは多くはなく, その能力は優秀な翻訳者の訳に比べれば, はるかに劣っています。 優秀な翻訳者が原文の表現する「意味」を考えて, それと等価な意味を持つ訳文に置き換えようとしているのに対して, 翻訳ソフトは基本的に文字列のマッチング(検索)を繰り返しているだけなのです。

コンピュータが扱う世界, (現在)扱える世界は, 我々の扱う世界に比べてはるかに狭いのです。 すべてをビットの列, 電球のオンオフで表現できる世界だけです。 コンピュータが「意味」を理解しているわけではなく, 単にビットのオンオフを繰り返しているにすぎません。 それに意味を付けているのは人間の解釈(対応付け)なのです。

自然言語を使ってプログラムを書けるようになるためには, コンピュータが自然言語の意味を理解できるようになっていなければなりません。 そのためには, まず, コンピュータを使って, つまり電球のオンオフを使って, 人間世界を「理解」する方法を人間が考え出さなければなりません。 それは, 実現されるとしても遠い遠い将来の話なのです。

コンピュータの世界を記述するための言葉 ── プログラミング言語

そこで, この講座で勉強するプログラミング言語が登場します。 プログラミング言語は, ビット列, つまり電球のオンオフを使って表現できることがわかっている世界を記述するために(あるいは, まだ電球のオンオフで表現できていないことを, この仕組みで表現できるようにならないかを実験するために), 人間が作り出した言語です。

ビット列だけを扱うからといって, ビット列ばかりが並んでいるのでは, わけがわからないので, できるだけ人間がよく知っている世界に近づけようと, 色々な人が色々なプログラミング言語を作ってきました。 人間がよく知っている世界に近づけるためには, プログラミング言語を自然言語に近づけるのがひとつの方法です。 そこで, 「文(sentence)」とか「式(expression)」といった概念がプログラミング言語にも持ち込まれました。

コンピュータは数字を扱うのだから, 数学の世界を記述するためにこれまで使われてきた数式などが使えると便利そうです。 そういうわけで, 加減乗除などの演算ができるようになっています。 これは, かなり初期の頃のプログラミング言語から取り入れられました。

さらに, コンピュータの用途が広がるにつれて, (自然言語や人工言語の)文字の並び ── 文字列 ── をそのまま扱えるようにしたいということで, 文字列に関して色々な操作が, しかも簡単にできるような機能をもったのような言語も登場しました。

1990年代に入り, インターネットが一般的になってきて登場したのがJavaScriptやJava(ジャバ)などの言語です。 JavaScriptは, ウェブページ(ホームページ)を見るためのブラウザと密接に結びついて, ホームページ上でいろいろな機能を実現することができます。 Javaも, ホームページ上の長方形の枠内に「アプレット(applet)」という特別なプログラムを表示できる機能をもっており, ウェブと深く結びついています(Javaができるのはこれだけではありません)。 Perl(パール)はウェブページが登場する前から存在していた言語ですが, ブラウザとやり取りをして文字列の処理をするのに, とても便利だということで(それまでかなり広く使われていたのですが)ますます多くの人に使われるようになりました。

インターネットに関係して使われるプログラミング言語としてはこのほかにも色々な言語があります。 たとえば, PHP(ピーエイチピー)は「データベース」を使って色々な情報を記録しておいて, それとウェブページとを関連づけて処理をするような場合に便利な機能がたくさん用意されている言語ですし, さらにはRubyという言語や, それを基にしてウェブサイトの作成に便利な機能を提供してくれるRuby on Rails(RoR)といったシステムも登場しています。

Adobe(アドビ)という会社のFlash(フラッシュ)いうソフトウェアには, 画像やアニメーションなどをウェブページ上に表示したり, 対話的に動かしたりするのに便利な機能を備えたActionScriptというプログラミング言語が付属しています。 ActionScriptには, アニメーション作成用の特別な機能が用意されているので, このような用途にはとても便利です。 しかし, JavaScriptやJava, Perlなどの一般的なプログラミング言語に比べると, 応用の範囲はかなり狭くなります。

メモ

ウェブページにFlashで作ったアニメーションなどを表示するには, 「プラグイン」というプログラムをブラウザに組み込む必要があります。 プラグインは, ブラウザだけでは実現できない機能, たとえばアニメーションなど, をブラウザ内で実現するための補助プログラムです。 Flash用にはFlash用のプラグインをコンピュータに「インストール(install)」する必要があります。 なお, Flash用など著名なプラグインは, 最近のブラウザでは標準で組み込んであるものも増えています。

ActionScriptはウェブ用のアニメーション作成用の言語ですが, ウェブ用に限らず, 特定の分野に関して「狭く, 深く」を狙った言語もたくさんあります。 たとえば, 統計用の言語とか, シミュレーション用の言語といたものもあります。 なお, 「プログラミング言語」という言葉を狭い意味で使う場合, このような特定用途向けの言語は含めない場合もあります。

インターネットはプログラミング言語にも大きな影響を与えましたが, インターネットが広まる以前から広く使われており, 今でも使われている言語としては, Fortran(フォートラン), COBOL(コボル), Lisp(リスプ), C言語とその後継であるC++(シー・プラス・プラス)やObjective-C(オブジェクティブC)などがあります。

いずれにしろ, ほとんどすべてのプログラミング言語に共通する手法や概念は, この講座で学ぶことができるので, 将来どのような言語を学ぶときにも, まごつかずにすむはずです。 ただ, ここで学ぶJavaScriptはかなり新しい部類の言語なので, すぐ上にあげたようなやや古い言語を使うときは, 機能的に劣っていることで苦労することがあるかもしれません(C++やObjective-Cなどは比較的新しいので, 機能的にはそれほど困らないでしょう)。

ウェブページを記述する言語 ── HTML

ウェブページ用の「言語」として一番大事なものが残っています。 それはHTML(HyperText Markup Language, ハイパーテキスト用マークアップ言語)です。

HTMLは, ウェブページそのものを記述するのに使われるもので, 「プログラミング言語」としては扱われません。 ウェブページに表示する内容を記述するための言語で, ページに表示する文字や画像などのデータや, ある文字列がそのページでどのような役目をするものか(たとえば「タイトル(表題)」だとか「リンク」だとか)を表します。 コンピュータへの命令を並べてそれを実行することにより何らかの操作を行うために使う「プログラミング言語」ではありません。

メモ

HTMLの中にプログラムを「埋め込む」ことができます。 この講座で学ぶJavaScriptはHTMLに埋め込まれる形で実行できる言語です。 Javaのプログラムも少し形式は異なりますが, HTMLの文書に埋め込んで実行することができます。 JavaScriptについてこの後の各Lessonで説明していきます。

この講座では, ウェブ用のプログラミング言語であるJavaScriptについて学びますが, この言語ではHTMLで書かれた文字列を色々な形で利用して, ウェブページを変化させます。 このため, ウェブページを記述するための言語であるHTMLに関する知識も必要になります。 次のLessonでHTMLの概要をひと通り説明し, 以降必要に応じてHTMLに関して必要な知識を追加していきます。

プログラムを作るための準備 ── 心の準備

最後に, プログラミングを学ぶに際して準備しておいていただきたいことをあげておきましょう。 まずは, 心の準備です。

まず, プログラミングではいろいろなことが, 1ではなく, 0から始まります。 たとえば, これから学ぶJavaScriptでは, 1年の最初の月を表す数字は1ではなく0になっています(「0月」から始まるわけです)。 これがよいか悪いかは別問題として, ともかくそう決まってしまっているので, そういうのに慣れていただくしかありません。

コンピュータは融通が利きません。 これはもう, ワープロソフトなどを使う場合でも, かなり経験しているのではないかと思いますが, プログラムを作るとそう思う度合いがかなり増すはずです。 1000行に渡るプログラムを書いたとき, たったひとつ「"」(引用符)を書くのを忘れても, そのプログラムは動きません。 人間なら, 1ページに2つや3つの誤字脱字があっても, 文書の内容を問題なく理解できますが, プログラムを書くときは, とにかくひとつでも間違いがあれば, それで動かなかったり, 自分の意図とは違う動作をしたりします。 昔々, 「,」と書くべきところで「.」と書いてしまったがために, ロケットの打ち上げに失敗したことがあったというのは, プログラミングの世界では有名な話です。

最初は, この融通のなさに, ほとほと参る(頭に来る)ことと思います。 しかし, 逆に見れば, コンピュータはまことに忠実な僕(しもべ)でもあるのです。 どんなに単純な作業を, どんなに長い間するように命令しても, 文句はまったく言わずに実行してくれます。 この長所をこそ生かすべきなのです。

プログラムを作るための準備 ── ものの準備

この講座の受講するには, さしあたって(このテキスト以外は)何もいりません。 書いてあることを読むだけで, プログラミングの世界を仮想的に体験できるでしょう。 実行した場合の様子は, 図があるのでだいたい想像ができるはずです。

しかし, プログラミングの技術を身につけようとするには, 実際にプログラム(やHTMLの文書)を作ってみて実際に動かしてみなければなりません。 スポーツやもの作りと同様, ただ見ているのと, 実際にやるのとは大違いなのです。

実際にプログラムを作るためには, さしあたってインターネットのホームページ(ウェブページ)が見られるパソコンがありさえすればそれで十分です(既にこのページをご覧になっている皆さんはこの条件は満たされています)。 JavaScriptのプログラムを作るのにも, インターネットが見られて, JavaScriptが実行できるなどのブラウザと, 「メモ帳」などの「エディタ」(あるいはWordなどの「ワープロソフト」)があれば大丈夫です。 そして, ほとんどすべてのパソコンにはどちらも標準で付属しています。

プログラムを書くためには, 「エディタ」か「ワープロソフト」がいりますが, どちらかというとエディタの方が, プログラムの作成には向いています。 Windows(ウィンドウズ)ならば「メモ帳」, Macintosh(マッキントッシュ)ならば「テキストエディット」, Linux(リナックス)などUnix(ユニックス)系のOSならば, vi(ブイアイ)やemacs(イーマックス)などのエディタが, 特に何もしなくても使えるようになっているはずです(MacintoshもUnix系のOSなので, viやemacsなどが使えます)。

ワープロソフトでは, いろいろな書体の文字を使ったり, その大きさを変えたり, 画像を配置したりといったことができますが, エディタでは(基本的には)同じ書体の同じ大きさの文字だけを入力・編集するようになっています。 プログラムを作る際には, このような文字の情報だけを使います。 このような文字の情報だけを記憶したファイルのことを「テキストファイル」あるいは「シンプルテキストファイル(simple text file)」「単純テキストファイル」などと呼びます。 プログラミングをする際には(通常は)テキストファイルだけしか扱いません。

フォルダを使った整理

プログラムを書いたら, コンピュータにある「ハードディスク」にファイルとして保存しておく必要があります。 これは, ワープロや表計算ソフトなどの場合と同じです。 Windowsならば「ドキュメント」(あるいは「マイ ドキュメント」)の下に保存しておけばよいでしょう(もちろん, 自分の好みで適当な場所においてもかまいません)。

できれば, 「ドキュメント」などの直下ではなく, この講座専用の「フォルダを作っておくとよいでしょう。 たとえば「プログラミング」などとしてもよいでしょう。 ただし, 先々のことを考えると「programming」などと英語にしておいた方が好都合です。 キーの入力が少なくてすみますし, 他のコンピュータにコピーするときに, 「文字化け」の危険がなくなります。

フォルダを作るには, たとえば「メモ帳」の「名前を付けて保存」で表示される「ダイアログボックス」(図1-4a, 図1-4b)で, 「新しいフォルダ」のメニュー項目(あるいは「新しいフォルダの作成」のアイコン)をクリックするのが簡単です。 すると「新しいフォルダ」という名前の新しいフォルダができるので「programming」などと入力すればよいのです。

図1-4 ファイルの保存時にフォルダを作るメニュー項目(Windows 7)
図1-5 ファイルの保存時にフォルダを作るアイコン(古いOS)

もっときちんと整理したい人は, Lesson 1, Lesson 2, ...に対応して, lesson01, lesson02, とprogrammingフォルダの下に, 「サブフォルダ」を作っていく方法もあります。 01, 02と頭に0を付けるのは桁をそろえるためです。 また, こうしておくと, 一覧したときに順番にlesson01から並んでくれます。

次章の最初の例題を保存する際に, 「ドキュメント」(あるいは「マイ ドキュメント」)の下で「programming」というフォルダを作り, 続いてprogrammingをダブルクリックしてその下に行き「lesson01」というフォルダを作って, その下にファイルを保存すればよいでしょう。

まとめ

プログラミング言語とは何か, コンピュータ内で数や色, 文字などを表現する方法を紹介しながら説明しました。

DHC-オンライン講座
文系の人にもわかる プログラミング入門
Lesson 1