1. ながおかのプログラミングチャンネル
  2. プログラミング言語ってなに?..
2020-04-28 07:25

プログラミング言語ってなに? #ながプロ #standfm

エンジニアではない友達にプログラミング言語ってなに?と聞かれたときに話している内容です。
背景にも使っている、言語同士の関係を見るのにおすすめのサイト
https://exploring-data.com/vis/programming-languages-influence-network/

#寝る前に聴きたい #好きな○○について語る #今日何した#はじめまして #プログラミング #転職 #勉強 #プログラミング言語
00:05
こんにちは、ながおかのプログラミングチャンネルです。
今回は、ちょっと友人によく聞かれることがある質問で、
プログラミング言語って何なの? みたいなことにお答えしていきたいと思います。
想像、イメージするシチュエーションとしては、
プログラマーではない友達で、 でもちょっとプログラミングに興味があるんだけれども、
プログラミング言語っていうのがあるらしい、 という感じで聞かれたときに、
答えているような話をちょっとしていきたいなというふうに思っています。
プログラミング言語というのは、 プログラミングをするための言語であるという、
これは当たり前なんですが、
それでイメージとしては、プログラミングというのは、 コンピューターに命令をする言語なんですね。
命令をするんですが、コンピューター、基本的に、 今のコンピューター、ノイマン型コンピューターと呼ばれたりしますが、
それは01しかわかりません。
onかoff、01の信号。
だから、あらゆる全ての言語が最終的には、 01、01で書かれる機械語と呼ばれる命令に変換されます。
その01命令をそのコンピューターのCPUが計算して、 処理をして答えが返ってくるというものになります。
なので、あらゆる言語が01まで変換されて、 それをCPUという中央演算装置というのが処理をして、
結果が返ってくるという流れなんですね。
じゃあ、なんで何種類もその種類があるのかというと、 その01、01に最終的には変換されるんだけれども、
当然その01というのは人間は全然理解できないわけです。 01で書かれても。
できるすごい人もいるんですが、普通はできない。
なので、その01はわかりにくいから、 ちょっと人間が読めるようにしようよということで、
だいたい50年、60年ぐらい前から、もうちょっと読みやすくする、 要するに英語にするようなプログラミング言語というものが生まれてきました。
ここで一つキーワードとして言われるのは、 抽象化と言われるキーワードで、
その01、01を例えば最初の、 一番最初期の言語というので、アセンブリというのがあるんですが、
それだとADD、ADDだから英語の加えるというものですね。 ADDとかそういういろいろジャンプとか、
そういう本当単純な数種類の命令に01を置き換えて、 読みやすくするというようなまずところから始まりました。
そこからさらにどんどん抽象的な度合いが上がってきて、
例えば今の一番新しいというか、 よく使われているスクリプト言語と呼ばれるようなプログラミング言語のRubyなどでは、
そのプリント括弧で中身に何とか、 ハローワールドとか書くと、そのままプリントの括弧の中身が表示されると。
03:01
英語みたいに書けるプリントとか、 あとif何とかかんとかって書くと、
もしそのifの後の何とかかんとかが本当だったら表示されるし、 その中身が実行されるし、
unlessと書いたらそれも英語と同じようで、 そのunlessの後がそうでなかったらその中身が実行される、
ifの反対というようなことができたりして、 どんどん見やすくなってきています。
さらにこのプログラミング言語、 見やすいかどうかというだけの差ではなくて、
処理速度が速い遅いの違いもありますし、 あとそれぞれ得意なプログラミングの種類が違ったりもして、
いろいろな種類があります。
だからスクリプト言語だったり、 コンパイル型言語だったり、関数型言語だったり、
いろんな種類があって、これはこうだというふうに 明確に分離するというのは結構難しいんですね、
プログラミング言語同士を。
ちなみに何種類ぐらいなのかというと、 本当に多分数百種類ぐらいあると思います。
ただ本当に世の中でものすごく使われていると 言えるのは30種類ぐらいかなと思います。
ここらへんはちょっと人によって かなり議論が分かれるところなので、
ただ数百種類あるうち全部が 使われていることはあまりないです。
基本的に本当に世界中で間違いなくものすごく 使われているというのは30種類ぐらいと言えると思います。
言語ってどういう関係性があるのか、 スパッときれいに分けるのが難しいって言うけど、
どう理解するといいのかという話で言うと、 自分としては系統図、ツリーのようなもので理解すると、
位置づけていくと一番把握しやすいのではないかなと、 かつ正確性も失いにくいんじゃないかなと思います。
このツリー、系統図などはプログラミング言語、 辞書とかで検索してもらうといろんな本が出てくるので、
そういったところに出ているんじゃないかなと思います。
あとプログラミング言語関係とかでググってみても 出てくるかな、ちょっと見てみましょう。
この系統図ですがどういうものかというと、 プログラミング言語というのは言語デザイナーというのがいるわけですね。
その言語デザイナー、要するに言語を作る人は 言語オタクであることが非常に多いと。
言語が好きで好きで、たまらなくて 自分でも作ってしまうということが多いです。
そうではなくて、仕事で作っているという人も もちろんいるんですが、
今、例えばRubyの作者の松本幸寛さんとかは、 すごい自分でもおっしゃっている通り言語オタクで、
いろんな言語が好きで、 ここはこういうのがいいとか、
この言語はここがいいとか、 それを取り込んでるんですね、自分の言語に。
06:04
だから自分の言語でこの制御構造のこれ、 どういうふうに設計しようかなというときに、
これを取り入れようとか、 もちろんそのまま取り入れるんではなくて、
こういうふうに基本的にこの言語の感じでいくんだけど、 ここはちょっと良くないから改良して取り入れようとか、
そういう感じでどんどんやってるんですね。
なので、やっぱりとなると、 ある言語のメインのお父さんじゃないですけど、
先祖というような言語が結構あったりします。
その言語作者が大きな影響を受けて作った言語。
例えばRubyであればSmalltalkという言語に 非常に影響を受けています。
というような感じで、 そういったツリーが書けるんですね、関係性のツリーが。
そういうものを見るとだんだんその関係性が分かったり、 この言語とこの言語って似てるなと思ってたけどやっぱり近いんだなとか、
分かってきたりとか、いろんな面白い関係が分かるので、 興味がある方はそういうのもぜひ見ていただくと面白いかなと思います。
ということで、今日はプログラミング言語って聞かれたら みたいなときの話をお話ししてきました。
もし何か他にもこれ聞きたいとかあったら、 コメントとかレターいただけると嬉しいです。
あと、いいねやフォローもぜひお願いします。 ありがとうございました。
07:25

コメント

スクロール