新人プログラマ /* 早く一人前になりたい */

新人プログラマがIT系記事を更新していくブログ

プログラミング言語の分類

高級言語と低級言語

プログラミング言語には高級言語と低級言語が存在します。

高級言語
構文の抽象度を上げることで人間が理解しやすいようにした言語。(世間で言われているプログラミング言語はほぼコレ)
抽象度を上げるとは、構文に英単語などの自然言語を利用し汎用的にすること

低級言語
機械語機械語に近い言語

命令型プログラミングと宣言型プログラミング

命令型プログラミング
コンピュータに処理させる命令を記述していく方式
例: 「ボタンが押されたら、 カウンターの数字を+1しなさい」

宣言型プログラミング
対象の定義・性質を記述していく方式 例: 「ネズミは指数的に増えます」

ざっくり言うと「問題の解き方」を記述するのか、「問題の性質」を記述するのかの違いです。
ちなみに、上記の考えに基づいて設計された言語を、命令型言語/宣言型言語と言います。
命令型言語で処理を記述したからと言って必ずしも命令型プログラミングをしなければいけないわけではありません。

命令型言語: C, C++, Javaなど
宣言型言語: Haskell, Prolog, Lispなど

======追記=======

プログラミングパラダイム

プログラミング言語は様々なパラダイム(概念)に基づいて設計されている。
代表的なパラダイムをざっくりといくつか紹介する。

手続き型プログラミング

命令型プログラミングの一種。
手続き(コンピュータにさせる処理記述)を上から順に実行していくイメージ。

オブジェクト指向

ひとかたまりのコードをオブジェクト(モノ)として考え、それを組み合わせてプログラムを構築していくイメージ。
クラスという設計図を基にオブジェクトを生成(インスタンス化)する。
コードを部品化することで再利用性を高めている。

関数型プログラミング

数学で言う関数を定義して組み合わせていくことでプログラムを構築していくイメージ 手続き型等はどのように処理するかを記述するが、関数型は性質(法則のようなもの)を記述する。
純粋関数言語と非純粋関数言語が存在し、純粋型は変数への値の再代入を禁止することで副作用を生まないようにしている。
副作用とは処理を実行することで、他の処理に影響のある変数の中身を変化させてしまうこと。
副作用を生まないようにすることで、処理は入力に対して決まった出力を提供する。(参照透過性)

論理型プログラミング

数理論理学を使用してプログラムを構築していくイメージ
証明や言語処理などが得意

なんか、関数型だけ説明がながくなってしまった。。。