This post is meant for people looking to start android development, and also for people who have covered the basics and now are looking to improve themselves. I would be providing resources I came across while learning android development.


Getting started with android development

Learning pre-requisites skills

I think that one should learn a a bit of Java language before going into android development. You can take a course on Udacity, or watch Youtube videos or a book. I learned it from two sources: TheNewBoston Youtube video playlist of “Java (Beginner) Programming Tutorials” (Tip: Don’t install Eclipse. Go for IntelliJ IDEA) and a book called “Java: A Beginner’s Guide” by Herbert Schildt.

I would recommend to install Ubuntu or any other Linux distro as Android studio, the IDE used to develop android apps is painfully slow on Windows if you don’t have a SSD. This will help you learn Linux. Also if you have the time, do a course or watch videos on Git to learn it’s basics. Learning git would definitely benefit you.

Learning the basics

Now that you know the pre-requisites, we can move to learn the basics of android development. I would recommend using either of the resources (Do some research to find which one suites you best)

  1. Google Developers Training
  2. Udacity-Google Partnership
  3. Getting started - Android Developers
  4. (I learned from this) Android App Development for Beginners by TheNewBoston

Although TheNewBoston videos are pretty good, I would recommend to use the other resources as they are from Google themselves.


After you have learned the basics about android development, you should be comfortable in using Android Studio IDE, logcat, debugger, and should know about Activity lifecycle, Fragments, Screen navigation, View Pager, Notifications, RecyclerView, SharedPreferences, Context, Dialogs, Basic threading, Services etc.


Improving your skills

Next to improve your skills, I would recommend to learn the following things one by one or as the need arises (Keep in mind that this list isn’t a complete guide — it is merely what I felt from my experience is important, and learning them will take a long time) :

  1. MVP architecture, MVVM architecture, Android code style and guidelines, Material design, Design support library, Basic animations, Constraint layout.
  2. 3rd party libraries like ButterKnife, Glide, Picasso, Timber.
  3. Networking using OkHttp, Gson, Volley, Retrofit or any other.
  4. Database and ORM’s. Example: Room, SQLlite, Realm, ORMLite, greenDOA etc.
  5. Custom views and Loaders.
  6. Design Patterns, Testing, FindBugs, PMD, Functional Programming concepts, Firebase, RxJava, RxAndroid, Dagger, SOLID Principles. (These are pretty advanced so try not to jump to these. Take your time.)

Resources

The best resource I have come across learning, better than even courses is blog posts. Most of what I’ve learned is from reading blogs and then implementing it.

  1. Great publications about android development on Medium: AndroidPub, Mindorks, Google Developer Experts, Ribot Labs, Medium Engineering, FreeCodeCamp, Hackernoon, Upday Devs, ProAndroidDev, Lateral View, Fueled Android, Aritra Musings, Dionysis’ Lorentzos blog, Google Developers, Inloop, Android Circle, Exploring Android etc.
  2. Google Developer Codelabs
  3. Follow the people who write in these publications here and on twitter to get updates about what they post. This is a good way to keep up with what is new and to improve yourself.
  4. Subscribe to newsletters to get curated lists of good posts and news: Android Weekly, Android Dev Digest, Infinum Android team, Android Pub newsletter etc.
  5. Regularly visit the subreddit /r/androiddev to get updates and news about android development.
  6. Make a Twitter account and follow some android developers. I wrote a comment on reddit about some android developers one can follow.

Tips for software development

  1. Care about code quality - read about modularity, seperation of concern, MVP, MVC, MVVM, function length, class size, variable name etc. Apply the good practices you read about this stuff.
  2. Development takes time. You will first need to learn basic syntax and some basic components before jumping in.
  3. Slowly increase the projects complexity per each 2–3 projects. Learn new things and apply them.
  4. Wisely choose what tech or library or framework you use, and read the docs first. Google the problem instead of asking somebody first. Try every stack overflow possible, you will learn the ways of “not doing” a task, which is very important.
  5. If you feel the need to diversify yourself — Read Shekhar Gulati 52 Technologies in 2016.

You can also refer to this awesome guide from Mindorks.