
プログラミングとは何だろう?
初心者が勉強するならどこから始めればいいのかな?



プログラミングに興味はあるけど、よくわからないよね。
この記事はそんなお悩みを解決します。お任せください。
プログラミングと聞くとなんだか難しそうで、限られた専門家だけが扱うことができる特別な技術というイメージがあります。
本当に限られた人にしか扱うことができない技術なのでしょうか?
プログラミングをするのに何か特別な免許が必要というわけではないですよね。
結論を先に言うと、基礎知識さえ身に付ければプログラミング初心者でも理解することができます。
この記事では誰でもこの記事を読むだけで仕組みを理解できるようにまとめました。
それでは見ていきましょう。
プログラミングとは?
プログラミング (Programming) とは、コンピュータを制御するためのコンピュータプログラム (Computer Programs) を作ることです。
わかりやすく言うとコンピュータがソフトウェアとして機能するための手順書になります。プログラムを作る全ての工程がプログラミングで、プログラムとソフトウェアは同じ意味として扱われます。
プログラミングを行う者(プログラマー)はコンピュータを動作させるための手順をコンピュータが解釈出来るような命令文として記述します。
コンピュータは命令文通りの手順で動作し、命令文に記述していない部分にあたる動作をすることはありません。
プログラムとアルゴリズム


プログラムのことを調べるとアルゴリズム (Algorithm / 訳…算法) という言葉がよく出てきます。
これはコンピュータが正しく動作するための手順です。違う言い方をすると問題までの解決の道のりを具体的に表したものです。さらにわかりやすく言うと「ある問題を解くための明確な手順」それがアルゴリズムです。
プログラムはアルゴリズムの手順をコンピュータが理解できるためのプログラミング言語で記述したものになります。
世の中でアルゴリズムとして成り立つあらゆることはプログラムによって作られています。アルゴリズムが成り立たないものはコンピュータで再現することが出来ません。これを決定不能といいます。
世の中はプログラムで溢れている
一言でプログラムといってもその用途は幅広くあります。「知ってるよ」というものから「これもそうだったのか」というものまでプログラムとして組んだソフトウェアだったりします。
スマホのアプリ、パソコンのソフトウェアはもちろんのこと。OSやブラウザもプログラムの集まりです。
日常生活でいえばテレビ、リモコン、エアコン、炊飯器などの家電にも使われています。さらには自動販売機、ATM、エレベーター、ナビゲーション、飛行機、人口衛星、ロボットなど
「これってどうやって動いているの?」
といったものや便利だと思えるものにはおそらくほとんどプログラムが組み込まれています。
このようにプログラムは現代を生きる私達の生活になくてはならないものですし、幅広い分野で活躍しているのです。プログラミング言語を覚えようとして途中で挫折してしまう人の原因のうちの1つとも言えるのが「何を作っていいのかわからない」ということのようです。
プログラミング言語を覚えようとして始めてみるも文字列ばかりズラーっと画面いっぱいに並んでいてなんだか面白くないといったことを感じる人もいるかもしれません。ただこうして世の中に溢れているプログラムを見るとなんだかイメージが沸きやすくなりませんか?
何も最初から高度なプログラム技術を使うわけではなく、最初は画面にテキスト・ボタンを表示させるだけでも良いですし、それに慣れたらボールを転がすだけの単純なゲームでも良いと思います。
普段使っているスマホアプリを見て下さい、懐中電灯アプリ、ストップウォッチアプリ、電卓アプリなどのごくごく簡単な限られた機能だけを提供しているアプリもストアには沢山出回っているはずです。
プログラムの種類


プログラムの種類としては、大きくわけて「低水準言語」と「高水準言語」に分けることができます。低水準 (低級) は劣っている、高水準 (高級) だから優れているという意味ではなく低水準はコンピュータに近く、高水準は人間に近いという言語という意味合いです。
以下のように分類することが出来ます。
- 機械語(低水準言語)
- アセンブリ言語(低水準言語)
- 高級言語(高水準言語)
「機械語」がコンピュータにとって最も理解出来る言語、即ち機械寄りの言語です。「高級言語」はその逆で人間にとって一番理解しやすい、わかりやすい言語ということになります。


