プログラミング・パラダイム「視野を広く保つために」

プログラミング言語にはその言語ごとに固有の思想がありますが、これをプログラミング・パラダイムと呼びます。プログラマがプログラミング言語を特性に応じて複数使い分けることや、プログラミング言語が多数ある理由にもプログラミング・パラダイムが関係しています。

パラダイムとは

まず始めに「パラダイム」について確認しておきましょう。パライダムとは「模範」や「典型」などを意味する言葉です。哲学者・科学者であるトーマス・クーンが1962年に出版した『科学革命の構造』という本がきっかけとなり、人の思考の概念的な枠組みや世界認識の仕方を「パラダイム」と呼ぶようになりました。

例えば、ダーウィンの進化論が出版される前は、神様が人間を作ったと考える人がほとんどでした。またガリレオが天動説を唱えるまでは、地球を中心にして太陽がまわっていると信じられていました。これが自然科学の発見によって、今まで多くの人に信じられてきた世界観がガラリと変わります。このような認識の変化を「パラダイム・シフト」または「パラダイム・チェンジ」と呼びますが、現在は自然科学以外の分野でも広く使われる言葉となっています。

情報科学がもたらすパラダイム・シフト

情報科学(コンピュータサイエンス)の分野においては、インターネットの登場により情報が一瞬で世界中に広まるようになり、計算処理の効率化により、1人の人間が処理できる仕事量が大幅に増えました。このような技術革新の発生が人類史に大きな影響を与えます。

例えば、ボードゲームのチェスは1996年頃に名人より強いAIが登場していますが、将棋や囲碁に至ってはルールが複雑であるがゆえに、人間を超えるAIが作られるのはまだ先の話だと考えられていました。しかし、2015年にGoogleが開発したAlphaGo(アルファゴ)が囲碁の名人に勝利します。コンピュータの性能の向上に伴って、人工知能の進化は加速度的に進化しています。

またパソコンで自分の現実を拡張するARを始めとする製品が発達すると、遠くにいる人がまるで隣りにいるかのように話ができたり、現実に適合したカタチで情報を扱うことができるようになります。今後も拡張現実は様々な場面で増えていくことでしょう。

他にも、人間の顔を見て人物を判断する画像認識データも広がりをみせています。買い物や入国審査も顔認証、生体認証で個人を判別すれば、人々の生活は今よりずっとスマートになるでしょう。

またコンピュータの意思、つまり高度な汎用型AIが発達すれば、AIが人間を管理するようなSF映画の世界も大げさな話ではなくなっていくのかもしれません。

言語におけるパラダイム

「パラダイム」は身近な物事の考え方にも影響を与えています。その1つがプログラミング言語におけるパラダイムです。外国語を勉強していると気付きますが、翻訳してから母国語に戻してみると、元の文章とは異なって翻訳され、結果意味が取りづらくなることがあります。つまり英語には英語の、日本語には日本語の、言語によってそれぞれ固有の形式があるということです。

例えば日本語の「緑」という言葉は英語の「Green」と同じく色彩の緑色を意味します。しかし平安時代まで「緑」は、みずみずしい新緑を意味した言葉でした。当時は色の概念が無かったので、木々の緑のことを青々しいと表しました。「緑」が色を表す言葉ではなかったのです。

私達が当たり前に認識していると思っている色さえも、文化や言葉が違えば同じ色を見ていると言えないのです。つまり、言語によって人は認識の仕方が異なり、言語ごとにパラダイムが発生するということです。1つの言語を使うということは、1つのパラダイムを通してモノを見るということなのです。

それはプログラミング言語においても例外ではありません。英語や日本語などの自然言語と同様に、プログラミング言語はそれを使うプログラマにパラダイムをもたらします。世の中で使われているプログラミング言語が無数にあることからも、そのパラダイムは非常に複雑と言えます。

プログラミングにおけるパラダイム

それでは、プログラミングにおけるパラダイムについて、いくつか解説しましょう。

手続き型言語 命令文がセミコロンで区切られ、上から順番に実行される性質のプログラミング言語。C言語、C++、Java、PHP、Ruby、Python、JavaScript、COBOL、FORTRAN、などが「手続き型言語」の性質を持ちます。

非手続き型言語 命令文を同時に並行で実行する性質を持つ言語。命令が上から順番に実行されるのではなく、3行の処理コードが書かれていたら3行同時に処理を実行することができます。関数型言語、論理型言語、などが「非手続き型言語」の性質を持ちます。

成長するプログラミング言語

ちなみに手続き型言語であっても並行処理ができたり、関数型言語の特徴を持ったり、プログラミングのパラダイムは各々の性質が重なり合う場合もあります。最近になって生まれたプログラミング言語は、様々なパラダイムをちょうど良い塩梅に取り入れるハイブリッドな言語が多い傾向です。

例えば、オブジェクト指向というパラダイムが流行った時、C言語、perl、pythonなどの言語にはオブジェクト指向に通ずる考え方が実装されていませんでした。そこで、C言語にオブジェクト指向が機能として付与され生まれたのがC++(シープラスプラス)というプログラミング言語です。この++(プラスプラス)は加算を意味するインクリメントと呼ばれる記号ですが、「C言語にオブジェクト指向の機能を加算した」という意味があります。プログラミング言語は、バージョンアップに伴って新たなパラダイムを柔軟に取り込んで成長していると言えるでしょう。

主要なプログラミングのパラダイム

今までとは違う使われ方をする言葉が追加されることで、言語そのものが自然に拡張され、逆に使われない言葉は淘汰され消えていきます。

プログラミング言語の場合も同様で、実装された機能を使ってみると不便だったり、セキュリティに問題があったりした場合など、他に適切な手段があれば言語仕様から機能や言葉が削られてしまうこともあります。またプログラミング言語の仕様ではなく、コードの書き方に一定のルールを設けることも1つのパラダイムだと言われています。

例えば、pythonという言語のversion3にはC言語などの手続き型言語によくあるswitch文がありません。if分野やDictionaryなどの別の機能を用いれば実現できるため実装されていないのです。

さて、それでは以下の一覧にある4つのパラダイムを見てみましょう。これらはよく使われるプログラミング・パラダイムの一種です。1~4のプログラミング・パラダイムは、WEBアプリケーション開発時において必須の知識と呼べるものです。詳しい解説は今回省きますが、名前だけでもよいので頭の片隅にいれておきましょう。

  1. 手続き型言語
  2. 構造化プログラミング
  3. オブジェクト指向プログラミング
  4. MVCモデル

プログラミング・パラダイムまとめ

1~4のそれぞれのパラダイムは明確な定義があるわけではなく、現在進行系で議論、改良、解釈の変更がされているものです。「絶対的なパラダイム」があるわけではなく、またパラダイムは対立し合うものでもありません。うまいぐあいに自分のプログラミングスタイルに合わせて柔軟に使いこなすものだと心得ましょう。

にほんブログ村 IT技術ブログへ
にほんブログ村