今の自分の能力と今後のキャリアについて
RubyKaigi2017に参加させていただきました。
いろんな発表を聞いて、自分のエンジニアとしての価値について考えることがあったので、今後のキャリアも含めて考えたことをつらつらと書いていきます。
現状の自分のエンジニアとしての価値
1. プログラミング能力
Ruby on Railsがそこそこ書ける
- MVCにそれぞれの役割を理解した上でコードが書ける。
- システム要件に即したビジネスロジックが書ける。
- エラーハンドリングができる。
- アプリケーションコードレベルでパフォーマンスを考えたクエリが書ける。
- 可読性の高いコードが書ける。
(社外でコードレビューを受けたことがないので、人によってはクソコードと思うかもしれない)
概念の切り分け方を考えられる
- 機能によって、プログラミング言語に合わせた概念の切り分けが行える。
- Railsで言うとClass(内部Classも含める), Module, Concernなど。
- クラス命名をアンチパターンを踏まえながら適切に命名できる。
- ディレクトリ構成も概念によって切り分けを意識的に行う。
- とはいえベストプラクティスが浮かばないような場面も多々ある。
ソフトウェア開発を取り巻く概念をある程度理解している
2. Soft Skills
Soft Skillsを参照のこと。
粗筋から参照すると、
対人的な交渉・指導・意思疎通などをうまく行える能力や知恵
要件定義ができる
- 依頼者からのビジネス要件をヒアリングできる。
- 依頼者が本当にやりたいことは何かを考え、提案できる。
- 全くの新機能なのか、既存機能に対する追加機能なのかを踏まえて
工数見積を行える。 - 依頼者に「なぜこれだけ時間がかかるのか」を伝え、交渉できる。
エンジニアとして世の中ででかい価値を出す方法
1. 何らかの技術のエキスパートになる
- プログラミング言語やフレームワークをよく知っている、もしくは作っている人になって、
その言語やフレームワークを利用している会社のアドバイザになる。 - 提供するサービスの性質上、利用するプログラミング言語が限定されており、
かつその言語を書ける人が少ない場合は、それだけでプログラマとして食っていけると思う。
例えばミドルウェアの会社や組み込みのソフトウェアの会社でプログラムを書くとか、
恐ろしく速さが求められるサービスをフルスクラッチで作る、とかいった状況の場合
使われる言語はC++とかRustとか?だと思うが、これらを書ける人はインタプリタ言語よか少なそうなので、
書けるだけで価値があると思う。
つまり学ぶのが難しくて、かつそのツールを使う理由があるような場では
それが使える人は価値が出せるということ。
2. エンジニア目線で事業に貢献できる人になる
- 流行りの枠組み、例えばWebサービスならWebサービスを構成する主要な要素の基本的な仕組みと、
代表的なアプリケーションの特徴を知っており、技術選択ができるレベルならば、
アーキテクトとして食っていけそう。 - エンジニアとビジネスサイドの間に立つ人として、予算レベルの折衝からプロダクトの要件定義、 工数見積までできれば、事業を回せる人として価値が出そう。
3. スタートアップを起こす
- 思いついたサービスを実現してユーザに使ってもらう。
- 技術の限界に挑戦するようなスタートアップでない限り、ものを作るエンジニアというよりかは
速く書いて、ユーザと話して、VCと資金の交渉をして、といった、Soft Skillsが強く求められそう。
今日はここまで。
今後も自分の歩めるキャリアの選択肢と、自分がどういうキャリアを歩みたいか、ということを整理して意識化していきたい。