情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

Node.jsで始めるプログラミング入門講座 第1回 プログラミングとは何か

2016/07/30

この記事は「Node.jsで始めるプログラミング入門講座」という連載記事の1つ目の記事です。

その他の記事に関しては下を参照してください。

プログラミングとは何か?

この連載記事はプログラミングについて何も知らない方も対象としているため、まずプログラミングという言葉の意味から明らかにしなければならないかと思います。

分かりやすく一言で言うと、プログラミングとは、

  • ソフトを作ること

です。

流石にソフトがどんなものか分からない方はここにはおられないかと思いますが、例を挙げれば、「ワード」や「エクセル」や「ブラウザ」などのことです。

ゲームソフトもソフトの一種ですね。

このような「ソフト」を作ることをプログラミングと言います

ただ、上で挙げた「ワード」や「エクセル」や「ブラウザ」のようなソフトはとても大規模なソフトで、それらを開発する(「ソフトを作る」ことを「ソフトを開発する」と言うこともあります)のにはとても多くの人が係わっています。

そのような人の中には「ソフトの企画書を書く」という役割で参加している人もいますし、「ソフトの取り扱い説明書を作成する」という役割で参加している人もいます。

そのような人も広い意味では「ソフトを作っている」と言えますが、プログラミングと言った時には「ソフトの企画書を書く」とか「ソフトの取り扱い説明書を作成する」というような作業は含まれないのが普通です。

プログラミングと言った時は「実際に動くものを作る」という意味合いが強いです。

なお、上で「ワード」や「エクセル」や「ブラウザ」を例に出しましたが、この連載記事で作るソフトというのは「ワード」や「エクセル」や「ブラウザ」のようなとても大規模なソフトと比べるとずっと小さい、初心者でも1人で作れるようなとても小規模なものです。

はっきり言って、ソフトと言うには小さ過ぎるものも含まれます

何もプログラミングについて知らない人が持っていがちなイメージとして「プログラミングは何でもできる魔法みたいなもの」というものがありますが、それは基本的には誤解です。

確かに、やろうと思えば何でもできないことはないかもしれません。しかし、それは膨大なお金を投じた時だけです。

1人でできることには限度があります

なので、初心者の方は「プログラミングを覚えれば凄いことが難なくこなせる」みたいなイメージはあまり持たない方が良いかと思います。

プログラミングに対して大きな期待感を抱いている方がおられたら、早々にやる気を挫くようで申し訳ないのですが、それが現実です。あなたの期待はちょっと大き過ぎるかもしれません。

ただ、私は初心者の方にはなるべく早くそのことを認識していただくのがプログラミングを教える者の態度として誠実だと思っていますし、だからこそ、第1回目の記事でこの点について触れています。

プログラミングを覚えれば「ワード」や「エクセル」や「ブラウザ」のようなものが簡単に作れるということでは決してありません(「ワード」や「エクセル」や「ブラウザ」を極限までシンプルにしたものなら個人でも作れないことはありませんが)。

プログラミングを習得して1人でできることの規模感としては下くらいが妥当です

  • 仕事で自分が行っている作業を効率化するためのソフト。
  • 個人的な記録を管理するためのソフト。
  • ちょっとしたゲーム。
  • ちょっとしたウェブサイト。掲示板やチャットやSNS連携サービスなど。

ただし、ウェブサイトの場合は、作ることと運営することは全く別です。掲示板サイトを1人で作ることは可能でも、大規模な掲示板サイトを運営することは1人ではできないかもしれません。

もっと大規模なソフトを作る場合、1人では中々難しいです。その場合は、チームで作っていくしかないです。

ただ、この連載記事は初心者向けのものなのでチーム開発まで踏み込むことはありません。

1人で作れる規模のソフトをプログラミングできるようになるのをサポートするのがこの連載記事の目的です(とは言え、1人で開発することもままならない状態でチーム開発を行うことはできません。まずは個人開発をマスターする必要があります)。

何にせよ、自分の作りたいソフトがどれくらいの規模感なのかとか、自分の作れる(自分がこれから作れることになるだろう)ソフトの規模感がどれくらいになるのかを知っておくのは大事です。

ソフトは何の上で動いているのか?

さて、長々と書いてしまいましたが、プログラミングとは(規模の大小を問わず)ソフトを作ることでした。

つまり、プログラミングを学ぶというのはソフトの作り方を学ぶということに他なりません。

