質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Q&A

解決済

21回答

17013閲覧

何故プログラミング言語は一つにならないのでしょうか?

jimyo

総合スコア243

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

0グッド

15クリップ

投稿2015/07/28 13:41

現在、非常に多くのプログラミング言語が存在していますが、なぜ一つの言語に集約しないのでしょうか?

組み込みならC、Java、WebならPHP、Ruby、Javascript、ゲーム開発ならC#、C++のように使い分けがなされていますがすべての用途を一つの言語でまかなおうという動きがないことに疑問を覚えます。

学習コストも下がるし、単一の処理系で多様な目的を実現できたりといいこと尽くめな気がするのですが……

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答21

0

ベストアンサー

ナイフと砥石さえあれば究極的には大工仕事は何でもできるのに、斧や鋸や鉋などがいまだに存在し単一に統合されないのと同じような理由だと思います。無理やり統合しようとしても十得ナイフのようになってなかなかうまく行かないんじゃないでしょうか?
様々な用途で統一的なものを用意した場合、メンテナンスも大変です。
Webのセキュリティ関連に問題があったから修正した。などでも全体のバージョンが上がるように思います。
例に挙げられたことは大体Cやアセンブラでできますが、非常に工数が大きく煩雑になってしまいます。
逆に各言語はそういう状況から、スコープの狭い作業に特化する形で産まれてきたのではないかと思います。

投稿2015/07/28 13:56

編集2015/07/28 13:57
hirohiro

総合スコア2068

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hirohiro

2015/07/28 17:59 編集

常日頃使ってる言語の中にも似たような例があります。 数学式などです。 「一足す一は二」のように日本語で記述できる部分が既にあるにもかかわらず、それらでさえも1+1=2という専用の記述式(言語?)が広く利用されています。 インバースやシグマ、logなども「関数に対する引数が一から無限までの積分」「nが一から五までの数列の和」「a を底とする x の対数」のように日本語での表現も可能ですが、通常数学式で表現します。 これらのことによって、数学式記述言語とそれの日本語での表現の両方を学ぶ必要があり、学習コストも高くなっていますが、数学式を廃止して日本語に統合するという動きはあまり聞きません。無理に1つの言語内に統合するよりも、そのままの方が使い勝手が良いためだと思われます。
guest

0

すべての用途を一つの言語でまかなおうという動きがないことに疑問を覚えます。

昔ありましたよ。50年前。
https://ja.wikipedia.org/wiki/PL/I
それまでの三大言語を統合して、当時コンピューターが使われていたすべての用途に適した言語でした。

その後、コンピューターが使われる範囲が拡大し、またプログラミング技術の発達で新しいパラダイムが出来て、それらに対応しきれずに今に至っています。
いまだと変化が早いので、5年前に使われていなかった分野でのコンピューター利用が盛んになったりして、「すべて」の用途がどんどん広がっています。

別の理由としては、「何が良い言語か」についての共通認識が無いので、統合が無理というのもあります。
例えば、「動的型付けでないとオブジェクト指向はあり得ない」という人と、「静的型付けでないと効率的な開発が出来ない」という人の両方が満足する言語は作れません。オプションによって切り替えるなどするとしても、それはもうそれぞれ別の言語ですね。「関数型」と「手続き型」というのもありますね。

投稿2015/07/28 14:19

otn

総合スコア84663

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

これはあくまでも私見ですが、非常に多くのプログラミング言語が存在している背景にはいくつもの要因があると思います。

そもそも、新たな言語を生み出すのには相当の労力が必要だと思いますが、それでも敢えて新たな言語を生み出すからには、目の前の問題を「より早く」「より確実に」解決したいという強い思いがあるからではないでしょうか?
一つの言語に集約されれば、確かに「全体としての」学習コストが下がるだけでなく、色々な面で経済的になると思いますが、現実的には今この瞬間にも新たな言語が生み出されているかもしれません。

