キャリア

フリーランスエンジニアになる前に身に付けておくべきスキルと経験

フリーランスエンジニアにはスキルアップしにくいというデメリットがあります。会社員のように色んな経験を積ませてもらえるといった環境はなかなか見つかりません。

そして、フリーランスエンジニアは基本的にスキルの切り売りですので、自分のスキルが陳腐化していけば仕事がなくなります。

こういったことを考えると、フリーランスエンジニアになる前に必要とされる「スキル・経験」という在庫をたくさん仕入れておくべきです。

私自身Webエンジニア歴8年、フリーランス歴2年ちょいのペーペーですが、企業との面談で良く聞かれることなどなど、フリーランスとしての経験もふまえて「フリーランスエンジニアになる前に身に付けておくべきスキルと経験」を紹介したいと思います。

テックリード、リードエンジニア経験

企業によって役割の名称は異なりますが、「テックリード、リードエンジニア」といわれるプロダクト内のエンジニアリーダーの役割を経験しておいた方が良いです。

私は2つのプロダクトで経験させてもらいましたが、学びが多いです。

会社によって期待される仕事の範囲は異なりますが、どの会社でも「技術的にそのプロダクトを支える、引っ張っていく」といったことを期待されます。

例えば、次のようなこと。

  • コードレビュー
  • 技術的負債の解消(どれから解消するかの優先度決めも!)
  • 新施策の技術検証(検討)
  • 障害対応
  • 他職種、他部署とのコミュニケーション
  • エンジニアメンバーのマネジメント

もちろんすべて自分がやるわけではないですが、音頭を取ったり、最終的な判断などはやらないといけません。こういった「技術的にそのプロダクトを支える、引っ張っていく」経験をするだけでエンジニアとして格段に成長できます。

さらに、それだけではなく「こんなメンバーがいたら助かるな、こんな動きをして欲しいな」、「メンバーが上手く回っていないな」といったリーダー経験を積むことで得られる視点がフリーランスになったときに活きてきます。

基本的にフリーランスになると1メンバーとしてプロジェクトに参画することになります。そのときにチームのことを考えて行動できると信頼されて切られにくくなりますし、難易度の高い面白い仕事を任せてもらえる可能性も上がります。

大規模、高アクセスのサービス運用経験

大規模サービスを運用している企業との面談で「今までどれくらいのユーザ数、データ量(レコード数)、リクエスト数のサービスに携わったことがあります?」みたいな質問は良くされます。それだけ大規模サービスに関わった経験があるエンジニアを求めているわけですね。

DBのデータ量、ユーザ数、同時接続数が多いサービスに携わっていれば、変なクエリを出さない、レコードが爆増することを気にした設計、redisやmemcahedなどのkvsの活用、排他制御などなど、負荷やアクセス数を意識するスキルを身に付けることができます。

もちろん数年経験しただけで完全にマスターしたと言えるほど簡単な話ではないですが、間違いなくスキルアップします。そして、そういった経験があるエンジニアを求める企業は多いです。

「ユーザが多くないから問題になっていない」ってことはあるあるですから。大規模サービスから得られることは多いです。

小さなサービスばかり経験している人は大規模サービス案件をとるのは大変ですが、大規模サービス経験者はどちらの案件も取りやすくなります。(そのとき好きなものを選べる)

(私はそこそこユーザ数の多いソシャゲ経験があったのでなんとかなりました )

DBの知識(特にクエリチューニング、インデックス)

「大規模、高アクセスのサービス運用経験」と少し被りますが、特に良く聞かれる話題なので分けています。

「EXPLAINしてクエリチューニングできますか?」はよく聞かれます。中途採用の面接でも聞かれること多いんじゃないでしょうか。

インフラエンジニアほど熟知していなくても良いですが、「インデックス」、「実行計画」あたりの知識は身に付けておいた方が良いと思いますし、学んでおいて損はないです。

「このクエリ重いな〜」ってのがあったら調べて改善してみたら良いと思います。そのときに話はフリーランスエンジニアになったときの面談で必ず役立ちます。(もちろん転職時でも!)

その他「このALTER TABLEってノーメンテで実行できるか」とか知らないとデプロイしたらサービス止まるみたいなことになりますし。

(まあ偉そうに書いていますが、私もまだまだ勉強しないとイケない分野です...)

AWS,GCPで環境構築

大企業だとインフラ部隊がいてAWS、GCPなどのインフラ知識が直接必要になることは少ないと思います。

ですが、アプリケーションの構成を理解していないと障害対応しにくかったり、障害の理由が理解できなかったりします。AWS,GCPあたりのインフラ知識はあった方が良いでしょう。

あと、小さい会社(ベンチャー、スタートアップ)だと「AWS触れますか?」とかよく聞きかれます。

個人で使うのはハードルが高いので、会社員のうちに経験しておくことをオススメします。

(サーバーに上げるアプリ作らないといけないし、ElasticCacheとか必要になるアプリじゃないと構成がシンプルすぎるし、RDS高いし、アクセス無いとトラブルに遭遇しないから学びが少ないし)

複数言語での開発経験

いろんな言語が使えた方がハイスペックって意味ではないですが、2つくらい使えた方がフリーランスになったときに案件に困りにくいです。(案件を選べる)

サーバーサイドエンジニアであれば、動的型付け言語(Java, Go, C, C#など)と静的型付け言語(Ruby, PHPなど)で1つずつ実務経験を積むことです。

理由は

  • 幅広い案件に挑戦できる
    • 言語の特徴が違うため、使われるサービスの毛色も変わってきます。色んな案件に関われた方がフリーランスとしての寿命も伸びるし、仕事に飽きない。
  • 将来的な学習コストを下げれる
    • Ruby経験者であれば同じ静的型付け言語のPHPを学ぶのは難しくないですが、Java, C#を学ぶのはコストが高いです。異なる特徴の言語をそれぞれ学んでおくことで、他の言語に挑戦しやすくなる
    • 実際、Go言語の案件だと経験者が少ないためJava経験者ならOKという案件も結構あります

私は実務経験だとRuby, JavaScript(React/Vue/TypeScript)しかなかったので、ちょっと後悔しました。

なんとかGo言語を勉強してGo言語の案件取れましたが、仕事しながら(子育てしながら)は大変だったので、会社員のうちに経験しておいた方が良いです。

ちなみに、JavaScriptはフリーランスになってからでも簡単に実務経験を積める印象です。

フロントエンドエンジニアが少ないスタートアップやベンチャー企業で、サーバーサイドがRuby, PHPでフロントエンドがVue, Reactって構成を採用している企業は多いので、そういったところにサーバーサイドエンジニアとして参画するだけです。

フロントエンドのチームが無いところだと、フロントの機能開発も一緒にやってくださいとか普通なので。

-キャリア

© 2021 フリエン生活 Powered by AFFINGER5