この「ソフトの作り方」にこの連載記事全体を通してこれから迫っていきたいと思うのですが、何も知らない方からすればどうやって迫っていけば良いか何も分からないことと思います。

なので、まずはソフトというものを少し遠くから眺めてみましょう。

ソフトには使う人がいます。これをユーザと言ったりしますが、皆さんも今まで色々なソフトを使ってきたことと思います。皆さんは今までユーザでしたし、これからもユーザであり続けるでしょう。

そして、使う人がいれば作る人もいます。ソフトを作ることをプログラミングと言うというのは前項で話したことですが、ソフトを作る人をプログラマと言います。プログラミングをする人だからプログラマです。皆さんはこれからプログラマになっていくということです。

これらの関係を図示すると下のようになるでしょう。

さて、プログラマの卵である皆さんにはまだプログラマ側のことは全然分からないかと思いますが、ユーザ側のことはある程度は分かっているかと思います。

そもそも皆さんはソフトをどうやって動かしていたでしょうか?

たとえば、あなたが「ワード」を使いたい時、あなたは、

  • パソコンの電源を入れました。
  • すると、自動的に「ウィンドウズ」が立ち上がって、暫くするとログイン画面になりました。
  • 正しいパスワードを入力すると、デスクトップと呼ばれる画面に切り替わって、どんなソフトでも正しくインストールされているものなら起動できる状態になりました。
  • そして、「ワード」を起動しました。

このように、パソコンと「ウィンドウズ」を立ち上げて(「ウィンドウズ」は何もしなくても勝手に立ち上がるのですが)、漸く「ワード」を立ち上げられるようになっていたはずです。

つまり、「ワード」のようなソフトはパソコンとか「ウィンドウズ」に依存していてソフト単体で動くことはできません

言うなれば、ソフトはパソコンや「ウィンドウズ」の上で動いている訳です。

これを先程の図に付け加えると下のようになります。

ソフトはパソコンや「ウィンドウズ」なしでは動かないので、パソコンや「ウィンドウズ」の上に来ます。そして、「ウィンドウズ」はパソコンなしでは動かないのでパソコンの上に来ます。なので、下から「パソコン」、「ウィンドウズ」、「ソフト」という順番になります。

そうすると、「ウィンドウズ」の上で動くソフトを作るには「ウィンドウズ」の上で何か作業をしてソフトを作ってやれば良いのだろうということになります。

ここまで分かれば、パソコンが内部で何をしているのかとか、「ウィンドウズ」が内部で何をしているのかとか、ソフトが内部で何をしているのかとかを詳しく見ていけばどうやってソフトを作っていけば良いのかが見えてきそうです。

パソコンは何をしているのか?

まずはパソコンが内部で何をしているのか見ていきましょう。

パソコンについて知らなければならないので、取り敢えず、「パソコン」で辞書を引いてみましょう。

「パーソナルコンピューター」の略。

どうやらパソコンはパーソナルコンピュータの略のようです。しかし、パーソナルコンピュータとは何でしょうか?

では、「パーソナルコンピューター」で辞書を引いてみましょう。

家庭や仕事場での個人使用を目的とする小型コンピューター。パソコン。

「コンピュータの中でも個人用のコンピュータをパソコンと言う」という、ただそれだけのことのようです。要は、パソコンはコンピュータだということです。

ということは、パソコンが内部で何をしているのかを理解するためには、コンピュータが内部で何をしているのかを理解しなければならないということになってきます。

という訳なので、取り敢えず、辞書で「コンピューター」を確認しましょう。

計算機。特に、電子計算機。トランジスター・IC・LSIなどの電子回路を用いて、高速度で計算やデータ処理、また、情報の記憶保存・検索などができる装置。1946年に米国で開発されたENIAC (エニアック) が最初。

・・・。

ちょっと難し過ぎて何を言っているのかよく分かりません。

でも、大事なのは最初の言葉だけです。

計算機

そうなのです。コンピュータとは計算する機械なのです。だから、コンピュータの一種であるパソコンもまた計算する機械なのです。

もしかしたら、パソコンがただの「計算する機械」でしかないとしたら、「ワード」や「エクセル」や「ブラウザ」のようなソフトがどのように動いているかまるで分らないかもしれません。

