Javaとは

これらからプログラミングをしたいけど、どの言語をやろうかという方のためにプログラミング言語のひとつであるJavaについて説明します。

そもそもプログラミング言語とは

わたしたちがパソコンを使うにはプログラムを使用します。

コンピュータがプログラムを使う際には

0101000011100101…

のように0と1の配列を順番に読んで命令を実行していきます。この配列を機械語といいます。

しかし、機械語を使ってプログラムを作るのはとても大変です。そこで、

もっと人間が理解しやすいような言語をつくって、その言語を機械語に翻訳すればいいのではと考えたのがプログラミング言語です。

プログラミング言語の種類

プログラミング言語でメジャーのものとしてC,C++があります。このプログラミング言語を使って、プログラムをつくっていきます。

  1. プログラムをつくる
  2. コンパイル(機械語へ翻訳)する

という流れです。コンパイルするものをコンパイラといいます。コンパイラによりコンパイルされた機械語はWindowsやMacといったOSによって異なります。

そのため、Windows用にコンパイルされたプログラムはMacで使用できません。

よって、

OSに応じたプログラムを作らないとすべてのパソコンで作成したプログラムを使用できない

ということになります。

すべてのOSで使用できるプログラミングJava

いちいちOSごとにプログラムを作るのはたいへんです。そこで、すべてのOSで使用できる言語をつくろうと考えたのがJavaです。

Javaでは

  1. ソースコード(javaファイル)をコンパイラで中間コード(classファイル)をつくる
  2. プログラムを実行する際は中間コードをインタープリタで翻訳して実行する

という流れになっています。いったん、中間コードを返すのが違いです。

中間コードを実行するインタープリタが各OSに対応しているので、OSがインタープリタを実装していればプログラムを実行することができます。

これにより、インタープリタがカバーしているすべてのOSで使用できるプログラムが作成できます。

Javaの弱点

Javaは中間コードを翻訳して実行されます。

そして、この中間コードは、ソースコードへ逆に翻訳することがかのうです。

ですから、プログラムをJavaで配布すると、そのプログラムからソースコードを読み取ることが可能です。

これをリバースエンジニアリングといいます。

 

C,C++などのネイティブ言語の場合は、機械語からソースコードへの逆翻訳は難しいです。

というのもソースコードと機械語が一対一対応していないからです。しかし、完璧に再現できなくてもある程度読むことは可能です。

 

中間コードとソースコードをJavaでも、一対一に対応しないようにすればいいので、将来的にはそのような言語が現れてもおかしくないと個人的には思います。

ただ現在では、簡単にリバースエンジニアリングが可能です。

 

リバースエンジニアリングの対策としては、変数などを無意味な名前にするという方法があります。例えば、

int number=1;

int frhueghksuhkuhe=1;

というようにする感じです。こうすれば少しは読みにくくなるでしょう。でも、頑張れば読めるわけで時間稼ぎになる程度です。

 

他の対策としては、サーバー内でプログラムを実行するという方法です。

サーバーに負荷がかかりますが、ソースを読み取られる心配はありません。ソースを絶対に知られたくない場合はサーバー内プログラムがベストでしょう。

インターフェースはJavaで作って、メインプログラムをサーバー内でやるというかんじです。

 

あと、Javaの弱点をもう一つあげるとしたら、実行速度がネイティブと比較して遅いという点です。

翻訳して実行する点でどうしてもネイティブよりも遅くなります。

ただ、最近はインタプリタの改良や、パソコンの機能向上でたいして気にならないと思います。

まとめ

Javaの利点は

  • すべてのOSで使用可能なプログラムをつくれる

で、デメリットは

  • リバースエンジニアリングしやすい
  • 実行速度が若干遅い

となります。Javaを使える人材は多くの企業で必要とされています。ですから、Javaを覚えると職を失ってもすぐに仕事を見つけることが可能です。

そのため、Javaをマスターすることをおすすめします。

著者:安井 真人(やすい まさと)