プログラミング言語
下の動画はこの節の解説ではありません。 解説動画の雰囲気を知っていただくための見本として、「AI・機械学習」の動画を再生します。
この節の解説動画はプレミアム限定です。プレミアムなら全科目・全節が見放題!
プレミアムで見るシステムに求められる一連の処理をコンピュータ上で実行するためには、プログラムが必要になります。その手順そのものをアルゴリズム、手順を書き表すための文法の決まりをプログラミング言語と呼びます。この節では、プログラミング言語を「機械に近いか、人間に近いか」という軸で低水準言語と高水準言語に分け、それぞれの代表的な言語を押さえます。CPUは0と1しか理解できないという第1章の話が、ここで再び効いてきます。人間が読める言葉と、機械が実行できる言葉のあいだに橋を架ける——それがこの章全体の主題です。
簡単にいうと
CPUは0と1しか分からない——第1章で学んだとおりだよね。だから最終的には必ず0と1に直す必要があるの。その0と1に近い言葉が低水準言語だよ。
① プログラムとアルゴリズム
システムに求められる一連の処理をコンピュータ上で実行するためには、プログラムが必要となります。
この一連の処理手順をアルゴリズムといい、プログラムの記述様式を定めたものをプログラミング言語といいます。
| 用語 | 意味 |
|---|---|
| アルゴリズム | 一連の処理手順 |
| プログラミング言語 | プログラムの記述様式を定めたもの |
| プログラム | 処理手順を、言語の様式に従って書き表したもの |
料理でいえば、アルゴリズムが「作り方の手順」、プログラミング言語が「レシピの書き方の約束」にあたります。
② 2つの分類
従来から利用されているプログラミング言語は、低水準言語と高水準言語に分類することができます。
具体例
機械語で書くとどうなるか
「AとBを足してCに入れる」という単純な処理を、3つの水準で書き比べてみます。
機械語
```
00110111
01001010
10110100
```
何が起きているのか、人間にはまったく分かりません。
アセンブラ
```
LOAD A
ADD B
STORE C
```
「Aを読み込み、Bを足し、Cに入れる」——ある程度読めるようになりました。
高水準言語
```
C = A + B

低水準言語(機械語・アセンブラ)
試験のポイント
簡単にいうと
人間が使う言葉に近づけたのが高水準言語!IF A=1 THEN ... みたいに、英語として読める形になっているんだ。でもCPUはそのままでは理解できないから、翻訳が必要になるよ。
① 高水準言語とは
アセンブラは、機械語よりわかりやすいとはいえ、まだ人間に理解しやすいわけではありません。
そこで、人間が使う言語(英語)に近い表現で記述できるプログラミング言語が開発されました。このように人間が理解しやすいプログラミング言語を高水準言語といいます。
② 高水準言語の見た目
```
IF A=1 THEN (もしAの値が1だったら)
B=A (Aの値をBに代入する)
ELSE (そうでなければ)
C=A (Aの値をCに代入する)
ENDIF
簡単にいうと
言語の名前は、用途とセットで覚えるのが一番!FORTRANは科学技術計算、COBOLは事務処理。そしてJavaの強みは「どこでも動く」こと——その仕掛けがJVMだよ。
① 代表的なプログラミング言語
低水準言語または高水準言語に分類される、主なプログラミング言語は次のとおりです。
| 分類 | 名称 | 内容 | |
|---|---|---|---|
| 低水準言語 | 機械語 |
動画・テキスト・過去問・AI添削まですべて網羅!
予備校代の1/10以下で、独学の不安をまるごと解決できます
| 何に近いか |
|---|
| 低水準言語 | 機械(CPU)に近い |
| 高水準言語 | 人間に近い |
「水準」は優劣ではなく、機械からの距離を表しています。低水準だから劣っているわけではありません。
③ 機械語(マシン語)命令
CPUは0と1で記述された命令を理解しますが、それ以外は理解できません。
つまり、いかなるプログラムであっても最終的には0と1の命令群にする必要があります。このような0と1の命令群を機械語(マシン語)命令といいます。
機械語は、たとえば、「10011101」のようにビット列で表されます。
④ 第1章とのつながり
第1章で学んだ内容が、ここで効いてきます。
| 第1章で学んだこと | この節での意味 |
|---|---|
| 半導体は「通す/通さない」を1/0に対応させる | CPUが扱えるのは0と1だけ |
| CPUは主記憶から命令を読み込み、解読し、実行する | その命令が機械語 |
| 1バイト=8ビット | 機械語の命令もビット列で表される |
⑤ 機械語で書くことの限界
プログラマが命令のビット列を覚えておけば、機械語で直接プログラムを作成することも可能です。
しかし、人力でビット列の命令を覚えるのには限界があり、効率が悪いものです。
| 問題 | 内容 |
|---|---|
| 覚えられない | 「加算命令は00110111」を人が記憶する |
| 読めない | 0と1の羅列から意味を読み取れない |
| 間違えやすい | 1ビット違えば別の命令になる |
| 直せない | どこが間違っているか分からない |
⑥ アセンブラ
そこで、英語の意味を考慮した文字列で機械語の命令を置き換えたアセンブラが開発されました。
アセンブラはたとえば、英語の加算を意味するaddからとったADD(加算命令)、減算を意味するsubtractからとったSUB(減算命令)などの命令をもちます。
アセンブラの登場により、機械語よりは扱いやすくなりましたが、プログラムの作成は一部の専門的な技術者に限られていました。
⑦ 低水準言語の定義
このように機械語に近く、人間が理解しにくいプログラミング言語を低水準言語といいます。
| 言語 | 表現 |
|---|---|
| 機械語 | 00110111 |
| アセンブラ | ADD |
ADDのほうが読みやすいとはいえ、1つの命令が1つの機械語命令に対応している点は変わりません。後で学ぶ表にも「命令が機械語と1対1になっている言語」とあります。
⑧ アセンブラが使われる場面
なお、アセンブラは、CPUが行う入力・演算・出力をそのまま記述するため、CPUの機能を直接利用する場合(家電に組み込まれているマイコンを制御するプログラムなど)に適したプログラミング言語です。
| 用途 | なぜアセンブラか |
|---|---|
| 家電に組み込まれたマイコンの制御 | CPUの機能を直接使える |
| 処理速度が極限まで求められる部分 | 無駄のない命令を書ける |
| メモリが極端に限られている機器 | 小さなプログラムにできる |
第13章で学ぶIoTの機器には、小さなマイコンが組み込まれています。こうした機器では、いまでもアセンブラや、次節で学ぶC言語が使われます。
⑨ アセンブラという言葉の2つの意味
アセンブラ言語で記述されたプログラムを機械語に翻訳するソフトウェアをアセンブラとよぶこともあります。
| 意味 | 指すもの |
|---|---|
| 言語としてのアセンブラ | ADD、SUBなどで書く言語(アセンブラ言語) |
| ソフトウェアとしてのアセンブラ | それを機械語に翻訳するソフト |
第5節で学ぶ言語プロセッサの1つが、この翻訳ソフトとしてのアセンブラです。同じ名前で2つのものを指すので、文脈で読み分ける必要があります。
数式そのままです。
3つの違いを整理する
| 水準 | 1つの命令が対応するもの | 読みやすさ |
|---|---|---|
| 機械語 | CPUの1動作 | 読めない |
| アセンブラ | CPUの1動作(名前が付いただけ) | 少し読める |
| 高水準言語 | 複数のCPU動作(まとめて表現) | 読める |
アセンブラと機械語は1対1
ここが重要な点です。アセンブラは機械語に名前を付けただけなので、命令の数は変わりません。「C = A + B」という1行を書くために、アセンブラでは3行必要でした。
高水準言語は1行が複数の命令になる
高水準言語の1行は、機械語に翻訳すると複数の命令になります。人間が書く量が減るわけです。
なぜ低水準言語が残っているのか
| 理由 | 内容 |
|---|---|
| CPUの機能を直接使える | 無駄な処理が入らない |
| メモリを節約できる | 小さなマイコンでも動く |
| 動作が予測できる | 何クロックかかるかまで分かる |
家電のマイコン制御では、これらが決定的に重要です。炊飯器やエアコンに搭載されたマイコンは、パソコンのCPUよりはるかに小さなメモリしか持ちません。
第1章とつなげて考える
| 第1章の知識 | この節での意味 |
|---|---|
| クロック周波数 | アセンブラなら、何クロックかかるか計算できる |
| 主記憶装置の容量 | 小さいほど、無駄のないプログラムが要る |
| CPUの命令サイクル | アセンブラの1命令が、1サイクルに対応 |
低水準言語は、ハードウェアの知識がないと書けません。逆にいえば、ハードウェアを深く理解している人にとっては、細かく制御できる道具です。
確認してみましょう
> 次の記述の正誤を判定せよ。
> a 一連の処理手順をアルゴリズムといい、プログラムの記述様式を定めたものをプログラミング言語という。
> b アセンブラは、英語の意味を考慮した文字列で機械語の命令を置き換えた言語である。
> c 低水準言語とは、人間が理解しやすいプログラミング言語のことである。
解答 a:○ b:○ c:×
英語として読めば、そのまま意味が分かります。
| 英語 | 意味 |
|---|---|
| IF | もし |
| THEN | そのときは |
| ELSE | そうでなければ |
| ENDIF | もし〜の終わり |
③ 翻訳が必要になる
なお、CPUは高水準言語で記述されたプログラムをそのままでは理解できません。
そこで、高水準言語で記述されたプログラムを機械語プログラムに翻訳する必要が生じます。
| 段階 | 内容 |
|---|---|
| ① | 高水準言語によるプログラム(IF A=1 THEN…) |
| ② | 翻訳 |
| ③ | 機械語プログラム(001101110101100…) |
| ④ | CPUが理解して実行 |
この翻訳を行うソフトウェアが、第5節で学ぶ言語プロセッサです。
④ 高水準言語が生まれた理由
| 低水準言語の問題 | 高水準言語での解決 |
|---|---|
| 書くのに時間がかかる | 1行で複数の処理を表せる |
| 読めない | 英語として読める |
| 専門家しか書けない | より多くの人が書ける |
| CPUが変わると書き直し | 翻訳するソフトを替えればよい |
4つ目がとくに大きい
機械語やアセンブラは、CPUの種類ごとに命令が違います。別のCPUに移すには、書き直しが必要です。
高水準言語なら、そのCPU用の翻訳ソフトがあれば、同じプログラムが動きます。第1章で学んだ「CPUソケットはメーカごとに規格が異なる」という話と対比すると、ソフトウェアの世界では翻訳によって違いを吸収していることが分かります。
⑤ 手続き型言語と非手続き型言語
高水準言語は、さらに2つに分かれます。
| 分類 | 内容 |
|---|---|
| 手続き型言語 | 処理手順やアルゴリズムをひとつひとつ順を追って記述する言語 |
| 非手続き型言語 | 処理手順やアルゴリズムを意識しないで作成できる言語。記述形式によって分類される場合があり、オブジェクト指向型言語などが代表的 |
⑥ 2つの違い
| 手続き型 | 非手続き型 | |
|---|---|---|
| 書き方 | 手順を順に書く | 手順を意識しない |
| たとえるなら | レシピ(①材料を切る②炒める③味付けする) | 注文(この料理を作って) |
| 代表例 | FORTRAN、COBOL、C、BASIC | C++、Java、Objective-C |
⑦ 非手続き型の代表がオブジェクト指向型言語
非手続き型言語の代表として、オブジェクト指向型言語が挙げられています。次節で詳しく学びますが、
| 考え方 | 内容 |
|---|---|
| 手続き型 | 「どうやるか」を書く |
| オブジェクト指向 | 「誰が何をするか」を書く |
という違いがあります。
⑧ 低水準と高水準の対比をまとめる
| 低水準言語 | 高水準言語 | |
|---|---|---|
| 近いのは | 機械 | 人間 |
| 読みやすさ | 低い | 高い |
| 機械語との対応 | 1対1(アセンブラ) | 1対多 |
| CPUへの依存 | 高い | 低い |
| 翻訳 | 必要(アセンブラ) | 必要(コンパイラ・インタプリタ) |
| 例 | 機械語、アセンブラ | FORTRAN、COBOL、C、BASIC、C++、Java、Objective-C |
具体例
同じ処理を、手続き型と非手続き型で
「顧客リストから、購入金額が1万円以上の人を抽出する」という処理を考えます。
手続き型の考え方
```
① リストの先頭から順に見ていく
② その人の購入金額を取り出す
③ 1万円以上かを判定する
④ 該当すれば結果に追加する
⑤ 次の人へ進む
⑥ 最後まで繰り返す
```
「どうやるか」を1つずつ書いています。
非手続き型の考え方
第3章で学んだSQLが、非手続き型の典型例です。
```
SELECT * FROM 顧客 WHERE 購入金額 >= 10000
```
「1万円以上の人がほしい」と書くだけで、どう探すかは書いていません。探し方はDBMSが決めます。
どちらが優れているか
| 手続き型 | 非手続き型 | |
|---|---|---|
| 書く量 | 多い | 少ない |
| 細かい制御 | できる | できない |
| 読みやすさ | 手順は追える | 意図が分かりやすい |
| 向く場面 | 細かい制御が必要な処理 | 定型的な処理 |
SQLが非手続き型である意味
第3章で「関係演算を実装したデータベース言語」と学びました。利用者は「何がほしいか」を書き、DBMSが「どう取り出すか」を決めます。
この分担があるから、DBMSの性能が上がれば、同じSQLがそのまま速くなります。手続き型で自分で探し方を書いていたら、書き直しが必要です。
「やり方を任せる」ことの利点——これが非手続き型の本質です。
なぜ高水準言語が主流になったのか
| 観点 | 低水準言語 | 高水準言語 |
|---|---|---|
| 1人が1日に書ける量 | 少ない | 多い |
| 保守のしやすさ | 低い | 高い |
| 人材の確保 | 難しい | 比較的容易 |
| 実行速度 | 速い | やや劣る |
最後の1行だけが低水準言語の利点ですが、コンピュータの性能が上がるにつれ、その差は問題にならなくなりました。
一方、開発の速さと保守のしやすさは、ますます重要になっています。第9章で学ぶアジャイル開発のように、短い期間で何度も改修する開発手法では、書きやすさと直しやすさが決定的です。
「性能より生産性」への転換——これが高水準言語が主流になった背景です。
確認してみましょう
> 次の記述の正誤を判定せよ。
> a 高水準言語は、人間が使う言語に近い表現で記述できるプログラミング言語である。
> b CPUは、高水準言語で記述されたプログラムをそのまま理解できる。
> c 手続き型言語は、処理手順やアルゴリズムをひとつひとつ順を追って記述する言語である。
解答 a:○ b:× c:○

