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

しめじのもの

モノのブログ

ソフトシリコン耳栓のお陰で耳栓ライフが捗っている

職場での集中作業時、睡眠時など周囲のノイズを抑えるために役に立つ耳栓

一般的に耳栓といえばウレタンフォーム製で、押しつぶしてから耳の穴に挿入して
膨らむときに耳の中にフィットさせるタイプが多い

こういうの↓

このタイプは遮音性に優れ、装着も簡単、単価も安く使い捨てができるので衛生的、と何かとメリットが多いが、大きな欠点がある。
とにかく耳が疲れる点だ。

フォームが膨らもうとする復元力で耳に密着させるために、どうしても耳の内側から圧力がかかるし、
耳の奥までガッツリ挿入するので強い違和感がある。
個人差や慣れはあるだろうが、自分は今まで1時間つけ続けることでも結構苦痛だった。
集中するために耳栓をつけているのに、耳栓で集中をそがれていては本末転倒である。

ウレタンフォーム以外のタイプでは「三段きのこ」などとよばれるフランジタイプもあるが、
耳の奥に突っ込むせいで耳がつかれるのは変わらなかった。

MOLDEX 高性能耳栓 ロケッツ6485 1ペア

MOLDEX 高性能耳栓 ロケッツ6485 1ペア


そんな折にみつけたのがソフトシリコン製の耳栓だった。

Macks Pillow Soft シリコン耳栓 6ペア

Macks Pillow Soft シリコン耳栓 6ペア

形状はコンビニに売ってる白玉ぜんざいの白玉のよう。
手触り感触もまるで粘土や白玉。グニグニとしていて形状を自在に作り変えられる。
この耳栓が革命的なのは、耳の奥に差し込まない点。
耳の入り口を粘土で埋めるような感覚で装着し、奥まで押し込んだりしない。
そのため、耳の奥の異物感がなく、内側から押し広げられる感触もないため、とにかく疲れない
作業が何時間に及ぼうと耳に負担がかからないのは最大のメリット。
耳孔の置くまで差し込むタイプの耳栓と比べると若干遮音性は劣るが、目的を果たすためには十分な機能を持っている。

問題は若干汚れやすいこと。上述の通り、粘土質なので、耳垢やほこりを結構巻き込んでしまう。
個々人の耳垢のタイプにもよるだろうが1〜2週間使うとかなり無残な状態になってしまうので、
衛生を考えるとほどほどの周期で取り替える必要がある。必然的にランニングコストはやや高くつく。


耳の奥に差し込むタイプの耳栓が苦痛で利用を断念している人にとっては一度試す価値がある代物だと思う。

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

IT

simezi9.hatenablog.com

続き

webサービス時代(2015/09~)

無事に転職が決まり、今の職場についた。BtoBtoCで商品を売るサービスを運営している。

Javaを捨てはじめての.netの世界に飛び込んだ。
文化が変わると仕事のやり方が変わるのは当然だが、日々新発見がある。
半年という期間は本当にあっという間にすぎていった。

特に変わったこと

  • svnからgitへ
    • 特にGitHubのPRベースの開発の便利さには衝撃を受けた
  • 情報共有基盤としてのQiita:Team
    • 各人が情報を発信していく文化に馴染みがなかった
  • IPMessangerからSlackへ
    • ChatOpsによる各種機能との連携
    • 前職ではとにかくシェルスクリプトで全てを自動化していた。ビルド~ユニットテスト~デプロイまで自分達でシェルを書いて保守していた。現在はslackから実行

開発環境がモダンになり、コミュニケーションが格段に楽になった。
開発以外の作業の負担が大きく減ったのは感じる。
特にデプロイについて言えば、前職ではどんなリリースでも
全てのシェルコマンドと目的などを詳細に書いたExcelの手順書を作り
1週間前にサーバー室の入室申請を出し、二人一組で業務終了後にリリースする、というかなりつらい手順を踏んでいたことを思うと夢のよう。

その反面、前職と比べるとコードそのものの品質は落ちる部分があると感じる。
これについては、一気にリニューアルするようなことは出来ないので、ちょっとずつ変えていけるように頑張りたい

