エンジニアの醤油漬け

醤油大好きなとあるエンジニアのブログ

転職エントリです

退職者その2 Advent Calendar 2017 7日目です。

adventar.org

自分は去年まで SIerで官公庁向けにJavaでオンプレサーバを作る感じの仕事をしていました。

きっかけ

転職のきっかけは去年のNode学園祭2016でした。

Nodeのユーザーグループの勢いと熱気を目の当たりにした後、

自社の冷めた環境を見て

「今は熱意を持って勉強している、
ただし、この環境に5年10年居たらどうだろう。
そして、その時には外に出られない人間になっていないだろうか。」

と危機感を覚えました。

元請けにすべてを委ねて、競争しなくても仕事がある会社。
基本情報を取った人間が褒められる会社

恐らくこの会社に長く居たら"野生"で行きていけない技術者になるだろうと思いました。
ベンチャーで働いている友人が眩しく見えました。

退職

12月頭にとりあえず辞めることを会社に伝えました。
転職先は完全に未定でしたが、

  • 20代
  • Javaエンジニア

で、ホームレスになることは無いだろうっていう見込みでした。

転機

転機となったのが去年のJJUGでした。
その場のノリで業務コードを改善した話をまとめてLTしちゃいました。

qiita.com

このあと、今の会社の方に声をかけていただき
無事に転職先が決まりました。
(Qiitaを見てTwitterでも声をかけていただけました。ありがとうございました。)

辞めると言った2日後でした。

比較

技術

前職と比べて要求される技術が上がったと思います。

前職では基本的に出来ることを任される感じでしたが、
今の会社は今出来ないことをチャレンジして解決することも要求されてます。
仕事をすすめるたびに自分の技術力が上がっていくのでやりがいはでかいです。
忙しくはなりましたが、経験値が増えたと思ってます。

あと仕事としても要求されるレベルが高くなったと思います。
「解決するために何が必要か」で自主的に動かなければいけない。
前の会社ではまだ自分はお客様扱いだったのかなと思います。

社員

ベンチャーだけあって、技術的な熱意が高いと思います。

  • 外部発表や、記事の連載などをしている人がいる
  • カンファレンスも一緒に参加する人がいる

そして、こんな人らにSlackでいつでも質問できるのはすごい恵まれてる環境だと思います。

福利厚生

言ったら会社がバレそうですが、

がデフォです。 プラスで

私費でオライリー買ってたのでかなり助かりました。

ちなみに前職では

  • Windows機一台
  • ディスプレイ1つ
  • 普通のオフィスチェア

地理的な案件があり、流石にディスプレイ1枚だと辛いので 自前で持ち込んでました。

給料

微アップでした。

結論

案外辞めてもなんとかなる。

あと、何らかのコミュニティやカンファレンス、勉強会で

  • 自分の会社の客観的な技術レベル
  • 自分の客観的な技術レベル

コレは知っておいたほうが良いかなと思います。

Java アドベントカレンダーの2日目書きました。

Javaアドベントカレンダーの2日目書きました。

qiita.com

今やってる案件が

「いろいろなシステムからデータ出力してもらい、 そのデータをBigQueryに入れて解析しようぜ!」

って案件で、DBごとの時間文字列の違いに悩まされたので、 その問題だけ抽出してフルスクラッチでモジュールを作成しました。

いい感じに出来たので業務コードに反映しようかなと思ってます。

はじめはクラス1つ作って、処理べた書きの殴り書きでやっちゃおうかと思ってましたが、 せっかくなのでしっかりクラス作りました。

はじめはインターフェースで作ってたのですが、 例外ログ周りの共通処理が出てきたので抽象クラスになりました。

コードはGitHubに上がってるので、ご自由にお使いください。 ただし、同一インスタンスを使いまわす場合に解析自体はできるけど、 ログがスレッドセーフじゃないのでご注意を。

気が向いたら修正するかも。

ちなみにコードのほとんどは帰宅途中の地下鉄東西線の車内で書きました。 リアルに移動し続けるノマドスタイルのプログラミングです!

そう言えばQiitaがおしゃれデザインになっていて、Qiita臭がしなくなって残念。

でも、使いやすい感じになったんで良いと思います。

JJUG CCC 2017 Fall 参加してきました。

久しぶりの更新になりますが、生きてます。

(ビックデータ案件で死にかけてましたが…)

先週、土曜日に行われたJJUG CCC 2017 Fallに参加してきました。

www.java-users.jp

JJUG CCCは日本Javaユーザグループが年2回行っているカンファレンスです。

