Monthly Archives: 12月 2016

Javaが僕にくれたもの

この記事はJava Advent Calendar 2016の3日目です。2日目はmegascusさんのどこからも使用されてないクラスを列挙する、4日目はcero_tさんです。

退職しました

個人的な話で恐縮ですが、去る11月末をもって学生バイト時代も含めて12年間勤めた会社を退職しました。そこではずっとJavaを書いていましたが、次の勤務先ではPythonを書くので、今後Javaを書くことは少なくなるでしょう。

退職エントリは書きませんが、代わりに言語の卒業エントリを書こうと思います。一人よがりなネタですがお許し下さい。

初めての出会いはJDK 1.1をダイアルアップでダウンロードしたこと

正確な時期は忘れましたが、1997-8年頃ではなかったかと思います。「Javaという言語がすごいらしい」という噂をきいて、ダイヤルアップ回線で頑張って一晩くらいかけてダウンロードしてみました。その時落としたのはJDK 1.1ではないかと思います。

しかし、当時使っていたPentium 90MHzのマシンではサンプルアプレットのローディングに数分かかり、クリックの応答に数十秒かかるという状況でした。(「Java遅い!」をリアルで体験した世代です)

初めてまともに使ったのは、i-appliの開発

時は流れて、2001年1月「NTTドコモの新機種F-503i, P-503iが、Javaに対応して誰でもアプリが作れるようになった!」というニュースが入ってきました。この時高校生だったのですが

「これはやばい!ケータイがPCになってしまう!」

とか言って、親に土下座して買ってもらいました。

