プログラミング用語 (分野別)

**プログラミング用語**（プログラミングようご）は、コンピュータのプログラムおよびプログラミングに関する用語の一覧である。

分野別に分類し記載している。

固有の製品名、言語名、機種名、ソフト名など、固有の一覧の記事がある場合にはその記事へのリンクのみを示し、ここでは記載しない。

五十音（アルファベット・その他）順の一覧については、プログラミング用語一覧を参照。

## コンピュータの理論的基礎
* コンピュータ
** チューリングマシン、ノイマン型、その他、コンピュータを参照。
* オートマトン

## プログラミング言語の位置づけ
### コンピュータ言語の分類
プログラミング言語は人工言語、コンピュータ言語の中の1群である。
* 言語、言語学、計算言語学
** 自然言語
** 人工言語、形式言語
*** コンピュータ言語 - コンピュータで用いられる人工言語。
**** プログラミング言語 - コンピュータ上で動作するプログラムを作成する言語。
**** データ記述言語 - 主に複雑なデータを格納することを目的とする言語。マークアップ言語など。
**** 問い合わせ言語 - データの問い合わせに用いる言語。
**** データベース言語 - データベースのアクセスに用いる言語。
**** 仕様記述言語 - 主にプログラムの設計に用いられる言語。モデリング言語など。
**** ハードウェア記述言語 - 主に集積回路(IC, LSI)の設計に用いる言語。
**** ハードウェア制御言語 - 人間は記述は行わない。プリンタや表示の制御など。
### プログラミング言語の分類
* 個別のプログラミング言語名については、プログラミング言語一覧を参照。
* プログラミング言語
** 低水準言語と高水準言語
* 言語処理系
** コンパイラとインタプリタ（**「コンパイラ言語とインタプリタ言語」という分類はナンセンス**）
* 用途や形態による分類
** スクリプト言語
** マクロ言語
* プログラミングパラダイムによる分類
** 手続き型言語 - 多数
** 関数型言語 - Haskellなど
** 論理型言語 - Prologなど
** オブジェクト指向言語 - Smalltalk、C++、Javaなど
* ソースコードの表現法による分類（基本的に、抽象的には全く変わらない「プログラム」を、文字で表現するか文字以外のもので表現するか、という違いである。）
** テキストプログラミング言語
** ビジュアルプログラミング言語

## プログラミングの歴史
* プログラミング言語年表
### プログラム開発の歴史
* ソフトウェア工学
* プログラミングの変遷
** パンチカード
* プログラムの寿命 - 最初に考えるべき重要な問題。
** プログラムの品質
** プログラムの結合度 - スパゲティプログラム、多重継承、オブジェクト指向
* プログラミング
** 構造化プログラミング - goto文
** 関数型プログラミング
** イベント駆動型プログラミング
** オブジェクト指向プログラミング - オブジェクト指向、差分プログラミング
** Webプログラミング
* 開発手法
** ウォーターフォール・モデル
** スパイラル・モデル
** エクストリーム・プログラミング - 軽量開発手法、アジャイルソフトウェア開発
** テストファースト
* 設計手法
** フローチャート
** モデリング言語 - UML
** デザインパターン
** 状態遷移図
### プログラミングの文化
* デファクトスタンダード
* 自由ソフトウェア
** 自由ソフトウェア運動、フリーソフトウェア財団、GNU General Public License、コピーレフト
* オープンソース - Open Source Initiative
* リバースエンジニアリング

## システムプログラミング
システムソフトウェアの記事も参照
* プログラミングから見たCPUの基本要素
** 命令セット、レジスタ、アドレス、フラグ
* 機械語、アセンブラ、ニーモニック、アドレッシングモード
* メモリマップ - データ領域、コード領域、スタック領域
* サブルーチン、スタックポインタ、マクロ
* 割り込み - 割り込みベクタ
* DMA(Direct Memory Access)

## 主として手続き型言語の言語機能
* メモリマップ
** データ領域、コード（テキスト）領域、スタック領域、ヒープ領域
** 定数領域（書込み禁止領域）、BSS領域、静的領域（スタティック領域）、静的データ（静的メモリ）、動的データ（動的メモリ）
* ソースコード
** Hello world - 各プログラミング言語によるサンプルプログラム。
* 構文規則 - バッカス・ナウア記法
* コメント(注釈)
* 予約語
** キーワード (C言語)、予約語 (Java)、…
* 演算子
* 識別子 - メタ構文変数
* 行番号
* 基本制御構造
** 分岐処理 - if文、switch文
** 反復処理（繰り返し処理）、ループ - for文、while文
** 順接
* その他の制御
** 再帰呼び出し - 末尾再帰
** 無条件ジャンプ - goto文
** 例外処理 - 継続
* サブルーチン
** マクロ、関数、手続き(プロシージャ)、メソッド (計算機科学)
** 引数 - 値渡しと参照渡し
** return文
* データ・データ型・型システム
** プリミティブ型と複合型
** 数値型 - 整数型、浮動小数点型、など
** 文字 - 文字型、文字列型
** コンテナ (データ型) - 配列、構造体、など
** 抽象データ型 - オブジェクト指向を参照。
** ポインタ型
** データ型に関するその他の記事 - 列挙型、ブーリアン型、など
* 修飾子
** 定数
** 静的変数
** フィールド (計算機科学) - インスタンス変数、クラス変数
** アクセス制御子
* スコープ
** ブロック構造
** 変数 - グローバル変数、ローカル変数（局所変数）
** 動的スコープ、静的スコープ
** 変数、関数、メソッドなどの外部宣言、アクセス制御子
** 前方参照 - プロトタイプ宣言（C言語）、forward宣言(Pascal)
** 名前空間
** カプセル化
* プリプロセッサ - マクロ
* モジュール
** ライブラリ、unit(Pascal)、パッケージ (Java)
** 名前空間
** プラグイン
* 型チェック - キャスト

