seri::diary

プログラミングのこととかポエムとか

近況

仕事

  • 2月から自社サービスを運営している会社の1エンジニアとして派遣?みたいな感じで仕事をしている。
  • 相変わらずリモートしてるけど上述の派遣先の会社のオフィスで仕事したりもした。久しぶりのオフィス勤務めっちゃ集中できたし聞きたいこともすぐ聞けるし、自社サービスの場合で多忙期はオフィス勤務の方が効率良いと思った。
  • やっぱ自社サービスいいなと思った。週2回デプロイでガンガン開発回してくの楽しい。自分が作った新機能もいくつか本番デプロイされている。
  • あと平日にリアルで人と接するのが久しぶりで楽しかった。
  • 今後も毎日ではないがタイミングを見て出勤する予定。
  • 急成長中の会社で、かつちょうど自分が前職にjoinした時と同じぐらいの規模感で共通点が色々あって何となく懐かしさを感じる。

プライベート

  • 3月に所属してるマンドリンオケの年1回の演奏会終わって毎週の練習、毎月の集中練習がなくなり、音楽活動はしばらく暇になった。今後はクラギの独奏に専念する。
  • 新しいサービス作り始めた。5月連休中にはリリースしたいけどherokuの無料枠が減るという噂でサーバをどうするか考えてる。
  • 1年ぶりぐらいにslidesearch.jpに手を入れてrubyrailsのバージョン上げた。久しぶりに触ったらUIがひどかったのでこちらも手を入れたい。
  • 宇宙を目指して海を渡る読んだ。情熱をずっと保ち続けられることが何かを成し遂げる上では重要なのではないかと感じた。
  • ジョナサン・アイブの本読んだ。工業デザインにこれまで全く興味なかったけど本文の「まずストーリーを決めてからデザインを考える」という一節で興味を持つようになった。
  • Code complete読んでる。まだ上巻の15%ぐらい。ソフトウェアの手戻り修正コストがフェーズによって何十倍も差があることについて昔SIerの研修で習ったなと思い出した。
  • エリック・エヴァンスのドメイン駆動設計読んでる。まだ序章しか読んでない。なかなか読み終わらなそうなので地道に読む。
  • BOOK SCANで技術書を30冊ぐらいまとめて自炊したらkindle paper whiteだと文字が小さすぎて若干つらい。(読めなくはない)。PCでpdfで読むのは普通にアリ。字が大きめの本やマンガ向きのサービスのような気がする。

「志乃ちゃんは自分の名前が言えない」を読んだ

イケダハヤト氏のブログで紹介されていて気になっていた「志乃ちゃんは自分の名前が言えない」を読んだ。

www.ikedahayato.com

忘れてでもいない限り自分の名前は誰でも言えると思う。 だから大抵の人はこのマンガのタイトルを見て不思議に感じるのだと思う。

「大抵の人」はこのタイトルからどういうストーリーを感じるのだろうか。

「自分の本当の名前を知らない孤児の話?それとも何かの暗喩?」とかそんなもんだろうか。

自分がこのタイトルを見て最初に思ったのは「あー、あるよねー」みたいな感じ。

自分も「名前が言えない」タイプの人間である。

自分の名前を知らない訳ではない。親からもらった名前はスラスラ書ける。

webサービスでサインアップする時に入力できる。紙面やディスプレイ上の文字列を「自分の名前」として認識できる。

できないことを挙げるとするなら、「口頭」で「自分の名前」を「発音する」ことができない。

いつも、という訳ではなくたまに出来ない。だから美容室の予約とかするのに異常なほど緊張してしまう(ので最近はメールで予約している)。

ここまで書いても「なんのこっちゃい?」と思う人が大半だと思う。

いや、自分自身「なんのこっちゃい」と思っている。

吃音という言葉について

吃音」(きつおん)という言葉をどれだけの人が知っているのか知らないが、まぁそういう言葉がある。なお自分は大学生になってからwebで偶然見つけて初めて知った。

wikipediaによれば

発語時に言葉が連続して発せられたり、瞬間あるいは一時的に無音状態が続くなどの言葉が円滑に話せない疾病

なんだそうだ。で、自分もこれに該当する。

円滑に話せないというのも色々あって、

「おおおおおおおおおおおおにぎりが食べたいんだなななな」

みたいに無駄に連発してしまうケースと

「お、、、、、、、、お、、、、、お、、、、、」

となって何故か言おうとしていることが言えないパターンとか色々ある。

もっとリアルに書くと「あの、、、あの、、、、、、、あの、、、あ、、、あ、、、、、、」っていう感じになる。

自分の場合は後者の症状が出る。それまで流暢に会話してたのに突然発声できなくなる。

上手く表現できないのだが、話したい言葉は一語一句頭の中で完成しているのに、「何かが」発声を妨げている。そんな状態。なお、現代医学でも原因は詳しく分かってないそうなので、どうしてそうなるのかは分からない。

本作の内容について

吃音の説明が少し長くなったが、このマンガ、吃音持ちの人間からすると「異常なほどリアル」である。

