Edited at

めっちゃ需要あるのにAndroidエンジニアが足りてないらしいから魅力とか紹介する回(配信用カンペ)

IMAGE ALT TEXT HERE



自己紹介



今日のおはなし


  • Androidエンジニアが足りてないらしいよ!!



  • 需要はめっちゃあって観測範囲だとわりとどこの会社もAndroidエンジニア探してる印象

  • 特に足りてないのはわりと勉強会とかブログとかで積極的にアウトプットしたりするような意欲の高いタイプの人

  • 当分はかなり需要が供給を上回る感じなので転職有利だと思うし、やる気があれば新人でも育ててもらえるかもしれない

  • 今だとお給料も高めだと思う



原因考察



  • 開発されるアプリの規模や要求される品質は上がり続けてて需要は増えている



  • ぶっちゃけあんまり若い層が育っていないような

  • 勉強会とかカンファレンスとかわりとモバイル開発が流行り始めた頃に参入した層から界隈のメンバーがあんまり変わってない感じ

  • ブームの頃に始めたシニア層のAndroidエンジニアもわりとAndroidに飽きて別の仕事し始めたりマネージャーになったりしてきてる



  • 多分数学とかCSガチガチの人は機械学習とかの方に行ってるし、そこまでじゃない人は普通にJavaとかRailsのサーバーサイドに行ったりしてる

  • Androidは機械学習や大規模サービスのバックエンドとかほどは高度な技術は要求されないけど、わりとどんどん新しいバージョンやライブラリなどが出てくるので勉強はし続けないとやっていけない



iOSエンジニアの方が若い人が多くいる印象


  • プログラミングに興味持って独学した意識高い学生とかはiPhoneユーザーが多いのでモバイルから入ってもiOS(Swift)の方に行きがちな気がする



Androidエンジニアのお仕事


  • Android向けアプリを作るよ

  • BtoBもあるけど、BtoCの一般ユーザー向けアプリが多い

  • 大きく受託開発と自社プロダクト開発に分かれると思う

  • 受託は初期の頃よりも減ってきてるかもしれない(単純なアプリというのは作られ尽くした感あるので)

  • 自社プロダクト開発は相変わらずたくさんあるし、今後もそんなに減ることはないと思う(スマホ自体が廃れなければ)

  • スタートアップとかメガベンチャーがわりと多いかも



仕事の内容


  • 開発はAndroidStudioというIDEを使う


    • これはIntelliJという人気のIDEからフォークされたものなのでかなり使いやすい



  • 開発言語はJavaかKotlin


    • 最近は新規開発ならKotlin一択、既存で大きいアプリならまだJavaの案件も多いかも



  • アプリエンジニアは一般的に、ある機能に対して求められた仕様やデザインから、設計や実装方法を考えて、実際に実装して、動作確認してリリース(アップデート)するところまで一人で全てやることが多い


    • なので、案件のわりと最初からユーザーに届くところまでずっと関わることが出来る



  • 最終的に仕様やデザイン、APIが全部乗るのがアプリなので、PMやデザイナー、サーバーサイドエンジニアなど案件の関係者を積極的にコミュニケーションしていくことが多い



Androidエンジニアの魅力


  • ユーザーが直接動かすフロントの機能を作れる


    • 「この画面は自分が作った!」という達成感を感じやすい

    • 案件の最初から最後まで関われる



  • モダンで使いやすい言語Kotlinで開発が出来る

  • 開発環境、ビルドスクリプトやレイアウトの組み方などが洗練されていて自由度が高く開発しやすい

  • コミュニティが育っていて、DroidKaigiや定期的な勉強会など最新技術や知見を共有し合う文化が強い

  • 世界的にはiOSよりAndroidの方がシェアが大きく今後更にAndroidのシェアが広がっていくといわれている

  • 国内でも世界的にも需要は高いし、最新技術をキャッチアップ出来ていればスキルとしてかなり強い

  • 最近はサーバーレスでのアプリ開発や、モバイル環境でのオフライン機械学習の技術とかも出てきてるし、モバイル開発が出来ると他のスキルとの親和性も高い



求められるスキル

(それなりのレベルの会社で期待されること)



Android開発の基礎知識


  • マテリアルデザインに対応した一般的なアプリを一人で0から開発出来る

  • ライフサイクルの理解や、Intent、Fragment、Service、RecyclerViewなどなど

  • ハードウェアにアクセスするような機能や汎用的じゃないような機能の実装方法などは無理に全て暗記しなくても都度ググるでもいい(わりとよく仕様変わるし)



JavaとKotlinの知識


  • 最低でもAndroid開発が普通にできるレベル


    • Javaの言語仕様一通りとEffectiveJava、Kotlinの言語仕様一通りくらい



  • 最近だとKotlinのコルーチンとかが普及しつつある



デファクトスタンダードになっているライブラリの使い方


  • OkHttp、RxJava、Retrofit、Dagger2など

  • 案件によって使ってるライブラリは色々なので必要に迫られてから覚えても太刀打ち出来ないというわけではない



公式ライブラリの知識


  • DataBinding、AndroidArchitectureComponents(AAC)、JectPackなど

  • まだ完全に普及仕切ってるというわけではない、知っていたら好印象くらい



設計に関する知識


  • MVP、MVVM、CleanArchitectureなどをAndroidで実装するパターンに関する知識


    • Androidアプリ設計パターン入門という本を読もう



  • なぜMVVMなどの設計が流行って、どういうところがメリットなのか、という部分が理解出来て議論が出来るレベルが期待される


    • 過去のカンファレンスや勉強会の資料などを漁ってみよう





コミュニケーション、人柄


  • 正直一定以上の技術力よりも重要だと思う

  • きちんと自分の考えや状況などを説明できる能力

  • アプリの開発だけではなくプロダクトや組織全体のことを意識して働けるか

  • エンジニアチームメンバーやプロジェクトのメンバーとピリピリせずスムーズに会話出来、率先してリスクを伝えたり妥協点を相談したり出来る能力


    • 個人的にはめちゃくちゃプログラミングが天才的でいつもイライラしてる人よりも、技術的には普通だけど話しやすい人と仕事がしたいしその方が上手く回ると思ってる





新しい技術を積極的に学ぶ意欲


  • 毎年新しいAndroidのバージョンと仕様変更が発表され、公式でもサードパーティでも新しいライブラリやツールなどがどんどん出てくることに興味を持って楽しいと思えるか

  • 多少個人の時間を使ってでもそういうものを研究して登壇したりする意欲があるか



おわり!


  • Androidやろうよ!!!!

https://www.youtube.com/watch?v=bxzpqyWJanc