定期的に書き出すの大事だと思っているので書き出す。
開発系スキル
- Erlang/OTP
- WebRTC
たぶん今の所、自分が技術的なスキルとしてご飯が食べれていけるのはこの2つ。自分は同じものを長くやっていくのが向いているらしくまだ2つとも飽きが来ていない。
今はここに新しいスキルを追加しようと考えていて、1つが負荷試験。もう一つは FPGA 。
Erlang/OTP
長い付き合いになってきた。もうほぼコードを書くのは Erlang/OTP だけで、ちょっとウェブアプリを作る時に Python/Django を使うくらい。それ以外は Erlang/OTP のみ。
もともとミドルウェア屋なので、助かっている。Erlang/OTP では耐えられないような速度を求める仕事を相談されることがほとんどないため、Erlang/OTP で困っていないというのが現状。
去年、会社に Erlang/OTP ハカーが入社したことで、Erlang/OTP でいいじゃない感が増している気もする。
WebRTC
お仕事のメイン。これに関する製品を開発し、販売することで売上を出していっている。
相変わらず進歩も早いし、技術難易度も高い。やることややれることは沢山あるし、沢山できていないこともある。
また WebRTC ではないが、リアルタイムな配信な相談もされるようになった。遅延を減らしたい配信は需要があるようだ。
まだサーバで戦っているが、今後はクライアントでも戦いたいと考えている。ブラウザ以外のクライアントから気軽に使えるような何かに手を出せればと考えている。
QUIC や TLS 1.3 なども入ってきそうなので、なかなか手ごわい。
負荷試験
負荷試験自体を行うスキルではなくて、負荷試験製品を開発するスキル。負荷試験を行うスキルはまた別の話。
さらにここにはファジングを組み合わせていきたいと考えている。ただ自分がある程度知識があるプロトコルのみに限定していく。
今現在は負荷試験製品を開発中で、本番投入も始めている。ただ負荷をかけるだけでなく、シナリオをプログラミングできる製品を開発している。
詳細についてはは Gist に書いているので興味があれば見てもらえれば。
負荷試験はビジネスになりにくいので、そこをなんとか打破していきたい。継続的な負荷試験を気軽にできるような仕組みを提供したり、負荷試験製品を使った負荷試験の仕事を受けたりできればと考えている。
FPGA
もともとは音声や映像の変換技術を身に着けたいと考えて調べていたが、CPU の負荷が高くなるのはかなり現実的ではなかったので、GPGPU を調べていた。ただ、 GPGPU では効率が悪そうという結論に至った。
あくまでクライアントではなくサーバでの大量、高速変換に興味がある。
GPGPU の次に目をつけたのが FPGA で、まずはこちらの知識を基本的なところから学ぶことにした。そもそも自分が実現したいことを実現している会社がすでにあり、 FPGA で H.265 をメインとしながらも、AV1 や VP9 といったコーデックの変換を FPGA で行っており、AWS F1 でのセミナーにも使われているようだ。
自分はハードウェアの知識がまったくないため、基本的なところから学び直している。まずは CPU の作り方から。
そのため、FPGA で変換が行えるまでの距離は遠いと思うが、自分が持っていない知識の範囲なので、少しずつ勉強して行きたい。いつかビジネスに結び付けられるタイミングが来たらとても楽しいのではないかと考えている。
長く学べる技術に挑戦できるというのはとても良いことだと感じている。
焦らず、ゆっくり、じっくり学んでいこうと思う。
非開発系スキル
- 技術コンサルティング
- プロジェクトマネージメント
- プロダクトマネージメント
非技術的スキルはこの3つ。とくに上の2つは外のお手伝いをするスキルとして生きている。プロダクトマネージメントは自社製品で生きてる。
技術コンサルティング
主に Erlang VM を採用した会社の技術的なお手伝い。設計だったり、性能改善だったり、教育だったり。チームでどうやって習得していくか、運用はどうするのがいいかなど、Erlang VM を軸に多岐にわたってお手伝いしている。
単に今まで自社製品開発で得た知識の切り売りという感じ。
プロジェクトマネージメント
基本的にはお客様が欲しいものを作るチームを構成し、回し、リリースするお仕事。自分でコードを書くことはなく、設計や方針、そしてスケジュール、報告を行う仕事。
自分の中での一番の稼ぎ頭なスキルだと思う。
自分が開発者でもあるので、設計も一通りできることが強みだと考えている。このスキルを伸ばしたいとはあまり考えていないが、自分には合っているスキルなのだと思う。
プロダクトマネージメント
自分のやりたいことを実現するのに一番重要なスキル。主に自社製品開発。自社製品は開発するだけではなく、マーケティングや営業、サポート、継続開発、競合との差別化などなど考えることは沢山ある。
多くの会社に自社製品を採用して貰い、長く使い続けてもらうために何をするのかを考え、実践していくのがプロダクトマネージメントだと考えている。
このスキルは経験でしか伸びないように感じているので、実際自社製品を軸に伸ばしていきたい。自分の作りたい製品はミドルウェアなので、技術的な知識も必要だが、開発者に好かれる製品というのがとても重要になる。
やらないスキル
- 会計、経理、財務、総務、法務、営業事務などの事務全般
- クラウドインフラ技術全般
- Web やネイティブクライアント技術全般
主にこの3つのスキルには知識としては軽く学ぶことはするが、実際に仕事で手を動かすことはしないようにしている。
事務全般
社内に一通り全ての作業ができる総務がいるため、全て任せている。また税務に関しては税理士、法務に関しては弁護士とそれぞれ顧問をお願いしている。
そもそも自分が会計や経理、財務。総務などに向いていない。それよりは向いている人に任せてしまうのが良い。
適材適所。
クラウドインフラ技術
自社ではクラウドを利用したサービスで利益を出そうとしていないため、クラウド技術に明るい必要はない。最低限の知識だけあれば十分。実際自社のサイトやお試しサービスなどは全て、社外の人に自動化と運用をお願いしている。
自社で何かしらサービスを持ったとしても、クラウドインフラ技術は自分が覚える範囲ではないと感じている。自分は Vultr でインスタンスを建てて SSH できる技術があれば十分。
クライアント技術
カッコイイし、素敵だが、そんな時間はない。専門家に任せる。社外の優秀な人と組んで仕事をしていければ十分。
実際自社製品のクライアント SDK は社外の人の協力してもらい継続開発している。
まとめ
選択と集中。