Udemyで未経験からFlutterエンジニアとして転職して幸せになる話

## 3秒まとめ

- Udemyはエラーハンドリングやリファクタリングを理解する点で、 **本よりもずっと優越した学習教材**である
- Udemyから **自分にマッチするコースを選ぶ方法** について
- Udemyを利用して、未経験からFlutterエンジニアになるまで

## 電車に乗って、周りを見渡した時、みんなが見ているもの

スマホです。

5分程度の短い乗車時間の人から、1時間近く乗っている方まで、みんなスマホを見ています。

**みんなが注目している画面を、自分の思いのままに操作できるようになりたい…**
そう考え始めたのが、プログラミング学習の第一歩でした。

とはいえ、iOSとAndroidを別言語で書くのはハードル高い。どちらかマスターしても片手落ちとなるとモチベーションもわかない。そうやってやる前からあきらめていました。

しかし、Flutterというフレームワークを使うと、Dartという1つの言語だけでiOS/Androidの両方をカバーできるらしい。さらに、Webも、Desktop（Windows, Mac, Linux）もすべて1つの言語で作れる。そんなマルチプラットフォーム対応という売り文句に、心が動かされました。

:::note info
モバイルのマルチプラットフォーム開発といえば、React Nativeも有名です。

しかし、JS/TSが得意な技術者以外にはあまり恩恵がないように感じています。

また、英語日本語含め、Flutterのコミュニティは盛り上がり続けているので、ドキュメントの数もFlutterの方が多いように感じます。

したがって、初学者が学ぶには、Dart/Flutter の方がおすすめです。
:::

## なぜ、プログラミングの学習にUdemyを選ぶべきなのか

プログラミングの学習方法は以下の3つに分類されます

**1. 本やドキュメントから独学する**
**2. 誰かに教えてもらう（スクール含む）**
**3. Udemyなどの動画教材で勉強する**

1つ目の本やドキュメントから独学する方法は、すでになんらかの言語をマスターしている場合にはとても有効です。自分の基礎的な知識をベースにして、差異を見つけ出し、効率的に学んでいくことができます。

しかし、特に得意な言語がない方にとっては苦痛です。本を隣において、コードを写し、実行する。いわゆる写経が必要になります。写経自体は悪いことではありませんが、誤植があったり、読みづらかったりして、実行に失敗するページが1つでもあると、初学者がくじける原因になります。**本は成功を前提に書かれているため、リカバリーが難しい** のです。

これは、初学者にとっておススメの方法ではありません。

2つ目の誰かに教えてもらう方法は、プログラミングスキルをもつ知り合いがいて、要点を教えてもらえるケースでは良い選択肢です。

しかし、いくら教えてもらうとはいえ、**実際にメンターと話す時間は短い** です。プログラミング習得に必要な時間のほとんどを、一人で戦う必要があることを覚えておかなくてはなりません。

また、スクールについては単純に費用が高い一方で、転職市場で全く有利ではないどころか、むしろ不利に働く場合すらあるので全くおすすめできません。

![スクリーンショット 2023-12-23 122626.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158786/9b70ed48-e2d0-5c75-150c-85967fe0d6af.png)


さて、本題のUdemyなど動画教材で勉強する方法について考えてみましょう。

Udemyの良い教材は、 **エラーが発生した時の画面、内容、解決方法** をそのまま見せてくれる特徴があります。

ある程度学習をすすめると、エラーは問題解決のための味方であり、多くは書いてあることをそのまま対処すれば解決することがわかります。

しかし、初学者にとって、画面に大量に表示される赤いエラー画面は怖いものであることは間違いありません。その解決方法は、メンターと一緒にひとつづつ潰していくことがベストです。

Udemyの優良な講座は、**ありがちなエラーをむしろ積極的に発生させ、なぜそれが起こったのか、どんな対応をすればよいのか** を教えてくれます。

動画教材といえば、YouTubeにも無料で講座となっているものがありますが、**私はそれよりもUdemyを推しています。**

YouTubeの多くの講座には網羅性がない場合が多いです。

また、いわゆる要点をつかんだ学習法のような短い動画だけをいくら見てもスキル自体が身につくことはありません。

さらに、5時間でマスター！などの動画は、長くて全部見れません。 **少なくとも私は見れた試しがない** です。

Udemyの場合、5分～10分程度のセクションにひとつづつ要点がまとまっており、**進捗が常に可視化** されます。人気の講座であれば、そのセクションごとにコメント欄が充実し、同じような悩みをもつ人の解決策をチラ見することもできたりします。

結局のところ、最後までやり抜くことが重要なので、**プラットフォーム側から進捗サポートが得られるUdemyは非常に優秀な教材** だと思います。

## 失敗せずに、Udemyのコースを選ぶ方法

![Untitled.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158786/cbb08da2-4949-230a-d019-5e50c49d69a0.png)


**1. サンプル動画をみる**
**2. 題材として何を作っているか**

私は、**サンプル動画をちゃんと見るのが一番手っ取り早い**と考えています。

1つのコースはだいたい20時間～30時間程度あります。**メンターの話し方や教え方が、長い時間耐えられるものか判断** するには、実際に見たり聞いたりするのが一番です。

正直、サンプル動画をみるのは面倒です。しかし、今後20時間以上投資すると考えると、数分のコストを受け入れてサンプルをしっかり見るのが一番の近道です。

また、サンプル動画は複数個あることが普通です。そのなかには講師の信憑性を証明する動画もあります。しかし、私は実際になにかを教えているセクションの動画を見ることを推奨しています。

なぜなら、**講師の経歴と教える技術は必ずしも相関するとは言えない** からです。逆に、フィーリングが合うメンターの動画は、抵抗感なくサクッと見続けることができるものです。