計算しかできないのに、「ワード」や「エクセル」や「ブラウザ」のようなものを動かすことができるとしたら、とても不思議に思えます。一体全体どうなっているのでしょうか。

はっきり言ってしまうと、「ワード」や「エクセル」や「ブラウザ」の大部分は「計算」によって動いています。

全てが「計算」だけで動いているとまでは言いませんが、あなたが「ワード」の画面でキーボードから文字を入力して画面にその通りの文字が表示されるのも、「エクセル」で多彩なグラフを挿入できるのも、「ブラウザ」で様々なデザインのページが表示できるのも、全部パソコンの「計算する機能」によって成り立っています。

ゲームも同じです。

あなたのゲームキャラクターがあなたの指示通りに動くのも、敵キャラクターがあなたのキャラクターを倒そうと様々な動きを仕掛けてくるのも全て計算です

結局、一言で言えば「パソコンは計算する機械」なのですが、もう少し詳しく言うと、パソコンは計算する部分のみからできているという訳ではなく、特定の役割を持つ幾つかの部分からできています。

具体的に言うと、パソコンは下の5つの構成要素からできています(これをコンピュータの5大装置と言ったりします)。

  • 入力装置
  • 演算装置
  • 出力装置
  • 記憶装置
  • 制御装置

1つ1つを簡単に見ていきましょう。

入力装置というのは、ユーザ(パソコンから見れば、前項で説明した意味での「ユーザ」と「プログラマ」を区別する必要はありません。どちらも「パソコンを使う存在」であって「ユーザ」です。パソコンから見れば、ユーザがソフトを使う者なのか、あるいは、ソフトを作る者なのかは知ったことではないのです)がパソコンを操作するための装置です。たとえば、キーボードやマウスなどです。パソコンを操作するというのはパソコンにある種の「計算」を行わせるということです。

演算装置というのは、「計算」を行う装置です。通常はCPUという装置がこの役割を担います。パソコンは電気で動く機械です。それでどうやって「計算」を行っているかというと、電気が流れて「いる」か、流れて「いない」かという「2つの状態」を巧みに利用することで「計算」を実現しています。電気が流れている状態を1と見做したり、電気が流れていない状態を0と見做したりするのです。詳しい仕組みについては気にしなくて結構ですが、パソコンの「計算」は10という「2つの状態」によって実現されていると、何となく知っておいた方が良いかもしれません。

出力装置というのは、パソコンが行った「計算」の結果をユーザに向けて表示するための装置です。たとえば、ディスプレイやプリンタなどです。

記憶装置というのは、「計算」の途中結果や最終結果を一時的又は半永続的に保存しておくための装置です。

制御装置というのは、他の4つの装置がきちんと噛み合って動くように制御を行うための装置です。

これらの装置とユーザの関係を図にすると下のようになります。

このようにして、ユーザはパソコンに対して様々な「計算」をさせることができます。

余談

パソコンはコンピュータの一種でしたが、コンピュータには他にも様々なものが含まれます。

身近なものとしては、パソコン以外に主に下のようなものがあります。

  • スマートフォン
  • タブレット
  • ゲーム機

そして、これらの機器の上でもソフトが動いています

更に言えば、これらの機器の上で動くソフトを作ることもプログラミングと言います

ところが、パソコンの上で動くソフトをそのままスマートフォンの上で動かしたりだとか、スマートフォンの上で動くソフトをそのままゲーム機で動かしたりすることは基本的にはできません

パソコンにはパソコン専用のソフトが、スマートフォンにはスマートフォン専用のソフトが、他の種類のコンピュータにはそれ専用のソフトが必要なのです。

それは「ワード」をパソコンにインストールして使うことはできても、「ワード」をスマートフォンにインストールして使うことは基本的にはできないことからも分かるでしょう。

そのため、プログラマの側から見れば、たとえば、パソコンとスマートフォンの両方で使えるソフトを開発しようと思ったら、パソコン専用のものとスマートフォン専用のものを別々に作らなければならないということになります。

実際にはパソコンとスマートフォンのソフト開発プロセスをある程度共通化するための技術なども発展してきてはいますが、完全に同じソフトをパソコンとスマートフォンで使い回すというのはあまり現実的ではありません。

なお、この連載記事ではコンピュータの中でも特にパソコンの上で動くソフトの作り方を解説していきたいと思っています。