自分が思いつく要因としては、
0. 同じ問題でも解決へのアプローチはひとつではありません。しかも、どのアプローチにも一長一短があり、どれが一番優れているとは言い切れないケースも有ります。
0. 解決しなければならない問題が益々複雑になり、対象となる分野も広がっています。
0. 実装の容易さ(コーディングし易さ)とテスト&デバッグのし易さは必ずしも比例しません。
0. 表現力が高く扱いやすい言語処理系の処理速度が速いとは限りません。むしろ処理が遅い場合が多いです。
0. 何でも出来る言語処理系が使いやすいとは限りませんし、必ずしも学習コストが低いわけでもありません。場合によっては、目の前の単純な問題を解決したいだけのために、わざわざ『完璧な』言語を時間を掛けて『学習』しなければならない、というようなことも起こり得ます。

例えば、十徳ナイフがあれば一通りの作業はこなせるでしょうが、だからといって刺身包丁が不要になるかというとそうではありません。一流の料理人が何本もの包丁を使い分けるにはそれなりの理由があるのと同じように、プログラミング言語にも『適材適所』があるということです。

これは何にでも当てはまるのではないでしょうか?

たとえば、OSだって色々ありますし、一口にLinuxと言っても色んなディストリビューションがあります。
それぞれに一長一短があり、だからこそ自然淘汰されてどれか一つに集約されるということがありません。
CPUのアーキテクチャだってそうではないでしょうか?

今やIT関連の知識や技術はあまりにも多岐に渡るので、全てを網羅しようとするのは現実的ではありません。
同様に、すべてのプログラミング言語に『精通』しようとしても無理があります。

ですから、たくさんの言語があることを嘆くよりも、まずは何か一つ、得意な言語を身につけることが最も重要だと考えます。

その上で、各言語の生い立ちに目を向け、どの言語が別のどの言語から派生したかに注目すると、文法が似ていたり、それぞれの特徴が見えてくるので、精通しているとは言えなくてもある程度読み書き出来る言語が増えてくるのではないでしょうか?

すっかり長くなってしまいましたが、自分はそのように捉えて『ゆったりと取り組む』ことにしています。
さもないと、精神衛生上あまり良くないので。

投稿2015/07/28 14:54

pi-chan

総合スコア5936

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

初めまして。

それぞれの言語に向き不向きがあるからではないかと思います。
確かにC言語ならほとんどの事ができてしまうでしょう。
JavaはVMありきですし。

しかし、Javaでは簡単に行える処理をあえてC言語で記述すると意外と面倒だったりします。
書き手にもよると思いますが、可読性も落ち、バグの温床になりかねません。

そこで得意分野をもつ言語が出てきたのかなと思います。

また、現在ではブラウザでもいろいろな言語を動かそうとWeb Assemblyとのプロジェクトもあります。
GoogleやMozilaなどの開発者がWebアプリでもネイティブ並みの速度を出そうとのプロジェクトです。

このプロジェクトではまず、C言語がブラウザで動くようになるようです。
1つの言語でできる範囲がどんどん増えてはきていると感じます。
現在IoTなどの流れでPythonなどで組み込みのプログラミングとかできますし。

投稿2015/07/28 13:51

chonbo2525

総合スコア233

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

たくさん、回答がありますので趣向を変えて、
簡単にかつ独断で各言語が作られた背景・目的を書きます。

JavaやjavascriptまたはPHPは意図的に機能を削っています。
なんでも出来る言語はデメリットもあるのです。

Cだとコンパイラが簡単であることを目的に作られました。

C++は、Cにクラスベースのオブジェクト指向言語を追加した言語です。

JavaはCの人に馴染みむ記法でC++の煩雑なメモリやポインタの管理を自動化、そのせいで重いといわれま
した。また、家電を含むあらゆるマシンで動くようにバーチャルマシンを導入しました。

javascriptはブラウザ上で動く言語で、ブラウザが動かすためコンパイルなしのスクリプト言語として作られました。

PHPは言語と言うより動的にHTMLを出力するツールとして作られました。

C#はJavaとほぼ同じ思想で作られた。または、MicrosoftがJavaを真似したと言われている言語ですが、家電などはめざしませんでした。また、Javaが捨てた手動でのメモリ管理も出来ます。

Rubyは、作者が半ば趣味的に各言語のいいとこ取りで何でもかんでも取り込んで作りました。

言語を作るのは一部のプログラマに人気があるらしく、なんの役にたてるつもりもないジョーク言語がかなりあります。むしろ言語作りたいだけなのかもしれません。

投稿2015/07/28 16:08

iwamoto_takaaki

総合スコア2883

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