## オブジェクト指向
* オブジェクト指向
* モデル
** オブジェクト (プログラミング)、クラス (コンピュータ)、メッセージ駆動
* カプセル化 - スコープ
* 継承 - 単一継承、多重継承
* ポリモーフィズム - 多重定義（オーバーロード）、オーバーライド
* メッセージ駆動 - 委譲モデル
* インスタンス
* メンバ
** フィールド (計算機科学) - クラス変数、インスタンス変数
** メソッド (計算機科学)（メンバ関数）、コンストラクタ、デストラクタ、ファイナライザ
* インタフェース (情報技術) - マーカーインタフェース
* アノテーション
* シャローコピー

## プログラム開発
* プログラム
* プログラマ
* システムエンジニア
* アーキテクト
### プログラムの設計
* プログラム開発手法 - プログラミングの歴史を参照。
* 構造設計
** フローチャート、PAD、
** モデリング言語 - UML
* インターフェイス設計
** デザインパターン
** API(Application Programming Interface)

### プログラム開発ツール
* エディタ、テキストエディタ
* アセンブラ、逆アセンブラ、コンパイラ、make、リンカ(リンケージエディタ)、デバッガ
* 統合開発環境 - RAD (計算機プログラミング環境)
* オーサリングツール、ICE(インサーキット・ エミュレータ)
### コンパイラ
* コンパイラ
** プログラミング技術・情報工学の構文解析も参照。
** ネイティブコード、中間コード、バイトコード
* コンパイラ
** 最適化、80-20の法則
* 事前コンパイル、動的コンパイル、ジャストインタイムコンパイル方式、適応的コンパイル、遅延コンパイル
### プログラムの実行環境
* インタプリタ
* ライブラリ
** 動的リンク、静的リンク
** ダイナミックリンクライブラリ、ランタイムライブラリ
* 仮想マシン - ジャストインタイムコンパイル方式、ガベージコレクション

### プログラムの実行エラー
* デバッグ - バグ をとること。
* セキュリティホール
* 算術エラー - 算術オーバーフロー（桁あふれ）
* メモリ不足 - スタックオーバーフロー
* メモリ破壊 - スタック破壊、メモリリーク、バッファオーバーラン
* 制御不良 - 無限ループ、デッドロック、非同期アクセス
* 不正操作 - 命令違反、特権違反、単なるポインタの誤操作
* 設計ミス

### プログラムのテスト
* ソフトウェアテスト
* テスト駆動開発、テストファースト、テストプログラム
* 単体テスト、結合テスト、総合テスト（システムテスト）、ブラックボックステスト、ホワイトボックステスト
* 検証ツール、コード網羅率（コードカバレッジ）、プロファイリング
* スループット、ボトルネック、80-20の法則
* インスペクション、ウォークスルー、チーム・レビュー、パスアラウンド、ピア・レビュー、ペア・プログラミング、アドホック・レビュー、

### プログラムのドキュメント
* Javadoc
### プログラムの移植
* 移植性、クロスプラットフォーム
### プログラムの権利
* 著作権、ソフトウェア特許、リバースエンジニアリング、アルゴリズム特許

## プログラミング技術・情報工学
* 情報工学も参照。
* ソフトウェア工学
### 論理演算
* 論理演算、ブール代数、論理式、真理値、真理値表
* 論理和(OR)、論理積(AND)、否定(NOT)、排他的論理和(XOR)、同値
* ビット演算
* カルノー図
### データ構造
プログラムで多く使われる基本的なデータの構造
* データ構造
** 配列、線形リスト、スタック、キュー
** ハッシュテーブル、連想配列、木構造、B木 2-3木、グラフ、リングバッファ
### アルゴリズム

* ソート - データを並べ替えること
** バブルソート、シェルソート、ヒープソート、クイックソート、マージソート、・・・
* 探索
** 線型探索、二分探索
* グラフ
** 閉路
### 数値計算
* フーリエ変換、高速フーリエ変換、離散コサイン変換、ウェーブレット変換
### 文字コード
* 文字コードを参照。
### ストリーム
* ストリーム、パイプ
### 構文解析
* 構文解析、構文解析器、字句解析
* 逆ポーランド記法、正規表現、パターンマッチング
* コンパイラ
* DOM(Document Object Model)、SAX(Simple API for XML)

### 制御手法
* 割り込み処理
* プロセス管理
** プロセス、マルチプロセス、スレッド、スケジューリング、ラウンドロビン方式
** プロセス間通信
* 共有メモリ
* 同期、排他制御、セマフォ、モニタ
* トランザクション
* ウォッチドッグ、リアルタイムシステム
* 状態制御 - 状態遷移、状態遷移図
### メッセージ伝達手法
* コールバック
* メッセージ駆動、委譲モデル
* イベント駆動型プログラミング - イベント
### データファイル
* 設定ファイル
* データ記述言語、マークアップ言語、XML、DOM、SAX
### 通信手法
* プロトコル、ハンドシェイク、通信シーケンス、状態制御
### バージョン管理
* マジックナンバー、バージョン管理システム
### その他
* データ圧縮 - データ圧縮を参照
* 暗号 - 暗号を参照。
* 人工知能 
* ライフゲーム、制御理論、ファジィ制御、ニューラルネット、遺伝的アルゴリズム

## 関連項目
* 情報・通信・コンピュータ一覧の一覧
* プログラミング言語一覧
* プログラミング言語年表