読者です 読者をやめる 読者になる 読者になる

エンジニアの醤油漬け

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

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

Java

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してきました。

Java JJUG_CCC

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で紹介したコード

自己紹介

はじめまして

どうもはじめまして。ubansiです。 東京でサーバーサイドのJavaとか、JavaScriptのPGやってます。 (1月末にやめるので転職活動中ですが)

言語スキル

Java

とりあえず、目的のものを作る程度の力はあります。

昔、趣味でPSO2の相場管理ツールをSwingで作ってチームでガッポガッポしてました。

業務ではTomcatサーバーの改造がメインで、Springで実装したりしてます。

あと、たまに業務中にでくわした悪魔と戦ってます。

qiita.com

JavaScript

JavaScriptたのしいんじゃー」

って言いながらjQueryだけで5000行オーバーのシングルページアプリケーションを業務で作成した事があります。 クロージャ駆使してがんばってモジュール化したんですが、やっぱりフレームワークなしでSPAは厳しかったですね…。

あと、悪魔のようなJavaScriptコードと戦ったこともあります。 (うちの会社悪魔飼いすぎだと思います) とりあえず、

は読んで業務経験もあるので扱えます。

リファレンスも全ページ読みました。(覚えたとは言ってない)

あとNode.jsも最近興味があって、カンファレンスに参加したり、 プルリクエスト出したりしています。 (ほんの少しですが)

近いうちにReactかAngularあたりに手をだす予定です。

その他

趣味

映画

90年台のハリウッド映画が好きです。

アーノルド・シュワルツェネッガーとか、エディーマーフィー全盛期 シルベスター・スタローンとかブルース・ウィリスとか!

あと、当時の勧善懲悪な感じの「悪いやつはぶん殴って解決」的なのが好きです。

ゲーム

アンチガチャ派。

ガチャで強いキャラがでるゲームは「ゲーム型集金システム」だと思ってます。

最近は洋ゲーやることが多いです。

昔は

やってました。

読書

読んだ本