「低水準言語」機械語
機械語 (マシン語) はCPUが動作を実行するために一番理解出来る原始的な言語で、コンピュータは機械語を読み取ってプログラムを実行します。バイナリデータ (2進数のデータ) として読み書きする時は16進数として表示される事もありますがこれも機械語です。
機械語はCPUの全ての機能を操作することができます。
人間が機械語を記述することも出来ますがプログラミングの場面ではアセンブリ言語や高級言語で記述するのが一般的。機械語を記述するというのは慣れてるプログラマーとはいえ大変で骨がおれる作業というわけです。
というのもCPU内部では人間が最も理解しづらい0と1だけ (電源がOFFかON) の2進数で表現されているからです。今では効率的な高水準言語でプログラムされるのが一般的ですが、ひと昔前の初期の頃はこの機械語によってプログラミング作業が行われていました。
高水準言語を使用しても最終的にはコンパイル (後述) されてバイナリデータとなるので機械語を知っておくとプログラミングへの理解が一層深まります。
「低水準言語」アセンブリ言語
アセンブリ言語 (Assembly Language) は機械語と同じ「低水準言語」に属します。英単語のAssemblyは組み立てを意味します。
機械語と高級言語の中間地点に位置し、よく言われていますがアセンブリ言語は機械語と1対1の関係になります。これは人間にとって難解な機械語を人間が記述できるようにしたプログラミング言語なのでそう言われています。
今では技術者でない限りアセンブリ言語を使う機会は減ってきていますが、アセンブリ言語を理解出来ていればハードウェア的な動作を扱うための構造が理解できるようになると言われています。
アセンブルとアセンブラ
アセンブルとアセンブラ。語尾の「ラ・ル」が違うだけでなんだか間違えてしまいそうですね。
アセンブリ言語で記述したプログラムを機械語に変換することを「アセンブル (Assemble)」、その変換を行うためのソフトを「アセンブラ (Assembler)」と呼びます。
「高水準言語」高級言語
高級言語とはプログラミング言語の中でもより自然語 (英語を元に作られている) に近い言語です。そのため人間にとって理解しやすいという特徴があります。
高級言語によって作られたプログラムはそのまま実行するのではなく、コンパイラやインタプリタによって機械語に翻訳されてから実行されます。
手続き型と非手続き型
高水準言語は大きく「手続き型」と「非手続き型」に分けることができます。
「手続き型」は処理手順を記述するタイプで、C言語が代表的な言語です。
「非手続き型」はそれに該当しないタイプになります。Javaなどのオブジェクト指向はこの「非手続き型」になります。
高級言語はいくつかありますが、代表的なのは以下の言語になります。
手続き型 | 非手続き型 |
---|---|
C言語 | Java |
COBOL | SQL |
Perl | |
BASIC |
コンパイラとインタプリタ
プログラムは人間が理解できるように記述されています。というのも、英語と記号で表記されているからです。なのに、なぜわかりにくいんでしょうか。
英語を知っている方が有利?!


プログラミング初心者がズラーっと画面一面に並んだコードを見て思わず「うわ・・」と思ってしまうのは、「プログラム+英語」の要素が組み合わさっている難しさと言われます。
なので、英語が苦手な人の割合が多い日本人からしたら英語がわからないから余計にわかりづらいというのもあるかもしれません。
実際にパソコン用語は英語が多いです。なので英語圏の方、または日本人でも英語堪能な方の方がプログラミングを始めるなら少し有利なのかもしれませんね。
その人間が理解できる高水準言語をコンピュータが理解できて実行するには機械語に翻訳する必要があります。その翻訳機の役目を果たすのが大きく分けて2通りあり「インタプリタ」と「コンパイラ」です。2つとも機械語に翻訳するためのソフトウェアですがそれぞれどのような機能を持つのか見てみましょう。
インタプリタ方式
インタプリタ (Interpreter) は高水準言語で記述されたプログラムのコードを一行ずつ翻訳しながらそのプログラムを実行していくという方式です。翻訳と実行が同時進行するためコンパイラと比べて処理速度が遅くなります。ですが、作成したプログラムを直ちに実行することができる・バグを発見しやすいというメリットがあります。
インタプリタ型の主なプログラミング言語
- PHP
- Python
- Perl
- Ruby
コンパイラ方式
コンパイラ (Complier) は高水準言語で記述されたプログラムのコード全行を一括にまとめて翻訳するという方式です。WEBサイトをGoogle翻訳で翻訳する時をイメージするとわかりやすいかもしれません。
コンパイラによって翻訳されたプログラムをオブジェクトコード (またはオブジェクトファイル) と呼びます。オブジェクトコードは翻訳された機械語または中間言語となります。
一度にまとめて翻訳するのでインタプリタと比べて全体の処理速度が速くなります。
リンカ
コンパイラされた後にプログラムが実行されるまでの間にリンカ (リンケージエディタ) と呼ばれるプログラム処理がされます。高水準言語が機械語にコンパイルされた後に作成されたバイナリデータとライブラリ (プログラムの部品) を統合しプログラムとして実行可能な形式にします。
このリンカは一般的にコンパイラと開発環境としてセットとなっているので特に意識しなくても動作するという内部的な動きになります。
コンパイラ型の主なプログラミング言語
- C言語
- C++
- Objective-C
- アセンブリ言語
中間言語方式
Javaなどの翻訳方法は特殊で、中間言語 (Inter Language) 方式と呼ばれています。Javaのコードはコンパイラによって高水準言語と機械語の中間となるバイトコードに一度変換されます。
その後Java仮想マシン (Java Virtual Machine) と呼ばれるインタプリタによってプログラムが実行されます。
まとめ
最後にまとめです。
今回の記事ではプログラミングの基礎知識を初心者でも理解できるように解説しました。この記事が参考になれば幸いです最後までありがとうございました。