プログラミング言語
プログラムミング言語 (Programming language) は,コンピュータに対する一連の動作指示 (命令)を人間に理解し易い形式で記述するための人工言語である.プログラミング言語で書かれたソースコードをコンピュータに実行させるためには,アセンブルやコンパイルなどの処理を行い機械語列(オブジェクトコード)に翻訳する必要がある. この翻訳作業をリアルタイムに実行することにより,あたかもソースコードを直接実行しているように処理するインタプリタ型言語も存在する.
プログラミング言語は,人間にとっての理解のし易さによって,アセンブリ言語,高級言語,第4世代言語など幾つかの区分があり,難解なものほど機械語に近くより直接的にコンピュータを制御することができる.人間が使う自然言語に近い言語は「高水準言語」,機械語に近い言語は「低水準言語」と呼ばれる.
プログラミング言語とは
- プログラミング言語の目的
- コンピュータに対して
コンピュータが理解できる命令列 (CPU の機械語列) を生成する.
- 人間に対して
- 人間の思考を助け,複雑な論理を考え易くする.
- 手順の表記法を提供する.
- 現実世界のモデルを与える.
- 評価基準
プログラミング言語の評価基準に,次のユーザビリティ (使い易さ) の観点がある(Jakob Nielsenによる).
- 学習容易性
言語の習得のし易さ
- 効率性
いかに簡潔にプログラムを記述できるか
- 記憶性
しばらく使用しない期間をはさんだ後に,どれくらい容易に習熟度を取り戻せるか
- エラー
エラーを引き起こし難いこと,エラーを発見し易いこと,エラーが致命的な問題を引き起こさないこと等
- 満足度
快適にプログラミングできる
プログラミング言語の分類
プログラミング言語の厳密な分類法は存在しないが,大まかな分類法として,プログラムの実行方式による分類,プログラミングパラダイムによる分類,利用分野や用途による分類などがある.
- プログラムの実行方式
- コンパイル型
- 計算機の理解する命令列(機械語)にあらかじめ変換する(コンパイル).
- 実行時は,機械語を直接実行する.
- インタプリタ型
- 実行時にプログラムを逐次解釈して実行する.
- プログラムの修正・実行が簡単であり,対話型処理が可能である.
- 移植性が高い.
- 処理速度はコンパイラ型より遅い.
- 中間言語型
- 中間コードにコンパイルしたコードをインタプリタ型と同様に逐次解釈して実行する.
- 計算モデル (パラダイム)
- 手続き型
基本制御構文(逐次実行,条件判断,繰り返し)
- オブジェクト指向型
クラス内に変数とメソッドを定義(処理は手続き型と同様)
- Smalltalk,Java,C++,Ruby 等
- 関数型
数学的な関数をベースにした言語
- 論理型
述語論理をベースにした言語
- 型の扱い
- 型無し
- データがその種別の情報を持たない
- データ型の解釈はプログラムに任される
- 静的な型
- 式や変数が型宣言を持つ
- データ型に関するエラーはコンパイル時に検出される
- 動的な型
- データの型は実行時に決定される(型宣言がない)
- データ型に関するエラーは実行時に検出される
プログラミング言語の歴史
- プログラミング言語の変化
- 第一世代言語
機械語
- 第二世代言語
アセンブラ
- 第三世代(高級)言語
FORTRAN, COBOL, ALGOL, PL/1,Lisp BASIC,C
- 第四世代言語
- 非手続き型言語
SQL
- オブジェクト指向言語
Smalltalk, C++, Objective-C, Eiffel, CLOS, Java
- スクリプト言語
Perl, Tcl, Python, Ruby,JavaScript,PHP
- 主要なプログラミング言語
- FORTRAN (FORmula TRANSlator)
最も広く普及した科学技術計算用言語
- COBOL (Common Business Oriented Language)
事務処理用言語
- PL/1 (Programming Language One)
FORTRAN.COBOL,ALGOL をベースに科学技術計算用と事務処理用を統合した言語
- BASIC (Beginner's All-purpose Symbolic Instruction Code)
教育用に開発された習得し易い言語 (パソコンで普及)
Microsoft の Visual Basic (VB) は,BASIC を拡張した言語で Windowsアプリケーションなどが開発できる.また,Visual Basicを基に強いオブジェクト指向の概念を取り入れた言語が Visual Basic.NET (VB.NET) であり,Microsoft の .NET Frameworkという技術基盤に対応している.
- C (→ C プログラミング)
UNIX を記述する高水準言語として登場, アセンブラレベルでの機能を持ち,OS や組込みソフトウェアの分野にも利用できる.コンパクトで移植性が良く,ミニコン、パソコン,汎用コンピュータまで多様な環境で利用されている.
- C++
C 言語の拡張として,オブジェクト指向を取り入れた言語.C 言語との互換性を念頭に設計されており,手続き型言語としても使える.
- Objective-C
C 言語にオブジェクト指向を取り入れた言語.Apple 製品の開発に使われている.C 言語と互換性がある.
- Java (→ Java プログラミング)
オブジェクト指向言語.バイトコードと呼ばれる中間言語を使い,Java 仮想マシン上で動作するため,移植性が高い.
- Kotlin
Java言語をより簡潔,安全になるように改良した静的型付けのオブジェクト指向言語である.Javaと同様に,バイトコードにコンパイルされて Java 仮想マシン上で動作する.Java と完全な相互運用性がある(Kotlin から Java を呼び出すことも,Java から Kotlin を呼び出すこともできる).Android の開発言語として公式認定されている.
- C#
Microsoft の .NET環境向けソフトウェアを開発するためのオブジェクト指向プログラミング言語.C 言語/C++ 言語をベースに Java風の機能や表記などが盛り込まれている.共通言語基盤 (共通言語ランタイムなど) が解釈する共通中間言語にコンパイルされて実行される.
- Rust (→ Rust プログラミング)
速度,並列処理性,安全性を言語仕様として保証する C/C++ に代わるシステムプログラミングに適した言語を指向しており,関数型やオブジェクト指向も取り入れたマルチパラダイムなコンパイル型のプログラミング言語である.
- スクリプト言語 (Perl,Python,PHP,Ruby 等)
プログラムの動作内容を台本 (script) のように記述し,実行制御するためのプログラミング言語である.転じて,比較的単純なプログラムを記述するための簡易プログラミング言語全般をいう.変数に型をつけないなど動的型付け言語をスクリプト言語と呼ぶ定義もある.インタプリタ方式を採用しているものが多い.
利用分野とプログラミング言語
プログラミング言語を用いて作成するソフトウエアには様々な種類があり,作成するソフトウエアの種類や目的ににより利用される言語も変化する.
- 制御系/組込系
OS やデバイスドライバなどハードウェア寄りの低レイヤーのプログラム,および機械や家電製品など電子機器を制御するプログラム
- 業務系
情報システムやアプリケーションなどの一般的な業務プログラム
- Java,C++,C#
- SQL (データベース処理)
- Web 系
Web ベースのシステム (主にブラウザを通して操作するソフトウェア)
- JavaScript,PHP / Perl,Python / Ruby
- Java + JSP (サーバ側の Web ベースプログラム)
- デスクトップアプリ
Windows 向けのアプリケーションプログラム
- スマートフォンアプリ
スマートフォン上で動くプログラム
- Objective-C, Swift (iPhone)
- Java,Kotlin (Android)
- ゲーム系
- C,C++ (性能,移植性重視)
- C#,VB.Net
プログラミング言語の学習
- 言語を学ぶ際の指針
- プログラミング言語の多くは,一部の特殊な言語を除けば類似したものであり,1 つの言語を深く習得すれば, 他の言語の学習も容易になる.広く,浅くプログラミング言語を学ぶ必要はない (必要になった時点で学べば良い).
- 目的や用途を持たずに漠然と学ぶスタンスでの学習は長続きし難い. 自分が何をしたいのか,短期的な目標と長期的な目標を明確にしていくのが良い.
- プログラミング言語の文法や使い方を知っていても,役に立つプログラムを作れる訳ではない.プログラムを作るには,目的とする動作を実現するデータ構造やアルゴリズムの設計が重要である.これはどの言語でも共通に必要であり,これらの知識の取得も大事である.
- プログラムのソースコードを書くときの規則やガイドライン群であるプログラミング作法を身に着けるようにする.プログラムの見易さ,保守のし易さなどの考え方はどのプログラミング言語でも共通に適用できるものである.
- 入門用言語
- 当面の目的はないが,プログラミングについて学びたいというのなら C 言語が推奨候補になる (特に,職業的プログラマを目指すなら). C 言語は,歴史も古く開発用のツールや環境が充実している他,書籍や Webサイトなどの情報量が他言語に比べて圧倒的に多い.特に基本的なデータ型やアルゴリズムのほとんどは,C 言語のサンプルソースが入手できる. また,C 言語の文法を取り入れた言語も多数存在するため (Java、C++、C#など),C 言語の文法を憶えれば他の言語への移行も比較的容易になる.さらに,C
言語はポインタ操作などアセンブラ的なメモリ操作などが可能であり,コンピュータ動作の基本を理解するのにも適している.
- 特定の目的があるならば,その動作環境と利用分野に応じて最も普及している言語を選べば良い.
- 初心者としてプログラミングがどのようなものか経験してみたい場合には,Python や Ruby などのスクリプト言語が比較的簡単に始められる言語です.
(→ Python プログラミング)