2つ目の方法として、**題材として何を作っているか** 確認することも重要です。

これから20時間以上かけて学んでいくなかで、最終的に作るものがTODOアプリだけだったら、モチベーションが湧きません。**自分が少しでもわくわくするアプリが作れるのか** 、それが大きな基準です。

## 私が選んだのは、**The Complete Flutter Development Bootcamp with Dartでした**

https://www.udemy.com/course/flutter-bootcamp-with-dart/

ぜひ、自分で講座を選ぶときは前述した方法で選んでほしいのですが、んじゃーあんたはなにを選んだの？って思う方もいらっしゃると思うので載せておきます。

私が選んだのは、[The Complete Flutter Development Bootcamp with Dart](https://www.udemy.com/course/flutter-bootcamp-with-dart/)です。

各所で紹介されている講座なので、詳しく語る必要はないと思いますが、優れている点を掻い摘んで紹介させてください。

動画教材ならではですが、このコースではコードがある程度長くなってくると、**リファクタリング**を行ってコードを分割し、**きれいな状態を保つ様子**が描かれています。

保守できるプログラムを書くには、コードがきれいに整理されているのが絶対条件ですが、リファクタリングについては本では蔑ろにされがちです。

コードが1つのファイルにどんどん長く書かれていくと、保守・拡張が困難になるため、なるべく早い段階での整理が必要です。この講座では、**そんなコードの整理方法が動画で理解できる点が良い**と感じました。

このコースでは、Flutter App Architecture Patternsというセクションで、**アーキテクチャ**について触れられていることも非常に良いと思います。

少しでも大きなソフトウェアを作る際に、いくつかのアーキテクチャを知っておくことは重要です。しかし、初学者がアーキテクチャの専門書などを読んでもなかなか理解が難しいというのはよくあることです。

このセクションをすべて見たらアーキテクチャを完全理解できるものでもありませんが、専門性を高めるうえで、階段を1つずつ上ることが重要であることから、**その一歩を踏み出せる**という点で、このコースは優れていると感じています。

リファクタリングやアーキテクチャの設計について考えることは、生成系AIよりもまだ人間が優れている部分だと思うので、重要だと考えています。細かい記法やロジックの実装は、もうAIに投げてもいいと思っていますが、それらを**なるべく早く、丁寧に統合する**には、これらの知識が必須です。

さらに、Flutterとセットで使うことの多いFirebaseとの連携方法や、**Firebaseを使ったチャットアプリの作成**など、作っていて面白い教材もたくさん含まれています。

TOEICを1回も受けたことがないくらい、英語に興味がない私でも、字幕と翻訳でなんとか受けられましたが、完全英語の講座ですし、ハードルは少し高いかもしれません。

現在は、日本語のコースも多数存在しているため、英語に自信がない方は日本語コースから選ぶのも全然アリだと思います。

**コースを選ぶ1つの基準**として、あなたのお役に立てればうれしいです。

## Flutter講座を修了してすぐに、Twitterトレンド１位を獲得した！

https://note.com/our_evidence/n/n938b875a3e6a

実際にUdemyの****The Complete Flutter Development Bootcamp with Dart****を1か月で修了して、その後の1か月でTwitterのトレンド1位を獲得することができました。

FlutterのWebアプリを作れる機能を利用、FirebaseのStorage, Functions, Firestoreなどを利用して作ったもので、特にUdemy以外のまとまった学習教材は利用せずにできたものです。

かなり運要素も強く、再現性があるわけでもないのですが、**Udemyで本当にプログラミングスキルがつくことは間違いないな** と実感しました。

## さらにできることを増やすべく、サーバーサイドとインフラを学ぶ

Flutterがわかってきたとはいえ、学ぶべきことがなくなったわけではありません。

たとえば、Twitterトレンド1位を獲得した推し色メーカーというアプリを作っていたときに、OGP画像の作成や、ユーザーデータのハンドリングなどがFirebaseではなく、**自分のサーバーでできたらもっと楽だし、やれることが広がるよな…** という感想を持ちました。

https://www.udemy.com/course/nestjs-t/

Dartでサーバーサイドをやるのは難しいものの、シンタックスがよく似ているTypeScriptを利用して、サーバーサイドを書けるNestJSを学んでみたり…

https://www.udemy.com/course/linux-docker-compose-dockerfile-kanzennyumon/

サーバーサイドのアプリケーションをなるべく簡単に、早くデプロイするためにDockerを学んでみたり…(Dockerfileを抵抗なくガシガシかけるのは、実務でも結構役立っています笑)

Udemyはとても広い範囲がカバーされているので、学びを得るためのファーストチョイスとなっています。

## そして未経験から転職へ

それまで薬剤師として働いていたのですが、うーん、どう考えてもコード書いてアプリ作るのが楽しすぎる。どんどん夢中になっていくうちに、**「ちょっと待てよ？」** という気持ちになりました。

「**普段の仕事より、コードを書くのがずっと楽しいのに、俺は一体何をしているんだろう？**」

自分の人生で多くの時間を費やすのは、こっちの方がいい。

そう思って、Findyを利用して転職活動を始めました。

年齢も32歳、未経験ですから、転職活動は難航するかな～と気が重かったのですが、運よく1か月程度で転職先が見つかり、今年の6月から実際に[Minedia](https://corporate.minedia.com/company)という会社でFlutterエンジニアとして働き始めることができました。

今ではFlutterにとどまらず、Go/GCPを使ってGraphQLサーバーやバッチ処理の面倒を見たり、Snowflake/SQLを叩いてデータを思うがままに読み書きできるようになりました。

もし、私と同じように未経験で、周りにプログラマがいない。

そんな方は、ぜひ**Udemyで一歩踏み出してみてください**。