皆さんがおっしゃるようにそれぞれの言語に向き不向きがあり、必ずしもいいことずくめではありません。

また、もし言語を1つに統合するとなった場合、
どの言語にするのか?
新しく作るとなったら、どのような言語を作るのか?
という問題もあります。

既存の言語にする場合、どのように決めるかも問題です。プログラミング言語にも当然製作者や権利者がいます。
新しく作るとしても、世界中のプログラマー全員が納得する言語を作るなど、ほぼ不可能です。

どちらにしろ、そんなことをしては、現在プログラマーが持っている言語に関するほとんどの知識が役に立たなくなってしまいます。
言語統一に、それ程の荒療治をする価値があるのかどうかですね。

投稿2015/07/28 14:55

shiolier

総合スコア1156

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

現在、非常に多くのプログラミング言語が存在していますが、なぜ一つの言語に集約しないのでしょうか?

新たに統一言語を作ったとして、すでに他の言語を習得している人たちからすると、新たな言語を学ぶのは学習コストが高すぎるというのはあるでしょうね。

組み込みならC、Java、WebならPHP、Ruby、Javascript、ゲーム開発ならC#、C++のように使い分けがなされていますがすべての用途を一つの言語でまかなおうという動きがないことに疑問を覚えます。

過去にそういう動きがなかったわけではないです。
たとえば、アメリカの国防総省だったかで、外注したプロジェクトも含めてすべてのソフトウェアをADAという言語に統一するという動きがありました。

ADAはその時代にすれば、すぐれた言語だったと思いますが、残念なことにオブジェクト指向が含まれていなかったと記憶しています。
なぜオブジェクト指向が含まれていなかったかといえば、その時代にはオブジェクト指向が存在しなかった、あるいは、一般的ではなかったからです。
このことからわかるのは、現時点で理想のプログラミング言語を作れたとしても、将来的に新たなパラダイムが言語に求められるようになった場合に対応できなくなります。

学習コストも下がるし、単一の処理系で多様な目的を実現できたりといいこと尽くめな気がするのですが……

単一の処理系で多様な目的に対応するのは難しいと思われます。
なぜなら、「多様な目的」は多様すぎて、相反する目的も含まれてしまうからです。
たとえば、

・ハードウェアの機能をフルに使いたい

という目的と

・なるべく短いコードで複雑な処理をしたい

という目的を1つの言語で賄おうとするのは難しく思います。

上記2つの目的を1つの言語に押し込むことができたとしても、
それぞれの目的にあった言語の使い方はかなり解離しているので、
おそらく自分の目的にあった使い方だけを学ぶならそれなりの学習コストで済むでしょうが、
両方の目的にあった使い方を学ぼうとすると、それぞれの目的にあった知識・パラダイムなどが
違いすぎるので、学習コストは目的別に作られた2つの言語を学ぶのと大差ないのではないかと思います。

つまり、目的が違う言語を1つにまとめたとしても学習コストが下がることはほぼないと推察します。

あと余談ですが、言語を作成する人間には2種類いまして、
1つは「使うために言語を作る人」で、
もう1つは「作るために言語を作る人」です。
前者は今使っている言語に不満があると言語を作ったりするのですが、
後者は「こんな言語を作りたい!」とふと思って作るだけなので、
たとえ統一言語が作られたとしても、好き勝手に言語を作り続けると思われます。
大勢には影響ないでしょうが、言語の種類が増えるのを止めるのは、
後者の人間が多少なりとも存在している限り無理でしょうね…。

投稿2015/08/04 08:57

JunSuzukiJapan

総合スコア310

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

現在、非常に多くの ** が存在していますが、なぜ一つの ** に集約しないのでしょうか?

