前置き・モチベーション
自分用の日記的な意味合いをさることながら、やはり他の誰かに貢献できるようなブログにもしたいので早速解説的な記事を書きます。
対象は中高生以上なら理解できるように心がけます。既に大学入って少しやったけど実はよくわからないっていう人、子供がプログラミングやるようなスクールに通っているけど親である自分がそもそもプログラミングを知らないという人、サーバーセキュリティに関する役職を担当することになったがUSBメモリすらわからないと馬鹿にされたので勉強したくなった人、など様々な方に参考頂ければなぁ、と思います。
なお質問やリクエストも随時受け付けております。「ウチに来て話をしてくれ!」でも構いません。
言葉について
「プログラミング教育」が必修化する、と話題によく上がります。なので、まず「プログラミング」とは何かというお話しからしたいと思います。
プログラミング…英語でのつづりはprogrammingです。このprogrammingの根本的な意味と、現在使われている意味が実は結構マッチしているので言葉を紐解きます。
中学で習う英語の中に~ingというのがありますね。動詞の最後にくっつけて名詞化してしまうやつです。programmingはもとを正せばprogramなのは自明でしょう。
この記事ではさらに掘り下げていきます。programという単語はpro-という接頭辞(頭につけて語基を修飾するパーツ)とgramという語基(単語の元になる部分)に分解できます。(ここら辺の言葉の意味の紐解きの仕方は後日記事にしたいと思います。)
pro-は「前に」、gramは「書き物」という意味があります。意訳すれば「前に示された書き物」ですね。例えばテレビ番組表もプログラムと言いますし、学校の卒業式のときに前に貼ってあるもの(Fig. 1)もプログラムですよね。

これらの例は「書いてある通りに物事を進めること」が要求されます。わかりやすいようにもっと例を出すと料理のレシピなんかもプログラムと言ってもいいでしょう。料理のレシピでは順序立てて、すべき処理を書き出しています(具体例:唐揚げのレシピ from AJINOMOTO)。あとは仕事のマニュアルなんかもそうですよね。
要は「指示の羅列」こそがプログラム(program)の正体であり、それを作る行為がプログラミング(programming)なのです。
ちなみに中国語でプログラムは「程序」です。なんとなくニュアンスわかりますよね。
(中国でITが勃興している理由の一つに、自国の言葉をあてはめることが一説として挙げられています。
日本語では英語をカタカナ読みした「プログラミング」としていますが、中国語では意味のある漢字を
組み合わせて表現しているため理解がしやすいとかなんとか。)
翻訳が必要
プログラムは指示の羅列なんだから、とにかく指示すればいいのね!とはなりません。そこまで技術は発展していないのが事実です。コンピュータ君は0と1しか知りません。なのでこちらから出す指示も0と1でしなければなりません。
(なぜ0と1しか扱えないのか、そういう話もいつかしたいですね。)
そうです。人は0か1で指示するのは無理なんです。だから人間が使う言葉をコンピュータ君が理解してくれる01の数字に翻訳してくれるものが必要です。それがコンパイラです。
まずは、私たち人間がコンピュータ君にしてほしい指示(プログラム)を作って、コンパイラ君に投げます。そうするとコンパイラ君はコンピュータ君にわかる言葉で翻訳します。こうしてコンピュータ君にわかる言葉で書かれた指示の羅列…これも「プログラム」と言います。それもそのはずで書かれている言葉が違うだけで、内容は同じ「指示の羅列」です。(Fig. 2)

ここで私たち人間が書く指示というのは、日本語のルールでも、英語のルールでも、ドイツ語フランス語イタリア語ポルトガル語スペイン語などなどのルールにはあてはまりません。翻訳するには何語から何語に変換するか知っていなければうまくいきません。(例:日本語で「手紙」というのは紙を媒体とする伝達手段の一つですが、中国語で「手紙」はトイレットペーパーを指します)
多少勉強した人はわかるかもしれませんが、ここで私たち人間が書く指示はプログラミング言語のルールに従うことになります。
プログラミング言語にも複数ありますが、コンパイラ君は特定のプログラミング言語で書かれた指示をコンピュータ君でもわかる言葉に翻訳してくれる役目を持っているのです。
必要なもの
じゃあ早速プログラム作ってみよう!(となってくれれば幸いですが、)と、その前に必要なものを軽く挙げたいと思います。人にわかるような言葉でのプログラム、それを作るのが私たちの作業(=プログラミング)でした。それをするのはどこか?一番シンプルなものは「テキストエディタ」です。文書作るアプリケーションです。windowsの方は「メモ帳(notepad)」(Fig. 3)、Macであれば「テキストエディット(TextEdit)」、Ubuntuなら「gedit」があります(vimだとかemacsだとかは今回説明しません)。あとは上で説明したコンパイラですね。たいていはインターネットを通じてダウンロードすることができます。

ややこしい問題
ここからは深く考えたい人向けです。ここまでで頭がいっぱいの人はこのパートは飛ばした方がいいかもしれません。
さて、必要なものであげた「テキストエディタ」や「コンパイラ」。こいつらも実は「プログラム」です。しかもコンピュータ内に保存されています。私たちがする「プログラミングをして 、それを実行できる形(コンピュータ君が読める状態)にすること」は、「コンピュータ内のテキストエディタというプログラム(1)でプログラム(2)を書いて、それをコンパイラというプログラム(3)でプログラム(4)に変換すること」を指します。私も自信がなくなりそうな文章です。
が、以下の解説を読めばわかるかもしれません。
テキストエディタ(1)とコンパイラ(3)は誰かがすでに作ってくれたものです。
初めからコンピュータ内にあったり、インターネット上においてあったりするものです。
プログラム(2)は我々がキーボードを通じて打った文字列です
これは特定のプログラミング言語のルールに沿って書いてあります。
プログラム(4)は最終的に実行されるものです。
実行するのはコンピュータ君なのでコンピュータ君のわかる言葉で書かれています。
まとめ
- 「プログラム」とは指示の羅列であり、それを作ることを「プログラミング」という
- 私たちがプログラミングをすると言った場合、実際にすることは「プログラミング言語のルールに沿って、コンピュータ内にあるテキストエディタで指示を書く」ことである
- 特定のプログラミング言語のルールに沿って書かれた指示を、コンピュータが理解できるような指示に翻訳してくれるのが、コンパイラである
- コンパイラとテキストエディタがあればだれでもプログラミングはできる
…といった感じですかね。次回は実際にプログラムを作って、実行させるとこまでいきましょう。
ピンバック: C言語入門 1 (コンパイラの導入まで) – 有閑是宝
ピンバック: C言語入門 2(プログラム実行まで) | 有閑是宝
ピンバック: C言語入門 4 (素数を扱う 1) | 有閑是宝