2017年を振り返ってみる。GitHubベースの振り返りは別記事にまとめた。
主な出来事
転職した
人生で初めて転職した。
新卒から6年勤めていた精密機器メーカー子会社の所謂SIerからクラウド会計・人事労務ソフトのWeb系ベンチャーに転職した。
2016年に30歳を迎えたのだが30代をどうやって生きるか考えたとき、平日の大半の時間を占める就業時間中にもっとコードを書くことを選択したかった。
前職最後の仕事がC#
のデスクトップアプリ開発だった縁で現在の会社に拾っていただくことができた。
ポジションとしてはデスクトップアプリエンジニアなのだが、クラウド側のAPI部分についても開発に携わらせてもらっている。入社月に二桁万円無駄にする大失敗とかやったりした…
Railsのコードも書いたり、WindowsストアにDesktop Bridgeアプリを公開したり、Xamarin.Mac
によるデスクトップアプリの開発もすることができた。
ただ、求められているパフォーマンスは全然出せなかった。これに関しては完全に自分のスキルに自惚れがあって、ドメイン知識を利用した既存実装の拡張、あるいはシステムコールなどのコアな知識を要求されたとき、
あまりに役立たずだった。このあたりは新しいことに挑戦するたびに同じ状況になる。なので、「その知識を習得する」などの解決方法も必要なのだが、「最適解を求めるためのアプローチ」や「単純なコーディング速度の向上(によってトライアンドエラー回数を増やす)」という改善も必要になのかなと思っている。
OSS活動をちゃんとやり始めた。
https://www.nuget.org/packages/budougumi0617.Testable
エンジニアとしてのPublicな活動を増やしていきたいと思い、OSSライブラリを作った。
来年はGoのOSSをいくつか公開したい。今業務ではGoを書けていないので、もっと自分でGoを書く時間を増やしたい。写経だとどうしても「ハマり」に遭遇したり、「設計」の経験値を貯められない。
https://github.com/golang/dep/pull/1281
また、タイポ修正くらいしか出来ていないのだが、OSSにもプルリクを送り始めた。golang
以下のリポジトリにマージされたのはかなり嬉しかった。
来年はちゃんとコードの修正でプルリク作りたい。
ブログを書き始めた
もともとTipsはQiitaに投稿していたが、6月からは自分のブログに投稿することにして、このブログを作った(コミット量稼ぎも兼ねている)
18記事なので、一月平均3記事程度だろうか。まだまだ全然少ない。「来年について」に後述するが、ここはもっとアウトプットを増やしていきたい。
オンライン勉強会(AOSN読書会)に参加し始めた
前職のつながりでAOSN読書会という週一開催のオンライン勉強会に参加し始めた。 読書会では、「プログラミングElixir」、「人月の神話」、「現場で役立つシステム設計の原則」を読んでいる。 読書会に参加することで独りで読書するときと違い以下のメリットを得ている。
- 同じ練習問題に対する異なる実装パターンを解説付きで知ることができる。
- 職種・職場が異なるメンバーと言語や技術についてディスカッションできる
- 自分はあまり勉強癖がないので、強制的な勉強する時間を作りたかった
今年から初めてスクリプト言語や関数型言語プログラミングに挑戦しているので、他の人に教えてもらいながらElixirの勉強が出来るのは心強い。
その他のプライベート
- 日記を書くようになった
- 手帳を買って日記を手書きするようになった。まとめて書くこともあるが一応続いている。今年はかなり結婚式があっていろいろ手書きするようもあったがこれで助かった気もする。
- さすがに30代になってどんぶり勘定はまずいかなと思って家計簿つけ始めた
- 某MFを使っている。スタバカードなんかも連携できるので良い。会計ソフトの会社に入って銀行のログイン情報とかをクラウドサービスに入力する抵抗感が薄れたのもある。もっと早くやればよかった
- 投資信託を始めた
- 素人はインデックスファンド一択で良いのかなと思った。毎月決算型で毎月おこづかい!と思ったらそれがかなり足を引っ張った。
- ちょっとした賭け事ってレベルで5,000円分くらい仮想通貨もしてみた
- 心臓に悪い。夏くらいにビットコイン買ってすぐ放流した。たらればを言うと放流しなければ今3倍くらいになってるから恐ろしい。ボロ儲けはしていないけど損はしていないから運が良かった。
- 冬山登山(キャンプ)に初挑戦した
- 3月初旬に霞沢岳(2,546m)に登った。25mロープで直滑降したり、12本爪アイゼンとピッケルで雪壁登ったり、本当に辛かった。指先が凍傷になって4月はずっとキーボードの感触が無かった。降りた直後は酸素濃度が充分なだけでエンドルフィン出ていた。でもこの経験があったから今年はがんばれた(これ以上辛いことは当然ない)。
- ボルダリング部に入部してボルダリングシューズ買った
- 前からちょくちょくやっていたが、新しい会社にボルダリング部があったので毎週通っている。しっかり運動になっているし、課題クリアで一定の成功体験を定期的に得られるのも良い。
- 大学時代の友人との月例の集まりに顔をだすようになった。
- 月イチで新宿で遊んでいる。転職して人間関係が新しくなったのあり、学生時代の友人関係の大事さを改めて感じている。(と思っていた矢先年末の旅行ドタキャンしてしまって今年一番凹んでいる)
今年触った技術
Ruby + Ruby On Rails
自分にとっての初めてのスクリプト言語というかWebアプリ開発。言語知識もドメイン知識がないので、ひたすらbinding.pry
頼りだった。フロントエンドはまだ全然わかっていない。REPLからのアプローチに馴染みがなかったので、もうちょっとこの辺理解していきたい。
自分で書いた関連記事
.NET Standard
https://docs.microsoft.com/ja-jp/dotnet/standard/net-standard
今までなんとなく触っていたが、.NET
の規格の違いを学び、上述したOSSは実際に.NET1.6
で実装してみた。リフレクション周りなどはサポートが遅いらしいので、.NET1.3
では実装が難しかった。
.NET2.0
になるとマルチプラットフォームでSystem.IO
系のクラスもほぼフルサポートになっていたりかなりの汎用性になっている。.NET Core
などで錯綜していたときもあったみたいだけど、これで落ち着くのかな?ちなみに.NET API ブラウザーを使うとどのメソッドがサポートされているかわかる。
自分で書いた関連記事
デスクトップブリッジ
https://docs.microsoft.com/ja-jp/windows/uwp/porting/desktop-to-uwp-root
WPFアプリをUWPアプリにしてWindowsストアに公開した。Windowsストアに公開できるUWPアプリはアプリ外に副作用を起こさないことをかなり厳密に要求されるため、 既存アプリの変換にはだいぶ苦労した。Windows10Sでのテストが審査フローに入った瞬間審査に落ちるようになってかなり焦ったこともあったが、なんとか公開できた。 アプリの実装といいうより、審査に必要な情報や、Windowsのセキュリティについての知識が身についた。
Xamarin.Mac
https://developer.xamarin.com/guides/mac/
WPFアプリを流用してMacのデスクトップアプリを作った。使い慣れた言語と既存実装の流用で別プラットフォームに移植できるのはやはり強い。Storyboardも初めてちゃんと使った。
WindowsとMacのOS仕様の違いによるXML署名の差分実装をする必要があったのだが、自分では解決することができなかった。コア技術部分にmono
のバグがあって頓挫しそうなことがあったが、チームメンバーに強引に解決してもらった。monoを4.8から5.2にしたら動くようになった機能もあった。 チームとしては解決できたのだが、このへんの課題を自分で解決できなかったことに自分のスキル不足を痛感した。
Xamarin.Mac
はまだあまり事例などが少なかったり、mono
フレームワークのバージョンが上がるまでWindows上で実行したときと結果が異なったりという苦労もあったが、
転職早々非常にアグレッシブなテーマにアサインしてもらうことが出来て非常に良い経験になった。
自分で書いた関連記事
- Xamarin.Macプロジェクトのオプションにある「追加のmmp引数」に指定できる値
- Xmarin.Macアプリでネイティブメソッドの動的ロードを含むビルドを行う
- [Xamarin.Mac]NStextFieldにテキストが入力されるたびに変更を検出する
vim-go
https://github.com/fatih/vim-go
Atom、VSCode、GolandとGoのエディタを乗り換えてきていたが、Golandの無償期間も終わったのでvim
に乗り換えることにした。あまりJetBrain系のキーボードショートカットに慣れていなかったり、前職でC/C++
を書いていたときずっとVimだったからというのもある。:termminal
コマンドも実装されたし、(少なくとも)趣味で書くレベルのコードサイズならばVimでよいかなと思っている。なおデバッグするときは普通にVSCode
開く()
Kubernetes
クラウド技術も覚えたいなーと思って勉強会に参加しはじめた。まだ始めたばかりなので基本用語とkubectl
のコマンドをいくつか覚えられたかなーというレベル。
自分で書いた関連記事
来年やりたいこと
来年はもっとアウトプットを意識して活動をしていきたい。
自分のOSSをもっと作る
プログラミングの生産性を手に入れるにはコーディング量を増やすしかないという根性論派なのでもっとコード書きたい。ショートカット/スニペットを手癖にしたり、ハマりを経験・乗り越えるにはひたすらコーディングするしかないと思っている。 自分の興味はやはりGoなので、GoのAPIクライアントがないサービスを見つけてライブラリ書いてみる所存。APIクライアントはある程度の要求仕様(実装すべきREST)が最初から決まっているので、始めやすい。
gRPCの知識を身につける
社内アーキテクチャのgRPC
化が始まっているのと、Go界隈でよく聞くので、習得しておきたい。これはすぐやる。
GoとGCPでWebアプリを作る
ロギングなり、DBなり、API設計を一通り経験するにはWebアプリの実装をする必要があると思っている。
先日GCPの無償期間を有効化したので、来年使い倒したい。GAEつかったあとGKEに使ってみることになるのかな…?
目標レベルなので、具体的な案はまだない。gRPC
は使う。
クラウド・コンテナ技術の知識を身につける
自分も「クラウド上でどのようにサービスを動かすのか」という観点の知識を得たい。他人が用意したDockerfile
やマニフェストを動かすだけじゃなくて自分でクラウドデザインを経験したい。
データベースの知識を身につける
チームのパフォーマンス改善系のランチコーディングに参加しているのだが、全然付いていてけない。最新技術だけじゃなくて基礎もしっかり押さえないといけない。キリン本(?)買ったけど読めていないということろもある。
朝の学習時間をもっと確保・習慣化する
ちょっと残業したり、クタクタだとすぐダレてしまうので、自分は朝に時間を確保しないと勉強できないなと痛感している。 12月は2時間弱くらい朝活くらいしていたのだが、詰まったり、文字起こしする時間を考えると3時間程度あるのが理想なのかなと思っている。 自分のチームは朝10時勤務開始(他のエンジニアは11時が多い)なので7時くらいから勉強始めるのを目標にしたい。
ブログをもっと更新する
アウトプット駆動学習を習慣化する
「1日30分」を続けなさい!Kindle版: 人生勝利の勉強法55
今年一番影響を受けたブログかもしれない。自分には圧倒的に才能というかセンスがないので、時間で解決するしかない。 時間を費やすには習慣化するしかない。今まで自分は「何かしらググった結果から差分を見つけた時」じゃないと自分でブログ記事にしなかった。来年は初歩的なことでもどんどん書いていこうと思う。 コーディングの生産性もそうだが、ブログや週報などの文書の生産性にも不足を感じているので、その訓練という意味でもある。 また、後述するように読み終わってない本が多かったり、「Done」力が弱いので、なにかしらアウトプットというデッドラインを敷いて勉強していきたい。
2017年のまとめ(KPT)
Keep
- 初めて転職した
- 転職がきっかけでWBSデビューしたりもした
Destop Bridge
アプリを作成し、Windowsストアに公開した。Xamarin.Mac
アプリを作成した- 自作OSSを公開した。
golang/dep
などに自分の修正がマージされた- 6月から毎日コミットできた。
- 日記を書くことと朝活を習慣化できた。
Problem
- OSSにコーディングでプルリク出せるレベルではない
- 勉強時間の確保(習慣化)が出来ていない
- 生産性をもっと上げたい。
- 読み終わってない本が多い。
- 朝活時間が足りない
Try
- もっとコードでOSSに貢献する
- 自分のOSSをもっと作る
- GoとGCPでWebアプリを作る
- クラウド・コンテナ技術の知識を身につける
- 朝の学習時間をもっと確保・習慣化する
- ブログをもっと更新する
2017年の記録
以下、勉強会や読書の記録。
参加した技術イベント
- golang.tokyo #3
- golang.tokyo #5
- JJUG CCC 2017 SPRING
- de:code 2017
- .NET Standardもくもく会
- グレープシティ ECHO Tokyo 2017
- Xamarin.Forms本 邦訳読書会 & コードリーディング .823
- Go Conference 2017 Autumn
- golang.tokyo #11
- Kubernetes ときどき Serverless – cndjp第1回
- Kubernetes in プロダクション ! – cndjp第2回
とくに意識はしていなかったが、ほとんどGoのイベントばかりだった。 冬からは意識してブログにレポートを残すことに決めた。ブログを書くまでがイベント参加。転職直後のキャッチアップを言い訳に控えていた時期も多かったので、来年はもっと参加していこうと思う。
2017年に読んだ書籍
- C#実践開発手法 デザインパターンとSOLID原則によるアジャイルなコーディング
- .NETのエンタープライズアプリケーションアーキテクチャ第2版 .NETを例にしたアプリケーション設計原則
- Effective C# 4.0
- プログラミングWindows第6版 上~C#とXAMLによるWindowsストアアプリ開発
- C#逆引きレシピ[Advanced]
- 実戦で役立つ C#プログラミングのイディオム/定石&パターン
- たのしいRuby 第5版
- 実践Ruby on Rails 4 現場のプロから学ぶ本格Webプログラミング
- 実践Ruby on Rails 4 機能拡張編
- Goプログラミング実践入門 標準ライブラリでゼロからWebアプリを作る impress top gearシリーズ
- Docker実践ガイド impress top gearシリーズ
- 人月の神話【新装版】
- SCRUM BOOT CAMP THE BOOK
- 日本企業がシリコンバレーのスピードを身につける方法
- あなたのチームは、機能してますか?
- キャズム Ver.2 増補改訂版 新商品をブレイクさせる「超」マーケティング理論
- ジョイ・インク 役職も部署もない全員主役のマネジメント
- 「1日30分」を続けなさい!Kindle版: 人生勝利の勉強法55
.NET系の設計やアーキテクチャへの言及は流石MS本という内容で非常に勉強になった。そんなにC#
のサンプルコードも難しくないので、C#
使わない人でも読めると思う。
また、業務で使うということで、Ruby
やRuby On Rails
の本を一通り読んだ。
書評を全然書いていなかったので、本に関しても来年は読後のまとめを作る。正直春先に読んだ本はだいぶ記憶がおぼろげだ…
2017年に読み終わらなかった書籍
- プログラミングElixir
- Real World HTTP ―歴史とコードに学ぶインターネットとウェブ技術
- プログラマのためのGoogle Cloud Platform入門 サービスの全体像からクラウドネイティブアプリケーション構築まで
- Goならわかるシステムプログラミング
- データ分析基盤構築入門[Fluentd,Elasticsearch,Kibanaによるログ収集と可視化]
- 現場で役立つシステム設計の原則 〜変更を楽で安全にするオブジェクト指向の実践技法
中途半端に読んでいる本が多いので、「読了するまで次の本は読まない」という制限が必要かもしれない。 あと、これの倍以上「積読」があるので読まないといけない。