リアルすぎて過去の数々のトラウマが蘇ってきて気分が悪くなるくらいリアルである(褒め言葉ですw)

吃音で辛いのはコミュニケーションが取れないことではない。 大抵、身振り手振りで何とかなるし、レストランで注文が出来ない時なんかはメニューを指さしてそれっぽい表情をすればよい。

辛いのは「自分が変に思われている」と思う点にある。

要するに、

普通の人は普通に口頭で会話ができる。 普通の人は友達とクソくっだらない雑談ができる。 普通の人は面白いことを思いついたらそれを話して友達を笑わせることができる。 普通の人は飲食店で注文ができる。 普通の人は居酒屋で注文ができる。 普通の人は道行く人に道を聞くことが出来る。

そういう「普通の人」ならできることができない、ということが「異常」であり「不自然なこと」だと周囲が感じる以上に本人自身が強く思っていて、それを気にしている。

これが吃音の本当の恐ろしい所であり、世間からあまり理解されない所である。

「周囲からそういう変な目をされた」と自身が思うことで、自分自身を傷つける。 それがどんどんトラウマになって性格も控えめになる、人と距離を置こうとしてしまう、結果ますます孤立する、という負のループにハマってしまいやすい。学校教育で「普通であること」が強く求められるこの国では、「普通の人と同じことが出来ない」ってのは思っている以上に人を追い込む要因なのかも知れない。

作中でも主人公は上記のような「負のループ」によって辛い目に遭う。

詳細は内容を読んでいただくとして、高校生だと辛いよな。女の子ならなおさらじゃないだろうか。「日常会話」の重要度が男のそれとは恐らく大分違うだろうし。

いや、男でも辛いか。少なくとも、本来対して人見知りでもないのに、同級生とまともに会話できないせいで無駄に距離を感じて親しくなれなくて自分は辛かったし、そのせいで高校時代は完全にグレちまって、小説をめちゃくちゃ読み始め(何故か夏目漱石が好きだった)、Medal of HonorCall of Duty(初代)等のFPSにのめり込み(思えば高校時代からFPSクランに入ってた)、アニメやギャルゲにまで手を出して完全に二次元にハマってしまい、現在の自分がある(完全に言い訳)

自分は18年もこの謎の症状と付き合ってきたので、もう最近はまともに発声できない可能性を分かった上で会話しているし、いざ「どもって」も「あーどもってるわー。まじつれーわ。まぁいいや。」ぐらいにしか思わない。今日もzoomで朝会やってて豪快に吃った気がするが、自分が伝えなければならないことはちゃんと伝えられたはずなので業務に問題はない。

とは言え、世の中の吃音持ちの人達の中にはかなり深刻に悩んでる人も結構いるらしく、「吃音」でググると「吃音対策サイト」みたいのが沢山出てくる。その中には「吃音でも就ける仕事リスト」みたいのもあって結構驚いた。吃音によって自分の仕事まで制限されてしまうケースもある、ということなのだろう。自分は幸い職業を制限される程ではない。そこまで喋りまくらなくても何とかなる仕事をしているから、という側面もあるかも知れない。

随分長々と書いてしまった。

自分も同じ経験があるだけについ自分のことを書きたくなってしまったのだが、この漫画自体は一巻完結で、気持ちのよい終わり方をする高校生の青春ストーリー的な構成になっていて、決して重々しい話ではない。重々しい気持ちになるのは自分のつらい経験と照らしあわせてしまうからかも知れない。

気分が落ち込む原因と対策

こういうのブログに書くのどうなんだろうなって思ったのですが、後から読み返した時に何らかの役に立つかも知れないし、別にさらしてもまぁ問題はないだろうということで書いてみます。

概要

  • ここ2ヶ月ぐらい(今年入ってから?)気分が非常に落ち込んで何もやる気がでない日が週に1日~2日ぐらいあってあらゆるモチベーションがなくなって困っている
  • よくよく考えると色々自分の生活に問題がありそうだったので改善するようにした
  • 油断すると簡単に再発しそうなので日頃から気をつけたい

気分が落ち込む原因と考えられる生活習慣と対策

1日中誰とも会話しない(改善済み)

  • 独身リモートワーク生活だからしょうがないとか言ってる場合じゃない
  • ハングアウトで必ず毎日誰かと話す。最近は幸いにも業務で毎日Mtgが入って沢山会話できるようになって楽しい
  • コンビニの店員とか郵便局の局員とかだれでもいいので無駄にフレンドリーに接してみるだけでも大分違う
  • リアルで人間と触れ合うのはすごく大事!人は1人では生きていけないのだ!

毎日同じ食事メニュー(改善済み)

  • 忙しいのと寒くて外に出るのが億劫になるとなりやすい
  • 朝・夜は仕方ないケースがあっても、昼はできるだけ毎日別のものを食べるように心がける
  • 昼食というイベントを用意して「毎日何がしかイベントがある」という状態を保つだけで日々に張りが出る
  • 前職でも忙しい時に毎日コンビニばかり行ってたら毎日同じような感じになって辛い気分になった記憶がある

