しめじのもの

モノのブログ

素人からエンジニアになった後の3年を振り返る(その2~証券会社時代)

その1
simezi9.hatenablog.com


その2

証券会社時代(2013/10~2015/08)

新人研修が終わり、はやく俺のコードを炸裂させたいと鼻息を荒くしていた後に、配属されたのが某証券会社の社内システム開発だった。
2次受けではあったが、仕様設計もやり、開発も基本全て自社が主導して進めていた。
息の長いプロジェクトで、自分が参画した時点ですでに4年程度の歴史があった。
逆に言えばかなり枯れてきているシステムでもあった。
メンバーは基本12人程度。多い時では20人ぐらいいたこともあった。
自社の中でも有能な人が多かったように思う。
中のコードも初期メンバーが優秀だったことも有り、結構品質の良いものだったのではないかと思う。
そこでコードを読めたのはいい経験だった。きちんと書かれたコードを読むのは何より勉強になる。

セキュリティ要件が非常に厳しく、開発環境すらインターネットが使えない。
ライブラリ・ソフトウェアの持ち込みは客先に申請が必要で、実績のないものは却下される、
というエンジニアにはとても辛い現場だった。
仕事が辛いわけではなかったが、正直退屈だった。
(評価面談のたびに配置転換をそれとなく要望していたけれど、受け入れられず結局転職先を探すことに。)

機能に応じてクライアントアプリとWebアプリがあった。
コードベースも全く別だったが、その2つに横断的に関わることになった。

開発環境

クライアントアプリ
  • 言語:Java6
  • 使用技術:Swing,Hibernate,Apache Ant
  • サーバー:CentOS(RMIによる通信を利用したクライアントサーバモデル)
Webアプリ

IDEEclipse
ソース管理:SVN

初期(2013/10~2014/03)

とにかくテストが多かった。配属して直後の3ヶ月はひたすら「スクリーンショットExcelに貼り付ける」という
悪名高き日本の現場の洗礼を受けた。テストがちょっと嫌いになったきっかけでもあった。
精神的にもかなり落ち込んでいて、能力的には停滞していた。
開発環境はWindowsだったが、動作させるのはLinux上だったので、teraterm使ってプロセス立ち上げたりモジュール配備したりしていた。
仲良くなった先輩の人がシェルスクリプト職人で、Linuxについてはかなりいろいろと教えてもらった。
自分でもメンバー共有のalias作って環境改善したり、ビルド用スクリプトを書いたりしていた。

中期(2014/04~2014/09)

そろそろ現場に馴染んできた。テストも山を超えて、少しづつ開発案件を担当させてもらえるようになった。
本格的にWebアプリを触るようになったが、Seasar2の仕組みが全くわからず当初は頭を抱えた記憶がある。
ただし、一度その仕組を理解すると、既存のレールに乗って随分楽にコードが書けるようになった。
ここで、DIとインターフェイスを利用したプログラミングの価値を学んだ。
リフレクションとアノテーションを利用したメタプログラミングの強力さには感心した。
Seasar2は日本のJava界隈で大盛り上がりしただけあって、すごく良く出来たフレームワークであり、
そのサブプロジェクトもよく整理されていた。

Seasar2徹底入門 SAStruts/S2JDBC対応

Seasar2徹底入門 SAStruts/S2JDBC対応

特にS2JDBCによるデータベース問い合わせとトランザクション管理の楽さは衝撃的だった。
DSLと流れるようなインターフェイス(fluent interface)」という考え方もこの辺りで学んだ。
d.hatena.ne.jp


当時の現場には、新規参入者に必ずやってもらう練習問題というのがあり、
年収や性別、年齢といった項目を持つテキストデータを読み込んで、平均などの簡単な統計量を出力するというものだった。
分量的には1~2日もあれば出来るもので、新しく入ってきたメンバの品定めみたいなイベントだった。
自分もこの品定めイベントに呼ばれるようになり、提出されたコードのレビューをしたりしていた。
Javaが出来ます」ということで入ってきた協力会社の社員の提出物はほとんど全部惨憺たるものだった。
全てのフィールド・メソッドがstaticだったり、練習問題で1クラス500行もあるソースを書く人だったり色々。
業界の闇を垣間見たような気がした反面、どうしたらヤバいコードになるのか、という例を色々見て反面教師に出来たように思う。