今のところ転職して悪かったことは無いように思っていて、作業そのものは毎日楽しい。
仕事は所詮仕事でしかないと割りきってしまう考え方も分かるけれど、
そこに喜びを見出しているメンバーが多いというのはとても新鮮で、自分もその一員になれるように努力したいと素直に思える

学習

.netの会社に入るということで、ひとまず「基礎からわかるC#」は読んてみた。

基礎からわかる C#

基礎からわかる C#

C#そのものがJavaとかなり似ている面もあって、割とすんなり入れた。
LINQJavaのStreamAPIの強化版みたいな間隔なので、いくつか知識をアップグレードすればすぐに使えた。
多分Java8になれた人がLINQを触ると、あまりの行き届き具合にちょっと驚くのではないだろうか。
仕事ではVBを触る時間が長いが、こちらはどうにも体系的に勉強する気力が沸かないのが辛い。
機能的にはC#とほぼ同じだが、文法的に洗練されていないと感じることが多すぎて、
書いていても学んでいても楽しくない事が多い。
.net Frameworkの知識はまだこれから。GCの仕組みとか実行基盤の仕様はあまりわかっていない。

現在はJavascriptの勉強を進めている。
社内的に需要があることもあり、社内勉強会を実施している。今の内容はオブジェクト指向Javascriptの輪読。

オブジェクト指向JavaScriptの原則

オブジェクト指向JavaScriptの原則

今年一年はJSやCSS周りの知識を増やしていきたい。

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

IT

その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

素人からエンジニアになった後の3年を振り返る(その1~研修時代編)

IT

まえがき

上司:「今後の新人研修の参考にしてみたいから、今までどんなことしてきたのかちょっとまとめて~」
大学では農学を学び、IT業界についてはほぼ素人という意味では
文系SEとかプログラマーと言っても良かった自分が、
エンジニアとして今まで何を学んで今に至ったのかを少し詳細に振り返ってみる。

テーマは、(主にプログラミング方面で)どの時期に何を学んで、何を考えたのかについて。

ネットを賑わせる新人エンジニアの活動歴はどうにも華々しすぎて、胸がいたいので、
普通の人はきっとこんな感じだよ、ということで公開してみる。

経歴

入社前のスペック

  • 大学
    • 国立大学の農学部出身
    • 現役合格だったものの、大学時代は無気力に陥り2回留年。
  • IT技能
    • プログラミング知識はほぼ無し。(卒論でFORTRAN77を触って面白いとは思ったが、現代で通用するような言語でも知識でもない)
    • Linuxなどもほぼ触ったことがない(cdしか分からないレベル。そもそもCUIで何かできない程度)
    • Excelで関数(非VBA)ごちゃごちゃやるぐらいなら・・・程度のリテラシー
    • 資格:応用情報処理技術者
      • 就活なども意識して取ってみた。応用情報まではほぼ無勉強でも国語の問題だと思えば取れる人も多いと思うので、価値は微妙。

1社目(独立系SIer時代)

いわゆる下請け会社ではあったが、一次案件もそこそこあったり、自社パッケージ売ってたり。
技術へのこだわりを掲げる会社だった。先輩社員たちにはレベルの高い人も多かったが、
外部イベントに積極参加したり、情報を発信しているような人はほぼいなかったように思う。

新人研修

新人研修は手厚くやるのをウリにしている会社だった。(自分もそこをアテこんで入社した)
基本的には毎日ひらすらプログラミングをしていた。
これとは別に、3週間に1日程度の間隔で「スポット講義」と呼ばれる講習を受けた。
内容はテストやツールの使い方、オブジェクト指向、ネットワーク、データベース、など

研修前半(~2013/05)

プログラミング言語C 第2版 ANSI規格準拠

プログラミング言語C 第2版 ANSI規格準拠

windowsでVirutalBox使ってCentの上でいきなりプログラミングスタート。
同期達もLinux&CUIに詳しい人は少なく、随分苦戦した。