Javaといっても、CLDC(Connected Limited Device Configuration) 1.0という仕様の上に作られたJavaであって、「浮動小数が使えない」などの制限があり、しかもアプリ(すなわちjarファイル一個)のサイズは10KB以下に収めなければなりません。そこではclassファイルを増やすと容量がかさむから「クラスは一個にしましょう」と言われていました。Eclipseはまだなくて、JBuilderは僕のPCでは重いから、[CPad for Java] (http://hp.vector.co.jp/authors/VA017148/pages/cpad.html) というテキストエディタにコンパイラショートカットがくっついたようなエディタで頑張ってコーディングしていました。これと、コードの変数名を1文字にして容量を削る今で言うminifyツールみたいなのも使っていました。

その時作った作品はgistに貼ってあります高校の先輩がVBで作ったゲームを移植したものです。当時は雑誌の端に載ったりしました。

大学に入ってJavaらしくないJavaを学ぶ

2003年に大学生になったのですが、当時入った学科では、プログラミング教育にJavaを使っているということで、楽しみにしていました。ところが、そこで習ったJavaと言うのは

「配列をReturnする『関数』を作ってはいけない」
「まず配列を作ってメモリを確保しろ、その配列を関数のパラメータに突っ込め!」

みたいなやつでした。。。\(^o^)/

本当のJavaを求めてある本に出会う

そんな時に出会った本がこれでした。

今思うと現場思考で、非常にバランスの良い本だったと思います。

これで、少しはクラスとかデザインパターンというものを知った僕が、少しはプロセッサーパワーがましになった当時の携帯向けに作り直したのが[これ] (https://github.com/susumuishigami/bunshi2) です。

最近このコードをほぼそのままコピペして環境に依存する部分だけ書き換えてみたら、あっさりAndroidで動いてしまいました!

仕事でサーバーサイドJavaの世界へ

大学2年生の時から、プログラミングのバイトを初めます。従業員10人くらいのこじんまりとした会社でした。

始めて突っ込まれた案件は、Atg Dynamoというフレームワークを使っていました。すごい重量級フレームワークでした。二度と使いたくありません。

自社開発の仕事にアサインされる

その案件が終わってからは、ほぼ一貫して自社開発の製品の新規開発・カスタマイズをやっていました。そこで使っていた自社フレームワークはシンプルで使いやすかったですが、データは全部文字列で扱う流儀で、HashMapみたいなデータ構造に

set(“LAST_NAME”, “hogehoge”);
set(“FIRST_NAME”, “hugahuga”);

みたいなコーディングスタイルでした。。。まさか、このフレームワークをその後10年使い続けるとは思わなかった\(^o^)/

システムのリニューアルを任され、自由に学べる期間があった

ベンチャー企業というのは、何が正しいかよりも目の前の問題を最短で解決するのが良いとされることがあるので、その場限りの仕事を数年続けました。

転機は2008年の暮れ、主力システムをリニューアルする任務を与えられ、自由にやっていいと言われました。そこで、当時のトレンドだったWicket、Seasar、Spring、Google Guiceなどを全力で追いかけてみました。

本当はこの時社内標準フレームワークを刷新したかったのですが、工数を考えると既存資産を活かすことがどうしても必要だったので、従来の自社フレームワークに僕がOSSから学んだエッセンスを加えるという方針にしました。そのため、「フレームワークの使い方」より、フレームワーク自体のソースコードを読むようになり、特に、Seasar2のソースコードは読みやすくて勉強になりました。(Apacheライセンスなので流用もしやすく助かりました!)

結局、テンプレートエンジンとしてMayaaだけ採用しましたが、たまたまその後作ったサービスが成長したため、最もMayaaを使い倒している人みたいになってしまいました。

エンジニアとしての目標: 30までに勉強会で登壇する

僕は家庭の事情もあって、2009年ごろまで、IT系勉強会というものに参加したことがありませんでしたが、このまま無名のエンジニアではいたくないと思い、「30歳までに勉強会で登壇する」ことを目標としていました。

結果的には、
2012年と、2013年のJJUG CCC当時、28, 29の時に実現できたので、目標は達成したことになります。

Season Conferenceは2010を最後にしばらく開催されませんでしたが、もし、2011年に開催されていたら、この、2013年のネタはその時できたと思います。

最後のSeasar Committerになる

そして、久しぶりに開催された2015年のSeasar Conferenceが開催されこんなLTをし、

その後、初めてMayaa初代メインコミッターの栗原さん、現メインコミッターの須賀さんに出会うことができ、そのまま流れで僕もコミッターにしていただきました。そしてどうなったかはこのスライドのとおりです。

コミッターになってからした仕事はMayaa Advent Calendar 2015を書いたことくらいです。コミットしてないです。(今後必要があったら、コミットすることもあるかもしれません。コミッターになる前はバグ報告をしてパッチを送ったり、GitHubになってからは、PullRequestを送ったことがあります)

振り返って、Javaと僕の付き合いは何だったのか

僕はJavaで12年仕事のコードを書いてきましたが、今の今まで、J2EE、Java EEのような世界は、Servlet/JSPくらいしか経験がありません。EJBも書いたことがありませんし、JPAも使わず生のJDBCに独自ラッパーをかぶせてなんとかしました。SpringやSeasarContainerも業務で使ったことはありません。

勉強して、こういうの良いなと思ったら、ポイントポイントでどんどん取り入れていきました。アプリケーション・サーバーは、Tomcatくらいしか使っていません。そのため、本来であればアプリケーションサーバーが提供してくれるような機能も自作しました。

こういうところは、このあたり、一般的なJavaプログラマーとは違うかもしれません。

それならいっそ、PHPを使えば良いんじゃないかと言えますが、静的型付け言語であるJavaのIDEの実力・Eclipseにはお世話になりました。サービス開発初期は何が正解なのか分からず、動かしながら抜本的に作り直すなんてこともあります。その時、呼び出し階層・型階層の機能がなければつらいかった。

ただ、中盤以降はIDEに頼り切るスタイルが仇となって、どんどん重たくなって苦しくなりました。

持論ですが、ある程度大規模になると、場当たり的な設計をやめ、モノリシックをやめ、きちんと設計して、適度にマイクロサービスみたいにモジュール分割するのが正解だと思います。そして、各マイクロサービスは、JavaよりもLLの方が書きやすいと思っています。

Javaプログラマーから見たPython

新天地ではPythonistaになります。まだ一ヶ月くらいしか触っていませんが、Pythonは非常にとっつきやすい言語だと思いました。同じことができるフレームワークやライブラリが乱立せず、体系的に整っているように見えます。

お陰で非常に入門しやすく、何かをするにあたって迷ったりはまったりすることが極端に少ない言語だと思いました。

Javaは僕の育ての親

しかしJavaはSeasar Project等、日本発のJavaのOSSという教材に恵まれているために、質の良いコードを読ませてもらって学習させてもらえたことはかけがえのない経験だったと思います。

初めて触ったプログラミング言語はObject Pascal(Delphi2.0)ですが、業務で実用的に使い、多くの先人の知恵を学ばせてもらった、僕の育ての親はJavaであることは間違いありません。

これからはEclipseを起動することも少なくなると思います。そのうちショートカットも忘れてしまうかもしれません。それでも、僕のプログラミング哲学に影響を与えたのは、Javaであり、とりわけ、Seasar Project関係のOSSのそれぞれの開発者の方々の知恵を借りてこれからも頑張っていきたいと思います。

番外編 java-ja について

僕にとって java-ja は発足当時から憧れのコミュニティでしたが、家庭の事情でイベントに参加することは今まで一回もできませんでした。この記事が公開される12/3には java-ja 忘年会があって、実は java-ja のイベント初参加です。

エンジニアという職種がどれほど夫婦円満に役立ったか

この記事は妻・夫を愛してるITエンジニア Advent Calendar 2016の2日目です。1日目はbackpaper0さんの世界の中心で愛を叫んだうらがみです。

このアドベントカレンダーの提案者うらがみさんとは同年代のようです。同じJavaプログラマーで、愛妻家エンジニア同志ということで、2番手として記事を書かせていただきます。

僕は来年で結婚10年になります。妻は結婚当初からある病で闘病中の身ではありますが、おかげさまで、まだ無事夫婦を続けられています。

ここまで試練の連続ではありましたが、ここまでやれたのも、僕がエンジニアで良かったなーと思うことが多々あります。今日は、そんなエンジニアで良かったーと思うことを書いていこうと思います。

エンジニアで良かったなあと思ったこと

その1. いつでも、どこでも仕事ができる

ITエンジニアはPCと電源とネット環境さえあれば、大体の仕事ができます。

自宅作業などは比較的やりやすい職種だと思います。もっとも、妻は家に仕事を持ち込むことを嫌うので自宅での仕事はめったにしません。

どちらかと言えば、これが理由でフレックスに勤務できるというメリットを享受してきました。ある日具合が悪く看病のために休んでしまった時、遅れた仕事を土日にノマドワークで終わらせるなどということはよくやりました。

その2. 理解がある上司に巡り合うことが多い

比較的新しい職業なのでしがらみが少ないのか、それとも頭脳労働者であるために体育会系ではないからか、今まで巡り合った上司の方は、全てが家庭に配慮をしてくださって、柔軟に対応してくださいました。

その3. どうしようもなかったら転職することができる

どんな職場も状況が変わることがあります。それは仕方がないことです。そんな時、最後の手段として、転職をするという手段があります。エンジニアほど転職することに条件が良すぎる職種はないのではないでしょうか?エージェントなども充実していますが、IT勉強会などの人のつながりも捨てがたいです。

転職の度に、僕は家庭の状況を説明し、柔軟な勤務を認めていただいています。

夫婦円満のための時間管理のすすめ

ここまで書いたことに反して、僕はある時期、大変遅くまで連日残業。。。という生活をしていました。

それはたまたまその時、比較的家庭状況が落ち着いていたことと、プロジェクトが炎上状態にある中で、リーダーに任命されたこともあって、自分の判断で責任を全うしました。

しかし、それすら、もっとうまくできたのかなと今では反省しています。

その時は平気でしたが、やはり、そのような無理な働き方は体を壊しますし、夫婦仲も悪化させます。ただ早く帰ってればいいというだけではありませんが、だからと言って連日遅くまで働いて、パートナーを心配させてしまっては夫として失格です。

しかし、僕らエンジニアは、スケジューリングなどを生まれながらにして苦手としていた人種でもあります。そんなときはエンジニアらしく本で学びましょう!お勧めは何と言ってもこの本です。

ちなみにこの本はプログラマーというより、サーバー管理者を想定して書かれています。僕の主な職務はプログラミングですが大体においてスケジュールが狂う大きな原因は、「差し込み業務」にあって、プログラマー的な部分よりも「システムに詳しい人」という部分で発生します。なので、問題なく当てはまると思います。

パートナーの調子が悪い。こんな時に大事な仕事が!という人の生き方

働く男は悩みが多い。家庭で大問題!なのに仕事が!というとき、どうしたら良いでしょうか?例えば、世の中にはこんな人がいます。(本当はITエンジニアでこういう人を見つけたかったのですが、「管理職」って感じの方ですが。)

感動の家族愛の物語です。「自分は妻を・家族を愛してるぞ」と言う人は、読みましょう!奥さんが肝硬変にうつ病でお子さんは自閉症、奥さんと娘さんが自殺未遂を経験、そんな家庭問題をオープンにしつつ、そのビハインドを背負ってなお、家庭問題を解決しながら、仕事術を極め、社長になった方の物語です。

ちなみに、この著者の方はこんな本も書いています。

しかし、この人の本を読み返すと、僕はこんなに強烈に仕事と家庭に情熱を燃やすおっさんになれるでしょうか?自信はありません。こういうすごい人もいる。しかし、自分は自分です。

そんな僕にはこっちの方が合っているように思います。

まとめ

実は、今日付けで僕は転職し、新天地で働いています。それに際して、これらの本を読み返しました。(なぜかって?これらの本は僕が妻を守るためにどうしたら良いか、考えるために読んだからですよ!)そうしてみると、これらの本が教えてくれたことを、僕は忘れていたなと思いました。「あの時、もっとうまくできたのに」と反省して止みません。いや、人生とは常にそんなものなのかもしれません。

しかし、今からでも遅くないと思いますから、僕は今日から頑張ります!みなさんも、一緒に家族愛の探求をしませんか?

そして、いつか「エンジニアのワークライフバランスと家族の幸せハッカソン」みたいな企画をやりたいと思います。