今回のタイムテーブルをみると、

サーバーサイドのKotlinの話が2つもあって

いよいよBetter Javaとして使われだしているのかなという雰囲気がします。

気になったセッションは、「新しいプログラミング言語の学び方 ~ HTTPサーバーを作って学ぶ Java, Scala, Clojure ~」です。

JavaScalaClojureでHTTPサーバを作って、

正規表現や、並列処理などの書き方の違いを学ぼうというようなセッションでした。

確かに、新しい言語を学ぶ時にWEBサービスを作ろうとすると

DB周りとか、フロントエンドの実装が面倒で

気がついたら熱が冷めてるってあるんですよね。

そんな時にHTTPサーバがちょうどいいお題だというのは、とても納得しました。

そして、最後の懇親会ですが、

またLTをしてきました。

内容は「やってみようGoogleDataflow」です。

現在携わっている案件がまさにGoogle Dataflow(Java)使っているので、

そこで得た知見などを発表してきました。

資料はこちらです。 docs.google.com (WEB版は個人情報を濁してます。)

今回から、LTが事前申し込み制になってしまい、

正直発表は緊張しました。

そして、残念ながら、時間がオーバーしてしまったので、反省してます。

(そして、LTなのでもっとユーモラスにすべきだったとも反省)

どこかで普通にこの内容でセッションできればな~と思っています。

ちなみに、今週末はNode学園祭ですね。

nodefest.jp

こちらは土曜日に参加しようと思っています。

あと、Javaアドベントカレンダーも申し込みました。

qiita.com

まだ枠が空いているようなので、ネタがある方は是非どうぞ!

オブジェクト指向設計分析の感想

Head First オブジェクト指向設計分析が読み終わったので感想。

オブジェクト指向について復習したかったので、読みました。 いままでJavaでアプリを作成してきましたが、 なんとなくで作成したり、 オブジェクト指向の原則を網羅する機会がなかったりしました。

大学でもオブジェクト指向設計概論とかあった気がしますけど…

なんか設問に対して、ポリモーフィズムとかインターフェイスとか穴埋めしていけば合格もらえた感じだった気がします…w

前職では、クラス設計がひどいソースを渡されて保守させられたり、 社内でも理解していない人がいたりでした。

そこで、基礎から勉強しなおそうかなと思い手に取りました。

この本を手に取った理由は著者紹介です。

Brett McLaughlin はギター奏者だが演奏してもお金がもらえない事に苦しんでいる。 しかし、最近になってプログラミング技術を向上させる書籍を書けばお金がもらえることに気づいた。

という感じのジョークから始まる。 このジョークに惹かれて買いました。 こんなフランクな感じですが、O'REILLYです。

内容としては、図や記号などが多くわかりやすいのですが、 若干回りくどいかな?と感じました。

恐らく業務での開発経験や失敗経験がない人でも分かるように例を用意しているのでしょう。

一番大事なのは設計の原則を述べている8章の内容でしょう。

ということで簡単に8章の内容をまとめたいと思います。

8章まとめ

開放閉鎖原則 (OCP: Open-Closed Principle)

クラスは拡張に開放され、修正に閉鎖されるべき。

  • 機能をクラス内に留めることで、修正時に他に影響がないようにする
  • 機能を拡張したい場合は、クラスを継承し、オーバライドする

繰り返し禁止原則 (DRY: Don’t Repeat Yourself)

共通する事柄を抽出し、一箇所にまとめることでコードの重複を防ぐ。

  • クラスと機能を意味のある状態に保つために必要
  • システムの分割方法を最適化することにも繋がる

単一責任原則 (SRP: Single Responsibility Principle)

オブジェクトは単一の責任を負い、サービスは単一の責任を遂行する。

  • オブジェクトが行うあのは一つの責任
  • あるオブジェクトの変更理由が1つしかなければ単一責任原則が実装できている

その他にも [クラス名]は自分自身を[メソッド名]する。 という文章が成り立つ場合は良いが、成り立たない場合は他のクラスに移動すべき。

例)

○自動車は自分自身を発進する
×自動車は自分自身を洗車する → メンテナンスは別クラスの仕事

リスコフ置き換え原則 (LSP: Liskov Substitution Principle)

サブタイプは基底タイプと置き換え可能でなければならない。

8章以外

インターフェイスに対して実装を行う

これにより新しいオブジェクト、クラスに対しての拡張性が増すため。

テストを意識する

ユニットテストなどができるようにする。

というのもありました。

オブジェクト指向を見直したい方にはおすすめです。 少し高いですが…。