** にはいろいろなものを当てはめることができそうです。
だとえば、
通貨, 宗教、
電子書籍のフォーマット, ゲーム機,
学校の校則, 学校で使う教科書, 学校のカリキュラム
紙飛行機の折り方 / 飛ばし方
米の炊き方、
自転車のデザイン、
テレビのリモコン
陸上競技場のデザイン
コンピュータでつかう文字のフォント
C言語での インデント、{ の置き方 のスタイル

いずれも歴史的経緯があったり、目的にあわせて分化していたりなど理由もさまざまです。

コンピュータを操作する言語も、それぞれ 作成された背景があります。

投稿2015/07/29 22:13

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

何故プログラミング言語は一つにならないのでしょうか?

なぜ言語を統一できないのか? なぜバベルの塔(統一言語)は崩壊するのか?
かんたんに言うと、言語にはトレードオフがあるから、統一化できないのです。

これを分かりやすくするため、自動車のたとえで考えてみましょう。

大量の荷物はダンプやトラックで運びますし、
いっぽう郵便配達や食べ物屋の出前は(原付)バイクで行いますね。

馬力があって大量に運べることと、燃費が安くて小回りが利くことの、
両方をいっぺんに満たす車両はありません。これがトレードオフです。

まあ両方を足して2で割って、軽ワゴンでも両方こなせますが、
どちらにしても中途半端で、やはり特化した車両には負けます。

言語に戻って考えると、大型車両のような言語がC++やJavaで、
軽自動車のような言語がPHP、Ruby、PythonなどのLLです。

それらは開発速度と実行速度などのトレードオフがあるので、
やはり使い分けられています。つまり言語も適材適所だと思います。

投稿2015/07/28 21:03

LLman

総合スコア5592

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

確かにプログラミング言語は多いですが、新しい言語の誕生の陰には、消えてなくなる言語もたくさんあります。コンピュータの処理速度の進化に合わせて誕生したものや特化したもの。より使いやすく進化したもの。様々です。特に、スクリプト言語(インタプリタ)は昔の低速コンピュータではとても使い物にならなかったでしょう。ハードウエアの進化に伴いソフトウエアも進化する必要がありました。速度だけではなくメモリ容量や記憶容量などハードウエアはすさまじい進化を遂げています。今後もプログラミング言語は新陳代謝を続けていくと思います。

投稿2015/07/28 14:05

rik

総合スコア1151

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

プログラムに限らず普通に会話する言語だって統一されてないわけで。
(一応世界標準言語なるものがあるらしいですが…)
それぞれに特色があり、それを活かすのがプログラマの腕の見せ所なのかなぁと思います。

まあ、やろうと思えばアセンブリで全部解決なんですけどね。

投稿2015/07/28 14:03

yu-ri

総合スコア634

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

まったくその通りだと感じます。
私もCommon Lisp(ANSIで規格化されたプログラミング言語です)を覚えてDSLを作って仕事をしようと思ひます!

投稿2015/08/04 12:26

tadsan

総合スコア19

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

OSも携帯電話もスマートフォンも
そうですけど、単純に
『作りたいから』
だと思いますよ。
アニメとか映画とかとも同じかもしれません。
かっこよく言うと、『人間は夢を見るから』かな。

投稿2015/08/04 06:09

NaokiImazu

総合スコア127

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

英語、日本語、韓国語、中国語など、、世の中には色々な言語があります。
それは、なんででしょうか?
効率の良さ、言語の優れ度などは関係なく、色々な人が考えを持って作ったので、色々な言語が生まれたと思います。

ただし、プログラム言語は、根本的にはどこかは似たり、同じ部分があるので、
全ての言語を勉強する必要はないと思います。

投稿2015/08/04 03:58

lol

総合スコア85

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

IWWoU

2015/08/04 04:03

というより、やる事は一緒なんですよね・・・ただ構文や単語の意味が違くて、その違いが使いやすさなんかを変えてるだけで。一つの言語に慣れると他の言語もなんとなく組めちゃったりします。程度の差はありますけれども。
guest

0

それぞれ長所短所がありますから。それに凡庸性に長けた一つよりも一点特化の物を集めて制御したほうが良い事もあるというのは、プログラムに限ったことではありません。
あと、人や使う機体によって使い慣れてる言語が違うというのも一つの要因かと。人間で言えば、究極的には英語なりなんなり、使われる言語は統一した方が利便性はあがるのにしないのと同じでしょう。

投稿2015/08/04 03:41

IWWoU

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

なぜ複数生まれたのか、という問いに対しては、他の回答者さま方に譲ります。

既に複数ある言語を1つに統一するとしたら、その1つを何にするかを決めなければなりません。
その決め方について考えてみました。

①何らかの得点基準を設けて採点し、最も得点の高いものを採用する

パラメーターが多いだけでなく数値化するのが難しいので、そもそも得点基準を定めることが難しそうです。

▼作るソフトウェアの種類

  • OS
  • Webアプリ
  • ゲーム
  • ハードウェアの制御

▼学習

  • 難易度
  • 学習曲線

▼利用者の多さ
etc...

②利用者の多いものを採用する

何らかの理由で1つのOSが圧倒的なシェアを獲得し、そのOSでは1つの言語しか使えないとしたら、それを使わざるを得なくなります。
つまり、自然言語における英語のような存在になるイメージです。

それでも結局は方言のようなものは生まれてくる可能性はあると思いますし、宗教的・政治的な問題があるので完全に1つにすることは難しいでしょう。

③すべての機能を併せ持った ** 最強の ** 言語を新しく作る

何を以て最強かという点で、①と同じ問題があるため難しそうです。

...たいぶ長くなってしまいましたので、この辺でやめておきます。

投稿2015/07/30 00:13

argius

総合スコア9390

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自然言語と同じで日本語、英語 いろいろあって言語なのです。

投稿2015/07/29 15:11

pirlo21

総合スコア31

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

もしも素晴らしいパーフェクトな言語が開発されて「これから新しくプログラム作る時はこの言語を使いましょう」と(法律で?)決められたとして、「今までのプログラムはどうするの?」という問題が出てきます。

数値解析やスーパーコンピュータの世界では、最古の高級言語Fortranが使われています。
50年前に書かれたプログラムが(チューニングなどされてはいるでしょうが)いまだに使われていたりします。
それらを新しい言語に置き換えるとすると……
博士クラスの数学のスキルが必要なものもたくさんあるし…
歴史が長いので量がものすごくたくさんあるし…
「やっぱりこのまま使いましょう」ということになって、「使い方を正しく理解したい」とか「ちょっと機能追加したい、仕様変更したい」と思うとFortran勉強していないと無理ですね。

「過去の資産」は膨大で偉大なのです。

投稿2015/07/29 03:13

mie

総合スコア229

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

言語が一つにまとまらないのには多様性をもって様々な困難に対応したり、問題を洗い出している時期にいるからではないでしょうか。以下は私の考えたたとえ話です。
プログラミング言語は「障害物競争」を走っているような状態と考えられます。この「障害物競争」はとてもたちが悪く、ルールや環境、果てはゴールが複数設定されるなど、スタート時に最新状態を想像できない無茶苦茶なものです。
このレースの救いは協力プレイができることです、すべてのゴールに到達するためには、たくさんの言語を集め、各言語自身を高めたり、障害に対する攻略法を他の言語へ伝えたり、時には二手に分かれることもあります。残念ながら力尽きた言語や力を取り戻した言語もあります。
いずれ、すべてのゴールに達しすべてのゴールを一つの言語が登場することで単一の言語になるのではないでしょうか。(ただし、関係する人の主義主張や利害等々が邪魔をすると思いますが…)

投稿2015/07/28 18:24

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

宗教と一緒で思想の違いはなかなか埋まらないでしょうねぇ。
逆に乱立することで切磋琢磨しあえてる面もあると思うんで、悪いことばかりでもないと思います。
(たまに無駄に影響うけて変なモードが生まれることも多いですが)

質問者様のように、いろいろ乱立しておかしい!もっとこういう言語のほうが絶対に楽だ!と考える人達が、さらに新しい言語が生み、中途半端に支持を集め、また一段と混沌としていくのでしょうかね

投稿2015/07/28 14:32

kzyplus

総合スコア62

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

目的が違えば、目指す方向も違うから多様な言語、フレームワークがあると思うのですが。
おそらく、大昔のC言語はその1つの言語に絞ろうとしてできた言語だったと思います。
でもそれだと力不足だったらC++だったり、Javaだったりが出てきたりしてるわけです。

単一の処理系で多様な目的を実現できたり

Javaだったり.net系だったりはこの目的で仮想マシンで動くような仕組みだったはずです。

言語の学習コストについては、個人的には、C言語系(手続き系)、C#系(オブジェクト指向系)、SQLの3つを抑えとけばあとはちょっとした応用と気合で頑張れます。たぶん。

投稿2015/07/28 13:57

編集2015/07/28 14:00
tenraku

総合スコア148

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問