推薦システムを勉強し始めた
はじめに
3ヶ月ぶりの労働を再開して一ヶ月が経った.最初こそ披露困憊で業務後は何もできなくなっていたものの,徐々に勘を取り戻してきたので余裕が出てきた.
同時に,今後のICとしての昇級についても同時に考えを巡らせる必要が出てきたりしたので*1,よい機会だと思い新しい技術軸として推薦システムについて勉強することにした.
なぜ推薦システムかと言えば以下の理由である.
- 現職で作っているものがフリーマーケットサイトなので推薦システムを内製しているチームがあり,そのチームと今後協業する必要が出てくる可能性がある
- 推薦システムは以前勉強した機械学習と関連している部分があり,ある程度使える共通基礎知識がある
- 絶対的な解がない分野なので研究対象としてもまだ伸びしろがある
- 推薦システムは何かしかのコンテンツをユーザに提供しているサービスでは常に重要であり,今後10年スパンぐらいで見ても需要は減らないだろうと思った
今やってること
あまり進捗は出ていない.とりあえず以下の本を頭から読んでいる.
古典的な近傍ベースの推薦システムだけでなくモデルベースの推薦システムについても解説されており,網羅的に勉強するには良さそうだと思って選んだ.また,読むために必要な知識*2についても都度細かく説明してくれているので初心者には読みやすい構成になっている.
今後の予定
まだ3章までしか読んでないので残りを早めに全部読んで全体像を掴むことを最初のマイルストーンとしている.その後は手を動かして実装してみたり,kaggleの推薦システムコンペをやってみようかと思っている.
あと以下の本は実装についても触れているようなので併せて読んでみる予定である.
月に1回ぐらいのペースで学んだことをこのブログで報告していきたいと思う.
3ヶ月無職期間した雑感
- tl; dr
- はじめに
- やったこと
- 国内旅行
- 出雲 2022年4月25日 - 26日
- 長崎 2022年5月12日 - 13日
- 伊豆・伊勢 2022年5月23日 - 24日
- 伊豆
- 伊勢
- 沖縄本島 2022年6月14日 - 18日
- 登山
- 手術
- 国内旅行
- 雑感
- 敢えていつもと違う過ごし方をしたのは正解だった
- ヤマノススメ
- おわりに
もうすぐ3ヶ月間の無職が終わろうとしているので雑感をまとめておく.
tl; dr
- 元々は無職期間を勉強時間にしようと思ったが勉強は仕事しながらでもできるので敢えて止めてみた
- 登山を始めたことで生きる活力が復活した
- たまには普段と違うことに注力する時間も人生においては重要だと実感した
今回の転職活動の雑感
- はじめに
- 転職活動の結果
- 希望したポジション
- 転職のために使用した採用媒体
- 転職ドラフト
- YOURTRUST
- 今回の転職活動での気付き
- Coding testは対策が必須である
- System design interviewも準備しておいた方がいいが業務経験があればそこまでビビる必要はない
- 6社同時に受けると毎日のように面接がある
- 希望年収は自分に嘘をつかずに伝えた方が良い
- マネージャーやリーダーの経験がないと判断されるとマイナス評価につながる会社が存在する
- 自分の評価は企業によって差が大きい
- おわりに
はじめに
2021年10月から2022年2月にかけて転職活動をしていた.
今回の転職ではいつもと違い10社近くのカジュアル面談を受け6社に応募した. また,珍しく採用に関するwebサービスを使用したり,初めてCoding test対策を行ったりもした.その雑感をまとめておく.
続きを読むSWE歴8年目にして初めてスクラムを経験したのでその所感を述べる
はじめに
SWEとして仕事をし始めてから8年目にして初のスクラム開発を経験した.6か月ぐらい経ちその間に2チームでスクラムを経験してきたので所感を述べる.
自分が経験してきた開発手法
過去にいたチームでは,世間一般で言われるスクラム開発*1ではなく
- 毎日チーム内で進捗を確認(いわゆる朝会の運用)
- チケットはカンバンで管理
の2点だけを採用した開発プロセスだった.チームによって「タスクを誰が決めるか」「機能要件と非機能要件のベロシティのバランスをどう取るか」といった細かい点は異なっていたが,基本的には上記の2点だけは必須で行い,あとは割と自由,という感じの開発プロセスを複数の組織で経験してきた.2013年~2020年ぐらいの話である.
今のチーム
2021年にjoinしたチームは教科書どおりのスクラムをやっていた.自分は上述のような「なんちゃってスクラム」みたいな開発経験しかなく,自主的にもちゃんとしたスクラムを学んだことがなかった.そのため,今の組織にjoinした当初は「ストーリーポイントで相対見積もりをする」とか「すべてタスクの優先順位はチーム全員が合意して決める」みたいなプロセスを見た時に正直面食らった.これまでやっていたなんちゃってスクラム開発の延長ではなく,全く新しい手法としてスクラムの価値観をinputしていく必要があった.
スクラムやってみた所感
あらゆることが明文化されている
スクラムに関する所感として,まず感じたのは開発経験が浅いメンバーでもチーム活動に参加しやすいという点だった.スクラムではあらゆるプロセスのやり方が明示的に決められているため,「暗黙の了解で何となくやる」ということがなくなる.そのため成果が属人化しにくいと感じた.リファインメント,プラニングといったイベントですらそれぞれに進め方やゴールが決まっている.組織によってどのようなプロセス・ゴールを設定するかは異なると考えられるが,スクラムはとにかくあらゆるプロセスを明示的に定義することを重視していえるように感じた. また,明文化されていることでSWEとしての経験の差を埋めることができる.「経験10年ぐらいのSWEなら大体何となく知っている」暗黙知に依存すること無くチーム活動が出来るため,経験が少ないSWEでも1メンバーとして参加しやすい気がする.これはチーム間の知識の共有という点でも有効だと感じる.
ストーリーポイントによる相対見積についてはちょっと疑問がある
見積についても相対見積を採用している場合は基準となるチケットをもとに見積もれるので,経験が少なくても見積自体はしやすいと感じた.
ただ,チケットを担当して実施するSWEの力量に応じて実際にかかる工数は異なってくる訳だが,そのギャップをどう扱うかはいまだによくわかっていない.
一般的には見積で各チケットに設定したストーリーポイントの合計と実際に消化できたチケットのストーリーポイントの差が大きくならなければとりあえずは良いらしいのだが,この辺のベロシティの評価方法についてはまだ良くわかっていない. また,実際にチケットに着手する人の力量に応じてかかる時間は異なってくる訳だが,この力量の差はストーリーポイントには反映されておらず,ストーリーポイントがそのスプリントのキャパシティを示す指標として機能しているかは謎である.それでもスプリントを重ねることで「1スプリントで大体これぐらいはできる」という目安としてうっすらとキャリブレーションされてきたので,チームのキャパシティを示す基準になりつつはある.もう少し時間が経てば変わってきそうな気がする.
合意を取らないと何もできないので何でも人と話す必要がある
スクラムの原則は「合意していないことはやらない」だと理解している.これまで述べてきた通り,知識の属人化やスキル差を埋めるための知識共有という目的を考えれば理に叶っている.
一方で,「なんでも合意が必要」という成約は,毎回何かアクションを行う度に多大な合計形成コストを払わねばならないということでもある.
例えば,プラニングで合意に至らなかったチケットがそのスプリントで着手されることはない訳だが,自分としてはどうしてもそのチケットがそのスプリントに必要だと確信したとする.実際大したコストもかからないし手持ちのタスクを全部やっても間に合いそうな気がする.でも合意していないからそういうことは出来ない.正しい手続きとしては,ステークホルダーを全員集めて同期的もしくは非同期的に議論して合意を取らなければならない.例えば1 スプリントで終わる軽いリファクタリングについては,今までいた組織では個人の空き時間で自由にやることが比較的許されていたため,個人でスケジュール管理ができていれば何の問題にならなかった*2.しかしスクラムとなると話は別で,すべてが「チーム」で「合意」されている必要がある.しかも実施したタスクはすべて可視化されていなければならない.よって,個人のスケジュールが空いたならチームで合意したバックログの先頭のタスクをやらなければならないし,勝手にベロシティに計上されないタスクをやることは許されない.そしてリファクタリングといった非機能要件系チケットと新たな機能開発といった機能要件系チケットの優先順位を1つの軸で優先度付けるのってすごく難しい訳で,今いるチームだと機能要件が優先される.KRに定量的な「1 Quoterにおけるリファクタリングチケット数の割合」みたいなものが入ってなければそうなるのが当然である*3.
この点についてはどの程度スクラムに準拠するかという程度問題の気がするが,本当に教科書どおりにやるとこういうことになるらしい.スクラムって厳しいのな.
ただ,自分にとってはあまりに厳しすぎると感じたので,自分から提案してベロシティの10%は自由にバックログから取っていいという合意を得た.
おわりに
スクラムの「何でも明文化」するところは合理的だと感じたし,これまで自分がベストプラクティスだと考えていたものと合致している. 一方で,相対見積における個人の生産性の差の排除やチームの合意形成コストの高さついてはまだ課題を感じている. ただ,少なくとも2021年現在,自社開発をしている日本国内の組織においてはスクラムを採用しているチームが増えていると感じているので*4,今後の開発手法のデファクトスタンダードとしてスクラムは広まっていくだろうと考えられる.そのため今苦しくても苦しんでスクラム開発に慣れていくコストは無駄ではないと考えている.
*1:何が正式なスクラムなのか分かってないが,本記事では「POとScrumMasterがいる」「スクラムイベントを全部やっている」「割り込みは禁止」「チームで合意したこと以外は勝手にやっちゃダメ」「ストリーポイントは相対見積でプランニングポーカーで行われている」「ベロシティを毎週計測する」みたいなスクラムの教科書に書いてある手法に則ったスクラム開発を指す
*2:前職では手が空いている時に限り2週間までは好きにやれ,2週間を超えそうな場合はちゃんとDesignDocを書いてチームを説得せよ,というルールだった
*3:逆にこれをKRに入れてみるのは案外アリな気がしている
*4:同業者の知人との会話などからそう感じた
2020年は色々な意味でリスタートの年だった
総括
仕事
細かい仕事をかなりこなしており,あまり目立った成果は何も残せなかったと思う.プロジェクトを転々としながら,最後に残ったピースを埋める仕事を淡々としていた,という印象である.
人出が必要なプロダクトの環境マイグレーションとかのinternalなタスクを多くこなしていたので,会社としては重要なタスクである一方,会社の事業に与えるインパクトは小さかったと認識している.大企業ではないがスタートアップでもない,という規模の会社で働くのは初めてなせいか,個人のSWEとしてどういった成果や立ち回りが求められるのかを手探りで働くような1年だった.また初めて外国人のマネージャの下で働いたが,常に言語の違いによる壁は感じていたので,来年以降はそういった障害も乗り越えなければならない.
技術的にはインフラ系の仕事が多かった.具体的にはTerraformのconfigを更新したり社内独自の設定ファイルを更新すれば済んでしまうものがほとんどだった.一方で,production環境のためにAWSを触った経験がほとんどなかったため,イチから勉強しなおす良い機会にもなった.あとAmazon ECS on EC2を多用するプロジェクトに参加していたためECSには大分詳しくなった.ネットに出回っている情報のほとんどがFargateを前提としていてEC2クラスタを自前で運用するパターンのパブリックな情報がほとんど無かったため,いつか役に立つかもしれない.
上記のようなインフラ仕事を多くこなしていた関係で,今年はアプリケーションのコードは大して書いていない.Kotolin + DropwizardのWeb APIのメンテ,Rubyでちょっとしたスクリプト,Rails applicationのメンテ,JavaでECS APIを叩く処理などを書いたが,前職時代と比べると圧倒的にコードを書いていない.プロダクトのフェーズが全然違うので当然であるが,運用改善がメインになるとこうもコードを書く機会が減るものかと少し驚いたりはした.要するに,前職はプロダクトの機能が足りなくて次から次へとコードを書いてデプロイする必要性が高く,一方で現職はビジネスに必要な機能は一通り揃っているのでそれをステーブルかつスケーラブルかつ低コストで運用できるようにマイグレーションする必要性の方が高い,というのが自分の見解である.あくまで自分がいるチームが関わっているプロダクトはそのように見えた.
プライベート
勉強
今年はcovid-19で自由に行動できずにストレスが常に高い状態だった.そのせいもあってか独学での勉強の成果は早々に諦めた.元々図書館やカフェで本を読んだり作業するのが好きだったのだが,それらが一切できなくなるストレスは想像以上だった.基本的には仕事を問題なくできているだけえらいと思うことにした.
今年はかろうじて深層学習のオンラインコースを修了するのが精いっぱいだった.現場で使えるディープラーニング基礎講座というJDLA認定講座を受講して修了した.すべてオンラインで,3カ月ぐらいかけてすべての講義と課題を修了させた.内容的には「ゼロから始めるディープラーニング」の内容が半分,残り半分がオリジナルといった感じだった.「ゼロから~」は最初の巻を読んでいたので知っている内容がほとんどだったが*1,GAN周りについてはほとんど知識がなかったので良い勉強になった.この講座は基本的な機械学習,線形代数,情報理論の知識が前提になっているためか,他社のコースに比べて少しは安くはなっているようなのだが,それでも模試込みで30万円近くしたので何ともしてもE資格に合格しなくてはならない.
あとは競プロもやっていたが,情けないことに時間の確保が難しくて7月ぐらいから中断している.今年中の茶色脱出を狙っていたのだが,思っていた以上にcovid-19の影響は大きかった.
趣味
勉強の代わりといってはなんだが,Overwatchを本格的に再開した.2020年12月31日現在でレートは以下の通りである.
基本的にタンクとサポートしかやっていない.今年の5月時点ではタンクもサポートもたまにブロンズに落ちするぐらいのレート(1500~1600付近)だったので,そこから考えれば成長はしているようだ.
反省用にプレイ動画をYouTubeにアップしている.最近はゆっくりボイス入れて適当に編集したりもしているがいい気分転換になっている.
各月の出来事
1月
プライベート
- 東京に戻ってきた
ここを今日からのキャンプ地とする。 pic.twitter.com/bddfcl9K9K
— Kazuhiro Serizawa (@seri_k) 2020年1月20日
大学院
- 修論を提出した
- 修論を発表した
修論発表終わった.想定外の質問来たけど何とかなったのではないかと信じたい.
— Kazuhiro Serizawa (@seri_k) 2020年1月28日
2月
仕事
- 今の会社で働き始めたが入社即リモートワークとなる
- いきなり自分しか日本人がいないzoom mtgに放り込まれて死ぬかと思った
プライベート
- 株価が世界的に下落していたので積み立てNisaとWealthNaviを始めた
3月
大学院
- 修了した
工学修士になりました.感想としては「よく頑張ったな」と「自分は全くダメだな」の半々です.今後も今まで以上に精進して自分のやりたいことを実現できる人生にしていきたいです. pic.twitter.com/jjE9m9EXd1
— Kazuhiro Serizawa (@seri_k) 2020年3月25日
プライベート
- 15年振りにケースからWindows PCを組んだ
15年ぶりにケース込みでpcパーツ一式買ったので組んでいきます。フルタワーのケース初めてだけどすでにそのデカさにビビってる。 pic.twitter.com/6HSMHyLCfh
— Kazuhiro Serizawa (@seri_k) 2020年3月28日 - CourseraのMLコースを始めた*2
4月
プライベート
5月
プライベート
6月 - 7月
何の記憶もない
8月
プライベート
9月
プライベート
- OWでタンクゴールド
- このころから在宅勤務が嫌になってきてストレスが溜まっていた
10月
プライベート
- ほとんど覚えていない
- 本をたくさん買った気がする
11月
仕事
- 在宅勤務がつらくなった旨を会社側に相談して週3日のオフィスワークを再開する
- その結果体調は改善した
- 一方でこの時期仕事は忙しかった
12月
プライベート
- Go Toトラベルで長崎に行き,念願だったカピバラとの対面を果たす
仕事
- 一区切りついた
*1:過去に書評も書いた https://serihiro.hatenablog.com/entry/2016/12/22/000000
*2:7週目まで課題を終えたが8週目でとん挫して以来止まっている
仕事のストレスを緩和するのに有効だった行動
楽しめるものがなくなった
気がつけば趣味らしい趣味がなくなってしまった.
かろうじてFPS(OW)は続いているのだが,趣味と言われるとどうなのかという感想になる.ランクマでの一定の目標を持ってやっているとはいえ,どこかのコミュニティに所属している訳でもなく,野良で一人黙々とランクマを回し,たまにプレイ動画をYouTubeにアップロードしているだけである.そのような活動を趣味と呼べるのかどうか甚だ疑問である.10年以上前にFPSのクランに所属して夜な夜なクラン内で紅白戦をしたり他クランとの試合をしていた時期があったが,あれはそれなりの時間と労力をつぎ込んでおり,かつ人との交流もあったことから趣味と呼ぶに値する活動だったのではないだろうか.
FPS以外だと,過去に6年間ぐらいアマチュアのマンドリンオーケストラに所属していた時期があった.クラシックギターのパートだったのでこの間はクラシックギターが趣味だと言えた.クラシックギターだけで見ればその前にも大学のクラシックギターのサークルに所属していたので,結構長い間やっていた趣味と呼んでも嘘にはならないだろう.しかし,今はどこのオケにも所属しておらず,プライベートでも一切弾いていない.住んでいるマンションは楽器禁止だし,近所に練習場所を確保しにくい地域に住んでいる.そもそも純粋に音楽をやるモチベーションも無くなってしまった.
趣味プログラミングも気が付くとほとんどやらなくなってしまった.今は仕事以外でコードを書く機会がほとんどない.つい1年前まで狂ったように謎のOSSを量産していたり半年前まで競プロもやっていたはずなのだが,何かもう何もする気がしなくなってしまった.せいぜい機械学習やComputer Visionの本を読む程度で,コードは数式の定義を確認したりするのに使う程度になってしまった.
どうしてこうなったのか理由は分からない.今は何をやっても「心から楽しい」と思えなくなった.「少しは楽しい」はそれなりにあるが,すぐに空しくなる.鬼滅の刃のテレビシリーズも劇場版も観たが,その話題性に反してどこかで観たような要素の詰め合わせ*1に「一回観たら二度と観なくていいや」という気持ちになった.ジャンプ連載中のチェンソーマンも読み始めたころは純粋に楽しめていたが*2,今は惰性で読んでいるに過ぎない.