初学者が書いたプログラムについてのざっくりメモ

Python

Programming Paradigms?

プログム関連の記事を見ていると、いろいろな用語が出てくる。
その中で気になって仕方ないのがProgramming Paradigmsと言う奴だ。
オブジェクト指向プログラミングスクリプト型言語

悩む

Pythonを始めようと思っていたのだが、なんだかいろんな潮流があるんだろうか?
自分が進もうとしている方向がまさか時代遅れだったらどうしよう?

初心者によくありがちな、何を始めれば良いか悩む病の発症である。
下手をすると、調べ疲れてお腹一杯になってもうProgrammingの「プ」の字すら見たくなくなってしまう恐れのある大変危険な状況。
Programmingなら「P」だろ、とか些細すぎる突っ込みは相手にしている暇など無いのだ。
ああどうしよう。

と言う事で、調べてみた

仕方ないので目に付く情報をとりあえずざっと調べみたので、今の理解の範囲でメモってみることにしました。
先で見た時に突っ込みどころ満載だろうがそれも良き想い出、と先に自己防衛をしておきます。ナイスリスク管理。

プログラムの型

まず、プログラミングは記述の仕方でざっと4通りに分けられる。

  • 手続き型プログラミング:Procedural Programming
  • 宣言型プログラミング:Declarative Programming
  • オブジェクト指向型プログラミング:Object Oriented Programming
  • 関数型プログラミング:Funcional Programming

もっと細かく分ける事も出来るが、大きく分けるとこのどれかに入れる事ができる。

そしてこの分けは今までプログラム言語が発展してきた過程でのカテゴリー分けであり、それぞれの言語はこのどれかに寄った性質を持つが、それだけの性質を持つものではない。
例えば純粋なオブジェクト指向プログラミング、と言うものは基本的には無く、関数型のプログラムも書く事が出来る。

手続き型プログラミング

入力に対して取る手順を指示したもの。
ほとんどのプログラミング言語は手続き型と言える。

宣言型プログラミング

解くべき問題を指示する言語。解くための手順はその環境に任せる。
手順を記述しないため、コンピュータが無駄な手順を取ってしまう場合がある。

オブジェクト指向型プログラミング

変数などを使用して組んだオブジェクトの集まりを操作する型。
オブジェクトの中身の可視性は低い。
Pythonはオブジェクト指向寄りだが、関数型としても記述出来るマルチパラダイム言語だそうです。

関数型プログラミング

問題をいくつかの関数に分けて解決する型。
変数を使用しない小さい関数の集まりで運用する。
関数なので可視性は高い。
昔PCの性能がとても低かった頃は、関数型で書かれたプログラムはとても処理速度が遅かったとの事でメジャーでは無かったが、PCの性能が上がってくるにつれて最近復調の兆し。

スクリプト言語?

これはまた別の話で、プログラムを記述、実行するにあたっての手続きの違いでした。
相対する概念はコンパイル言語。両者には一長一短がある。

スクリプト言語

スクリプト言語はインタープリタ型言語とも言い、我々人間が人間に分かる言葉で記述(script)したソースコードを、パソコンが逐次解読、理解(Interpret)して実行する型のプログラム言語。
人間に分かる言葉で記述出来るので、記述(開発)、解読、修正が容易であり、開発スピードは早い。
しかし、機械が人間の言葉を解読しながら実行するため、実行速度は遅め。

コンパイル言語

人間の分かる形で記述したソースコードを、実行する前に機械に分かる2進法の機械語に翻訳(コンパイル)する必要がある言語。
実行前に行うコンパイルの際にエラーがチェックされる、とは言うものの、記述(開発)、解読、修正に時間がかかる事は否めない。
しかし、一旦コンパイルされたものは機械が理解しやすい為、処理スピードはとても速い。
使用者から見た場合、コンパイル形で配布されたプログラムは実行が容易と言う利点がある。

ちなみに、このスクリプト言語かコンパイル言語かについては、現在では中間の言語が増えてきたお陰で分けにくくなってきている。

  • 完成したソースコードをコンパイルして始めて実行(C、Go等)
  • 一度コンパイルした中間言語を機械が解読して実行(Java、C#等)
  • ソースコード、中間言語を逐次機械語に翻訳して実行(JavaScript等)
  • 機械がソースコードを直接解読して実行(Python、Ruby等)

ざっくりまとめると

スクリプト言語かどうかについては、学習の容易さはスクリプト言語の方に軍配が上がる為、とりあえずスクリプト言語の性質をもつものを選ぶ事とする。

プログラムの型については、どれもが程度の差はあれ挙げた4つの性質をもつものなので、一つ目の言語については好きな言語を選べば良さそう。
しかし、ある程度使えるようになった際には、似た性質の言語に進むのでは無く、例えばオブジェクト指向型寄りのプログラムの次には関数型寄りのプログラムに手をつけた方が、効果的。
例えば、Pythonに慣れた後は、Rubyに進むのでは無く、ErlangやElixir等関数寄りの言語と言う事の様です。

内容の雑さはともかく、調べて良かった。
2つめの言語悩んでいるとは、まるで新幹線に乗る前に、東京駅へ行く際に向かう最寄り駅へ行くルートで悩もうとしていたようなものでした。危ない危ない。

お陰で一つ目に対する迷いは消えました。

コメント

タイトルとURLをコピーしました