スマートフォンやタブレットやゲーム機の上で動くソフトの作り方についてはこの連載記事の対象外です。しかし、この連載記事で学べるプログラミングに対する考え方はスマートフォンやタブレットやゲーム機の上で動くソフトを作る際にも必ず役立ちますので、初心者の方は是非最後までこの連載記事を読んでいただけたらと思います。

ソフトは何をしているのか?

パソコンが内部で何をしているのか分かったところで、次はソフトが内部で何をしているのか見ていきましょう。

ソフトとはユーザに対して様々な機能を提供し、ユーザの指示に応じて適切な作業を行うものです。

たとえば、「ブラウザ」の場合、

  • ユーザがアドレスバーにアドレスを入力したらそのアドレスのウェブページを表示する。
  • ユーザが「戻るボタン」をクリックしたら前のページに戻る。
  • ユーザが「進むボタン」をクリックしたら次のページに進む。

などの作業をユーザの指示に応じて行います。

一方で、パソコンができることと言えば、「入力」を受け取ることや、「計算」を行うことや、「出力」を行うことなどでした。

ということは、たとえば、「ブラウザ」における「戻るボタン」のような、ソフトがユーザに対して提供する機能というのは、パソコンができる「計算」などの機能を組み合わせて実現しなければならないということです。

この構図を纏めると、ユーザはソフトに対して指示を出し、ソフトはパソコンに対して指示を出し、パソコンは指示に従って動き、ソフトはパソコンから結果を受け取り、ユーザはソフトから結果を受け取るということです。

つまり、

  • ユーザの「指示」をパソコンが理解できて実行可能な「計算」という形に変換して伝える
  • パソコンの「計算」の結果をユーザに分かるように伝える

のが、ソフトの役割であるということになります。

なので、ソフトを作成するプログラミングにおいては、ソフトのあらゆる機能をどうやって「計算」というものに落とし込んでやるかということが1つのポイントとなってきます。

そして、その落とし込んだ「計算」をプログラミングしていくことになります。

何も知らない方にとっては「ソフトの機能を「計算」に落とし込む」と言っても言葉だけではちんぷんかんぷんで訳が分からないかもしれませんが、今後とても簡単な「計算」の例から少しずつ複雑で難しい「計算」に進んでいく中で徐々に「ソフトの機能を「計算」に落とし込む」というイメージが得られていくかと思います。

予め言っておくと、簡単な「計算」の例から難しい「計算」に進んでいく中で、「計算」という言葉の意味する範囲がどんどんどんどん広がっていきます。

現時点では「計算」と言うと「数の計算」くらいしか思い浮かばないかと思いますが、最終的には様々なものが「計算」として捉えられるようになります。逆に言えば、様々なものを明確な形で「計算」として捉えられるようになったということは「プログラミング力が上がった」ことを意味します。

今後追々少しずつ「計算」の意味を広げていきますので、楽しみにしていてください。

ウィンドウズは何をしているのか?

さて、最後に、「ウィンドウズ」が内部で何をしているのか見ていきましょう。

ここまでの「パソコンは何をしているのか」、「ソフトは何をしているのか」という説明では「ウィンドウズ」は一切登場しませんでした。

なので、「ウィンドウズ」なんて必要ないのではないかと思うかもしれませんが、それはある意味では正しいです。

しかし、「ウィンドウズ」がなかったら、色々と面倒なことが起こってしまうのです

そこで、「ウィンドウズ」がない場合に何が起こるかを考えてみましょう。

まず、ソフトを使用するユーザ側から考えますが、「ウィンドウズ」がないとソフトを立ち上げるのも一苦労です

というのは、ソフトを立ち上げたかったらパソコンに対して「ソフトを立ち上げろ」という指示を出さなければならないからです。

ソフトを立ち上げてしまいさえすれば、パソコンのことをあまり知らないユーザでも分かるように導いてくれるソフトにただただ付き従って、ソフトに対して指示を出していれば、後はユーザが望んだことをソフトとパソコンの間で良しなに取り計らってくれます。

言わば、ソフトというのはパソコンを使いこなすためのガイドでありインストラクターでありアドバイザーでもあるということです。

しかし、ソフトがまだ立ち上がっていない状態ではソフトに頼ることができません。

先程言ったように、パソコンは01で「計算」を行っている、人間にとっては取っつきにくい存在です。

もし、ソフトを立ち上げるのに、パソコンに対して01だけを使って「ソフトを立ち上げろ」という指示を出さなければならないとしたら、ユーザは困ってしまいます。

