来年以降のキャリアをぼんやり考える
これは来年の目標や計画をたてるにあたっての braindump である。
メタな話として、長期的な見通しを考えると同時に目先の仕事のがんばりにも気を配らないとだめだな、というのが今年仕事をがんばってみた上での感想。先のことばかり考えると足元を掬われる。あと人生のフェーズ的に将来の話ばっかりしてる段階でもない。
といいつつ大局的な話をまず考える。
Android の仕事について
- Android プログラマ、もうだいぶ旬を過ぎた感はある。世間的には Android 固有でハードコアなことをするより iOS と両方できるようになったり React Native なり Flutter なりでクロス OS 開発をしてみたり、あるいは Web のフロントエンドもできますよ、みたいな人が重宝されるフェーズに見える。専門家はまだ必要だが、足りてる。
- これは少し前に一部のサーバ側の人が「フルスタック」すなわちサーバ側のコード書きと JS と Devops を期待されたのと同じ状況と言える。そして Android に限らず iOS や JS プログラマも同じ立場に置かれているだろう。フロントエンドが converge するフェーズと言ってもいい。クラウドやマイクロサービスみたいなやつの隆盛にともない一部サーバ側のスキルセットが細分化しはじめているのとは対象的。
- 大企業で働き細分化された仕事をしている自分と、このフロントエンドの統合・雑用化はだいぶ相性が悪い。
ML とクライアントサイド
- ML はデータがサーバサイドにあるのでどうしても主戦場はサーバ側になりがち。ただサーバ側にせよクライアント側にせよ高い ML の専門性がないとどのみち ML 仕事はできず、そうでない下々がモデルをつくることはなくデータや UI をつなぎ込む仕事が主に見える。そして自分が現実的なタイムラインで ML の専門性を身につけられる見通しは薄い。
- ML 周辺プロダクション仕事だと、サーバ側はデータを持っているのでトレーニングがある。クライアントにはない。一方でクライアントは on-device inference をすることはしばしばある。そのインテグレーションには多少新しい難しさがあるように見える。クライアントサイドのプログラマとして ML に近づいていくにあたり、これはできるようになっておきたい。
- ただこういうインテグレーション業というのは本質的な難しさではないので、時間とともにプラットフォームやツールが整備されて有り難みは薄れるであろう。やる必要はあるが、あまり多くは期待できない。サーバ側の人もまあ似たようなことを考えていることでしょう。
- その上で勉強する ML とは何なのか。教養だな。まあデータベースも OS も自分で書かないのと同じ。
Computational Photography と Computer Vision
- 自分は Computational Photography の根本にあるすごい良い/面白い絵をだしたい、という情熱がまったくないので、この分野に踏み込んでいっても先には進めないと感じる。
- 隣接領域である Computer Vision はより ML に近くホットだし、自分ももしかしたら Computational Photography よりは熱心に取り組めるのではないかとも思うが、一方でほんとに実用化されるんかいな、という疑念もある。Computational Vision の近代的な主要ジャンルの一つ AR, まったく流行りそうにないじゃん。もちろん画像認識はたくさん応用されているわけだけれども、クライアントサイドに限ると AR くらいしか用途がなく、今のところ流行る様子がない。若干 over-promise/under-deliver な印象。
- 一方で Computational Photography はニッチではあるが確実に deliver している。そこはすごく良い。ただしこれはジャンルの問題ではなくリサーチ勢が偶然めちゃ優秀だっただけ、という可能性は否定できない。
- ただ画像なり音声なりのセンサーデータ相手に ML するのはクライアントサイド最後の砦なので、AR というラベルでは流行らなそうでもいちおう近くに立っておく必要はあるのだろうなあ。という意味で下地としての CV は盛り上がらないなりの必要性を感じる。
その他クライアントサイドの要素技術
- iOS はまあ自分がやってもしゃあないな、というかんじがする。Android 以上に飽和してそう。iOS の強い日本はどうなのだろうね。Web は自分の過去の経験を活かすには良いが、iOS 以上に人が飽和してそう。
- React Native などクロス環境は需要はありそうだが、やるなら RN の中に詳しくなる方向で、上でアプリ書くのに長けても自分的には仕方なさそうだな。
- クライアントサイド、今は iPhone 前のウェブみたいな停滞期なのだろうね。
サーバサイド
- クライアントサイドに比べるとコンテナだサーバレスだマイクロサービスだとここ数年賑やか。主要な関心は: クライアントサイドのプログラマが E2E でなんかする上で触れるようになっとくにはどのへんまで見れればいいのか。
- フロントエンド勢として Firebase みたいな Baas の末裔に親しんでおく?フリーランスやモバイル大好きっ子ならいいけど、自分はどうかな。
- なんとなく GKE にバイナリプッシュするくらいはできた方が良い気がしているが、余興でやるにはインフラ力なさすぎて辛い感じはする。一方で GAE / Heroku とか趣味にはいいけど会社員として需要あるんかいなとも思う。
- みんなが Rails なり Node なりを使っていた時期に比べ個人のツールと企業のツールが再び乖離しはじめたように感じるが、クラウドベンダの宣伝に騙されてるだけかなあ。
- 机上の空論するより Hello world した体感で判断するほうがよいのでしょうな。
次の自分に目を向ける。
プログラマ基礎力
- 専門分野(自分なら Android アプリ)でそれなりに規模のあるものを一から設計実装できる。これがプログラマとしての一人前の働きだと思うが、今の自分はできる気がしない。
- 能力としての不足だけでなく、これをやりましたと言える成果がないのは対外的にもよろしくない。
- 会社員ならこの能力は本来なら課外活動より仕事で出世する過程として身についていないといけないのだけれども、自分はできてない(し出世もしてない。)
- 課外活動でやるなら他のあらゆる活動を止めて時間をつっこまないとできる気がしない。
- ジャンルにも旬があるので、一から実装すればなんでもいいというものでもない。極端な例をだすなら C 言語で SVG レンダラを実装するとか意味ない。
- こういう合理性とは別に、自分でまとまった量のコードを書きたい、という欲望もある。
- 仕事や他の活動とうまく紐付けてやる気や時間を生み出せないか。
プログラミング言語
- Programming Language Fluency
- 直感として、モダン言語一個くらいできないと人としてダメに思える。
競技技能
- すごい人になる必要も可能性もないが、たまには筋トレしないと心細い。
- US で転職するなら必要。
転職
- US で転職しても仕方ないという心境。収入の都合で大企業でないといかんけれど、大企業じゃできる仕事の種類は今とかわらない失望がある。そしてどのみち大企業への転職可能性はまったく自明でない。
- 一方でこのあたりでで暮らしていくなら中小やスタートアップは選択肢にならない。
- 一定程度資産を形成したのち東京に戻れば金銭的なプレッシャーは減る気がするが、そのときおっさん雇ってもらえんの?などいまいち盛り上がれない。準備として日本語圏での可視性をがんばる、とかも気が乗らない。出羽守してもねえ。
- なのでほんとにイヤになるかクビになるまで今の職場で働けばいいかな、と考えがち。
そのほか課外活動
- Podcast どうすんねんという。もうちょっとプログラマとしの自分に有意義な内容に近づけられないか。そうでなければつっこむ時間を減らすべきではないか。
- 仕事に近い論文を読むの自体に意義はあった。
- コード読み、はぼちぼちやっていきたい。
- コード書きをコンテンツ化できないものか。しかしこれは向井さんを巻き込むには無茶ぶりすぎるよな。
- 英語はやらなすぎて衰えている。なんとかしないといけない。
- Dedicated な時間にかぎらず、他のアクティビティ(特に仕事)に混ぜるのを復活できないか。
目先の仕事
- これは別枠で考えます。
- この braindump をみて思ったことだが、自分は目先の仕事でなく転職や課外活動などを中心にしすぎている。このバイアスは正さないと雇用が危うい。資源が限られているときは目先の仕事重要。