はじめに
はじめまして、Androidエンジニアのa7therです。
Androidエンジニアとはいっても、まだまだAndroid開発に従事して8ヶ月の駆け出しのため、
自分なりの技術キャッチアップ方法と参画前後でどのようなことをしてきたかを書きたいと思います。
経歴
前提情報として自分の経歴を軽く..
業務系Webアプリケーション開発と組込み系Java開発に約6年従事していました。
そのため、エンジニア初心者というわけではなく、また、以下の本に影響を受けています。
特にデザインパターンはどちらもおすすめです。
Android開発では使わなくなってしまったパターンもありますが、コードを読む際に役立つことが多いです。
キャッチアップ方法の結論
先に自分なりのAndroidにおけるキャッチアップ方法の結論です。
現時点で新しいものをキャッチアップする場合、以下の方法で行っています。
キャッチアップで使うもの
- Android 公式ドキュメント
- Codelabs
- Android 公式 Github
- Android 公式 YouTube
- 公式以外のもの
- YouTube(DroidKaigi, 企業のTechChannel etc..)
- 記事(Qiita, Zenn, 企業のTechBlog etc..)
- ChatGPT
キャッチアップの流れ
まず、対象のAndroid 公式ドキュメントを読む
-> あまり理解できなかった場合
Android 公式 YouTube、公式以外のもの、ChatGPTを使って大体理解する
-> 大体理解できた場合
Codelabsで簡単なコードを交えて理解する
-> 理解できた場合
Android 公式 Githubで実践的なコードをみる
-> [番外編] 理解を深めたい場合
サンプルコードをかいて挙動を確認する
やったこと(時系列)
参画前(2ヶ月)
幸運にも、Android未経験にも関わらず、参画の機会を頂きまして、
本来は余裕を持って準備することをおすすめします。
自分は期間が短かったため公開されている技術スタックにフォーカスをあてて学び、
2ヶ月でNewsPicksの技術課題アプリが作れる程度になりました。
技術課題アプリのレベル感が気になる方は、是非、 ご応募お待ちしています!
Kotlin
公式ブートキャンプを実施しました。
Javaをやっていた方であれば、必要十分だと思います。
Android
開発の流れ
初めにAndroid開発の流れを理解するために本を一冊読みました。
流れはある程度掴めたのですが、今考えると次の理由からあまりオススメはしないです。- Androidの移り変わりがはやく、最近発売された本でも内容が古い可能性があること
- Googleのドキュメント類が充実しているため、それだけで十分であること
自分はやっていないのですが、今思い返すと以下のコースから
自分のレベルにあったものを実施するのが良かったんだと思います。Dagger Hilt
DIライブラリです。
DIの概念は理解していたことから、公式ドキュメントとCodelabsで理解することができました。Kotlin Coroutine & Coroutine Flow
最も理解が難しく、自分の中で衝撃の機能でした。
CoroutineはJavaよりKotlinの方が優れていると明言できる機能の1つだと思います。
キャッチアップとしては、まず、公式ドキュメントを読みましたが、全く理解できませんでした。
公式YouTube、DroidKaigiのYoutube、その他記事をいくつか読んで概要を把握、
Codelabsで簡単なコードを理解して、公式Github nowinandroidから実践的なコードを学びました。
最終的に自分の中では以下のイメージに落ち着きました。- Kotlin Coroutineはマルチスレッドデザインパターンの代替となるデザインパターン
(代替と書きましたが、上位互換だと思っています) Coroutine FlowはObserverパターンの代替となるライブラリ
(代替と書きましたが、上位互換だと思っています)
- Kotlin Coroutineはマルチスレッドデザインパターンの代替となるデザインパターン
Retrofit2
REST API通信ライブラリで、とても簡単に使えるよう設計されています。
Codelabsを流し見しただけで終わりました。
アーキテクチャ
アーキテクチャは前職の組込時代に悩みの種だったのですが、
Androidは公式のアーキテクチャガイドがあり、ベストプラクティスが示されていました。
アーキテクチャは言葉だけだと抽象的で、
「じゃあコードはどうするのがいんだろう?」
となることが多かったのですが、
Androidは公式で実際にそのアーキテクチャで書かれたサンプルコードがGithubに用意されているため、
あぁこういうことなんだとすぐに理解することができました。
これは本当にうれしかったです。
また、NewsPicksのアーキテクチャについてはこちらの動画内で紹介されています。
技術的負債を解消しながら、どのようにしてリアーキしているかをわかりやすく解説されているため、
是非、ご覧になってください!
参画後(6ヶ月)
ここからはAndroid開発に必要な技術をキャッチアップするというよりは、
1日でも早くチームに貢献したいと考えて行動していました。
やっていたこと
サービスに興味を持つ
実は参画するまでNewsPicksを知りませんでした。
ですが、参画してからは毎日30~60分ほど欠かさず使っています。
サービスに興味を持って、自分もユーザになることは以下の観点からとても大事なことだと思っています。- ユーザ視点にたって考えることができる
- 全体的な仕様の理解が早まる
- 愛着が生まれ、モチベーションアップに繋がる
プロダクションコードを読む
業務外でもプロダクションコードを読んでいました。
もちろん業務外のため、コードは読むだけで書きません。
コードを読む理由は自分は以下の記事と同じ認識を持っているからです。
記事内の言葉を借りると、庭を歩き回っていたイメージです。
歩き回ることで庭の様式(アーキテクチャなど)を確認していました。UI確認アプリの作成
お気づきかもしれませんが、今まで全くUIについて触れていません。
UIは簡単なものだけを作っていたため、最初に読んだ本の情報でなんとかなっていましたが、
少し難しめのUIには苦手意識がありました。
その旨をシニアエンジニアに相談・アドバイスを受けて、
TabLayoutやRecyclerViewを学習するために以下アプリを作成しました。
NewsPicksだからできたこと
The 7 Values「渦中の友を助ける」
UzabaseにはThe 7 Valuesというものがあり、
その中の1つに「渦中の友を助ける」というものがあります。
なにか少しでも悩んでいたら、
自分の頭の中を整理するつもりでSlackのスレッドを作ると助け合う文化が浸透しています。
オープンコミュニケーションとシニアエンジニアによるサポート
最初の3ヶ月間、毎日、シニアエンジニアから
進捗報告・知見の共有・何でも相談が出来る時間を30分ほど頂けていました。
雑談を交えながら、Androidエンジニアとしての知識やNewsPicks固有の知識を教えて頂けたこと、
困っていることやわからないことを心理的安全性がある状態で聞けたことで、
Android未経験にも関わらず、かなり早くキャッチアップできたのではないかと思います。
心理的安全性についてはThe 7 Valuesの1つに「異能は才能」というものがあり、
その中にオープンコミュニケーションについての記述があります。
疑問を放置せず、本音で自分をさらけ出して話せたことで、
人見知りの自分でも心理的安全性を感じることができたのかなと思います。
最後に
正直に言って、Android公式情報の多さには驚きました。
Androidエンジニアは少ないそうですが、
ここまでApp Developerに対して手厚いにも関わらず何故なんでしょうか?
自分は自信を持ってAndroidエンジニアおすすめできます。
また、Androidはもっさりしているという先入観がありましたが、
最近の端末はiPhoneと比べても遜色ないことも驚きでした。 (Pixel 7a購入しました!)
少しでもAndroidエンジニアになろうかなぁと考えている方の助けになれば幸いです。