1日中外に出ない(改善済み)

  • 忙しいのと寒くて外にでるのが(ry
  • コンビニでもなんでもいいから毎日外に出る
  • 時間がなければ近所を歩くだけでもする
  • とにかく外に出よう!

運動不足(WIP)

  • 川崎に住んでた頃はほぼ毎日ジョギングか散歩していたのを盛岡寒い&雪積もってる&仕事忙しいみたいな理由でサボってた
  • 実際雪積もっててあまり出歩きたくない気持ちが高い
  • 同僚に相談したら「ラジオ体操いいですよ」というので毎朝ラジオ体操始めたら非常に調子が良い

ぶっ続けで仕事してしまう(WIP)

  • つい仕事し過ぎて気が付くと23時とかよくあってそういう日が続くと段々疲れが溜まり続ける
  • 適当なところで休む、サボる。オフィスで働いていた時はおそらく1日30分は同僚と雑談していたが、それがなくなるとエンドレスで仕事しがち
  • 「早くやらなきゃ」という強迫観念を感じ始めたら「ちょっと待て、ホントに急ぐ必要あるのか?まったりやってもいいんじゃないか?他にやるべきことがあるんじゃないか?」と自問する

過去の失敗を振り返ってくよくよしない(WIP)

  • 「なんであんなことしたんだろう?」ってなるから

未来のことを考えて不安にならない(WIP)

  • 「大丈夫かな?アハ~ン」不安になるから
  • 今後どうやって生きようとか難しいことを考え過ぎない
  • 最近「自分はどういう風に死ねば満足なのだろうか」ということばかり考え過ぎて自分を追い詰めている

リードエンジニアを3ヶ月やって得た開発マネジメントに関する教訓

ここ3ヶ月ぐらい同じRails案件でリードエンジニアとして仕事をしています。 何気にマネジメント的なことをやるのが初めてだったので色々と戸惑うことがありましたが、だいぶ慣れてきて知見が溜まってきたので、自分のしごとの振り返りも兼ねてまとめておきます。

リードエンジニアのお仕事とは

会社やチームによって全くと言っていいぐらい異なると思いますが、私の場合は以下の様なことをしてきました。

開発スタート時

要件確認

  • 仕様書を読んで全体像やどこから着手するかなどを考える

Railsアプリのベース部分の実装

  • rails new
  • DB周りの設定
  • 初期モデルクラスをDB定義に基づいて作成
  • factoryも使いそうなものについてのみ作成
  • rspecrails_config等諸々の設定
  • ローカル環境動作用のseedsを整備
  • 使いたいGemを追加
  • 共通で使うCoffeeScriptのライブラリを思いつく限り実装
  • CoffeeScriptの実装方針が人によってブレるとイヤだったので早い段階でサンプルになるような実装を入れた

情報共有

  • 開発環境構築に必要な情報をgithubwikiやREADME.mdに記載
  • 連携する外部APIなどを事前に検証し、問題がある場合は関係者に確認して解決して対応方法をwikiに記載

開発中

コア機能の実装

  • ひと通りのControllerとviewを実装してひと通り画面が動くように。細かい調整は個別にissue立ててメンバーに割り振り
  • 要件がふわっとしててクライアントに確認が必要な機能や重たい機能の実装

issue量産

  • 各機能ごとに親issueを切り、それに紐づく子issueを作って管理した。

例: 「A機能」が親issueで「Aデータ登録」「Aデータ編集及び削除」「Aデータ一覧」「Aデータ詳細画面」「AデータValidation」が子issueといった具合

その時description内で #100みたいに親issueのIDを参照させておくと、親issueの一覧に子issueのリストが表示される格好になるので進捗管理に便利である。

  • タスクはなるべく親機能ごとに割り振ったがデッドロックになってしまう所もあってやりながら調整した。

他のメンバーのレビュー

  • Railsのレベルはバラバラだったので、Rails経験が浅いメンバーには「何故こうしないといけないのか?」と細かく説明するコメントをつけるよう心がけた
  • 要件自体があまりしっかり決まっていなかったので、かならずローカル環境で動作させて、動作自体に違和感がないかまで含めてチェックした
  • specが落ちていたらまずspecが通るように直してもらってからレビューした
  • Turbolinksの動作原理を理解していないメンバーが数人いたようなので参考資料を読んでもらうよう頼んだりもした

クライアントとのコミュニケーション

  • 要件で不明確な部分の質問
  • 工数的に厳しい場合の代替案の提案
  • 問い合わせ対応

インフラ作業

  • サーバに入れるのが自分だけだったので追加でimageMagickをインストールしないといけないとか、ステージング環境のログを見るとかは全部自分でやっていた

得た教訓

開発方針を統一できるように最初の段階でサンプルになるような完璧な画面を作ってしまうべき

specをどの程度の粒度で書くか、とかConcernに何を載せるか、といった「決め事」が統一出来ずに開発後半では画面によって大分差が出てしまった。

大体のメンバーは自分が実装した所を手本に進めてくれていたが、それも完璧ではなかったので(例えばValidationは後で実装する、とか書いてたらそれまで真似してvalidation処理抜けの画面が量産されて死ねた)、やはり最初に完璧な手本となる画面を実装してしまうべきだった。

特にRailsだと、この機能はControllerにベタ書きか、それともconcernに切り出すか、みたいな判断基準が人によってかなり差がある。

放っておくとfat controllerになったり機能が重複しまくってたりということがいとも簡単に起きて後で泣きを見る羽目になるので、なるべくそういう事故を防ぐためにも最初にサンプルとなる実装をリーダークラスの人間が実装してしまうべきだと考える。

issueを細かく切りすぎず、ある程度大きいまとまりでどばっと渡してしまうべき

これは完全に失敗だったなと思ったのだが、とある機能の画面で以下のようにissueを分けて、それぞれ別の担当者に振ったことがある

  • A入力画面の細々した修正
  • A入力確認画面の細々した修正
  • A入力プレビュー画面の細々した修正
  • A入力最終確認画面の細々した修正
  • A登録画面の細々した修正

そしたら本来共通で実装すべきユーティリティ系のクラスをそれぞれが別々に実装したり、前後の画面で辻褄が合わなくなって自分が全部調整する羽目になったりと、あとで整合性を取るのに凄く労力を要してしまった。

他にあまりタスクが無い時期だったのと、ベースとなる部分は全て自分が実装し終わっていたので大丈夫かと思っていたが、完全に判断ミスだった。

画面の前後でちょっとずつ実装スタイルが違うよりはA機能全体で統一性が取れていた方がレビューもラクだしコードの変な重複が発生する可能性も低い。

実際、開発後半はある程度デカい機能をまるっと投げて、PRのdescriptionでtaskをチェックボックス付きリストにしてもらってそれを一個ずつ消化してもらうスタイルに変えた。上記の例で言えば「A機能の登録・編集・削除全部」みたいな粒度である。そしたら開発効率も品質もかなり上がったように思う。

開発の進め方は最初にきちんとルール化しておくべき

PR駆動の開発の仕方が理解できていないメンバーがいたりして、まぁそんな初歩的なことを教えるのも失礼だし、慣れれば勝手に他の人に合わせてくれるだろと思ったら、数週間経っても全くPRも作らないしcommitも適当だしみたいなスタイルで開発を進め始めたメンバーがいた。

さすがに一人だけ足並みそろえていないのはまずいので、口酸っぱく「作業が終わったらPRを出してください」とか「commitはもっと細かく入れてください」とか「間違ったcommitが入っていないかチェックしてからPRを出してください」とか言い続けて改善してもらったのだが、これが普段の業務において意外なほど大変だった。

少しイライラもしていたのだが、見かねたマネージャーに「長年やってきた人のスタイルはそう簡単に変わりません」と窘められることもあった。確かにその通りだし、自分もたまたまPR駆動で開発するのに慣れているから出来ているだけということもあるだろう。

そんな訳で、今後は開発スタート時にその辺の教育コストを削減できるように、Githubの使い方やらPR駆動のスタイルなどをまとめたドキュメントを作っておいて、それを最初に参照してもらった上でスタートできるようにしようとしている。

具体的には以下のような感じでまとめていく予定である。

丁寧にレビューすれば人は育つ(と思った)ので時間かけてでも丁寧にレビューすべき

何度もレビューの指摘→修正のやり取りをしないといけないケースもあって、そういう時はさすがに「もうめんどいから俺で巻き取るか」といった感情が芽生えてきやすい。この案件もそういう時が何度もあった。

でも、それをやって自分一人で全部巻き取っていたら開発はスケールしないし、費用対効果も悪い。なのでなるべく「一度指摘したことは2回目以降はちゃんとやってもらいたい」と思い、レビュー時に指摘する時も

「これだとXXのケースで動かないので○○としてください」

だけで終わるのではなく、

「これだとXXのケースで動かないので○○としてください。なぜなら△△で□□でほげほげで。。」

みたいな感じで、なるべく理由もセットで指摘するようにした。

そうすれば似たような場面でも応用効かせてくれるかという期待を込めていたのだが、実際一ヶ月も一緒に開発していると段々と効果が現れたのか、同じ指摘は段々と2回しなくても勝手にちゃんとやってくれていたりというケースが増えてきた。

もちろん変わらない人もいたが、一部のメンバーはちゃんと一度指摘したことを守ってくれるようになったので、レビューする側としてはかなり楽になってきた。

ただ、これらの指摘事項は当然自分自身が実践するべきで、多少めんどくさいからと自分が手を抜いていたら「アイツ他人には厳しくて自分は甘えてんじゃん」ということで効果は半減していたように思う。そういうこともあって、なるべく他人に厳しくする分自分のコードにも厳しい目で実装してきたつもりだが、これは自分自身のトレーニングにもなって良かったと思う。

レビューばかりすると自分の担当分が進まない

PRでレビューを依頼されるとすぐに対応して次のタスクを振りたくなるものだが(少なくとも私は)、レビューばかりしていて本業が進まない、という典型的なパターンに自分もハマりかけた。

これに対する解決策としては以下の様なことで対応してきた

  1. すぐにレビューしなくてもやることがすぐ枯渇しないように常に大量にタスクを積んでおく
  2. 本当にすぐ見ないといけないレビューでなければ後に回す
  3. 自分の1日の作業時間においてレビューに割く時間と作業に割く時間を決めておき、それを守る

一番のリスクは「自分がレビューしないことでそのメンバーのタスクが進まない」というロック状態を作り出してしまうことだが、それを回避する方法としては1が意外と有効だった。

レビューする時間を短縮するというのは品質に関わるので避けた方がよく、どちらかと言えば期限を決めてタスクをどかどかと積んで「上から順番にやっていって~」という風に任せてしまった方がラクだと感じた。

この方法を行うリスクとしては、知らないうちに進捗が悪くなっているとか、間違った設計で実装を進めてしまっているということがあるが、なるべくはやくWIP PRを出してもらうことで大体解決していた。

若者と転職

このエントリーはしょぼちむ Advent Calendar 2014 の21日目の記事です。
前日は @fukai_yasu さんの記事でした(まだ未登録?)。その前は@setoazusaさんのしょぼちむにテストファーストについて説明してみるでした。

しょぼちむご本人とは東京で働いていた頃に3回ぐらいプライベートでお酒の席でご一緒させて頂いたぐらい?の関わりでしょうか。何となくjava一派ということで仲良くさせて頂いていました。

お酒の席ではしょぼちむ氏に「いつ辞めるの?」と転職を持ちかけるネタでいじるのが一部界隈では定番なようなので、「若者と転職」というタイトルで駄文を書かせて頂きます。
しょぼちむ氏の参考になれば幸いです。

概要

私は2014年12月現在で28歳になります。
23歳で社会人になったので社会人としては丸5年半やってきたことになりますが、この5年半で3回転職をしています。
平均すれば1つの会社に1年と10ヶ月弱しか勤めていません。
人によっては「だから今どきの若者は…」と眉をひそめられそうな数字ではありますが、それぞれの転職には私なりの考えがあってのことだったりするので、その辺の考えについて説明しつつ、自分の転職感について述べたいと思います。

自分のこれまで

私の社歴をざっくり説明すると以下のようになります。

  • 2009年4月〜2011年11月 某SIerでSE
  • 2011年12月〜2012年12月 某制作会社でエンジニア兼SEのような何でも屋
  • 2012年12月〜2014年6月 某自社サービス会社で自社サービスの開発エンジニア
  • 2014年7月〜 ハートレイルズwebサービス受託開発エンジニア

過去3回の転職の経緯についてはそれぞれ退職or入社エントリーを書いてるのでそちらを参照ください。

それぞれの会社で働いて得られたものをまとめてみると以下のようになります。

SIer

  • 社会人としての基礎スキル(特に電話の取り方からタクシーの乗り方までビジネスマナーについて細かく叩きこまれたのは後々役に立った)
  • IT全般の広く浅い知識
  • 分かりやすいドキュメントと分かりにくいドキュメントの違い
  • 伝統的な日本企業ってこういうものなのかという知見
  • SI業界の現状と課題
  • Oracleを触る貴重な経験

某製作会社

  • 社員5人の会社で働く経験
  • 「自分1人しかエンジニアがいない」という後がない状況での開発をしたことによる精神的な耐性
  • PHPで何でも作る経験(画面からバッチまで)
  • 謎設計の自社フレームワークに泣く経験
  • 前任者が書いたクソコードと戦う力
  • クソコードからドキュメントを起こして正しい仕様を整理しなおしてバグを直してリファクタリングする経験
  • レコメンドエンジンの知識(代理店販売してたので導入サポートをしていた)
  • Objective-Cを1ヶ月で勉強して初めて作って納品したiphoneアプリがいきなり有料アプリとして販売されるというロックな経験
  • 要件定義〜見積もり〜設計〜開発〜テスト〜納品までを全部一人でやるという全フェーズの経験
  • アメリカ人との英語でのメールコミュニケーション(代理店販売しているパッケージ仕様の問い合わせを英語でやってた)

某自社サービス会社

  • 「システムを作ること == お金になる」が成り立たない世界でのエンジニアの会社への貢献
  • 公開中のサービスを◯◯時間バグらせて放置すると☓☓万円の損害になるというお金の考え方
  • ざっくりとした仕様から自分で必要な機能を考えて作る経験
  • すさまじい無茶ぶりにどうにかこうにか頭を捻って形にしてリリースする経験
  • 営業、マーケティング、運用サポート、経理といったエンジニア以外の色んな職種の人の役割、コミュニケーションの取り方
  • 毎月中途採用社員が10人ずつ入ってくる急成長する企業で働くという経験
  • java
  • struts2
  • spring
  • SAStruts
  • dbflute
  • aws
  • fluentd
  • mongodb
  • solr
  • elasticsearch
  • kibana
  • チケット駆動開発の経験
  • gitでやらかした時にどうにかするスキル
  • コードレビューをする、されるという経験
  • 開発現場から離れた技術サポートの仕事の経験
  • 社内外向けの勉強会を会社のオフィス使って開催してアウトプットする経験
  • 40人が参加する開発合宿を企画運営する経験

3回転職をしてみて思ったこと

最初のSIerについては面白くなくて飛び出した感が強いのも正直な所なのですが、振り返ってみればこれまで務めてきた会社で学びがなかったものは一社もなく、それぞれの企業で自分が出来ることを増やした上で転職してきたのだなと今にして思います。

転職する目的というのは人によって沢山あると思いますが、何にせよ「プラス思考の目的」が無いと上手くいかないのではないかと思っています。

給料が安い、仕事が面白くない、人間関係が悪い、といったマイナス思考の目的だけで飛び出しても、また次の会社で同じトラブルがあった時に対処する術を身につけていないのでまた辞めるしかありません。 Team Geek にも書いてありますが、組織というのは組織の問題を解決してくれる人を求めている訳で、自分が課題だと感じたことにどうアプローチしてきたかという実績が無いと企業から見て魅力的な人材にはなれません。

それは本人にとっても会社にとっても不幸だと思うので、自分は必ずプラス思考の目的が無ければ転職はしませんでした。
プラス思考の目的があれば、直面した課題を上手く解決するモチベーションが湧くか、プラス要素で相殺して我慢できます。 (自分は我慢できないタイプなので大抵課題には口を出してしまうのですが…)

最初のSIerには2年半いて、最初の1年目にして「仕事が面白くない…つらい…」とずっとぼやいていましたが、自分がやりたいこと、目指したいことがはっきりするまで辞めませんでした。 それは前述したように、マイナス思考の目的だけで飛び出しても問題は解決しないし、なんかカッコ悪いと感じたからです。(なお、当時見つけた「やりたいこと」は自分でインフラの面倒もコードも書けるようになってwebサービスを作ることでした)

転職するという行為自体について考えれば、文字通り職場を変えることになるので基本的にリスクが大きいわけです。何度その会社の社員と面接をしても、その会社の空気や思想というのは入社して働いてみないと分かりません。

だから、自分が実現したいことがはっきりとしていて、その会社に転職すれば自分にとってプラスになる、と思えるのであれば積極的に転職すれば良いのではないでしょうか、というのが自分の考えです。

逆に、そういうのが見えなければ転職すべきではなく、するべきは自分が感じている課題を解決することだったり、自分のキャリアを考えることだと思います。

課題を解決するために

いくつか方法があるかと思いますが、自分にとって良かったと思えた方法が、他社の人にその人の会社の状況について聞いてみることです。 隣の芝は青いと言いますが、自分が抱えている問題が自分の組織だけの問題なのか、はたまた他も同じような課題があるのかという判断は社外の人と話さないと区別がつきません。

エンジニアの場合、大抵twitterFacebookやっているので、面識がない人でもコンタクトを取るのはさほど難しくありません。(実際、一度も会ったこと無いのにいきなりDM送って飲みに行って仲良くなったエンジニアが何人かいますw)勉強会の懇親会とかでも良いと思います。

あとは転職エージェントにコンタクトを取ってキャリアについて相談してみるのも良いと思います。自分も2回目の転職は転職エージェントに相談した上で紹介してもらっています。

対象は誰であれ、自分一人で抱えていても仕方がないのでなるべく普段接していない人との接触が重要かと思います。内輪だと大抵愚痴大会になってしまうのでw

自分のこれから

どんだけ年を取っても、自分が手を動かす、あるいは常に動かすことができるエンジニアとしてのスキルと知識を保ち、それらをコアにビジネスにコミットしていける人間でありたいと考えています。

今は自分が持っているスキルを「お客様の事業を行うためのwebサービスの受託開発」という形で発揮し、お客様の様々な事業に関わりながらwebサービスでどういう価値を社会に提供出来るのか、ということについて勉強している最中です。

とにかく案件の数をこなして、

  • それを自分がどれくらいのスピードとクオリティで開発できるのか
  • どう開発したら上手くプロジェクトが回せるのか
  • チームの生産性を上げるにはどうすればいいのか
  • どうやってメンバーのスキルを上げていくのか

ということについての方法を学びたいと考えています。

自分が目指すポジション

ここ5年以内に目指すキャリアパスとしてはエンジニアのマネージャーとしてのポジションを目指しています。プロダクト開発をリードする立場というよりは、チーム内のメンバーのマネジメントをするポジション、のようなイメージです(伊藤直也さん的な?)

ビジネスより技術が好き!でスタートしたこのキャリアですが、結局ソフトウェアは人が開発するものであって、どんな開発現場でも人の問題が絡んできます。社員のほとんどがエンジニアという現職でも人の問題は起きるし、これまでの経験においても人の問題でプロジェクトが上手くいかなかったりしました。

そういう時に、エンジニア間で起きる問題を上手く解決し、適切にリスクを考慮して意思決定をしてくれた人が前職には数名いたのですが、彼らのような振る舞いはどんな開発チームにいっても必要になる振る舞いで、またそれが出来る人が非常に少ないと感じています。 大体エンジニアは自分含めて変な人が多いですし、そういう人の気持ちを理解できる立場でありつつ、上手くまとめて開発をワークさせる仕事はビジネス的に価値があると感じているし、何よりそういう人に自分が憧れました。

そういうポジションで働くことが出来るのが今の会社なのか、はたまた別の会社になるのか分かりませんが、その時はその時で自分にとって最善の選択をしたいと思います。

自分がなりたい自分になるために

これまでの自分の転職の目的は、どれも「自分がチャレンジしたいことをするため」という感じでしたが、それが実現できたのも自分がそれぞれの企業でスキルを磨いてきたからだと思っています。 なんだかんだでエンジニアはスキルが重要なので、やりたいことをやろうと思ったら常に自分を成長させ続ける必要があると考えています。

@kwappa さんの「The Art of Job Hopping」というスライドにも以下のように書かれています。

I'm happy because I could escape
I could escape because trained day by day

日々努力を怠らず、これからも一人のエンジニアとして自分を鍛錬し続けたいと思います。

2014年総括

mixiやってた頃から毎年こんなのを書いてる気がするので今年も書いてみます。

今年初めて出来たこと

  • ガロリアマンドリンオーケストラに所属し東京での音楽活動が出来た
  • マンドリン合奏コンクールに出た。コンクールというものに出たのは21年前に出たピティナ以来なので初体験ということにしておく。
  • ガチのハッカーがビズリーチにjoinして一緒に仕事した
  • 自分のキャリアの中で初めて事業に直接関与しない部署に所属し後方支援の仕事をした(2014/1〜2014/6)
  • 社内勉強会で毎週LTするのを3ヶ月続けた
  • 新卒に3日でjs + jquery教えるという無謀なことをしたら案の定「早過ぎる」という苦情を新卒から受けて涙目になる
  • fluentd + elasticsearch + kibanaを現場に導入してSlow query駆逐に貢献した
  • Swiftを触った(βの頃)
  • リモートワーク始めて自宅引篭り属性が付与された

職場

  • Rubyを学んだ
  • CoffeeScriptを学んだ
  • Railsを学んだ
  • 仕事でRailsを使ってアプリをこしらえた
  • GithubでPR駆動開発をした
  • RubyMineのキーバインドが使い物にならないのでこの後めちゃくちゃカスタマイズした
  • Kotolin勉強会でメガネが似合う某Kotolinアイドルとのじゃんけんに勝利しInteliJ IDEA Ultimateのライセンスをタダでもらった
  • 男友達とだけで箱根旅行した

ふね

  • 練習のためだけにクソgemを書いたが封印した

今年やろうとしたができなかったこと

  • 前職で社内の技術支援の仕事をしていながらほとんど成果を出せなかった
  • OSS活動するぜとかgem作るぜとか言ってたが何一つ公開できなかった
  • 2014年中に新しいwebサービスを公開しようとしたが何一つ公開できなかった
  • Swiftiphoneアプリ活動再開するぜとか言ってたが何一つやらなかった
  • Kotolin書かなかった(しょぼちむさんたろうさんイケメンさんごめんなさいごめんなさい)
  • アマチュアギターコンクールに挑戦しようとしたが時間的に余裕が無く参加できなかった
  • クラシックギターの独奏レパートリーを常に10曲ぐらいにしようとしたが1曲も増えなかった
  • クロスバイクで多摩サイ爆走しようとしたがあまり乗れなかった
  • 今年入ってから体重70キロを超えていたことに危機感を覚えて60キロ台に戻そうとしたができなかった

今年の反省点

  • 悪い意味で内向的になり過ぎて自分の力だけで成果を出そうとして失敗した局面が多かった
  • プライベートで色々やろうとしすぎて中途半端になってプログラミング活動と音楽活動の両立に失敗した
  • ブログあまり書けなかった(その分Qiitaは結構書いた)
  • 勉強会でほとんど発表できなかった
  • 自分の気持ちを落ち着ける時間を蔑ろにしていつも予定を詰め込んでいたせいか心が不安定な時が多く周囲に迷惑をかけた
  • プライベートの時間をダラダラ過ごしすぎてしまいプライベート活動に割ける時間が少なかった
  • リモートワークで働き過ぎて常に今年10月以降は日常的に疲労感が抜けなくなっていた
  • 赤城さんとケッコンカッコカリできなかった
  • 食生活悪すぎて大して食べてないのに体重増えすぎた

来年の展望

  • 自分がやりたいことを実現するために自分の力だけで実現しようとするのではなく周りをきちんと巻き込む
  • プライベートの時間を有効活用することを心がけ、ダラダラニコ動観たりして時間つぶさない
  • 何に集中するかを選択して「今やるべきではない」と判断した活動は一切しない
  • ヴァイオリン始める
  • 1日1日を大事に生きる。気がつけば20代最後の年なのでもはや人生は残り僅か。
  • 今時のフロントエンドjsを真面目に学ぶ。まずはAngularjsとgulp入門する(今更感すごい)
  • 仕事でのDeveloperProductivity向上のために積極的にできることをする
  • 勉強会LTしないなら出ない、出るならLTする
  • クラシックギターのソロ曲のレパートリーでネタ曲5曲、ガチ曲5曲の計10曲用意できるようにする
  • アマチュアギターコンクール2015のテープ審査に応募する
  • gemリリースするぞ!
  • Qiitaだけでなくブログを毎週書いてなんでもいいからアウトプットし続ける
  • 赤城さんとケッコンカッコカリする
  • 青葉ともケッコンカッコカリする

盛岡に引っ越して一ヶ月が経った

一ヶ月が経ったらブログに所感を書こうと思っていたんですが、思いの外書くことがなくて困りましたが、とりあえず生存報告も兼ねて書いてみます。

寒い

「盛岡とは言え10月ならまだそこまで寒かないし東京圏から引っ越してもそこまで気温差ないだろう」と思ったら引越した初日に台風に直撃されたこともありめちゃくちゃ寒く、翌週から普段着てるものにプラス1枚着る生活に。盛岡先輩パネェっす。
最近も日々寒くなりつつ有りますが、まだファンヒーターを出さずとも重ね着で何とかしのいでおるレベルであります。

普段の生活は殆んど変わらない

自宅で仕事してるので当たり前ですがw
食事はだいたい自炊、たまに外食。週に1回仕事後にマンドリンオケの練習。そんな感じです。

2つの勉強会に参加しました。

「IWDD」

エンジニア・デザイナー向けの毎月開催されている勉強会で、次回で97回目を迎える歴史の長い勉強会です。

参加者は盛岡市内or近郊?で働くフリーランスのエンジニア・デザイナの方が中心のようでした。

自分は前回の第96回に参加して、簡単な自己紹介のLTのようなもの+岩手県内のエンジニアコミュニティ事情の情報交換をさせて頂きました。

このブログでも書きましたが、岩手でrubyのコミュニティが無いようだったのでiwate.rbみたいなのを開催したいという野望があったので、今時点での需要調査みたいなものも兼ねてやってみたんですが、

  • 岩手県内の勉強会は参加者が少ない
  • そのため大体どの勉強会に行っても同じ顔と会うw
  • iwate.rbも昔あったけど参加者が少なかった
  • なのでIWDDでまとめてやるのが早いのでは?

…というような感じだったので、とりあえず次回のIWDDで一枠もらって、私がrubyについて何か語って反応を見てみる予定です。

私もruby歴というかrails歴半年とかそういうレベルなので、とりあえず今まで自分が勉強してきたことのまとめ的な「rubyのここに惚れた」みたいな、渋谷javaでも話したようなネタをまたやってみたいと思いますw (そういえば1年半ぐらいのスパンで仕事で使うメインの言語変わってるんですね私)

「いわてTitanium勉強会」

Titaniumのハンズオン+フリートークという構成の勉強会で、今年から始まった新しい勉強会のようです。

こちらの勉強会は参加者の年齢層が非常に若く、今年で28の私が最年長という、何とも若々しいコミュニティで、岩手県立大学の現役の学生、或いは卒業生が中心(というかみんなw)でした。

開催しているのは盛岡市内のベンチャーである株式会社チイキットのメンバーで、先日こちらの会社の @isseniumさんと呑んだ時に教えてもらい参加しました。

スマフォアプリはネイティブでiphoneアプリandroidアプリの両方をちょろっとやったことある程度で、Titaniumは環境構築でハマって挫折した経験しかない私でしたが、流石にハンズオンということもあり変なトラブルにハマることなく定番のTodoアプリの実装を通してTitaniumのAlloyフレームワークの使い方を知る、という内容でした。

初めてTitanium触ってみましたがviewをHTML + CSSライクに書けるのは直感的というか学習コスト低くて良さそうですね。
ただTitanium Studioの最新版が少し不安定なのと重たい(Ecipseベースだから?)ので、みんなどうしてるんかなと思ったらTitanium Studioは使わないで好きなエディタで書いてコンパイルはTitaniumのCLIツールでやる人が多いんだとか。
jsではなくCoffeScriptでロジックを実装する場合もCLIツールでビルドという流れのようなので、gruntでビルドするような場合とかも考えるとエディタとしてTitanium Studio使わない方が自由度高くて良いのかも、という気がしました。

今後について

まだ盛岡でノマドしてないので今月はどこかでやろうかなと。

先月は固定回線の開通が引越し日の4日後とかになってしまったので、それまでテザリングでしのいでいたせいで月初にLTEの7GB制限ギリギリになってしまいとてもノマド出来る状態ではありませんでしたw

11月になって晴れて堂々とテザリング使えるようになったので、仕事に余裕がある時はどこか行ってノマドしようと思います。盛岡市内はタダでWi-fi使える所は少ないのですが、とりあえず王道のスタバで気分転換兼ねてやってみようかなと思います。