低水準言語と高水準言語
試験のポイント
| アセンブラ | 命令が機械語と1対1になっている言語 |
| 高水準言語 | 手続き型言語 | FORTRAN | 科学技術計算に適している言語 |
| COBOL | 事務処理計算に適している言語 |
| C | アメリカ規格協会(ANSI)によって標準化され、国際標準化機構(ISO)や日本産業規格(JIS)にも標準として採用されている。UNIXはC言語で記述されている |
| BASIC | 初心者向けとして普及しているインタプリタ型言語 |
| 非手続き型言語 | C++ | C言語にオブジェクト指向の考え方を取り入れた言語 |
| Java | 主にインターネット環境で利用されるオブジェクト指向型言語 |
| Objective-C | C言語をベースにSmalltalk言語の特徴を取り入れたオブジェクト指向型言語。Mac OSに標準付属する公式開発言語である |
② 用途で覚える
| 言語 | 用途・特徴 | 覚え方 |
|---|---|---|
| FORTRAN | 科学技術計算 | FORmula TRANslation(数式の翻訳) |
| COBOL | 事務処理計算 | COmmon Business Oriented Language(ビジネス向け) |
| C | 標準化されている。UNIXの記述言語 | ANSI、ISO、JISが標準採用 |
| BASIC | 初心者向け。インタプリタ型 | 名前のとおり基礎的 |
名前の由来から用途が導けるものが多くあります。FORTRANの「Formula(数式)」、COBOLの「Business(業務)」——それぞれの目的がそのまま名前になっています。
③ C言語の系譜
C言語から派生した言語が並んでいます。
| 言語 | Cとの関係 |
|---|---|
| C | 原点 |
| C++ | Cにオブジェクト指向の考え方を取り入れた |
| Objective-C | CをベースにSmalltalkの特徴を取り入れた |
| Java | Cにオブジェクト指向の概念を取り入れた |
C言語が現代のプログラミング言語の土台になっていることが分かります。第2章で学んだUNIXがC言語で記述されている、という点も押さえておきましょう。
④ Java
Javaは主にインターネット環境で利用されるオブジェクト指向型言語であり、C言語にオブジェクト指向の概念を取り入れた言語です。
電子商取引サイトやWebサービスなどのシステム構築に広く用いられます。
⑤ Javaの最大のメリット——汎用性
Javaの最大のメリットは汎用性の高さにあり、それを実現するのはJavaで記述されたプログラムの動作環境、JVM(Java Virtual Machine:Java仮想マシン)です。
通常、プログラムはハードウェア(CPU)やOS、ミドルウェアなどの動作環境を選びます。これに対してJVMはコンピュータ上の環境の違いを吸収するため、Javaで記述されたプログラムは特定のハードウェアやOSに依存することなく、どんな環境でも動作させることができます。
⑥ JVMの働き
| 通常のプログラム | Javaのプログラム | |
|---|---|---|
| 動作環境 | CPUやOSを選ぶ | JVMがあればどこでも動く |
| 別の環境へ移すとき | 作り直しが必要 | そのまま動く |
JVMが「違いを吸収する層」として間に入る——これが仕組みです。
| 層 | 内容 |
|---|---|
| Javaプログラム | どの環境でも同じ |
| JVM | 環境ごとに用意される |
| OS・ハードウェア | 環境ごとに違う |
⑦ この構造はどこかで見たことがある
第2章で学んだデバイスドライバと、まったく同じ発想です。
| 技術 | 吸収するもの |
|---|---|
| デバイスドライバ | 周辺機器の違い |
| JVM | CPUやOSの違い |
| DBMS(第3章) | データの物理的な格納方法の違い |
| プロトコル(第5章) | 機種やOSの違い |
「間に1枚挟んで、違いを吸収する」——情報システムで繰り返し使われる手法です。
⑧ C言語との互換性はない
令和元年度の本試験で、次の記述が出されました。
> Javaは、C言語にオブジェクト指向の概念を取り入れた言語であり、C言語に対して上位互換性を持つ。
解答:×(C言語とは直接的な互換性はない)
「オブジェクト指向の概念を取り入れた」ことと「互換性がある」ことは別です。考え方を参考にしただけで、C言語のプログラムがそのままJavaで動くわけではありません。
⑨ 名前が似ているが別物
| 言語 | 分類 |
|---|---|
| Java | プログラミング言語(この節) |
| JavaScript | スクリプト言語(第3節) |
次節で学ぶとおり、JavaScriptは「Java言語の文法を参考にしているが、互換性はまったくない」とされています。名前が似ているだけの別物です。
この2つの取り違えも、試験で狙われる論点です。
具体例
設例 JavaとC言語の互換性
> 次の記述の正誤を判定せよ。(令和元年度第3問 改題)
> Javaは、C言語にオブジェクト指向の概念を取り入れた言語であり、C言語に対して上位互換性を持つ。
解答 ×
C言語とは直接的な互換性はありません。
「上位互換性」という言葉
上位互換性とは、新しいものが古いもののプログラムをそのまま動かせるという性質です。
| 例 | 内容 |
|---|---|
| USB 3.0のポートにUSB 2.0の機器 | 動く(上位互換性がある) |
| JavaでC言語のプログラム | 動かない(互換性がない) |
考え方を取り入れることと、互換性を持つことは別——この区別が問われています。
JVMの効果を実感する
ある業務システムをJavaで作った場合と、そうでない場合を比べます。
Javaで作った場合
| 動かす環境 | 必要な作業 |
|---|---|
| Windowsのサーバ | そのまま動く |
| Linuxのサーバ | そのまま動く |
| 別のCPUのサーバ | そのまま動く |
JVMさえあれば、どこでも動きます。
環境に依存する言語で作った場合
| 動かす環境 | 必要な作業 |
|---|---|
| 同じ環境 | そのまま動く |
| 別のOS | 翻訳し直し、場合によっては書き直し |
| 別のCPU | 同上 |
なぜこれが重要なのか
| 場面 | 効果 |
|---|---|
| サーバを更新する | OSが変わっても、そのまま動く |
| クラウドに移行する | 移行の作業が少なくて済む |
| 開発環境と本番環境が違う | 同じプログラムで動く |
第12章で学ぶクラウドへの移行を考えるとき、環境に依存しないプログラムかどうかは大きな判断材料になります。
「どこでも動く」ことの代償
| 利点 | 代償 |
|---|---|
| どの環境でも動く | JVMを通すぶん、実行が遅くなる |
| 移行が容易 | JVMを用意する必要がある |
速度と可搬性のトレードオフです。組込み機器のように速度と省メモリが最優先の場面では、いまでもC言語やアセンブラが使われます。
言語の選択は用途で決まる
| 用途 | 向く言語 |
|---|---|
| 家電のマイコン制御 | アセンブラ、C |
| 科学技術計算 | FORTRAN |
| 基幹業務の事務処理 | COBOL |
| Webサービス | Java |
| Mac/iOSのアプリ | Objective-C(およびその後継) |
| データ分析 | Python、R(次節) |
「どの言語が一番よいか」という問いは成り立ちません。用途に応じて選ぶものだからです。
COBOLが残り続けている理由
金融機関や公的機関の基幹システムには、いまだにCOBOLで書かれたものが多く残っています。
| 理由 | 内容 |
|---|---|
| 動いているものを止められない | 止めると業務が止まる |
| 作り直しの費用と期間が膨大 | 数十年分の業務ロジックが詰まっている |
| 事務処理計算に適している | 金額計算の精度など、目的に合っている |
レガシーシステムの問題は、まさにここにあります。「古いから悪い」のではなく、「置き換えられないほど深く業務に組み込まれている」ことが問題の本質です。
確認してみましょう
> 次の記述の正誤を判定せよ。
> a FORTRANは事務処理計算に適している言語である。
> b C言語はANSIによって標準化され、ISOやJISにも標準として採用されている。
> c JVMはコンピュータ上の環境の違いを吸収するため、Javaのプログラムは特定のハードウェアやOSに依存しない。
解答 a:× b:○ c:○

代表的なプログラミング言語とJava(1/2)

代表的なプログラミング言語とJava(2/2)
試験のポイント
プレミアムプラン
¥9,800〜/ 買い切り・自動更新なし(税込)
決済はStripe(世界最高水準・PCI-DSS準拠)で安全に処理されます。カード情報は当サービスに保存されません。