はてブでJavaできるから、JavaScriptの仕事頼んだら殴られたとかいう話が話題なっていて、Twitterでも賑わっていた。
JavaとJavaScript…両方共プログラミング言語なわけだけれども名前が似ているから親戚かと思うが違う。
JavaとJavaScript混同についてはもう10年以上も、「JavaできるならJavaScriptも同じようなもんでしょ」という偉い人に困らされてきたという人は多いと思う。
2つはインドとインドネシアほど違う!
メロンとメロンパンほど違う!
と言われてもきっとプログラミング言語について知らなかったらピンとこないだろう。
「そもそもプログラミング言語なんて大体おんなじでしょ?」なんて言われるかも…
プログラマーじゃないけれど、プログラミングのこと全く知らないけれどって人を対象にJavaとJavaScriptの違いを分かりやすく説明してみよう!!
そもそもプログラミング言語って種類によって違うの?
違う!!!
英語と日本語の文法の差があれほどまであるのと同じように、プログラミング言語も全然違うのだ。
プログラミング言語はコンピューターが理解できる命令を人間が理解できるようにした言葉なんだ。
コンピューターってのは融通が利かないけれども、反面人間は曖昧な表現で理解できる。
人間特有の曖昧さを無くせるようにして、人間にも理解しやすい手法を多くの人が試みた。
その結果、多くの手法や考え方ができてそれぞれアプローチが異なっている。
その思想の違いがプログラミング言語の特色になっている。
例えば物語を表現して相手に感動を与えるという目的に対して、映画という手法と小説という手法があるがそれはやり方も考え方も違うもの。芸術としての根底部分は共通するけれどノウハウやスキルというのは共通部分はそんなに多くない。
同じようにプログラミング言語も根底部分は共通は同じだけれども、文法や言語ごとの作法とかは変わってくる。
根底部分は同じなので1つ目を覚えれば2つ目は然程苦労はしないで習得はできるけれども、全く同じように簡単に習得なんてことはできない。
JavaとJavaScriptってどれほど違うの?
名前は似てるけれども、全然違う。
まず活躍する場が違うし、文法の違うし、思想も違う。使っている分野も変わってくる。開発するソフトも違う。
何もかもが違う。
でも、違う違う言ってても「でも、こんなに名前が似てるのに…違う違う言われてもピンとこない」って言われちゃうかも知れないので、
一つずつ説明していこう。
活躍する場が違います
主にJavaはサーバーで活躍。
主にJavaScriptはクライアントで活躍。
サーバー?クライアント?
クライアントってのは皆が使っているパソコンやスマホなどの端末。
サーバーってのはTwitterとかFacebookなどのサービスが実際に動いている機械で、提供者が持っているコンピュータ
その関係を図にしたよ。
このように、ネットを通じて何かのサイトにアクセスすると、各会社が持っているでっかいコンピュータの内部で処理が走る。
主にそのでっかいコンピュータの内部でJavaは活躍している場合が多い。
そして、サーバーがアクセスしてきた皆さんのパソコンにウェブページの内容を送りつける。
そして綺麗なウェブページがパソコンに表示される。
その時に送りつけられるものはHTMLとかだけれども、JavaScriptも送ってくる。。
そして皆さんのパソコンの中でJavaScriptの処理が走って、綺麗な画像とかがかっこ良く表示される。
こんな感じに2つの言語は活躍する場が違う。
(※主な使い方ってだけで、PC側で動くJavaもあるしサーバー側で動くJavaScriptもある。)
こんな感じに使っているところが違うので考え方も、使える人の専門分野も変わってくる。
Javaが活躍する場所
- WEBサイトのサーバー内の処理
- Androidや携帯内部で
- 大規模システム
- 縁の下の力持ち的な存在
JavaScriptが活躍する場所
- ウェブページの表示(今あなたが見ているブログにもほら…逆にこのサーバーにはJavaは動いていない)
- ウェブアプリの処理
- たまにサーバーで縁の下の力持ち的な存在
- でもほとんどは皆さんのパソコンの中でユーザーに近いところで活躍
中身も違うの?
活躍する場が違うとは言っても、中身が同じかも知れない…
という疑り深い人の為に更に突っ込んで説明をしよう。
文法が全然違う。
文法の説明を詳しくするとどうしてもわかりにくなるので、ここはサラッと簡単にいうしかないけれども
Javaだと何かあるたびにデータ型というものを指定しなくちゃならない。これを専門用語で『静的型付』という。
JavaScriptはデータ型の指定をしない。これを専門用語で『動的型付』という。
この2つは大きな違いで、共和党か民主党かという感じで二大政党制になっているアメリカのように、
静的か動的かの違いはだいぶ大きい。
はじめに静的型付の言語から勉強を始めた場合、動的型付の言語をやると自由すぎる書き方に不安を覚えるし書き方が冗長になりがち。
はじめに動的型付の言語から始めた者は、静的型付の言語をやると、まどろっこしく感じるだろう。
両方とも今まで考えていなかったことまで気を使わなければならないようになる。
また、JavaとJavaScriptは両方共『オブジェクト指向』というプログラミングの思想を基に作られているのだけれども、
そのアプローチが違う。
Javaには『クラス』というものがあるけれど、JavaScriptには『プロトタイプ』というもので『オブジェクト指向』を目指している。
この双方の違いかなり大きい。
そもそも考え方が大きく違う。
Javaの方の考え方は大きな抽象的な枠組みを作ってからそれの具体的な物を作っていくという考え方でプログラミングをしていく。
JavaScriptは具体的な物を、その具体的な物と関係のある具体的なものを作っていくという考え方でプログラミングをしていく。
※この2つの違いは僕の印象で、きっと言語の思想的にはもっと違うかも知れない。
だから違う
文法が大きく異なる ⇒ プログラミング言語としての思想が違う ⇒ 書くときに頭で考える回路が変わってくる ⇒ 覚えるのも頭を切り替えなくちゃならないから大変
名前が似ているからと言っても似て非なるもの。
むしろ全然違いすぎて共通的なものが少ない。
囲碁の戦略と将棋の戦略は考え方が変わってくるだろうう。
将棋ができたからと言って囲碁がすぐできるわけではない。
頭は柔らかくなっているから両方共未経験の人よりはすぐ強くなるかも知れないが、逆に今までの考え方が足を引っ張って習得を遅くするかもしれない。
JavaとJavaScriptもちょうどそんな感じだ。
JavaScriptの名前が似ているのは、Javaの人気にあやかったとかそんなんじゃないですかね(適当)