2010/01/10

Javaって何?

はじめに

2010年は気楽にのんびり Java でも学ぼうかと思う。なるべく放置しないようにしたい。半年放置すると覚えたと思ったこともかなり忘れるので、放置は最長1ヶ月と決めておきたい。ここには覚えたこと、調べたことを忘れないようにメモ程度に記す予定。多少は参考になるようにもしたいと思う。

個人的な目的は、プログラミングを知ること
プログラムは、つかみ所がない。知らない人から見ると、意味不明の文字を打っているだけで何をやっているのかわからない世界。プログラミングも GUI でないと、中身がどうなっているのかさっぱりだ。ということで、それを少しでも知るためにトライするところが大きいかも。個人的にまともなソフトウェアを作ろうとは思っていない。小さなソフトをちょろちょろ試す程度。そのうちオブジェクト指向を実感できるようになればいい。

なぜ Java を選んだか?

多くのプログラミング言語があるのだが、その中で Java を選んだのは以下のような理由がある。

無料である
パソコンさえあれば、必要な開発用ソフトウェアは無料で入手できる。これは大きい!

Java はプラットフォームに依存しない開発環境
開発環境はOSのプラットフォームに依存しない。Windows でも Mac でも Linux でも開発ができる。現在メインで使っているパソコンは Windows だが、Linux の ubuntu も少し使ったり、Mac もかつて使っていたので、どの OS でも同じように開発できるというのは安心感がある。

Write Once Run Anyware である
つまり作ったプログラムは、JVM(Java仮想マシン)さえあれば、どこのマシンでも動く?はずである。実際には多少手を加える程度でパソコン用のプログラムを携帯端末で動かすなんてことも可能と思われる。他の言語だと、もっと苦労すると思われる。新たに書き直した方が早いということもよくあるようだ。パソコン用アプリケーションであれば、Windows、Mac、Linux、Unix 間で、同じソフトが、ほとんど問題なく動くようだ。作り方次第のようだが・・・ パソコンだけでなく、携帯やおもちゃ、家電などさまざまなもので同じプログラムを動かすことができる。Java を学んでおけば、いろんなマシン上で遊べるということになる。

多くの人が使っているプログラミング言語
困ったときはインターネット上で情報を入手しやすいという点は大きい。情報がなかったり、海外の情報しかないと、やはり苦労するので、情報が多ければそれだけでも随分と助かる。

オブジェクト指向の言語
何とも魅力的な響きだが、さっぱり分からない。オブジェクト指向とは何かを知るのも目的のひとつ。まぁ最近の大規模な開発言語はみんなオブジェクト指向なのだが、C++ はかなり混沌としているようだ。C言語でも作れるし、自由度の高さが逆に難解にしているような。 また Java よりも、もっと純粋なオブジェクト指向言語もあるが、マニアックすぎると情報不足という問題が浮上する。Java は、そこそこオブジェクト指向言語として、きれいにまとまっているということなので十分だろう。

他プログラム言語について

開発言語の種類を調べていると、いろいろ魅力的な言語が存在する。ちょっと気になった言語についてコメント。

C言語
UNIX を作った言語であり古くからある言語。ハードを直接制御するなら高級言語ではこれしかない。しかし手軽に GUI のプログラムは組めるとは思えない。多分 Visual C++ にお世話になる。組み込み用のプログラムは C言語がほとんどなので、マイコンを扱いたくなったら勉強をはじめればいいだろう。印象としては、オブジェクト指向言語をやるまえに、C言語をしっかりやったほうがいいようにも思っている。実際 Java を勉強して、そのような結果になるかもしれない。

C++言語
C言語を拡張したオブジェクト指向言語だが、難解であり、自由度ありすぎてスキルがないと辛そう。しかし Windows 用アプリ開発、ドライバ開発などは、これしか考えられないだろう。Windows 上で高速に動くという点では一番実用的なはずだ。C言語もそのまま動くというところはポイント高い。問題は開発環境だな。Windows ならマイクロソフトの Visual C++ だろうけど、プラットフォーム依存の超巨大環境をインストールするのは気が引ける。無償版は .NET 用の開発をプッシュしているようなので、従来の Win32 アプリをいじろうとすると出来なかったり、出来たりで、何かとやりにくそう。また .NET が Windows だけの現在、Windows アプリ開発専用ぽくなるのもどうかと思う。そもそも .NET って普及するのか?ちゃんと調べたわけではないが、Java の二番煎じぽい気がするのだが。

Objective-C
Mac の標準的な開発言語。オブジェクト指向言語としては Java よりも純粋。iPhone のプログラムやるなら必須だが、現在 Mac も iPhone も所有していないので・・・Mac 本体があれば、標準で環境が付いてくるというのは魅力。

Squeak (Smalltalk)
純血オブジェクト指向言語で理想を貫いているかもしれない。Squeak は子ども向け教育言語としてビジュアル中心でなかなか楽しい。しかし Squeak の見た目の親しみやすさとは裏腹に中で動いている Smalltalk はかなりディープそうなので、素人が手を出す言語ではなさそうだ。Squeak の範囲で子供が遊ぶならよいと思う。実際ちょっといじってみる。楽しいかも。

BASIC
かつての入門言語である Basic だが、最近はどうなのだろうか。マイクロソフトの Visual Basic って、昔の Basic とは随分違う感じ。オブジェクト指向になってるし、完全に生まれ変わったような。Basic はインタープリタ動作(ソースコードをリアルタイムに実行できる言語)で手軽だが実行速度は遅い。これは今も昔も同じ。

Delphi(Pascal)
結構よいらしいが、どうも少数派という感じがして・・・。

FORTRAN
最も古い高級言語だが、今でも科学技術計算では主流の言語。Cよりも速いとか?

LISP
これも古い言語。インタプリタ。テキストエディタ Emacs(Meadow) や数理処理の Maxima などで利用されていて根強い感じがする。 Audacity の Nyquist も LISP。ちょっとした処理にはインタプリタなので扱いやすいが、方言だらけの言語で、上記の Meadow, Maxima, Audacity 向けのコードを書いてみても結構違っていて、それぞれ学習する必要がある。

その他
他にも特定の分野限定の言語ならいろいろ存在する。ネット関係ならサーバ用の PHP とか Perl など。最近では Ruby が人気のようだ。クライアント向けでは JavaScript だろう。これは web 関係のプログラムやらなら必須かも。また初心者子供用というかゲーム開発用の HSP なんか手軽で面白そうだ。ちょっといじったら、すぐに動くゲームが作れた。小中学生が手を出すならいいかもしれない。昔からあるカメが動く Logo もちょっといじるだけならいいかも。目的がはっきりしていれば、その分野に特化した言語の方が規模も小さく習得も早そうだ。

勉強方法

とりあえず、一番簡単そうな入門書を片手にサンプルを打ちながら理解するところから始める。その中で疑問があれば、ネットで検索しながら理解を深めるという方法。教えてくれる人がまわりにいないので、こういう方法になってしまう。

使用する入門書は「やさしいJava」。これが読めてもプログラムは組めないという話だが、何も知らない、教えてくれる人もいないという人にはよいらしい。

まずは続けてみることかな。小さな簡単なプログラムを作りながら徐々にステップアップする。はじめから作りたいプログラムのイメージがあると、現実とのギャップに挫折することになるで、まずは、やってみて、現実を知ることが第一歩。