やったもん勝ち

主にプログラミングのこと。生産性向上の某とかも。

Web開発でJavaを使っている新卒が「なぜJavaでつくるのか」を読んでみて

なぜシリーズが好きだ。

Javaでなぜつくるのか  知っておきたいJavaプログラミングの基礎知識

Javaでなぜつくるのか 知っておきたいJavaプログラミングの基礎知識

背景

Web系でJavaを使っているというと、大抵の勉強会では驚かれる。

主流はruby, phpあたりだろう。 自分でも、なんでJavaなんてやっているんだ…

そう思う。 一度、Javaと言うものをしっかり理解してみようと思い、この本を手にした。。

Javaが出現するまでのコンピューターの変遷を簡単に知ることが出来た。

コンピューター黎明期では、色んなメーカーが自社製品だけにしかない機能を作りまくって競争していたため、 専用のハードウェアでしか動かないソフトウェアが量産されてしまった。 これでは生産性が下がってしょうがない。やってられない。

何をするにせよ、僕たちが最終的に機械に何かをやらせようと思ったらバイナリーデータにしなくてはいけない。 このことは知っていた。

そしてその前段階に、アセンブラ言語と言うものがある。 機械語を直接技術するのではなく、命令語でプログラムを書くもの。 しかし、これも個々のプロセッサに依存する。

そこで生まれたのが、コンパイラ及びコンパイラ言語だ。 C言語COBOLなどがそれだ。

C言語で書いたコードはコンパイラによって、アセンブリ言語に変換される。 当然これはプロセッサに依存する実行ファイルが吐き出されるので、プロセッサごとにコンパイラが違ってくる。

そうしてできた実行ファイルはそれぞれのハードウェア上で動作する。

しかし、逆に言えば、それぞれのハードウェアでコンパイルしなくてはならない。 これが一般人にはちと難しいと来たもんだ。

そうして次に出来たのはインタープリタ。 これはハードウェアを介さずに、ソースコードを逐次解釈して実行するプログラム。 これにより、コンパイルが不要になった。 しかし、問題点が2つ。 ソースコードが丸見えという点と、実行速度が遅く、できることも限られているという点。(ハードをあまり動かせないから)

これを解決するべく開発されたのが、Javaなのだ!!!!!

Javaはそれぞれのハードウェア、OSの上に仮想的なOS(JVM Java Virtual Machine)を作ることで、環境による動作の違いを吸収している。

その代わり、その特定のハードやOSにしかない高機能なものは、あえて捨てている。 そして得たものは繁用性。

こんなところがプログラミング言語の簡単な歴史と対応させたJavaの位置付けらしい。

Javaのオブジェクト志向について

その後にも、色々説明をしていて、特にJavaオブジェクト指向についての説明をしてくれていた。 他の本でもオブジェクト指向の本はいくつか読んできたが、どうもオブジェクト指向のありがたみを未だに感じることができない。

この本で得た一連のプログラミング言語の歴史と合わせて考えて、そもそものオブジェクト指向じゃない言語を簡単にでも理解して、その非オブジェクト指向な仕様を体験してはじめて「うわーこれ面倒くさっ」どうにかなんないかな…?

オブジェクト指向の登場

なにこれ便利すぎぃ!!

ってなるのが本筋な気がする。

オブジェクト指向言語を知らずしてオブジェクト指向言語の良さを語ることは、カレーしか食べたことないのに、カレーの良さを語るのと同様だ。

新卒エンジニアの中期目標としてはいろんな言語を比較しながら、その長短を理解していきたい