Most upvoted comment
Most popular programming book on Reddit. rank no. 14
Full-stack engineer having trouble breaking into an Android Dev role(r/androiddev)
Android team lead here, I’ve been working with Android commercially since 2009 (before Android 2.0 was released) and have worked at, or done work for, some big companies (Mozilla, Intel, Google, HTC…). I was in a very similar situation to you in that I was a web development and was bored, I’d been playing with Android in my spare time; I got my first break by volunteering to do an android app at the company I worked for, and went from permanent employee to contractor fairly quickly after that and have been doing it ever since.
First thing to say is that if you can get your currently company to pay you to learn android and stay with them, that’s a win win for both parties (you get to learn something new without a drop in salary and don’t have to interview and they don’t lose a good member of staff).
In terms of moving company, I don’t know where you are based, but here in the UK I often see junior Android contract roles coming up for £200-300 a day. Failing that it’s just a case of applying for lots of poisitions and really knowing your stuff.
What I would look for in a junior is to have read, understood and put in to practice Clean Code (www.amazon.com/Clean-Code-Handbook-Software-Crafts…) and Design Patterns (www.amazon.com/Head-First-Design-Patterns-Brain-Fr…). I would expect you to have a good understanding of basic Java and OOP; a working understanding of MVP or MVVM (news.realm.io/news/eric-maxwell-mvc-mvp-and-mvvm-o…, www.linkedin.com/pulse/understanding-difference-be…); understand threading; know about all the major parts of Android (Services, Broadcast receviers, Activities, Fragments etc); know how to write a custom view; be able to efficiently design a layout in XML and correctly apply styles and themes; understand the support libraries – what they contain, why they exist and what they are used for (and also when you don’t need them); understand the difference between unit testing and integration testing and know what makes for a good test; the Gradle build system is a really nice way of defining your project build – knowing the fundamentals is essential.
A few of the main libraries I’d expect you to know and have used would be OkHttp (github.com/square/okhttp), Retrofit (github.com/square/retrofit), Butterknife (jakewharton.github.io/butterknife/), Picasso (square.github.io/picasso/) or some other image loading library, GSON (github.com/google/gson) or Moshi (github.com/square/moshi) or some other json parsing library
If you want to level up then there are loads of advanced topics surrounding Android. Any of these following topics will take a while to learn, but will be worth it and will look good in interviews and on you CV:
- RxJava (blog.danlew.net/2014/09/15/grokking-rxjava-part-1/) – This is the new hotness in the mobile world (including iOS) at the moment. Version two of rxJava has just been released and knowing this will probably land you a job super quick.
- Dagger (www.youtube.com/watch?v=Qwk7ESmaCq0) – Dependency injection library. I actually find it super confusing to setup because of some overloaded annotations and lack of clean documentation, but lots of places use and expect you to know it, so it’d be a good idea to at least get a basic understanding of it.
- Kotlin (developer.android.com/kotlin/resources.html) – The new Android language – not many places are using in production but learning it now would be a great way to invest in the future (and it’s fun)
- Clean Code architecture (fernandocejas.com/2014/09/03/architecting-android-…, fernandocejas.com/2015/07/18/architecting-android-…, github.com/android10/Android-CleanArchitecture) – A great architecture that I use in my current projects – being able to mention this and talk about it would super impress me from someone with your experience.
- An understanding of different architectures (github.com/googlesamples/android-architecture) – A great resource for learning, it’s a simple todo app but build in lots of different ways
- Room & the other new Android architecture libraries they’ve recently announced (developer.android.com/topic/libraries/architecture…)
There’s so much more – this is a large topic and it’s easy to feel overwhelmed (I know I did & do) but the sheer amount of stuff to learn, but take it slowly and it’ll come. The best way that I found to learn all of this stuff is to have a personal project which I was working on (I started doing an app which teaches you how to play guitar – never released it but learned so much). Get the fundamentals down and them start looking at some of the more advanced things. A good test app would be to write a Reddit client (they have open APIs: www.reddit.com/dev/api/) – this will get you up to speed on networking, background services (to poll the API to see if you have any messages) etc
Let me know if this helped or if you want to chat about stuff. Happy to help.