K&R の進め方(主に4月)

  1. K&Rの指定された問題を解き、問題ごとにREDMINEでチケットを立てて進捗管理
  2. SVNにコミット
  3. 研修担当社員にコードレビューを受ける
  4. 合格が出れば次の問題に進む

社内オリジナル問題集の進め方(主に5月)

  1. REDMINEにチケットを立てる
  2. テストケースを作る & Astah Communityでフローチャート作る
  3. テストケース&フローチャートのレビューを受ける
  4. OKが出たらコード/テストコードを書く
  5. コードレビューを受ける
  6. 合格が出れば次の問題に進む

上記のレビューは全て口頭で行う(後でREDMINEに文書化して投げてくれる)
テストはGNU Makeで書く。

所感

C言語とデータ構造の基礎を学べたことはとても良かった。
特にK&Rではスタックとハッシュテーブルを実装する章があるが、そこは非常にためになった。(特にハッシュテーブル)
こういったものは現在の高級言語では予め用意されているので、利用するだけになってしまうが、
最小限の道具だけでアルゴリズムとデータ構造を学ぶのは、その後の知識の「ノビ」を左右する大事な土台になると思う。
ポインタを学ぶこととメモリ管理を学ぶことは、現在の高級言語でも確実に生きるはず。

K&Rがなぜ今でもバイブルとして取り上げられるのかを肌で感じた。
(ただし、K&Rは日本語版の訳が怪しいとか微妙な問題はいくつか抱えているし古臭いという批判もわかる。)

この時点ではLinuxの知識もviの知識もほとんど増えていなかった。
viはとりあえず編集は出来る、というだけで各種ショートカットは少ししかわからず。
コマンドもファイル移動やsvnのコマンド程度。
今となっては、せっかくやるならもう少し手厚く学べてもよかったのかも、と思う。

研修後半(~2013/09)

ただし、教科書は最初の1周間読むだけで後はリファレンスとして使う。
ここで、クラスと継承やインターフェイスなどのCにはない要素だけかいつまんで学び、
あとはもっぱら社内オリジナル問題集を説いていた。
進め方はCの時とほぼ同じ。テスト書く→レビュー→コード書く→レビュー

  • 副読本

EFFECTIVE JAVA 第2版 (The Java Series)

EFFECTIVE JAVA 第2版 (The Java Series)

増補改訂版Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門

「いきなりは難しいかもしれないけど、ある程度研修進んだ段階で読むといいよ~」と渡された本。
特にEffective Javaは研修終わってしばらくしてから読んで抜群に効いた。
これを読んでないJavaプログラマはモグリと呼んでいいとさえ思う。

研修内容

  • 6月はオリジナル問題集(CUI)
  • 7-8月はオリジナル問題集(Swingを使ったGUIプログラム)
  • 9月は課題を作って自分でWebアプリケーション作り(Servlet+JSPを生で使い、フレームワークは使わない)
    • 自分は食べログみたいに、飲食店を評価して☆をつけるシステムを作った。セキュリティ的に脆弱性はあった気もするがログイン機能もあった。

所感

オブジェクト指向入門期。
まだまだコードはこなれてなかったように思う。
わからないこと、多少問題に関係がなくても興味があったことはとにかくググりまくっていたのが良かった。
特に9月は自分で課題を設定して、好きに機能を作れたのでとても充実していた記憶があった。
Webアプリケーション(+MVCアーキテクチャ)は初体験だったが一気に知識が増えた。
また、それを許される程度の時間の余裕があったのも嬉しかった。
Java6は派手な機能もなく今となってはレガシーだがその分シンプルにオブジェクト指向言語を学ぶことが出来た部分もあったように思う。

自習学習

8月か9月にリーダブルコードを読んで世界が広がった。
レビューでは自分のコードのおかしいところを指摘されたが、その場その場の話題だけで終わってしまっていた。
それを体系的にまとめて提示してくれた本がこれ。
あらゆるIT会社の新人研修で配られるべきだとすら個人的には思っている。
特に、変数・メソッドの命名、メソッドの引数に何を渡すのがいいのか、そういったロジック周辺のことを考え始めるキッカケになった。

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)


この後、現場に配属されることになる。
~つづく。~

simezi9.hatenablog.com