関係ないですけど、明日から新しい会社にジョインしPHPerになります。

ちょっと不安ですが頑張ろうとおもいます。

レコチョクさん主催AWSハンズオンに参加してきました。

recochoku.connpass.com

19:30からという参加し易い時間帯で、 初心者からも参加可能というものだったので参加してきました。

内容は

などをして、 最終的には EC2を2つWEBサーバにして、 ロードバランサーを割り当て。 そこにDNSサーバでドメインを割り当てる。 ってところまでやりました。

内容自体は問題なかったのですが、 SSHのクライアントにWinSCPを用意していたら yumコマンドでApacheのインストールの応答に返答できずに積みました。 急遽Teratermを入れて進行しました。

それ以外は特に問題もなく進行しました。

レコチョクさんのハンズオン参加は初めてでしたが、

  • 仕事終わりに参加しやすい
  • 適度な速さ
  • アシスタントの厚いサポート
  • 図が多くて詳細な資料

って言う感じで、 とても理解しやすかったです。 欠点といえば部屋が暑かったぐらいでw

来月もやるそうなので、 参加できたら参加しようと思います。

興味のある方はぜひご一緒にどうでしょうか。

去年の振り返りと今年の目標

あけましておめでとうございます。 今年もよろしくお願いします。

去年ほぼ書いてないブログに"今年も"も何もないけど。

去年の振り返りと目標です。

去年やったこと

身につけた技術

ダンなjs開発環境(node,gulp)

うちの会社は旧石器時代のjsプログラミングしかやっている人がいなかったので、 とりあえず、node.jsとgulpでタスク管理ぐらいはできるようになっておきました。

オブジェクト指向設計

実際オブジェクト指向しっかりやっていたかというと疑問で、 なんとなくカプセル化とかしてたのを、 オブジェクト指向分析設計の本を読んで少しずつ実践出来るようになってきました。

カンファレンス

東京Node学園祭

カンファレンス初参加でいろいろ衝撃を受けました。 jQueryつかって旧石器時代の開発してる社内じゃお目にかかれない話がいっぱい。

あとスピーカーが豪華すぎで、 JavaScript: Good Partsの著者のDouglas Crockford氏に挨拶して写真取ってもらっちゃいました。

セッションも攻めたセッションが多くて、

例えば、ブラウザにサーバー立ててみようとか、

OSなしでjs動いたら面白くね?

runtimejs.org

みたいなものが 衝撃でした。

node界隈は若さと勢いが溢れていて楽しかったです。

JJUG

JJUGは前回のエントリで書きましたが、

ubansi.hatenablog.com

Nodeカンファレンスより若干年齢層が上がって硬い感じに思えました。 業界の話がたくさん聞けて、仕事で使えそうな話ばかりだった印象。

あと飛び込みLTでJavaアンチパターン的なことをまとめて発表してきました。

qiita.com

結構ウケてたみたいで良かったです。

退職

12月に退職を表明し今年の1月末での退職が決まりました。

理由はこのままいたらエンジニアとして腐ると思ったからです。 例えば

  • ユニットテストを書かないでリリースすることに疑問を持たない
  • 汚いコードを観なかったことにして実装をすすめる
  • 振り返りを行わない
  • 技術的な向上心がない

まず、入社時にコードレビューがなかったので、 Git導入を進言して、導入を行い、GitBucketでレビューを行うように社内改革はしましたが、

スキルアップをするために社内改革をすすめる必要がある会社が自分にとって最適な環境のか。」

と思ってしまったのです。

自分は大学で長く遊んでいたので、 一刻も早く自身のスキルアップをしなきゃいけない立場なのに 会社の改革と、意欲のない人間のスキルアップの面倒まで見るのが果たして自分にいいのか考えました。

今の会社は恐らくスキルアップをせずに働き続けてもなんの問題もないでしょう。

そういう環境であるというのがまず怖い。

長くいたら感化されるだろう。 なぜならそのほうが楽だから。

なので、思い切って退職しました。

再就職先が決まる前にやめたのは 無職にならないと本気で転職活動しなと思ったから。 そして、決まらずにだらだら続けて数年経つ未来が見えたから。

あと、東京在住で、20代+Javaエンジニア+ある程度のコミュ力なら ホームレスになることはないだろうなと思ったからと言うのもあります。

2月は溜まった専門書読む時間にして、 現在は3月から働くのを目安に仕事を探しています。 転職先決まりました。

読書

読了

読書中

目標

抱負

