これからウェブ業界のエンジニアになろうとする人へ
こんにちは。@edvakfです。pixivの春インターンで学生への講義として話した内容をこちらで公開したいと思います。
一般的なウェブサービスの一生
- 壮大なアイデア
- アイデアに投資する価値があれば、開発にとりかかる
- アイデアの数割ほどをコードに落とし込んだものがリリースされる
- 運良く使ってくれる人が現れると、使われ方を見て残りのアイデアを徐々に機能追加していく
- やがてユーザーが固定化してくると、別のユーザー層を求めてプロダクトの方向性を変化させる(ピボット)
そして
どんなサービスも必ず終わりを迎える。
- アイデアが的外れ
- 競合のほうが良い物を作っている
- 多くのユーザーに使われていても運営するコストに見合わない
- 以前はあった需要がなくなる
「次のステージ」に進めるのはほんの一握り
エンジニアとしてウェブサービスに関わるとはどういうことか
いっぱいあるが
- 機能追加
- 自動化されていない技術的なルーティンワーク
- ユーザー数やデータ量の増加に対してシステムを作り変える
- チューニングしてコストメリットを上げる
- 別の方向性の模索(新規開発)
などなど
最適化について(1)
(コンピューティングリソースに対しての)最適化とは
- 計算量、メモリ、記録容量
- IO待ち時間
- プロセス数、スレッド数、TCPのポート数
- ネットワーク通信の回数、帯域
などを賢く使ってサービスの要求を満たすこと
最適化について(2)
(人的リソースに対しての)最適化とは
- 自動化されていないルーティンワークの量(時間)
- 機能追加の際に読み書きするコードの量(時間)
- 新しく加わる人が知っていなければいけないことの数(時間)
- リファクタリングやチューニングなどにかかる時間
- 問題が起こった時に調べるのにかかる時間
などを減らすこと。 テストを書くのもこのため
取捨選択
すべてを満たす最適解は存在しない
取捨選択のポイントは
- 推測するな、計測せよ
- コアコンピタンスとコモディティ
- 100倍で考える
ウェブサービス界隈のトレンドの変遷
- 1990年代: 自前データセンター、CやC++のウェブアプリケーション(?)
- 2000年代前半: ホスティング、CGI、LAMP
- 2000年代後半〜2010年代前半: AWS、Heroku、Rails
- 最近: X as a Service
ウェブサービスを始めるにあたって自分で作らなくてはいけないものはどんどん減っていく
ある程度の規模になると全部自前で持つほうが圧倒的にコストパフォーマンスが良い
ドメイン
ウェブサービスの参入障壁が驚くほど低いこれからの時代に、新規サービスを成功させるにはUIとドメインロジックを研ぎ澄ませるしかない
- これまでは「プロダクト」対「ユーザー」
- 最近は「企業」対「ドメイン」
複数のプロダクトでポートフォリオを組んでドメインを征するスタンス
そのためにドメイン理解が重要
ドメイン理解を深めることで正しい方向にピボットしやすくなる
高度な技術の求められるところ
- スケールアウト
- 設計
- 運用の自動化
- ミドルウェア
- X as a Service になる
などなど
X as a Service もサービスなので、ドメイン理解が超重要
ウェブ業界で何をしたいの?
- 一山当てたい
- 誰も目をつけていないドメインを探しましょう
- 技術を学びたい
- 運用系のエンジニアが必要そうな会社に入って死ぬ気で覚えるといいかも
- 技術を活かしたい
- 活かそうと思っている技術がコアコンピタンスであるような会社に行きましょう
- 特定のドメインに興味がある
- そのドメインの会社に入りましょう
おわりに
変化の速い業界なので、5年後や10年後を見据える目を持ちましょう