Android, Android, Android... It's everywhere - smartphones, watches, tablets, TVs... Android is getting sexier and more stable with each release and, with a ton of learning material available, this is a great time to start learning how to develop for this platform.

The primary target audience of this article are fresh computer science graduates who are thinking about becoming professional Android developers. Basically, I wanted to write an article that I would have loved to have read 2.5 years ago, when I scored my first paid dev job.

In it, I present a roundup of facts and resources that will give you a clear picture of your future work scope. Start contributing quickly, experiment and enjoy yourself in the process.

Note: consider this post a cheat sheet that you can come back to anytime.

This tutorial is a part of our 'Becoming a developer' series. You can check out our previous article on Becoming a Ruby on Rails developer and Becoming an iOS developer

Know your tools, processes and your programming language

Language

Read a book about Java, the primary programming language for developing Android apps. I recommend Effective Java - read the chapters that you are interested in and feel free to jump around as much as you like.

Tools

Gradle - Get to know your build system and its capabilities. Start with the basic stuff like handling dependencies and application flavors.

Git - Put your code under version control and have a backup of your code in the cloud, no matter where you are. Learn some basics here.

Android Studio and Eclipse - If you are used to working in Eclipse, feel free to try and set up a project in that IDE. You can find a tutorial made for Eclipse at the end of this article.

Here at Infinum, we prefer working in Android Studio. A couple of words from my colleague Željko about AS can be found here.

Processes

Although a career in development probably sounds awesome, coping with deadlines and client expectations is something you have to live with on a daily basis. Check out this great article by our JavaScript team leader (or dictator, as he likes to be called), in which he touches upon different challenges that await every developer.

It's not all about the code

I was sitting with our design team for a year (we had a smaller office back then and I was moved there with another colleague to handle a two-man project). During that period I started paying attention to the problems/challenges that designers have to cope with.

This helped me broaden my perspective and start seeing new stuff, like "where on earth is that pixel going", "Oh no, you didn't use that color/font", etc.

Paying attention to design details (UI/UX) will make you a better developer overall because you'll get a better understanding of the product development process as a whole.

You become more creative, and creativity is fun and essential for building great apps.

Design in action - search for Design in Action



Design patterns - Google's guidelines for making apps that behave in a consistent, predictable way

Material design - the trend at the moment in Android UI/UX



Android Niceties - a collection of screenshots encompassing some of the most beautiful looking Android apps

Some libs to start with, people to follow and a newsletter to subscribe to

There are problems in software development that tend to repeat themselves. This is why we (developers) create libraries to help us reuse code, simplify the usage and speed up the development process. Here are some of our favorite libraries that we use in almost all of our projects.

At the end of this article, you can find some influential Android players too. I suggest you follow them on Twitter.

Check this out for some implementation tricks: DevBytes.

Here are some of the Android development community hot shots you should keep your eye on. I linked their Twitter accounts because that's the easiest way to follow their work:

As for the newsletter - subscribe to AndroidWeekly to stay up to date with the hottest news in the development community.

Getting into the right mindset

Let's talk about "Increasing your chances of becoming an Android dev".

Don't overengineer

There is a lot of stuff to read, study and try out. Try to find the best theory-practice pair cycle in order to learn quickly and try out new stuff. The right balance is achieved with time and trial and error.

Create tasks

Tasks let you cross out stuff once you're done and give you a great sense of accomplishment. Plus, creating tasks will improve your analytical skills over time and you will get much better at structuring work and scheduling time. Prioritize work. You'll improve with time.

Retrospective

"Restrospective means to take a look back at events that already have taken place."

-Wikipedia

Why would I do that?

To learn from it! When you start a project, open a new text file you can always access and write down interesting things that you found out during the project. At the end, check out what you were doing, reflect on it and put a conclusion there. Great tools for that are Evernote and One Note.

Learn from your mistakes

Improve over time. Think of your mistakes as feedback and it's going to be much easier.

If you accomplish something great one day, acknowledge that as well. Don't write down only failures. The retrospective helps you consume the knowledge that you have acquired and reflect on it in a proper and constructive way.

Retrospective is a great tool, try it out!

Finally, getting your hands dirty

Vogella An extensive article on Android. Well structured.

Note: the instructions are for Eclipse. Samples Learn how to import a project in Android Studio, set it up properly and mess with it in order to try out the platform. Layouts - learn how to work with layouts in the app Lifecycle - Activity & Fragments - how do the view elements handle orientation changes, pausing the app, etc. Android talks Infinum's internal education platform where we share best practices, tips and tricks about the Android platform and third party libraries. Simply, a must watch.

Conclusion:

Learning to be a developer is a process that doesn't involve only programming. It's about finding the right information, optimizing the information flow, applying that info, writing code, trying out different approaches, making mistakes and learning from them. Thus, gaining experience all the time and iterating in the learning process.

Follow the instructions above and increase your chances of staying "in the flow".

Good luck!

Follow me on Twitter: @vitongs