「やりたいと言う前に計画をたてる」 やりたいって言うだけってダメだなと思いました。

目標

JavaScriptフレームワーク習得

上半期に時間が取れればVue.js, Angular2あたりつかってなんかアプリ作ろうかと思います。

Java Api読破

Java8 api読破したい。 Java関連の職に転職を決断すればこれも2月中にやろうかと思います。 使わないなら後回しですが年内予定で。

技術情報の発進を月一回以上

一ヶ月あれば、何らかの技術とか知見を書けると思うので、これを目安にスキルアップしていこうかなと思います。 ただ、Qiitaと役割が若干かぶる気もします…。

Qiita書いたらその記事を書けばいいか。

そんな感じで、エンジニアとして精進していこうと思うので どうか、よろしくお願いします。

JJUG CCC 2016 Fail 初参加&飛び込みLTしてきました。

JJUG CCC Failに参加してきました

最近、「なんで自分は東京で働いてるんだろう?」と思うようになり、

せっかく東京に住んでるんだからイベントに参加しよう!

と思いたち、カンファレンスに参加するようになりました。

いろんな知見が得られて楽しかったです。

気になったセッション

「Be a great engineer! ~フォローすべきトレンド、スルーすべきトレンドをどう見抜くのか」

新しいもの、技術に訳もなく飛びつかずに真贋を見極めて使えるところを使おうという話でした。

新しいフレームワークやライブラリ、言語によって何ができるようになったのか。

今まで何が問題だったのか。問題をどう解決したのかをしっかり見抜かないといけないというのは納得でした。

気をつけないといけないとな~と感じました。

「カナヅチを持つとすべてがクギに見える」は戒めとして覚えておこうと思います。

チームメンバーのスキルアップ、どうしてる? - Java100本ノックで新加入メンバーを鍛えてみた -

現場で起こる一番多い例外がNullPointerExceptionっていうのが悲しい。

しかも、例外のメッセージがnullってのも笑えそうで笑えませんでした。

まぁうちの会社の場合、「悪魔のコード」*1では昔、ログすら出てない状態だったみたいですけど…。

あと、「アンチパターンに名前をつける」というのはいい方法だなと思いました。

名前をつけることで覚えやすくなるし、探しやすくなる。そして認知しやすくなるのが大きいですね。

Featherweit JavaやGroobyの漸進的型付けについて

難しかった! 結局何をやっていたかというと、

Javaコンパイラのモデルに型推論を行うコンパイラを実装できるかどうか」

の証明だったと思います。 動的型付けを許容する型をメソッドの代入などから型を推論していき、最終的に型を確定させるみたいなことを 式を使って証明していた…ような気がします。

Javaを潜っていくとそういう世界があるのかぁと思いました。

懇親会とLT大会

懇親会ではお酒を飲みながらLT大会に。

そこで、おつまみがなくなってしまったので飛び込みでLTしてきました。

メモするためにノートPCを使っていたので懇親会の時点で

  • 電池残量 5%
  • Microsoft Officeなし
  • プレゼン資料なし の状態からLTしました。

まず、コンセントを探してPC起動&充電。

PowerPointが入ってなかったのでどうやってプレゼンしようかと思ってたんですが、

Qiitaにスライドモードが実装されてことを思い出して、Qiitaでやることにしました。

ネタはQiita用に書いて下書きとして保存していたものがあったので、

それをスライド用にリメイクしました。

Qiitaバンザイ。

qiita.com

このLTの主です。

皆さん、汚コードのリファクタリング経験があるようで、 問題点を挙げるたびにウケてましたw

そしてなぜか、ぶっつけ本番でやったのに5分ちょうどで終わるというキリの良さ。

最後に持ち歩いていたリーダブルコードを掲げて無事終わりました。

ちなみにLTをするとポップコーンがもらえるので、

f:id:ubansi:20161211191506j:plain

これで一杯やりました。

あとLTをすると、他の参加者と話すきっかけになったり、

話しかけてもらえたりして交友も広がっておすすめです。

JJUG感想

  • コーディングより運用方法寄りだった気がする
  • 内容はSpring, DevOps, マイクロサービスアーキテクチャ,DDDあたりが多かった気がします
  • なんか話せるネタがあるときは持っておくと役に立つ
  • LTすると交友とフォロアーが増える

JJUG初参加でも特に問題はなかったので、

皆さんも是非。

ちなみに、次回は2017年5月20日にJJUG CCC 2017 Springだそうです。

JJUG CCC 2016 Failの資料はこちらで公開されています

github.com

*1:LTで紹介したコード