プログラミング学習

プログラミング言語の設計思想と歴史を学ぶ意味

投稿日:2018年12月20日 更新日:


プログラミング言語の『設計思想』と『歴史』についてどれだけ知っているでしょうか。
初心者の方に限らず、意外と自分が日頃使っているプログラミング言語に関する『設計思想』や『歴史』について知らない人が多いというのが、私の感想です。

今日は意外と忘れがちな『設計思想』と『歴史』についてスポット当て、これらを学ぶ意義について考えてみたいと思います。


設計思想とは何か?

『設計思想』は『アーキテクチャ』と呼ばれることもありますが、私たちが『アーキテクチャ』と言った場合に思い浮かべるイメージには人によって違いがあります。
そこには『設計方法』や『システム構造』などの意味が含まれてしまうため、ここで扱う『設計思想』は以下のように定義します。

- ある対象物を設計する際のコンセプト(テーマ)や基本概念 -

プログラミング言語も人間が開発・設計したものである以上、そこには必ず『設計思想』が存在しています。
Benevolent Dictator For Life - 優しい終身の独裁者 -』という言葉があるように、無機質に見えるプログラミング言語にも間違いなく、作成者の意志が存在しています。

設計思想と歴史から何を学びとるのか?

作成者が異なる意志を持っていれば、そこから生まれる『設計思想』も異なっていきます。
これは誰もが『当たり前のこと。当然知っている。』と思われるかも知れませんが、今まで出会った人にこのような言葉を言われたことはないでしょうか。

『言語は一度コツさえ分かってしまえば、基本的には全部同じ。』

実際に私自身が言われた言葉でもあります。
この言葉が間違っているとは私も思いません。
ですが、全てが正しいかと言われるとそうとも思いません。

『言語は一度コツさえ分かってしまえば、基本的には全部同じ。』

この言葉が意味するところを私なりに解釈すると...
プログラミング言語と呼ばれるものから抽象を抜き出した時に、『変数』『標準入出力』『APIの利用』『ライブラリのimport』など多くの言語が共通の機能を持っているため、それらの利用方法に大きな違いはない。
という意味で理解しています。

しかし、この言葉から得られる抽象を『言語はすべて同じように書ける。』と拡大解釈し、それをそのままコードで表現してしまうことには疑問を感じます。
オブジェクト指向しかり、関数言語パラダイムしかり、メソッドチェーンしかり、例外処理しかり、多くの言語が備えている・サポートしている機能のため、確かに同じようにコーディングを行うことはできます。

ですが、立ち止まって考えてほしいのは、同じように全て書いてしまうことは本当にその言語の正しい使い方なのか。設計思想を反映しているのか。ということです。

多くのプログラミング言語が、その親とも言うべき言語を持っています。
そして、新たに生まれた言語はその親とも言うべき言語が解決すべき課題を言語的に解決された形で実装し、生まれてくる場合が多くあります。
オブジェクト指向を言語的に実装しているJava、スケーラビリティが言語レベルで考慮されているScalaやGo言語などは、先に生まれた言語たちが言語実装として持ってはおらず、『システム開発』の流れの中で必要とされてきた機能を言語的に実装しています。
それぞれの言語がもつこれらの特徴は作成者の『設計思想』とそれまでの言語やシステム開発が積み上げてきた『歴史』の中から生まれてきています。

それを、『言語は一度コツさえ分かってしまえば、基本的には全部同じ。』と同じようにコーディングすることは、作成者が意図した『設計思想』も今まで積み上げてきた『歴史』も無視していることと同義だと私は思っています。


設計思想と歴史を学ぶことでプログラミングは変わるのか?

『設計思想』と『歴史』を知ることによって、自分が使っている技術や自分が書いたコードを違った視点で見ることができるようになるのは間違いありません。
しかし、ただ単純に知っているだけでは...

・劇的にプログラミングの技術は向上しない。
・美しいコードをすぐに書けるようにはならない。
・最適なアルゴリズムを選べるようにはならない。

つまり、『大きな変化』は生まれないでしょう。むしろ、コーディングの際に迷いが増えて、コードを書くスピードが遅くなってしまうかも知れません。

プログラミングはあくまで道具です。道具である以上はその『道具を扱う』技術を学び、磨く必要があります。
日々の業務の中で、他の人が何気なく書いてしまうコードを少し立ち止まって、これで良いのかと考えて、コードを書く。

きっと出来あがるものは、考える云々にかかわらず変わらないでしょう。
ましてや、劇的に実行速度が早くなるなんてこともないでしょう。

ですが、『プログラミング言語の使い方』に焦点を当て、その特性を考える時間が増えることは決して無駄ではないと私は思っています。



この記事を読んで、自分のプログラミング言語に興味を持ってもらえれば幸いです。

  • この記事を書いた人

@EaE

ぬこ様とC#をこよなく愛する27歳です. 医療:理学療法士から、IT:システムエンジニアへ華麗?な変身をとげました. サーバーサイドエンジニアとして、日々奮闘しています. 今年の目標は、頑張ってWebサービスを作ります!!

-プログラミング学習

Copyright© Developer Wall - 開発の壁 - , 2019 All Rights Reserved Powered by AFFINGER5.