気休めだけの甘い言葉は書きません。
最近は多くの企業やサイトで、使い捨てられるプログラマーが欲しいがために、甘い言葉で初心者プログラマを誘い出しています。
この記事では、まずは「現実」をちゃんと理解してもらった後に、稼げるエンジニアになるための王道を示します。この王道とは、「時には苦しいし、コツコツ努力はしないといけない」けど、ある程度は確度が高く、成果を出しやすい方法だと考えています。
私はかつて大手企業の正社員エンジニアとして就職しましたが、その安定した道を捨てて、文字通りゼロからフリーランスエンジニアとして活動しご飯を食べさせていただいています。以下は、その私が実際にやってきたことでもあります。
お時間のある方はぜひ参考にしてみてください。
「初心者からフリーランスプログラマー」が簡単にはいかない理由
初心者に近い状態からフリーランスになるのは「絶対に無理」…とは言いません。
実際に、週末のお小遣い稼ぎ程度でもいいなら、誰でもプログラマーの仕事をこなせると思います。
ですが、実際には限りなく難しいものになるでしょう。
初心者からフリーランスの仕事をするのに、大きく分けて2つのハードルがあると思います。
- 仕事を受注できない
- 仕事を完了できない
仕事を受注できないのはなぜ?
1点目の「仕事を受注できない」のは、正確には「単価の高い」仕事を受注できないことです。
フリーランスとして働く上で、仕事を依頼してくれるクライアントの存在を忘れてはいけません。
フリーランスとして働き初めには自分から仕事を探して受注していくという営業のフェーズを避けては通れません。そのときに、クライアントの要望(欲しいもの)をどれだけくみ取って、どれだけ魅力的な提案ができるかで、受注内容(単価)が大きく変化するのです。
山程いるクライアントの、文字通り山ほどあるプロジェクトの中には、数時間で完了できるかんたんなタスクもあれば、数ヶ月単位のコミットが要求されるものまであります。
かんたんで単価の低い案件は、あらかじめ要求される作業が確定していて初心者でもこなせます。知識も実力もなくても何となくできちゃったりしますよね(成果のクオリティは別の問題です)。
難易度 | 初心者が | 単価(報酬) |
---|---|---|
高い | 対応難しい | 高い(目指すところ) |
低い | 対応できる | 低い |
※あくまで傾向であり、案件により大きく差があります。
しかし、多くのプログラマーが目指すのは、クライアントの抱える根本的な問題が解消できて、高単価・高時給の案件のはず。そうした案件は初心者の段階で受注することは不可能に近いのです。なぜだと思いますか?
それはプログラマとしての能力が低いうちは、クライアントにとっての悩みを適切に拾ってあげることができず、クライアントにとって魅力的な提案ができないからです。
クライアントがクラウドワークスやランサーズに掲載する文言は、クライアントが本当に欲しい内容を「1から100まで」全部書いてあるわけではありません。実際、システムのことをよく分かってないクライアントが、斜め45℃の内容を要件にしていることも多いです。
そんなところに、何もわかっていない初心者のプログラマが、クライアントの本当にほしいことを汲み取って、納得してもらえる提案ができるでしょうか?
少なくとも、ミラクルが起きなければ無理だと思います(奇跡が起こっても、プロジェクト中に問題が起きておじゃんになるリスクしかないですよね)。
高単価のプログラマ受注の流れ
(あまり無いパターン)
クライアント 「A、B、Cの機能を持っているプログラムを〇〇という言語で作って」
エンジニア 「OK」
(報酬が高いエンジニアのパターン)
クライアント 「プログラムはよく分からないが、とりあえずXのデータを加工してYがほしい」
エンジニア
「A、B、Cという機能をもつプログラムならYが取れるようになるよ。~の期間で~くらいで作れるけどどう?ちなみにもしXが~ならDという方法が便利だけど、そっちでも対応できるよ」
また(よく言われることですが)クライアントがフリーランスのプログラマーを選ぶとき、判断材料の一部になるのは仕事の実績です。
これまでどのような仕事を行ってきたかによって、そのプログラマーのスキルや自社の依頼内容にマッチしそうかなどを判断するのです。
実績がない初心者のフリーランスプログラマーの場合、どのような仕事ぶりをするのか判断しにくいですよね。
とはいえ、サイトに表示されるプログラマーの実績も確かに重要ですが、個人的にはそれよりもやっぱり提案能力が最重要だと思います。
実際、私もフリーランスとして参入した当初(もちろん実績ゼロ)、提案を吟味しまくって初回に受注したのは1件40万円のプログラム改修案件(若干ぼかしています)でした。それまで実績はありませんでしたが、初回受注の内容としては上々のものだったと今でも思います。そのとき受注した内容はその後実績としても書けるようになりました。
仕事を「完了」できないのはなぜ?
2点目の「仕事を完了できない」というのは、わかりやすいですね。
プログラマーとはコンピュータのプログラムを構築するエンジニアです。
既存のプログラムがあるプロジェクトならまだしも、新規の開発ではゼロから要件をつめて設計し、実装したうえで、案件によっては実際に稼働するまで対応しなくてはなりません。
それをこなすには、プログラミング(とシステム)についての文字通り専門的な知識・スキルが必要不可欠です。
これらを習得してない状態で受注しても、報酬が発生する段階までたどり着くまえに挫折するのは目に見えています。
最終的に身に着けないといけないスキルは多岐にわたる
受注 | コミュニケーションツール、営業方法、ビジネス敬語、プロジェクト管理 |
開発 | Excel・Word、言語の知識、関連システムの仕組み、テストの方法、データ分析 |
納品 | 請求書などの作成、収支計算、税金関係 |
でも初心者から高給取りに変われるのはリアル
初心者からフリーランスプログラマーになるのは難しいことではありますが、決してなれないわけではありません。
むしろ、未経験から出発しても高給取りを目指せる理由があります。
ポイントは投資の世界と同じで、マーケットの大きさと自分の発揮できる能力、利益をどれだけ伸ばせるかというところです。
そもそもエンジニアは、
- 需要が大きい
- 労働対価が比べ物にならないほど高い
- 成長率が大きい
という面があり、こうした要因を生かして高給取りに変わるのは現実的です。
需要が大きい
1つは、IT業界の人材不足です。
さまざまな業界で業務効率化は常に進んでいて、業務改善や自動化・AI化の重要性は増し続けています。
しかし一方で、それを実現するためのIT業界では人材不足が発生しています。需要に対して供給が追いついていないのです。
つまり、エンジニアを目指したいという人はもれなく歓迎されやすい状況にあるということです。この状況はここ数年の傾向にあります。
人材への需要が大きく供給が不足していれば、後で説明するとおり、単価(もらえる報酬)も高くなります。
労働対価が比べ物にならないほど高い
企業に雇用されて働く場合と異なり、フリーランスは自分の裁量で仕事を受注することができます。
もし正社員として働くとすれば、適度に役割分担された仕事に対し組織のメンバーの1人として取り組むため、取り組める仕事量ではおのずと限界があります。
一方、フリーランスでは、自分の力量を超えない限りより多くの仕事に取り組むことができます。フリーランスには理論的に同時にこなせる案件の上限など無いのです。
収入についても、間に余分な会社が入らないので、クライアントから受け取る報酬はそのまま自分の売上になります。税金や仲介の手数料を除けば、ほとんどの割合がプログラマの収益として計上できるのです。
さらに、エンジニアの場合、オフィスを借りなくてもパソコンとインターネットなどの環境さえが揃っていれば、自宅やカフェでも業務を行うことが可能です。つまり、他の業態と異なり、初期投資のコストがかなり抑えられます。毎月の費用となるのは電気代と回線費、ソフトのライセンスくらいです。これにより、売上(報酬金額)がほとんどそのまま利益になるビジネスとなるわけです。これほど有利なお仕事は他には数少ないでしょう。
成長率が高い
エンジニアの仕事では、ひとつのことができるようになるとそれを他の様々な案件に活用することができます。
例えば、言語の「Python」をある程度使えるようになると、一般的なデータ分析や機械学習の仕事だけでなく、言語・画像解析のプログラム作成、ブロックチェーン関連、WebアプリやWindowsなどのネイティブアプリの開発…などなど、あらゆる方面で活用できます。
同じように、OSやハードウェアやネットワーク、データベースといったスキルは、幅広く応用できる基礎となる知識です。
つまり、ひとつの知識・スキルを覚えれば、受注可能な案件が一気に広がることになります。
こうした知識・スキルを一歩一歩身に付けていけば、次第に複雑で高単価な案件にも対応できるようになるでしょう。そうすれば高給取りプログラマーの仲間入りです。
未経験・初心者がフリーランスプログラマになるまでの3ステップ
初心者がフリーランスプログラマーを目指すには、しっかりステップを踏んでいくことが大切です。
- スキルを伸ばす
- 仕事の見つけ方を知る
- とにかくアウトプット
スキルを伸ばす
まず1つ目のステップは、フリーランスのプログラマーに必要なスキルを身に付けることです。
先に触れた通り、プログラマーにはプログラミングのスキルは欠かせません。
基礎的なスキルがないまま始めても、高い壁に当たって砕けるだけです。
最初に独学で勉強してみるのが基本ですが、人によっては知り合いに教えてもらったり、スクールに通う方が合っている人もいます。
いずれの場合でも、スキルの伸ばし方のコツは「高くアンテナを張る」こと。
手を動かしてプログラムを書くことはもちろんですが、それ以外にもセミナーに参加したり、IT系のニュースサイト・SNSを定期的にチェックするだけでも差が付きますよ。
さらに、(積極的におすすめしませんが)まずはIT系企業で働きながら、実際の業務フローを身を持って覚えるという方法も1つでしょう。とはいえ、就職すれば自動でスキルが身につくわけではなく、自分でスキルを獲得しにいく積極的な行動(関連書を読む、セミナーに参加する)などは絶対不可欠です。
仕事の見つけ方を知る
2つ目のステップは、仕事獲得の方法を探すことです。
フリーランスはどのように仕事を受注するかで対応できる案件数や利益が変わってきます。
創業から何年も経っている企業と比べれば、フリーランスは「信用ゼロ」の状態から始めなければなりません。
そのため、仕事に繋がる可能性のある人・会社との円滑な関係(人脈)を構築することは非常に重要です。
そうした関係づくりの方法には、エンジニアが集まる交流会に参加したり、セミナー・勉強会に参加したりするなどがあります。SNSやビジネスマッチングサービスなどを活用し、営業の「下地」をコツコツ作っていくのも定番です。
さらには、以前働いていた会社と取引することも実際よくあります。正社員として働いていてもコネや連絡先は重要というわけです。
フリーランスエンジニアが仕事を受注するいろいろな方法
- クラウドソーシングサイトに登録
- クライアントからの継続依頼
- スキルシェアサイトで販売
- エージェント登録
- 知人・友人から仕事を紹介してもらう
- 昔の会社や得意先から仕事をもらう
とにかくアウトプット
3つ目のステップは、何よりも手を動かしてアウトプットをすること。これは必須であり、一番重要なことです。
その理由として一番大きいのは、実績を積む必要性です。
フリーランスとして活動していくのには、これまで説明したとおり、クライアントが見て納得できるようなスキルと実績を示さなければいけません。
本やネット、スクールで学んだことはすぐに実践してみましょう。自分のできる開発能力をつぎ込んで作ったプログラムやサービスは、力量を表す作品という点で、ポートフォリオと呼ばれます。最初はどんなにしょぼくても、見た目が悪くても構いません。これはダメだなと思ったら公開しなければいいだけのこと。逆に、手を動かして自分のアウトプットを作らないことには、何も公開できませんし信用を勝ち取ることもできません。
また、実務的な理由もあります。
フリーランスのプログラマーに必要なのはプログラミングのスキルだけではありません。企業では、広報が宣伝やマーケティングを行い、営業が仕事を受注し、経理などのバックオフィスが書類のやり取りや代金の請求などを行います。フリーランスはこのような本職以外の仕事も全て自分で行わなければなりません。したがって、自分の仕事を宣伝するマーケティングスキルや、クライアントとやり取りするコミュニケーション能力、事務処理スキルなども少しずつ身に付けていく必要があります。
ですが、こうしたビジネススキルは、実際にやってみないことには覚えることができませんし、身に付きません。まずは身の丈にあった案件を実際に受注してみて、納品・プロジェクトの完了まで実践してみましょう。
これで初心者を脱する!(現実的に)スキルを身につける方法
初心者からプログラマーのスキルを自分で学ぶにはおおまかに3つの方法があります。
独学
1つは、本やネットを利用して独学で学ぶ方法。
大型の書店に行けば、ほとんどのプログラミング言語に関する本が並んでいます。内容のレベルも初心者向けから上級者向けまで幅広いので、自分の習熟度に合わせた本を選べます。
本で勉強するメリットは自分のペースでできるのはもちろん、重要な情報が読み取りやすく、初心者が迷いにくいことが挙げられます。私もはじめて勉強するジャンルは、今も昔もまずは本を読む派です。デメリットは本がかさばることと、(特に普段運動しない人は)持ち運びがしにくいところ、そして継続しにくい(飽きる)ことです。
また、最近ではネットでも十分すぎるほどの教材も揃ってきています。技術について詳しく解説したサイトはもちろん、初心者向けチュートリアル、QAサイトも発展しているので初心者に優しい世界となりました。とはいえ、ネットで勉強する大きなデメリットは、初心者が本当に学ぶべきレベルの情報が隠れているときがあること。いきなり難しすぎるチュートリアルを始めちゃって挫折する新人さんを何人も見てきました。
これらを駆使すれば、だれでも、低コストでスキルを身に付けることが可能です。ですが、説明したように、初心者がぶつかる壁はどんなところにも存在します。そんなときに助けてくれる人は、独学の場合は残念ながらいません。
スクールに通う
また、プログラミングスクールなど、専門的に教えてくれる場所に通うという方法もあります。
スクールのメリットは、講師がいるのでわからない部分はすぐに教えてもらえること、効果的なカリキュラムがあらかじめ作られているため効率的に学べることです。
デメリットは、御存知の通りコストがかかること。とはいえ受講料はスクールの内容によってまちまちです。
また、スクールによっては質の低い講師・内容で運営しているところもあるので、気をつけないといけません。
仕事を通じて学ぶ
スキルを身につける最後の方法は、実際にプログラムの仕事を受け、納品することです。そして、これが一番重要で効果的だったりします。
企業で働いている人は、フリーランスとして開業する前に、副業のプログラマーとして仕事をすることをおすすめします。学生さんの場合でも、学校に通いながらバイトをする代わりに、プログラムを書いて納品しましょう。
まずは簡単な依頼を受けるところからスタートし、業務を多くこなして実践でスキルを身に付けていきます。副業とはいえ、仕事の受注から代金の受け取りまで全て自分で行うので、何をすべきかわからないところがたくさんあって大変な部分もあるはずです。
ですが、分からない事・できない事が明らかになったときこそが貴重な成長のチャンスです。
また、副業でも本業でも、フリーランサーとしての名前は共通です。なので、実際にフリーランスとして起業しても、副業で培った実績とクライアントはそのまま引き継がれます。副業時代にお引き立ていただいたクライアントから引き続き案件を貰えることは大きなアドバンテージですし、安定した収入を維持するのにも重要です。
そう考えれば、あれこれ考え込まずにまずは仕事を受けてみた方がいいと思いませんか?
プログラマ初心者の危ない行動3選
最後に、フリーランスエンジニアを目指すプログラマ初心者がやりがちな危ない行動3選をまとめておきます。
本当によくやりがちで危ないと考えている内容なので、ご参考にしていただければ幸いです。
- 稼ぐことに焦る
- 完璧主義
- 新しい話題に触れない
これらはプログラマーとして生計を立てていく上でトラブルに繋がったり、将来的にまずいことになる可能性が大きい行動になります。
稼ぐことに焦る
まず、フリーランス始めたての初心者プログラマーほど、目先の利益にこだわりすぎていないか?という視点です。
「目先の利益」には色々な意味を含んでいて、↓こんな感じが危険なサインです。
「受注できれば何でもアリ」
「高単価の案件が受注できそうだから」
「低単価でも数こなせばいいよね」
「とくかく数撃ちゃ当たる」戦法で営業活動・提案活動をすること。
もちろん営業や提案活動だけに時間をかけすぎるのも、報酬が発生する作業にかける時間が足りなくなってしまうので、ダメです。
そうはいっても、いい加減な営業をしているだけだと、自分が本当に得意でやりたい仕事はいつまでたっても獲得できません。
また、〇〇言語なら高単価の仕事ができる!という噂でその言語を勉強するのも、ちょっとどうかなと思います。
単価が高いということは、それだけ対応できる人材が不足していて、言語自体の特性が難しい場合が多いでしょう。それゆえに、勉強自体が困難かもしれません。また同じように考える人は必ずいますから、競争率が高くなり結果的に収入が伸びないことも予想できます。このように、どんなときにも経済は合理的に動くものです。初心者が難しいジャンルをちょっと勉強したくらいで、高い収入を(継続して)獲得していくのは無理があります。
とはいえ、世の中のニーズは実にさまざまです。
たとえ実績がなかったり、システムや言語に完全に精通していなくても、クライアントの期待を的確にとらえた提案ができれば、自然に高い報酬をもらえるものです(もちろん、求められる仕事を最後まで完了できれば、の話です)。
ですから、最初からなんでもかんでも低単価のしごとばかり受注するのも、微妙な行動です。特に「タスク」として分類されるような、誰にもでも(プログラミングのスキルがなくても)できる仕事をこなすだけなのは(確かに実績は溜まっていきますが…)収入の上昇には一切役に立ちません。自分のスキルアップにもつながらないので、正直のところ、時間を切り売りするだけになってしまします。それってもったいないですよね?
完璧主義
2点目は完璧主義です。3つの中でも一番よく見かける問題行動です。
どういうことかというと、「とりあえずコレ全部覚えてから始めよう」マインドです。
とりあえず、この本を最初から最後までやってみよう
とりあえず、この講座を最後まで受けきってから後のことは考えよう
とりあえず、この言語ですごいアプリ作ってアピールしよう
これらは大体うまくいきません。
「勉強してから」とか、「全部身につけてから」案件を受注しようというマインドでは、いつまでたっても仕事を受注できないのは周知の(?)事実です。
もちろん、網羅的に・効果的にという姿勢はどんな勉強でも不可欠ですし、それ自体は良いマインドです。
ですが、いざ仕事をするための勉強となると、効率的に大事な情報を取得するのも必要なことです。最初は難しいかもしれませんが、気にしていれば次第に情報の取捨選択ができるようになります。
それに、勉強自体はたとえプロのエンジニアになってからも毎日継続するものですし、終わりのないものです。特にこの業界は1ヶ月でも激変するほど変化が激しく、常に新しい技術やツールが登場しています。
それゆえに、完璧の状態はやってきません。
また、自分の理解度と実際のパフォーマンスについては最近バズってた図がわかりやすいですね。
自信と理解度の関係を図にしました。#完全に理解した pic.twitter.com/SA638Vy9UH
— 廻転楕円体 (@kaitendaentai) October 17, 2018
この図をみると、本当に初心者レベルから脱するなら相当の努力が必要になるのです。
それほど「完璧な状態」にした後に実際のしごとを受注するとなると、何年かかるんでしょうか…。まずは自分のできるレベル+αで仕事をこなしていくのが重要だと考えます。
新しい話題に触れない
3点目は新しい技術やツールに興味をもたない問題です。
もちろん、初心者は最初はひとつのスキル・言語が自由に操れるようになることを目指した方がいいのは間違いありません。それができないと最初の仕事・実績をつくるのも難しいからです。
とはいえ、一つの技術・言語・ジャンルに固執するのは危険です。そこでずっと稼ぎ続けるのは難易度が高いからです。
同じ言語が使えるエンジニアは世界中に大量にいますし、ひとつのスキルで将来もずっと稼いでいこうとすると、それこそ専門家のレベルにまで自分を高めないといけません。その技術が大好きで身も心も全部捧げられるならまだしも、それはどんでもなく険しい道ですし、技術は陳腐化(時代遅れになる)するので失敗するリスクも高いです。
技術力をしっかり高めていくなら、以下のようなプロセスがおすすめです。
- ひとつの技術(スキル・言語・システムの知識)をある程度高める
- 仕事などでアウトプットする
- 並行して新しい技術を学ぶ
- 1に戻る
すでに説明したように、新しい技術は日々登場し、言語やツールはアップデートされています。そのすべてをキャッチアップする必要はありませんし、それは無理ですが、自分のできる範囲プラスαの範囲で少しずつできること(知っていること)を増やしていく必要があるでしょう。
ひとつの事ができるようになったら、その周辺に少しずつ侵食していきましょう。そうすれば受注できる仕事が広がり、収入も右肩上がりになるはずです。
まとめ
初心者からフリーランスを目指すプログラマーについて解説しました。
結論としては、「難しい部分もあるけど、しっかり目標をもてば十分到達できる」という感じになります。
ぜひ一度チャレンジしてみてください。
ご質問などありましたら、Twitterなどでお気軽にメッセージをお送りください。目標をもって頑張る人、勉強する人の味方であり続けます。