Hatena::ブログ(Diary)

設計と実装の狭間で。 このページをアンテナに追加 RSSフィード Twitter

2011-06-09

[][]一歩先行くJavaプログラマが読むべきオープンソースソフトウェア10

10万行コード読んだらJava分かるよってTwitterに書いたらすげぇ勢いでRTされたので、調子に乗って捕捉エントリ書くよ。


Java Core API

JDKインストールしたディレクトリに入ってるsrc.zipを展開すると入ってるから読むと良いよ。

すぐ近くにあるのから読むってのはメンタル的に楽でいい。

厳密にはOSSじゃなくて単に公開されてるってだけなんだけども、JavaプログラマなのにコアAPIコード読んでないとか無いよね?

どれから読めば良いか分からんかったら、

辺りをまずはキチンと理解すること。当然コードを読み終わったら、それを使ってコードを書く事。

OpenJDKを読むことで、プログラム言語してのJavaではなくランタイムとしてのJavaを理解する事が出来ます。

Java出来ますって言ってるのにOpenJDKのコードをチェックアウトした事も無いようならモグリである可能性は高い。


サーバ

Javaプログラマなら大体一度や二度はお世話になってるTomcat様ですよ。

ServletAPIの仕様と併せて読むべし。

Tomcatだけ読んでると世界絶望しかねないので、口直しにJettyも読んでおくと味わい深いです。


Servletコンテナ系は分かってきたなと思ったら、テキトーWebアプリケーションを書いてwarにパッケージングした上で、

そのWar内から利用していないと思えるサーバコードをゴッソリ消した上で、

そのWarがちゃんと動くかどうか確認すると良いとオモウヨ。



ピュアJavaで高速に動作する上に高機能だけど、何か色々アレなH2Databaseはマジオススメ

色々アレってのは、どういう事かは読めば分かるかと。

ちょっとした何かを作るのにはH2databaseがマジ便利。

LL系の皆様におかれましては、SQLite辺りがRDBとしては人気かと思いますが、

JavaからSQLiteは面倒な事も多いので、H2Databaseをを使うと良いとオモウヨ。

コードを全部読んだ上でRDBを使うと新しい地平が見えますです。


フレームワーク

Javaプログラマたるもの、DIコンテナを知らずに済むって話はありませぬ。

出発点は大体同じだったような気がしないでもないけど、その思想が違う為に全く違った実装になるのです。

DIコンテナ接続できるフレームワーク的な何かをひと通り追いかければ、

Webアプリケーションを作る為のパーツは何でも揃うと思って間違いないので、DIコンテナは出発点であり終着点であるのです。



JVM言語

プログラミング言語たるJava学習する為に、新しい言語コードを読むというのはそれなりに敷居の高い事ではあるものの、

Javaがどの様な価値を持つランタイムであるかを理解する為には、言語としてのJavaとは違ったパラダイムを持つ言語を理解するべきです。

Scala辺りは何だか流行ってる気配があるけど、Scalaコード書くだけで満足してはいけない。

どの様に実装されているのか確認するのです。


ツール編

Mavenリポジトリは最高だけど、ツールとしてのMavenは正直余り好きではない。

だってやりたい事に対してコードの量が多すぎるのだもの。

でもビルド系ツールがやりたい事ってMavenの中に全部入ってる。

そしたら、オレオレビルドツールを作る前に一度は読んでおかなくちゃ。


勿論eclipse。他のIDEの話はきっと他の誰かが捕捉してくれる。

間違いない。NetBeansとかIntelliJとか。

どれ使ってるにしても、自分が使ってるツールのコード読んでないとか大分ヤバい。

ピカチュウ電気出さないくらいヤバい。


eclipseにはJava理想現実が詰まっている。


ローカルインストールしてあるeclipseには当然ながら「Eclipse Classic」ダヨネ?

そうしたら、コードみてぇな、ってUIでおもむろに「Shift + Alt + F1」これでOK。

Plug-In Spyってプラグインが起動してコード読み放題。

とりあえずJavaコード開いて、Plug-In Spyを起動して

  • org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor

辺りを読めば良いとオモウヨ。

利便性の裏に隠れて普段は見えない先人たちの努力結晶がそこにあるから


でもまぁ、こればっかりだとUIばっかりで辛い現実と直面する事になる。

夢の世界を一目見る為には、

  • Window -> Show View -> Other

と選んで出てきたダイアログで、

  • Plug-in Development -> Plug-ins

を選ぶ。そうするとインストールされているプラグインの一覧が見える。

そこでテキトープラグインを選んで、右クリック

  • Import As -> Project from a Repository...

を選ぶ。ユーザIDパスワードとか聞かれるかもしれないけど「anonymous/anonymous」って入れとけばOK。

沢山あって迷っちゃうけど、僕のオススメを敢えて3つ選ぶなら

この二つはかのErich Gamma先生がキチンとデザインし書いたコードが入っているし、

現実に動くある種の理想を体現したオブジェクトモデルがならんでる。

そして一方でオブジェクト指向における限界点みたいな所に到達している。

それが何なのかはまた別のお話

そうこれらのプラグインを読む事でオブジェクト指向深淵を垣間見る事が出来るのです。

その辺に幾らでもある動く訳でも無いうすっぺらい説明なんかよりも絶対に価値あるコードが今そこにある。


僕の環境Windowsからプラットフォーム名がWindowsっぽいけど、

それぞれの環境に合わせたプラットフォーム名のプラグインインストールされている筈。

この辺のコードを見ると、「Write Once Run anyware」とか言うのも一つの理想であって、

実際に様々な要件を勘案する中でそういう訳にもイカンよね?というJavaが持つグロテスクな一面を見る事が出来る。

うっかりそうなっちゃったとかじゃなくて、ガチでやってる高品質グロテスクさって凄いんだよ?


「static メソッドしか持ってないクラス書いちゃう人って…m9


とか言ってる場合じゃない。そしてやたらめったらオーバーロードされた

  • OS#SendMessage

を見るのだ。そういう事が必要であると判断出来るケースもあり、その極端な位置にあるコードを見て考えるべき事は多い。


何か10個以上ある様な気がするけど、どうせ最期まで読んでる人は居ないだろうって事で、ここは一つ。

RedHat系のアレソレとか、他にも色々取り上げて無い素晴らしいコードはあるけど、そういうのはきっと誰かが補足してくれるさ。

kakuyasuhkkakuyasuhk 2011/06/12 16:57 勉強になります。

竹 2013/01/26 14:12 こんにちは。
src.zipを見てみました。
コメントを日本語で書いてくれてるものを読みたいのですが、そういったものは存在しますか?
とりあえず、objectクラスから読み始めるべきかなと思ったのですが、正しい手順ですか?

aa 2014/06/02 04:23 技術はあるが頭が悪いって感じですかね

bb 2014/07/09 16:03 やべぇ何言ってるかわからねぇ・・・
たぶんすげぇんだろうけど口が悪いからか理解しようと思えねぇ・・・

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証