エンジニアの醤油漬け

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

去年の振り返りと今年の目標(2018)

あけましておめでとうございます。

今年もよろしくお願いします、

というか今年こそは記事書こう。

去年の目標

JavaScriptフレームワーク習得

Vue.jsは趣味程度に少しだけ触りました。

習得出来たかと言われると微妙なところですが、50%ってところでしょうか。

ゴールが不明瞭なタスク設定だなと反省しました。

Java Api読破

業務でJavaを使わなくなってしまった(一部使ったけど)ので、優先度下げます。

技術情報の発信を月一以上

すみません。

年間で2本だったので、2/12なので、16%ってところでしょうか。

サーセン

去年やったこと

転職

前職では、Javaのサーバをオンプレで作ってましたが、

PHPでサーバをクラウドで作成したり、 お客さんの要望にあわせてクラウドの構成の設計したり クラウド上に環境構築したり、 いろいろやらせてもらっています。

身につけた技術

PHP

ある程度は書けるようになってきました。

古いバージョンのPHPのレガシーコードをいじってた頃は

Javaで書きてー!」という感想でしたが、

PHP7触ってると、どっちでも良くなってきました。

ただ、IDEの補間はやっぱJavaのほうが強力なのかなと思います。 その代わり、細かい所に手が届く関数が沢山用意されているなぁという印象です。

Google Cloud Platform

結構大きめなプロジェクトの構成を0から設計させてもらいました。

  • Cloud Storage
  • Compute Engine
  • App Engine
  • Cloud Dataflow
  • BigQuery
  • Cloud Functions
  • Logging

での開発経験が積めました。 今年中に認定資格取りたいと思います。

ShellScript

今の会社に入って最初にお願いされたのがGitのリリースシェル

それからなんだかんだ使う事が多かったので、

人並みには使えるようになったつもりです。

というか、あまり複雑な処理をやる場合は言語選定で外しますが…。

Node.js

主にCloud Function向けのスクリプトを書きました。

ただ、そこで作ったモジュールを再利用した結果データ整理などを行うスクリプトが全て ShellScriptとNodeで出来てしまいました。

コールバック地獄からPromiseに置き換えて、その後asyncで書くという

非同期処理パラダイムを一通り経験できてよかったと思います。

Electron

趣味で触ってます。

メイン画面を立ち上げたらあとはWEBサービスと同じ感覚で触れますね。

ただ、サブ画面とかを立ち上げるときはまたElectronの世界に連れて行かれます。

Mocha & Chai

こちらも趣味で導入しました。

JavaScriptユニットテストを今まで出来ていなかったのですが、 やっと出来るようになりました。

正規表現

簡単な正規表現なら何も見ずに書けるようになってしまいました。

特に()$1(マッチングのグループ化ができる)にはお世話になってます。

$1を覚えてからは大抵のことはVSCodeで出来るので、エクセルいらずになりましたね。

カンファレンス

JJUG

春、秋両方でLTしました。 秋のLTはGCPのCloud Dataflowについてです。

docs.google.com

LTに収まらずにオーバーしてしまったので、 どこかでロングバージョンを発表できればいいなと思ってます。

東京Node学園祭2018

などが聞けて面白かった。

ただ、英語のセッションが多くてしんどかったです。

GitHub

ID作ってしばらく放置していましたが、活動し始めました。

DateTimeParser

QiitaのJavaアドベントカレンダー向けの解説用コードを公開しました。

github.com

Johari

デスクトップ向けの画像整理&閲覧用のアプリ作り始めました。

とりあえず、ローカルの画像ファイルに

  • 画像一覧の表示
  • 画像にタグ付け
  • 画像DBの作成

などが出来ます。 将来的には、ソートしたり画像の保存先を管理したり ムフフな画像をこっそり管理したり… 出来たら良いなと思ってます。

しかも、これHTMLで表示しているので、 例えばS3、GCSに画像を置いて一元管理するとか… WEBページにしちゃうとか… 夢は広がります。

まだ、開発者向けという段階で、機能も乏しく完成度も低いです。 これからってところですね。

github.com

今年の目標

GCPの資格取得

クラウドアーキテクトを取得したいと思います。

技術情報の発信を月一以上

がんばる

Johariをある程度形にする

ざっくりとした目標ですが、ゴールは 「一般公開出来る状態にすること」です。

必要なのは

  • 配布ページ
  • ドキュメント
  • 適切なエラーメッセージ

を揃えることだと思います。 ある程度の機能ができた段階で、この3つを用意できれば完了かなと思います。

この3つを今年は頑張っていこうと思います。

転職エントリです

退職者その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書いたらその記事を書けばいいか。

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