【最強の学習法】駆け出しエンジニアは全員個人開発をやった方が良いという話
こんにちは、Gonです!
エンジニアのスキルアップにおいて、
実務経験に勝るものはありませんが、個人の学習に限れば断然『個人開発』が最強だと確信しています。
今回は、僕自身がエンジニアとして爆速に成長できた方法をお伝えします。
資格や検定試験など、机上のインプットに重きを置かれる方も多いですが
個人的には、0から1を生み出す個人開発こそが、最も効果的で実践的な学習方法だと考えています。
会社で理想的な環境に恵まれなくても
「自分次第でいくらでもスキルアップできるんだ」ということをお伝えできたら嬉しいです。
はじめに
先日、Xでこんな投稿をしました。
理想を抱いてエンジニア転職したものの、実際には希望する経験を積めていない方が多いのが現実です。
僕自身も同じで、最初に入社した会社ではJavaのレガシーなシステム開発からスタートしました。
しかし、個人開発をきっかけに、より自由度が高くモダンなAndroidアプリ開発(Kotlin)のエンジニアへとキャリアチェンジすることができました。
最初から理想の環境で働けることが一番望ましいですが、個人開発で補完することで、自分次第でいくらでも理想の環境は作っていけます。
この記事は「駆け出しエンジニア」向けと銘打っていますが、実際には現役エンジニアや成長の壁を感じている方など、すべての方へ向けたメッセージです。
なぜ個人開発なのか
皆さんも、こんな悩みを抱えたことはないですか?
- 希望していた開発経験が積めていない
- 自分のスキルが本当に向上しているのか不安
- 日々の学習がインプットだけで終わってしまう
- ただ漫然と経験年数を重ねているような気がする
- これまでの成果が見えづらい
- 資格や職歴以外に、実力を証明する手段がない
安心してください。これらの悩みは、すべて個人開発で解決できます。
ただし、誤解のないように伝えておきたいのですが、ここで言う個人開発はアプリやサービスをリリースして収益化を目指すとか、大層なものを作るとか、そういった話ではありません。
大切なのは「インプット → 個人開発でアウトプット」という学習サイクルを継続的に回していくこと。
参考書やUdemyの教材などハンズオン形式で学習できるものも多いですが
正直、ほぼインプットに近い学習なので、実際に現場に入ってみると全く手を動かせないことが多いです。
そこで、どんなに小さなものでもいいから、自分のアイデアを早い段階で形にする「0→1のプロセス」を経験することが大切だと考え、個人開発を始めました。
個人開発を通じて得られる成果、エンジニアとしての成長にどう結びつくのか具体的に解説していきます。
明確な目標と期日設定
本題に入る前に、まずは大切なマインドセットについて触れておきましょう。
- 目標設定(なぜ、学ぶ必要があるのか)
- 期日設定(いつまでにその状態を実現するのか)
なんのためにやるのかはまず大前提として
『達成した先で得られるメリット』を自分の中で明確にイメージしておくことが一番大切です。
よくありがちなパターンは、
「あれ、なんのために勉強続けてるんだろう?」
って、結局気づいた時にはやらなくなってました、みたいな状態です。資格勉強でもよくある話ですよね。
正直、時間をかければ誰でも技術は習得できますが、継続できないことが一番の問題です。必ず、動機付けの部分は明確にしておきましょう。
例えば、
「半年後にはAndroidエンジニアとして月50万以上稼げるようになる」
みたいに「よっしゃ、やってやるぞ!」と思えるような目標ならなんでも良いです。
(実際、独立すれば月50万は現実的な数字です)
頑張った先で得られるメリットをしっかりと把握して「今頑張った方が長期的にお得じゃない?」と自然に思えるくらいマインドを持っていくことが大事です。
次に、学習を進めていく上で重要なポイントが2つあります。
- 全体像を掴む
- アウトプットベースにした学習
この順序を守ることが大事だと考えています。
逆に、最初に一番やってはいけないのが「とにかく開発する」とか「とにかく手を動かす」こと。
これは乱暴すぎます。
自分が今何をしているのかも分からない状態で闇雲に進めても意味がないです。
- 「なんで理解できないのか」
- 「どの部分が理解できてないのか」
- 「どこから情報を参照すれば良いのか」
解像度が高ければ何が理解できてないのかどの部分で立ち止まってるのかを自分で判断できます。
まずは『全体像を掴む』こと。
最初は圧倒的にインプットを増やして、ひたすら情報を仕入れて頭の中でイメージを作っていきましょう。
具体的には、参考書や公式チュートリアル、Udemyなどの教材を活用して集中的にインプットします。
全体像を掴むために、公式ドキュメントを隅々まで読んでみるのも面白いと思います。僕は公式ドキュメントを読み込む日を作っていました(笑)
その上で、インプットした内容を個人開発を通してアウトプットしていく。
このインプットとアウトプットのサイクルが、最も効果的な学習方法だと実感しています。
最強の学習法について
では、個人開発の学習法やメリットについて具体的に解説していきます。
具体的な手順
核となるのは以下の2つのステップです。
- 個人開発(0→1で自分の考えを形にする)
- 技術記事の執筆(ZennやQiita)
このサイクルをひたすら回すこと。これだけです。
個人開発で0→1で試行錯誤を重ね、その経験を最終的に記事にまとめることで思考を整理します。
この過程自体が大きな学びや気付きのきっかけになりますし、何より目に見える形で技術資産として積み上がっていくので、確かな自信に繋がります。
実務では既存システムへの機能追加など表面的な作業が続くことも多く、なかなかスキルアップを実感しづらいという方も多いと思います。
僕も最初の一年目はそうでした。
個人開発の実践方法
とにかくゼロから一通り経験してみることで、様々な課題と向き合えます。
- アプリの構想からプロジェクトの立ち上げ
- フォルダ構成や技術選定、アーキテクチャ設計
- 実践的なGitHubの運用
- 開発方針決めからテストなど
特に見習いのうちは技術選定などに関わる機会が少なく、理由も分からないままベテランエンジニアの助言に従うことが多いものです。
- なぜこの技術スタックを選択したのか
- どういった方針で開発を進めていくか
- テストはどこまでカバーすべきか等
与えられたことをこなすだけでは本当の意味での成長は難しいですが、個人開発では自分の頭で考えて判断を重ねることで、確実に成長できます。
自分のペースや好みで試行錯誤できること、足りない知識やツールを自分の開発環境で気軽に試せることも個人開発の大きな強みです。
なにより、アウトプットを通じて自分の成長が目に見えて実感できるのが楽しいですよね。
その先で余裕があればアプリをリリースしてみたり、Githubにコード公開してみたり、周りにも認められ始めるとさらに良い循環が生まれていきます。
資格や検定の勉強も否定はしませんが、現場でいち早く成果を出せるエンジニアになるには、アウトプットベースの学習が最も効果的だと実感しています。
時間は有限です。目標から逆算した上で何に時間を使うのか、時間配分や優先順位はものすごく大切です。
GitHubを活用した方が良い理由
個人開発で欠かせないツールの一つがGitHubです。
メリットは言うまでもないかもしれませんが、具体的に解説していきます。
まず、大前提、Gitはチーム開発におけるバージョン管理のデファクトスタンダードです。
GitのホスティングサービスはGitHubが有名ですが、GitLabやBitbucketを使ってるところも多いです。(ちなみに、今の案件ではGitLabを使ってます。)
僕が最初に入社した企業ではSVNを使っていたので、古き良きバージョン管理ツールを愛用してる会社も多いと思います。
Gitはあくまでもバージョン管理ツールの一つでしかないですが、チームで開発を進めていく上では、ほぼ必須スキルと言っていいと思います。
なので、GitやGitHubの扱いには慣れておく必要があります。
- ブランチモデルの活用
- コミットの粒度や命名の一貫性
- PRやIssuesの効果的な使用
- GitHub ActionsでのCI/CD構築
- 分かりやすいREADMEの作成
- ...
プライベートの学習からこういったチーム開発を想定した運用を意識できると、実際に現場に入った時の自信にもつながりますし、自分の意見もしっかり言えるくらい着実に知見が溜まっていくと思います。
また、GitHub上には世界中の企業や開発者が公開している良質なリポジトリが山ほどあるので、普段から検索かけて参考になるリポジトリや運用方法を見つけておくのも面白いと思います。
あとは、学習記録をGitHub上で一括管理する使い方もすごくおすすめです。
- 資格や検定試験のアウトプット
- 英語学習や書籍から学んだ知識のアウトプット
あらゆる学習活動をGitHubで記録することで、日々の進捗を草を生やせて視覚化できるようになりますし、毎日続けようって学習意欲も高められます。
以下は、僕自身がFlutterをキャッチアップしていた際のリポジトリになります。
少しでも参考になれば嬉しいです👋
何を作ればいいか悩む方へ
個人開発の重要性は理解したけど、そもそも何を作れば良いか分からずに足踏みする方も多いと思います。
正直、何を作るかはそれほど重要ではありません。
ToDoアプリでも、メモ帳でも、天気予報アプリでも何でもいいんです。大切なのは「作りきる」こと。
本格的なアプリにこだわりたい気持ちもわかります。でも、その分途中で挫折するリスクも高くなります。
最初は完璧を目指す必要はありません。
本格的な機能は後回しでOK。
シンプルな機能から始めましょう。
大切なのは0から一連の流れを経験することです。
例えば、
「企画構想→設計→実装→テスト→リリース」
この流れを、たった1週間でいいから経験してみる。
小さなアプリでも、企画から形にする経験は大きな自信になりますし、案外楽しいものです。
経験がないと「難しそう...」と感じて、勝手にハードルを上げがちですが、1回やってみると次からのハードルはどんどん下がっていきます。
それの繰り返し。やった者勝ちです。
とにかく適当なアプリやサービスで良いので、自分の頭で考えて、インプットしたものをアウトプットで形にしていくことが大切です。
最後に
以上が僕の考える最強の学習法でした。
- 個人開発(0→1で自分の考えを形にする)
- 技術記事の執筆(ZennやQiita)
このサイクルを回し続けることで確実に成長を実感できるはずです。気付いた時には、周りと比較して頭一つ抜けられると思います。
とはいえ、やはり実務が最大の成長の場であることは間違いありません。
いち早く現場に潜り込むこと、副業でも開発を行うなど経験を積む機会を増やしていくのもおすすめです。
今回の話が少しでも参考になれば嬉しいです。
最後まで読んでいただきありがとうございました!
Discussion