kenju's blog

About Programming and Mathematics

2017年振り返り

仕事

仕事でRubyをがっつり使うようになったので、一年通してずっとRuby中心に書いていた。サブでは、前半はWebアプリでReact/Redux/TypeScriptのアプリを書いていたので、ES6やNode.jsを結構書いた気がする。後半は機械学習系タスクが増えたので、Python (Jupyter Notebook)を使うことも増えた。

インフラは一貫してAWS。最近でいうとDynamoDB, Lambdaを使ったLambda ArchitectureにおけるSpeed Layerを実装したりした。また後半はDocker当たり前に使う環境になったので、コンテナ系の基本的な技術も学んだ。逆に、Google CloudやAzureなどにはほとんど詳しくない。

広告配信サーバーの広告配信最適化や在庫予測、新商品広告開発の担当になって、その一手段として機械学習を仕事で使えるようになり、技術的挑戦の幅が広がって楽しい。ただし、機械学習はあくまで手段であって、実践導入のコストを考慮しながら検証しているので、Deep Learningとか大層なMLアーキテクチャはおそらく実装しない。ただ、今のロジックが基本的な最適化しか行われていないので、基本的な機械学習の回帰モデル・分類モデルを薄く導入するだけでも大きく精度が上がることが見えているので、機械学習のPracticalな導入を経験できる貴重な環境だと思っている。

足りなかったことといえば、自分の設計力不足を痛感することが二回あった。設計力は総合的な技術力を必要とするし、誰かに聞いて答えが出るものでもないから、自分の頭で考える場数を踏むしか無いと思っている。来年は他の人のレビューや自分の担当プロジェクトの設計の質を上げていき、アーキテクト力をあげていきたい。

発表

今年は外部発表は殆どなかった、というか仕事のキャッチアップを最優先にしていて全くできていなかった。 仕事の成果なども出てきつつあるので、来年は適宜発表の機会を設けていきたい。

ただ、技術ブログを秋口くらいから再開した。思うところ合って技術ブログは書いていなかったんだけど。

趣味開発

Rubyを使って、競技プログラミング系のタスクを解いたり、簡単なライブラリを実装したりすることがメイン。もちろんRubyが多かったのは仕事で使うから意識的に選んでいたってのもあるけれど、言語のAPIを覚えてきたりできることが増えてきたりすると、単純に書くのが楽しくなるから、自然と増えたというのもある。

Pythonを覚えてからは、Jupyter Notebook上で数学の書籍を読みながら実装してみたり数字で遊んだりすることが多かった。今年は武器を多く覚えることができたという意味で非常に有意義だったし、RubyRuby Hack Challengeに参加してRuby自体の実装に対して深めることができたのが良かった。

昨年ハマっていた関数型言語はほとんど書かなくなって、Haskellからは一旦距離をおいた感じ。とはいえ、その時学んだことが、今のRubyのコーディングに大いに活きていることを感じていて、点と点はつながるんだなと思う今日このごろ。簡単なデータ構造操作の際に、map/join/reduceを使ってさくさくコードを書けるようになった。ただしこれはやりすぎると可読性を下げチーム開発では望ましくないので、バランスも取りながらやっていきたい。

点と点がつながるといえば、昨年くらいから地道にコツコツと勉強していた数学やCS周りの基礎が、ようやく活きてきたのかなという感じ。どうしてもすぐ使える技術を覚えることに時間を割きがち(人は易きに流れるし、短期的な成果を求める傾向にある)んだけど、去年あそこで我慢できたのは良かった。この習慣は継続的に続けていきたい。

ゲーム

Youtubeにあがっているゼルダのメイキングビデオを見て、ゲームエンジニアの技術的挑戦や込められた思いに一目惚れして、ゼルダがやりたくてswitchを買った。ずっと買いたくて、ある日たまたま幸運にもゲリラ販売に遭遇したので良かった。ゲームエンジニアではないけれど、同じ技術者としてこんなにもすごいゲームを作っている任天堂のエンジニアに尊敬の念を抱いた。

最後に

プライベートで喜ばしいニュースがたくさんあって、その意味でも充実した一年だった。プログラミング、楽しい。好きなことで仕事できているのは幸せだと思う。来年は今年任された以上の大きな仕事で成果を出して、チームでも技術で貢献していきたい。海外にも挑戦していきたい。