最初の目標
さっそくプログラミングを始める前に、まずプログラミングとは何なのかを少し考えてみたいと思います。厳密な位置づけではなく、だいたいこんな感じだというイメージさえできれば良いです。何しろ、ここは初めてプログラミングをしようとしている人が読んでいるという想定なので、こんなところで難しく考えても仕方ないです。
プログラミングって難しい?
この問いはちょっとやっかいです。別の問いに置き換えてみると何を問おうとしているのかはっきりするかもしれません。
- 小説書くのって難しい?
- 絵描くのって難しい?
- 楽器って難しい?
- カスタネットって難しい?
- 料理って難しい?
- ラーメンって難しい?
- 英語って難しい?
- ラテン語って難しい?
- 数学って難しい?
- 微積分って難しい?
どの問いにおいてもどこを目標としているのがどのくらいなのかはっきりしないためなんとも言えないのです。今はまだまったくプログラミングをしたことがないことなので、「プログラミングって簡単に始められる?」という問いに置きかえてみます。
もし自分用のPCを所有していて、インターネットに接続できる環境があるなら、すぐにでも始めることができます。しかし、簡単とはいいません。カスタネットより簡単には始められないかもしれませんが、ギターよりは簡単に始められるかもしれません、といったところです。カスタネットはそのままで期待する音のでるものですが、ギターは(普通は)弦を張ったりチューニングが必要だからです。
難しいかどうかより、プログラミングの能力を向上させるために遥かに重要な性質は、楽しいかどうかです。楽しくなければ絶対長続きしませんし、学習効率も下がります。最初の段階ではプログラミングの適正は、その人の思考形態ではなく、むしろプログラミング自体を楽しめるかどうかといった心理的なものではないだろうかと思います。
そういう考え持っているので、このシリーズでは楽しいかどうかを重要視していきます。
プログラミングって具体的には何するの?
狭い意味では、プログラミング言語と呼ばれるものを使ってコンピュータのプログラムを作成します。広い意味ではそれに付随する様々な行為、例えばドキュメントを書いたりすることもまたプログラミングに含めます。これでは答えになっていないと思うのでもう少し噛み砕いてみます。
コンピュータはハードウェアとソフトウェア両方が揃って初めて人間にとって便利なものになります。ハードウェアとはパソコンの場合、どかんと机の上に鎮座しているその物体です。パソコンの箱の中身はマザーボートと呼ばれる基盤にCPUとかメモリモジュールなどが取り付けられています。ノートパソコンや、iMacのように箱がなくてディスプレイと一体化されたパソコンを使っているかもしれません。それらも省スペース化のための様々な工夫がされてはいますが、基本は同じだと考えることができます。この物体はどういう仕組みで動いているのでしょう。何をどうしたらディスプレイにデジカメで撮影した写真を表示したり、音楽を再生したり、Amazonで買物をしたりすることができるようになるのでしょう。この物体を机のスペースを占領するだけの価値のあるものにしているのはソフトウェアです。ソフトウェアはCPUの処理能力やメモリの記憶領域を利用して人間にとって意味のある仕事を行います。ソフトウェアがなければパソコンはただのオブジェ以外の用途がありません。ゲームソフトが1本もないゲーム機を想像してみるとイメージしやすいかもしれません。ソフトウェアはパソコン以外にも様々なところに存在します。携帯電話はもちろん、テレビ、電子レンジ、洗濯機、自動車、飛行機といったもの中にもです。
ソフトウェアは主にプログラムによって構成されます。「主に」といったのはソフトウェアにはデータのようなプログラム以外のものも含むことがあるからです。ですのでソフトウェアとプログラムという用語はまったく同じという訳ではありません。ソフトウェアは複数のプログラムを集めて何らかの目的を達成するものであったりします。より利用者に近いものであると言えるでしょう。プログラムはプログラミングによる成果物という意味合いがやや強いです。しかし、日常的に厳密な使い分けがされている訳でもなく、混同して用いられる用語です。「これはソフトウェアだ、プログラムではない」「これはプログラムだ、ソフトウェアではない」などという使い分けをすることはあまりないです。
ソフトウェアもプログラムも「作る」と言うかわりに「書く」と表現することがしばしばあります。
- ソフトウェアを書く
- プログラムを書く
といった具合です。これは暗にソフトウェアやプログラムがプログラミング言語を用いて作られていることを表しています。コンピュータのハードウェアはデジタル装置であり、0と1によるデータしか解釈しません。プログラムもまた0と1によるデータによって表現されます。0と1を人間が直接扱うのは極めて困難です。そこで人間が扱いやすいように抽象化とでも言うべきテクニックが使われます。例えばアルファベットを扱えるようにするために「01000001」の代わりに「A」とするといった具合です。抽象化は人間の認識しやすいように詳細を隠してしまうことで、一種のレイヤーを設けることでもあります。コンピュータに置いて抽象化は重要です。普段使っているパソコンの画面のアイコンやフォルダやファイルなどがハードウェアに理解されるまでには何段もの抽象化が行なわれています。抽象化は便利なのですが、あまりに詳細を無視しすぎてしまうと、プログラムを書くときは不便になります。例えば、プログラミングが猫の鳴き声を組み合わせて作るものでなければならないとしたらどうでしょう。これはやり過ぎです。プログラミング言語を使ってプログラムを書くことは、詳細を隠し過ぎることなく、かといってハードウェアに近過ぎることなく、ちょうどいい抽象化の落とし所だと言えます。
最初の「プログラミングは具体的に何をするのか」という問いに戻ります。プログラミング言語を使ってプログラムあるいはソフトウェアを書くと言うところまでは先に述べた通りです。それに付随する様々なことを行ないます。
- 設計
- プログラムをどのように作るかを決めます。
- コーディング
- プログラミング言語でコードを書きます。
- テスト
- プログラムが期待した通りに動作するか調べます。
- デバッグ
- プログラムにおかしなところがないか探して、あればその原因を特定して直します。
- 保守
- プログラムが完成して利用されるようになった後も、変更が必要になったら修正したり、メンテナンスを行います。
他にもあるでしょうが、大体はこんな感じです。こんなにいっぱいやらなければいけないのか…と思う必要はないです。最初のうちは何かひとつプログラミング言語を選択して、それを中心に何かを作ってみることから始めるのが良いかと思います。完璧に設計の手法を身に付けるまで一切コードを書かないというやり方はまったくもってお勧めできません。
コードという用語を何気に使いました。コードとは何らかの規則をもった奇妙な文章です。プログラミング言語のコードとは、そのプログラミング言語の決めた規則に沿って奇妙な文章を書くこと、とも言えるでしょう。おそらく初めてプログラミングをに触れるとき、最も大変なのが言語の規則を覚えてこの奇妙な文章の書き方を身に付けることです。しかし、もしそれが楽しいと思えればさほど苦痛は和らぐ、むしろ快感になるのではないか思います。そこを重視したいと思います。
最初の段階でプログラミングとは具体的に何をするのかを一言で言うと、細かいことはひとまず無視しておいて、「プログラミング言語を使ってコードを書く」ということです。
Hello World
「プログラミング言語を使ってコードを書く」のは、もしパソコンでこのページを見ているならすぐにでも始めることができます。Windowsならメモ帳を起動して、次のような奇妙な文章を入力することです。
#include <iostream>
int main()
{
std::cout << "Hello, world!\n";
}
メモ帳を起動する方法はいくつかあります。Windows 10なら画面左下にある検索ボックスに「notepad」と入力すると、結果にメモ帳が表示されるので、それをクリックすると起動します。別の方法は、キーボードの左下の方にあるWindowsのマークが付いたキーを押しながらRキーを押すと「ファイル名を指定して実行」というのが現われるので、そこに「notepad」と入力してOKをクリックすることでも起動できます。
これはC++というプログラミング言語で書かれたコードです。現時点でこのコードの意味を理解する必要はまったくありません。大体こんな感じなんだなという雰囲気だけ感じてもらえれば十分です。
メモ帳にこのコードをキーボードを使って打ち込んでいきます。コピペすることもできますがコードのコピペをする習慣を早い段階で排除しておきたいので、なるべく自分でタイプして入力することをお勧めします。
書き終えたら、一応ファイルを保存しておきます。場所は適当でいいです。名前は「"hello.cpp"」のようにします。二重引用符で囲むのがポイントです。そうしなければ、メモ帳がファイル名の末尾に「.txt」を勝手に付け足してしまうからです。
Windowsのデフォルトの状態では、ファイル名の末尾の「.txt」のような拡張子と呼ばれる部分が表示されないようになっています。プログラミングをするにあたっては不便なことの方が多いので、表示させるようにしておくのがお勧めです。やり方は「拡張子 表示」などでググってみてください。
これで初めてのコードを書いたことになります。しかし、コードを書いただけでは、このままではこのコードは何の仕事もしてくれません。
最初の目標は、このコードをプログラムとして動作させることです。このコードは、新しいプログラミング言語を始めるときなどにうまく動作しているかどう試すためによく使われる、Hello Worldなどと呼ばれるプログラムのコードです。また、プログラムを記述したコードをソースコードと呼びます。もしこのプログラムを動かすことができれば、コンソールと呼ばれるテキストだけでできた画面に「Hello, world!」と表示されるのを目にすることで、プログラムが動作していると確認することができます。それは、プログラミングができる環境が整ったということの確認でもあります。
ソースコードをプログラムとして動かすためには、別のソフトウェアが必要になります。プログラムを作るのにもプログラムが必要になるのです。WindowsにはC++言語で書かれたソースコード動かすためのソフトウェアは、最初からは用意されていません。自分でインストールしてやる必要があります。
初めてプログラミングを学ぶときにネックになるのがこの部分です。どのようなソフトウェアを用意すればいいのか、絶対こうしなければいけないという決まりはありません。いくつも選択肢があります。このシリーズで採用するのは、FreeBSDというOSを仮想マシンで用意して、その中でプログラミングをするという方法です。FreeBSDにはプログラミングのための様々なソフトウェアが豊富に用意されています。このような、OSやソースコードをプログラムとして動かすためのソフトウェア一式など用意してプログラミングのために整えられた環境を開発環境と呼びます。
最初の目標はHello Worldを動作させることだと言いましたが、言い替えれば開発環境を構築するということでもあります。まずはそこを目標にやっていきます。
実のところ、開発環境を自分で構築しなくてもオンラインでプログラムを実行させることのできるサービスも存在します。それを使えばすぐにでもHello Worldを実行できます。しかし、最初のプログラムくらいは自分のパソコンの中で実行させたいと思うのでそのようなサービスは利用しません。他にもC++ではなくJavaScriptを言語として採用すれば、OSに関係なく、Webブラウザさえあれば自分のパソコンですぐに実行できます。C++のような手間のかかる言語かJavaScriptのような手軽な言語かどちらを好むかは目的や嗜好によるでしょう。
まとめ
だいぶ長々と書いてきました。ポイントは次の2点です。
- 楽しいかどうかを重視する。
- 最初の目標は開発環境を構築して、Hello Worldプログラムを動かすこと。