後期(2014/10~2015/08)

保守案件ばかりが続き、新しい収穫も少なく少しづつ自分の将来が不安になっていった時期。
一番勉強になったのは、何かのきっかけで現場のリポジトリに入っていたguavaというライブラリを見つけ、
かなり使い倒して、内部実装を色々覗いていたこと。(ライブラリのコードがすぐ読めるのはJavaのいいところ)
guavaは元々コレクション系のUtilityライブラリだったこともあって、データ構造の知識はだいぶ増えた。
DSLを意識した構成にもなっていて、メソッド設計やコメント、クラスの使わせ方など非常に参考になった。
qiita.com

Oracle 公認のJavaプログラマー資格のSilverとGoldを続けて取得した。
奨励金が会社から出ていたこともあって受けたが、
試験の内容はおよそ受験料の価値が有るものとは言いがたく、言語仕様の重箱の隅を突くようなものだった。
今後受けようと思っている方にはあまりオススメは出来ないが、
Javaの機能の再確認にはなった。

この頃から状況を打破すべく社内の有志を募って勉強会を始めた。(1人だと勉強せずに遊んでしまうから)
毎週土曜日をほぼ1日使ったもので、テーマは特になく「もくもく会
時折技術雑談ということで、お互いの学んでいることを共有していた。
当初は6~7人集まったが、やはり土曜日は厳しいということで最終的には毎回3~4人の集まりだった。
この集まりは退職直前まで開催して、多分40回ぐらいはやったはず。
自分は時系列的に以下の様なことをやっていた。

Scala

時代は関数型だぜイェ-ということで始めた。

Scalaスケーラブルプログラミング第2版

Scalaスケーラブルプログラミング第2版

ただし、Scalaスケーラブルプログラミングは途中で挫折。能力的にも初心者の入り口程度で終わった。
しかしイミュータブルの価値と「副作用」という考え方、
選択と射影でロジックを組み立てることなど、パラダイムの違う言語を触ったことは非常にいい経験になった。
カリー化!カリー化!
今でも機会があればまた学び始めたいと考えている。

Play Framework

Scalaを学ぶ中で少し触れた。
Ruby on railsに影響を受けたWebフレームワークをはじめて触った。
軽量でサクサク開発できるんだろうとは思ったが、Scalaを挫折したことにより同じく終息。

SQL

SQLの知識は新人研修で受けた講義レベルで止まっていて、
現場でもS2JDBC頼みで抽象化されたORMの仕組みの恩恵にどっぷり使っていたため、
一度ちゃんと基礎を固めようと思い学んだ。
ミックさんの書いた本にハズレはなかった。
この延長でデータベーススペシャリストを取得した。

達人に学ぶ SQL徹底指南書

達人に学ぶ SQL徹底指南書

SQL実践入門──高速でわかりやすいクエリの書き方 (WEB+DB PRESS plus)

SQL実践入門──高速でわかりやすいクエリの書き方 (WEB+DB PRESS plus)

Java8

ラムダ式とかいう黒船が来るらしい、とJava界隈が大盛り上がりで、しかも
現場もついにJava6からJava8に移行する、ということで学びはじめた。
「Java8による関数型プログラミング」を一冊通してやったことで、かなり身についた。

Javaによる関数型プログラミング ―Java 8ラムダ式とStream

Javaによる関数型プログラミング ―Java 8ラムダ式とStream

最終的に

学べば学ぶほどに、新しい技術を取り入れることも出来ず、
テストに忙殺される金融業界での開発に納得が出来なくなっていった。
技術の流れから取り残されていくのがもどかしかった。
Webを飛び交う華々しく輝く話題を見るにつけ、誘蛾灯に惹きつけられていくかのような自分を感じ転職を決意。
BtoCの出来る会社、Webの会社を目指して転職活動を始めた。

今の自分が何を出来て、何がしたいのか、はっきりしている分転職活動は新卒の就職活動よりもはるかに楽だった。
仕事をしながらの転職活動だったが1ヶ月ほどの活動で2社から内定をもらえた。
いずれもWebサービスを運営する企業で一部上場の会社だった。
「ウチのほうが絶対楽しいから」と語った面接官の一言に押されて今の会社に決めた。

simezi9.hatenablog.com