そして、そこで登場するのが「ウィンドウズ」という訳です。

「ウィンドウズ」はソフトのインストールやアンインストールを制御し、現在インストールされているソフトを管理し、ユーザがソフトを立ち上げたい際にユーザの代わりにパソコンに「ソフトを立ち上げろ」という指示を出すことで、パソコンの内部についてよく知らないユーザでもソフトを簡単に立ち上げることができるようにします。

ソフトを立ち上げてからユーザを導くのはソフトの役割です。

ゆえに、「ウィンドウズ」はユーザがソフトを立ち上げるまでのガイドとかインストラクターとかであると考えることもできます。

もちろん「ウィンドウズ」の役割はそれだけではありません。

今度は、ソフトを作成するプログラマ側のことを考えてみましょう。

たとえば、「ユーザがキーボードで入力した文字を画面に表示する作業」をプログラミングしなければならないとします。

まず第一に、キーボードからの入力を何とかして受け取らなければならないということになりますが、よく考えてみるとキーボードにも色々な種類があります。

色々なメーカーがキーボードを生産しているというのもありますし、この世の中には日本語キーボードもあれば、英語キーボードもあれば、その他の言語のキーボードもあります。それらはキーの数や入力できる文字などが異なっています。

そうすると、プログラマはあらゆるキーボードに対応するためにあらゆるキーボードに対する指令をキーボード毎に個別に行っていかなければならないのでしょうか。

だとしたら、プログラマの仕事が膨大なものになってしまいます。途轍もなく大変そうです。

そして、そこで登場する救世主が「ウィンドウズ」という訳です。

つまり、そういった「汚れ仕事」は全部「ウィンドウズ」が引き受けてくれるということです。

そして、プログラマはキーボードに直接指令を与えるのではなく、「キーボードから入力された文字を受け取る」という形で間接的にキーボードを取り扱うことができるのです。

プログラマは実際に存在している物理的なキーボードを扱うのではなく、様々なキーボードの差異を吸収して、ただ1つ「仮想的に」存在するキーボードを取り扱うのです。

このことを抽象化と言いますが(キーボードの場合、キーボードに必要な要素だけを抽出して分かりやすく取り扱いやすい形で編成するということです)、「ウィンドウズ」は様々なものを抽象化してくれます。

結果として、プログラマは様々なものを比較的簡単に取り扱うことができるようになるという訳です。

このような理由からパソコンを使用する際には「ウィンドウズ」は必須のものです。

ちなみに、「ウィンドウズ」のような役割を果たすものをオペレーティングシステムと言います。

なので、パソコンを使用する際には「ウィンドウズ」が必須と言うのはやや語弊があって、正確にはパソコンを使用する際にはオペレーティングシステムが必須と言うべきです。

オペレーティングシステムには「ウィンドウズ」以外にも「マック」、「リナックス」など幾つかのものがあります。

そして、「ウィンドウズ」には「ウィンドウズ」専用のソフトが、「マック」には「マック」専用のソフトが、他の種類のオペレーティングシステムにはそれ専用のソフトが必要です。

なお、この連載記事ではオペレーティングシステムの中でも特に「ウィンドウズ」の上で動くソフトの作り方を解説していきたいと思っています。

「マック」や「リナックス」の上で動くソフトの作り方についてはこの連載記事の対象外です。しかし、この連載記事で学べるプログラミングの方法は「マック」や「リナックス」でもほぼ同じように行えますので、「ウィンドウズ」がインストールされているパソコンを持っていないという方でもこの記事を読んでプログラミングを習得することは可能だと思います。

まとめ

  • ソフトはユーザの指示を受け取ってパソコンにそれをやらせるもの。ユーザの指示をパソコンが分かる形に変換する。
  • プログラマはソフトを作る人。プログラミングはソフトを作ること。

今回はここまで

今回はここまで

お疲れ様でした。

今回は「プログラミングとは」ということで文章ばかりになってしまいました。

なるべく分かりやすく説明したつもりですが、プログラミングとは何をすることなのか見えてきたでしょうか?

次回は「プログラミング言語」というものに関するお話です。次回も文章ばかりになってしまうかと思いますが、より具体的にプログラミングというものを見ていきたいと思います。

あでぃおすぐらっしあー。

pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-プログラミング, 講座