スキルの伸ばし方
エンジニアとしての自分の市場価値をさらに上げていくために、どのように自分のスキルを向上させていくとよいのでしょう? これまで説明した通り、スタートアップとメガベンチャーでは求められるスキルも与えられる環境も大きく異なります。まだどう言ったキャリアを形成したいかがはっきり決まっていなくても、それぞれに共通して求められるスキル・経験は以下の通りです。
- コーディング力
- コミュニケーション能力
- チーム開発の経験
- 設計力
これらのスキルはどの職種や企業においても求められるため、非常に重要です。個人開発で培える技術もあれば、企業に所属しないと習得することが困難なスキルもあります。ここではそれぞれどのように習得できるかを説明します。
コーディング力
コーディング力は職種や企業問わず必要とされるスキルです。コードが書けるだけではなく、クラスなどの概念を理解していたり、複雑なアルゴリズムを実装することができたりといったスキルです。企業が採用面接の際に実施するコーディング試験などでもよく見られる点であるため、これから就職を考えている方も含め習得しておいて損はないかと思います。
コーディング力は比較的個人でも学習しやすく、教材やサイトなども充実しているため、学習は容易です。クラスなどの基礎概念を知りたい場合は、技術書や、UdemyやUdacityなどのオンライン学習サービスでのプログラミング講座、アルゴリズム等、実装力を鍛えたい方はAtCoderやLeetCodeなどの競技プログラミングサイトが楽しくておすすめです。また個人開発等で実践しながら学ぶことも非常に有用です。
コミュニケーション能力
ここでのコミュニケーション能力は、一般的な対話能力等も含みますが、それ以上に技術的なディスカッションをできるかを指します。例えば新しい機能を設計することになった際に、ホワイトボードなどを前にチームのメンバーと一緒にシステムを設計できる、コードレビュー等においてペアプロなどをする際、技術的な会話を円滑にできるなどの能力を指します。
個人開発で鍛えるのは比較的難しい分類のスキルですが、オープンソースの開発にコミットしたり、周りのエンジニア仲間と趣味プロジェクト等を開発したりすることでも習得できます。手を動かす現場のエンジニアにももちろん求められますが、テックリードやマネージャー層などでは、技術選定や機能設計に必要なコミュニケーションが発生するため、より重要視され、面接等で評価されます。
企業にすでに所属している場合は、チームを横断した開発に積極的に取り組み、普段コミュニケーションを取らない人と一緒に仕事をしたり、システム設計や、開発ミーティング等でファシリテーションをしたりすることで、開発に必要なコミュニケーション能力を鍛えることができます。
チーム開発の経験
チーム開発の経験で求められるのは、Git等のバージョン管理ツールや、コードレビューのプロセス、またスクラムという開発手法等を用いたフローに慣れているか等、チーム開発する上で必須となるスキルのことを指します。スタートアップやメガベンチャーでの開発は多くの場合、個人での開発ではなく、チームとして開発するため、チーム開発に必要な最低限のツールの知識や、開発の流れの把握はかなり重要視されます。
チーム開発のスキルを向上させるには、すでに企業に所属している場合は、実際に経験を積んで習得することができます。個人開発をしている場合には習得が難しいスキルになります。周りにエンジニアがいれば趣味プロジェクトを始める方法や、オープンソースにコミットする等の方法もあります。またある程度の概念や用語については本などでも学習が可能になっています。
設計力
設計力とは、ある目的に対してシステムを設計する上で必要なスキルになっており、例えばAWSやGCPを使って〇〇をするといったシチュエーションに必要になるスキルです。またアプリケーションレベルでは、サーバーを構築する際にDBのスキーマの設計等も含まれます。現場レベルのエンジニアでも重要視されますが、テックリードやエンジニアリングマネージャー等のポジションに置いては、様々な制約のもと、トレードオフを考慮した上、システム設計をリードされることが求められるため、より重要視されがちです。
設計力のスキルを習得するには、まずは基本的な概念をオンラインや書籍をもとに勉強し、その後実際に手を動かしてシステムを構築してみることがおすすめです。趣味プロジェクトでの開発でシステム設計の知識を実践することや、Kubernetes等のオープンソースのコアの設計のドキュメントを読むなど、さまざまな学習方法があります。
まとめ
いかがでしたか? 本記事ではエンジニアとして今後のキャリアを考えている方向けに、さまざまなキャリアの選択肢や、スタートアップやメガベンチャーにおける求められるスキルの違いや、必要とされるスキルの伸ばし方などを説明しました。
連載の次回の記事では、これからエンジニアとしてキャリアを歩んでいく中で避けては通れない、コーディング試験と、コーディング試験を通して企業が見ている点について、筆者の経験をもとに紹介します。
