When it comes to Android Development I think it’s safe to say that there’s the way things are taught, and then there’s the way that things are done. And in my 8+ years of Android development experience it’s safe to say that every Junior Android Developer I’ve ever worked with has known how to do things the way things are taught, but not the way things are actually done.
Now that’s not a slight against anyone, we all have to start somewhere.
But no matter how you’ve learnt to build Android app’s -whether you learnt on a coding boot camp or have just finished a degree, whether you’ve been following a Udemy course or have been following online tutorials..
If you’re truly serious about taking your Android programming skills to the next level. If you want to go from beginner to professional. If you want to go from hobby to career. Here’s a list of 10 things to learn that will put you light-year’s ahead of the competition.
And that’s not hyperbole either. I often get asked to help interview candidates and if your resume crossed my desk for a Junior position with the following skills — you’d be in 💥 (or maybe better put, if your resume crossed my desk without these skills.. 🚮 🤷🏽♂️ Real talk.)
1 — Don’t reinvent the wheel
If you’ve any experience in programming you’ve probably heard this phrase before, if Android Development really is your first foray into programming then let me be the first to tell you this. Don’t reinvent the wheel.
9/10 times whatever it is you’re trying to do has been done by someone else. There’s either a library for it or a gist for it or a tutorial explaining how to go about it. So before you start rolling your own, have a Google, have a look on SO, and benefit from others mistakes.
2 —Learn Retrofit for networking
Learn how to do the basic’s like perform GET’s & POST’s, learn how to add headers to specific calls, learn how to hook it up to OkHttp for performance, learn how to create some basic interceptors, specifically you’d benefit for using one that let’s you log the request/response of calls verbosely (in the vain of not reinventing the wheel I’ll give you a hint, there’s an interceptor you can import that’s built just for this!).
3 — Know how to POJO from Json
JSON is the most widely used format of transferring data across API’s. You will come in to contact it working as an Android developer so you need to know how to work with it & convert it into your POJO’s (Plain Old Java Object’s).
The most commonly used libraries for this are Jackson, GSON & Moshi. You can use any that you like the look of, they’re all very similar & they all hook into Retrofit easily. You’ll wanna learn how to parse Json into your objects, how to annotate them correctly, how to override setters so you can control the way the data is parsed & you’ll probably also want to get a basic understanding of custom serializers & deserializers as they’ll almost definitely come to play at some point in your career.
4 — Get to grips with some Image libraries
I’d advice either Picasso or Glide, Glide being Google’s unofficially endorsed choice. They’re both very similar so knowing how to use one will let you get up to speed on the other pretty quick. You want to understand caching strategies, how to handle errors with fallback images & how to apply some transformations. A good example being how to take an image & make it circular to display as a profile picture.
5 — Learn some patterns
There’s plenty of architectural patterns that you can use when building your Android apps. MVP, MVC, MVVM, etc etc.. My preference is MVP which is why I’ve highlighted it here, it’s also the pattern I’ve seen most commonly used when I start on a contract where the app is already in progress so already have it’s architecture predefined. For that reason I’d say learn this pattern & you can use the most commonly used Mosby library to do a lot of the work for you also.
If you’re really against MVP though or something else interests you more I’d say learn that. The main takeaway here should be while you may have learnt to build your app’s with everything in 1 activity or 1 fragment — no one build’s apps like that. Scratch that. Some people do. Let me rephrase — no one is going to hire you because you can do that, but they’ll hire you if you have worked with one of the more commonly used pattern they’re looking to use.
6 — Kotlin
If you’ve just started learning & have been learning using some older Java tutorials then you need to get to grips with Kotlin. Kotlin is officially supported in Android Studio, it has numerous benefits over Java & it’s pretty much a prerequisite now when hiring Android developers. You don’t need to be a pro, and tbh the learning curve is not steep at all if you know Java. You just need to know enough to get started on a project immediately & learn the rest as you go.
If you’ve just started learning & have been learning using newer Kotlin tutorials, fantastic! You’re ready for the future. Unfortunately a lot of companies still live in the past so if you’re serious about becoming an employble Android developer then you need to be able to pick up their legacy code, meaning you need to know some Java. Again, if you’ve started with Kotlin then you just need to know the basic’s in Java to be able to get started. I would highly recommend you get somewhat competent though because if you can’t work with Java code then you’re pretty restricted in what Android developer roles you’d be able to take.
8 — Unit testing
When I started programming I hated unit testing. In fact, every gig I’ve had in my 8 year career so far has shied away from testing in favor of pumping out code faster. Luckily I’ve not seen many major issues doing things that way however, a serious Android developer knows how to write a unit tester whether they’re required to or not.
Just know the basics. How do you set one up, how do you run it, how do you verify the result. You can later learn the more complicated things as those scenarios come up.
Following on from #7, one of the most useful things in the testing world is mocking. Imagine you have a Presenter you want to test & it has 6 other dependencies. You can go ahead & create all of those dependencies in your test code, maybe those dependencies have dependencies so you’ll have to create those too - suddenly your test class has more code in it setting up the test than it does executing the test. OR.. you can mock those dependencies.
Mockito & Mockk would be my two go to classes to implement mocking, with Mockk being my go to if you’re writing a Kotlin based test. Learn how to mock objects, mock results, spy objects — which is where the object behaves as normal but you can override methods to mock specific aspects of it. Mock’s also let you run code that might rely on an Android code inside a unit test as you can simply mock that object.
10 — Espresso testing
Espresso tests are essentially Android tests. You’re testing code in Android itself, either on a device or on an emulator. You can test headless code like services or you can run UI tests where, for example, you “click” on things & verify the right action is taken. You want to know how to write one, how to perform simple actions like click’s or scrolling & you want to know how to verify the results so your test can pass or fail.
(Bonus) — Butterknife
There are very few scenario’s where you’d actually want to use findViewById. Personally I’m not longer a huge fan of Butterknife as if you’re writing Kotlin code it’s just not needed, one of the many benefits of Kotlin on Android. However if you’re serious about becoming a hireable Android dev than you need to know how to use Butterknife. Before Kotlin became more widely used Butterknife was pretty much included in every project to reduce boilerplate code so if you get a gig working on a Java codebase, 99% chance it’s using Butterknife.
It’s really not that hard, I’d steer away from learning things like the OnClick annotations as I find them to be bad practice when you’re working on a multi person code base (why are they always linted as unused!) & instead just learn how to Butterknife.bind & the BindView annotation & you’re good to go.
There you have it. My top 10 things you need to learn to go from being a beginner to having some serious Android game!
As always - question, feedback, thoughts.. all would be much appreciated in the comments below 👇🏽