背景
とある現場で Android(Kotlin) 案件をこなしていたのですが、別プロジェクトで Flutter を使った Android アプリ開発案件が同時並行で進んでいました。
未経験ではありましたが元々興味があり、Flutter 案件の方もやりたいと希望を出したところ、無事希望が通りました。
そんなこんなで Flutter 未経験から 2 ヶ月でバリバリ活躍できるようになるまでに実践したこと、それらの実践から得られた教訓をまとめます。
当時の私のスキル
- Android(Java)の経験が 3 年くらい、Kotlin も同時並行で勉強中
- アーキテクチャという概念を最近知った
- リアクティブプログラミング未経験、概念よくわからない
まずは簡単な UI 修正から
まずは簡単な UI 修正から入りました。
アーキテクチャは BLoC パターンでそれ自体は初めて聞いたものの、UI とロジックがきれいに分割されており、該当の箇所を見つけ出すのもさほど難しくはありませんでした。
Dart という未知の言語で書かれてはいるものの、書き方は Java に近い感じで割と読めました。
とはいえ、レイアウトの組み方は独自だったので、そこは英文を読みながら辞書を引く感覚で適宜調べました。
具体的には Row だったり Column だったりのレイアウト、テキストやボタン、入力ボックスなど、対応するウィジェットはどれかといった内容です。
とりあえず頭で「こう組めばいけるんじゃないか」というイメージを浮かべながら、実際にネットのサンプルを見様見真似で打ち込み、表示させてイメージとの差分を明らかにしました。
イメージと実際の表示が一致すれば OK、一致しなければ何がダメだったかを考えてまた別の手を試してみる。そして一致するまで繰り返す。
このトライアンドエラーを黙々と繰り返す中で、徐々にノウハウが構築されていきました。
期間内にきちんと結果を出す
未経験とはいえ仕事なので、結果を出さなければいけません。
自分が心がけていたのは、「1 日の仕事の中で何か 1 つ成果を出す」ことです。
成果を出すことで、「今日はここまで理解が進んだ」とポジティブな気持ちが生まれ、明日も頑張ろうというモチベーションが生まれます。
わからないと立ち止まるのではなく、とにかくトライアンドエラーを繰り返しまくり、何としても成果を出すようにしました。
もちろん 1 人で悶々とすることもあるので、そこは悩む時間を決めて、一定時間悩んでわからなかったらチームの方に相談しました。
レビューを受ける
レビューは自分が気づかなかったプログラムの穴を気づかせてくれます。特に初心者のうちは経験者のフィードバックがもらえるというのは素晴らしい機会でした。ガンガン活用し、さらに力をつけました。
徐々にステップアップしていく
ある程度 UI 修正をこなしたのち、新規画面の作成やロジックの修正、新規追加も担当することになりました。
ロジックを修正するにあたってどうすればいいかわからなかったので、まずは今まで何となくで放置していた BLoC パターンの理解を進めることにしました。
BLoC パターン、Stream と Sink、リアクティブプログラミング、Observer パターン、といった具合で気になったキーワードも全部調べました。
ただ、あまり深追いはせずに「こういうものなんだ」という数割程度の理解で止めてから、他のロジック処理を見様見真似で実装しました。
ここでも UI 修正と同様、イメージを浮かべながら実際に試して、ダメだったらまた別の手を試すといった具合でトライアンドエラーを繰り返しました。
結果、少しずつロジックの修正や追加も難なくできるようになっていきました。
壁にぶつかりながら理解していく
ベテランエンジニアでも一度も壁にぶつかることなく順調に実装が進むことはありません。予想し得ない何かが起こり、壁にぶつかることもあります。何度も書いていますが、トライアンドエラーを泥臭く繰り返しました。
初心者とベテランの大きな違いは壁にぶつかった時の対処の仕方にあると思っています。
初心者は得体の知れない壁に恐怖して慌てふためきますが、ベテランは冷静に状況を分析し、原因をきちんと調べて論理的に解決します。
どうして冷静に対処できるのかというと、個人的には「壁というのは往々にして現れるもので、壁にぶつかることで理解も深まる」とポジティブに考えているからだと思っています。
新しいことを学ぶことを楽しむ
壁にぶつかる、ひたすらトライアンドエラーを繰り返す。
こう聞くと気が滅入りそうですが、Flutter という最新の未知なる技術に触れている。これを使えばクロスプラットフォーム開発ができる。より未来の選択肢が広がる。と考えれば、ワクワクしてこないでしょうか。新しいことを学ぶことにはいろいろなメリットがあります。ポジティブに考え、新しいことを学ぶことを楽しみましょう。
まとめ
ここまでの実践を踏まえて得られた教訓をまとめます。
全部わかってから始めるのでは何もできないし、始まることすらない
ここまで読んだ方には察しがつくかと思われますが、理解するためにはやってみて壁にぶつかるという過程が必須です。全部わかってから始めるのでは何もできないし、始まることすらないでしょう。
全てを理解しなくても開発はできる
上述の話と少し被りますが、どんな言語を学ぶにせよ文法だけでなくパフォーマンスやどう動くかの仕組みなど、学び出せばどこまでも学ぶことができます。非常に奥が深いです。
要するに、最初から完璧を目指すとあまりの奥の深さに間違いなく挫折します。
私も Flutter の全てを理解しているわけではありません。
全てを理解しなくても開発はできます。
だからといって学び続けるのを止めてはダメですが。
自走力をつける
上述の話を念頭に置いた上で、ぜひ何かアプリなりサービスなりを独学で作ってみてください。
自走力というのは何かを 1 人で成し遂げるという経験を積むことで身についていくものだと私は考えています。
その中で達成感や学びを得ることで、徐々についていくはずです。