One year ago, I knew nothing about programming. I did not even know how the internet worked. 🤔
So, how did I become a Google-Certified Android Engineer in less than one year with no background in programming?
Quick aside: The focus of this post is to explain the process and path I took to become a competent Android engineer, rather than focusing on preparing for the exam to get certified by Google. If you would like a brief high-level summary of what I learned, there is a TL;DR at the end of the post. But please read on, as I will provide valuable reasoning and insight for the approach I chose.
🧭 My Purpose
Why did I even want to become an Android Engineer in the first place?
Well, one main reason:
I had an idea for an app I wanted to exist. 👥
My motivation to start learning how to program was devised from an idea for an app I wanted to exist, and my app idea was devised from a pain point I was experiencing in my life.
I also needed to develop a new set of skills once I changed my life path, which is one of the reasons I decided to build it myself.
If I did not have an app idea, there is no way I would have been able to continue pushing through the frustrating, overwhelming journey that is learning programming.
Luckily for me, I also developed a fiery passion for programming once I started learning, so the frustrating times were a source of eustress, not distress. 🤔
You can learn anything on the internet nowadays.
Plenty of resources are available, especially in the Android community because of its open source nature, Google’s backing, and the incredible people who make the community great. 🙌
Going back to school was not the approach I wanted to take after leaving to forge a new path.
So I decided to teach myself, with the help of the internet of course.
Daily Learning Commitment
I was fortunate enough to be able to primarily focus on learning Android Development (and more generally, software engineering) for nearly one year.
I committed to a six hour daily learning goal- for me, six hours of learning per day was the ideal amount of time. If I was learning for more than six hours a day, I would have to sacrifice other daily goals and less than six hours made it difficult to make substantial progress. I divided the six hours into 4 work blocks of 90 minutes each.
Unless you live in a metropolis, Android Engineers are hard to find. I tried to find Android Engineers in my community just to connect with them, but ended up finding none after months of searching.
But the good thing is you do not need a mentor.
I personally learn the best when I am teaching myself and solving the problems I run into on my own, so I did just fine without a mentor.
The internet is indisputably the programmer’s most valuable mentor. It is ready to answer any question at any time. If you are resourceful enough, you can find an answer to almost any programming question you have.
🤔 Deciding What to Build
Before considering what technologies to use, I needed to decide exactly what I wanted to build.
Deciding what to build, or what to work on in your career, is the most important decision to make before making the technical decisions. Once you know what you want to build, you will have heightened motivation, focus, and clarity. You will waste less time being overwhelmed at the plethora of technologies you have at your disposal.
I knew I wanted a mobile app. 📱
But where should I start? Should I build a native app? If so, should I start with Android or iOS? Or should I build it using a cross-platform framework? If so, should I use ReactNative? Xamarin? Flutter? What about hybrid frameworks like Ionic?
I had to decide which platform I was going to develop on: native, cross-platform, or hybrid. Analogous to building upon the foundation of a house, this decision restricts a programmer to a certain set of technology that can be used to build on top of the platform.
I set the goal of learning basic native Android development because I had an Android phone that I could install and test the apps on and know that Android has a vibrant community with substantial resources.
Great, so I knew I wanted to build native Android apps. But what did I need to know exactly to accomplish that?
🗺 Creating my Roadmap
This was probably the hardest step because of the vast diversity of opinions on technologies and best approaches. 🤯
I read a plethora of Medium articles to figure out what I needed to learn to become a competent Android Engineer, and more generally, a well-rounded software engineer.
After considering multiple perspectives, opinions, and advice, I created my own roadmap of the core topics I felt I needed to learn to build native Android apps:
- Java and the Fundamentals of Programming
- Android Development
- Git and Github
- Databases, Servers, and Cloud Storage
I highly recommend creating your own personal roadmap tailored to your specific goal- this will help you stay laser-focused in your learning journey.
Now that I had my roadmap, the next step was to make technical decisions to achieve each of the core topics.
💻 Technical Decisions
Learning to program requires a lot of technical decisions to be made, in programming itself, and learning how to program; some of the most high level decisions include:
Choosing a platform, picking a language, and setting up a development environment.
With my roadmap in hand, I knew what my technological options were.
Choosing a Platform
I chose to develop on the Android platform because I chose to start by learning Java, which I could use to write native Android apps. Additionally, Flutter was still in its initial days and did not have access to the device camera, which I needed for the app I wanted to build. Other cross platform technologies, such as React Native, would have required me to learn another programming language, so that option was out at the time. Additionally, I knew the Android platform would have the most native support, so I would have stronger support for problems I would run into.
Choosing a Programming Language
Despite the fact that there are only two options for languages to build native Android apps, Java and Kotlin, (I am excluding C++ here to generalize) this was still a tough decision. At the time, Kotlin was just being introduced to the Android ecosystem and developers were raving about it on Medium.
Eventually, I decided to learn the older, tried-and-true Java programming language instead of the newcomer Kotlin.
I decided to learn Java because it has been around for much longer, which meant there would be more resources online to learn from. I was a beginner, so I needed all the resources I could find. I stumbled upon Head First Java, which is an incredibly well-written book where I started my programming journey.
Setting Up a Development Environment
Setting up a development environment that you are comfortable with is extremely important- this includes everything from what IDE you choose to write code in, how you structure your computer (file organization, default browser, browser bookmarks, etc.), apps that help you develop and be efficient (i.e., Trello, Alfred), how your terminal is setup (I recommend using iTerm2 with ZSH), amongst other things.
I will simply discuss which IDE I chose, because this is the core tool used and discussing the other topics would take a significant amount of time; however, I do recommend you invest time into setting up an overarching development environment. 💻
Android Studio is the official IDE for developing Android apps and has the tightest integration with building for Android, so it was a no-brainer to choose Android Studio as my IDE.
On Technical Decisions
Overall, I am satisfied with the technical decisions I made.
As a beginner, I needed all the resources I could find to have the best chance at learning. Java has been around for much longer than Kotlin, and more applicably, has been used to develop Android applications for many more years, which meant more available resources.
Additionally, the verbosity of Java helped me see what the code was doing and master the fundamentals of programming. More concise languages such as Kotlin tend to hide the complexity. This is great for experienced programmers who already know what is going on behind the scenes, but not so beneficial for beginners who are still learning the fundamentals.
Choosing Java over Kotlin ended up being a great choice for me.
On Being Overwhelmed with Android
Android Development is a beast. To say learning Android development is overwhelming is a severe understatement.
Just take a look at the Android Developer Guide- you could spend an eternity here and still only learn the core topics. 😱 (Do not start learning Android development here! Use it as a guide, not as a primary learning source.)
My initial approach was to learn Android development from that guide, reading each section, which in retrospect was absolutely insane.
Fortunately, I found the Associate Android Developer Course, which was an invaluable resource for learning Android development- the best I have found so far, and a much saner approach.
I recommend the Associate Android Developer Course as the primary source for learning Android development. The content and codelabs are crystal clear and throughly explained. If I had to explain the course in three words, I would describe it as dense, intense, and well-explained. 🙌
But even with such a great resource, it was still extremely overwhelming.
Android Studio is a Pandora’s Box
Opening Android Studio is like opening Pandora’s box- there are so many different files, directories, and buttons that it’s difficult to figure out where to even start.
I just wanted to jump in and start writing code.
So I created a new project and opened Android Studio; essentially 3 main folders appeared under my app folder- one for manifest, one for java, and one for resources. Ok, so far, not so bad.
Then I expanded the resources folders and saw there were 4 subfolders already created: drawable, layout, mipmap, and values. “What the heck is a mipmap?” I thought. Under the values folder, there were 3 more generated files: one for colors, one for strings, and one for styles.
Then there was this strange Gradle Scripts section with 7 different Gradle files, and I did not even know what Gradle is.
And a manifest file.
Simply opening Android Studio is overwhelming.
And that was just the simplified Android view- if you select Project view, you discover that most of the files were being hidden from you the whole time. 😐
Android Topics are Dense
There is just so much to learn in the Android ecosystem.
Want to show a long list of items? Well, you have to use RecyclerView for that.
But to setup RecyclerView, you need to extend the RecyclerView.Adapter class, implement 3 different methods, and know what each is doing. You need an Adapter class to connect the data to the RecyclerView. And you also need a ViewHolder inner class that will hold the data in the Adapter. Oh, and you will need a separate layout file which will be used to display each item in the RecyclerView. Then you need to hook up all those things.
Whew, that is a lot of moving pieces. But hey, after all that work, you can finally show a long list of items efficiently. 💁🏻♂️
RecyclerView is one of the more complicated topics in Android, but it is indicative of how dense many Android topics are.
Simply styling the app to have a global theme across all components is convoluted and difficult.
You have to take many things into consideration when developing for Android. Configuration changes, app switching and termination, and activity and fragment lifecycles, just to name a few, add significant layers of complexity.
Android development is incredibly overwhelming. 😳
The good news is there is a vibrant, helpful community which makes it more manageable.
So do not be deterred by its complexity; developing for Android is getting better, and if you have enough motivation, patience, persistence, and resourcefulness, you can do it. 🤟🏼
On the Associate Android Developer Exam
First of all, you need to master Architecture Components and know exactly what situations they can and should be used in. As the course is currently setup, this is the last section- so when you get to the final section and are tempted to rush to finish, take a deep breath, and slow down. Understanding Room, LiveData, and ViewModel is essential. You also need to know how to implement the Paging library, even though it is not taught in the course.
The course is a little outdated. Some of the libraries you learn are deprecated, which means they are not going to continue to be supported and might become incompatible with the framework in the future. For example, the AsyncTask and AsyncTaskLoader libraries are deprecated but still remain part of the course and might show up in the exam as well. Regardless, it is still beneficial to learn them because they will give you a better idea of how the libraries that will replace them are supposed to work. Just be aware they are outdated and you will need to learn the libraries that are going to be used to replace the deprecated libraries.
The exam is pretty challenging. You need to understand the core Android concepts conceptually, as well as technically. In order to do well on the exam and the follow up interview, you need to have a high-level understanding of how Android concepts work and function together.
I took the exam on October 4th, 2019. I received my exam result 20 days later on October 24th, 2019- I found out I passed and am a Google-Certified Android Engineer 🎉
A couple weeks later, I was listed in the Google Developers Certification Directory, a global directory for developers who are certified by the Google Developers Certification team.
In addition to the core content I listed in my roadmap, the following are recommendations that will help you become a more competent Android Engineer:
Learn Architecture Components
If I could go back, I would invest more time and focus into learning Architecture Components. Initially, I viewed them more as optimizations, not as fundamentals, so I did not put too much emphasis on them. But implementing Architecture Components makes developing for Android much simpler. If you setup your app with Architecture Components from the beginning, you will have a much smoother development experience.
If you could only learn one of the Architecture Components, I highly recommend the Navigation Component- in my opinion, it gives you the most benefit for your learning. Using Navigation simplifies overall navigation in the app including navigating between Activities and Fragments, handling user events, implementing deep links, and enables you to easily implement the recommended Single-Activity architecture.
Learn App Design
Furthermore, I would suggest learning some basic design skills and tools, as this will enable you to fully build an app, end-to-end. I naturally learned Material Design, Google’s design system, during my Android Development journey, and Sketch in conjunction with the Material Design plugin, which made it effortless to create an all-encompassing app design system using typography, color, and shape.
I said I did not have a mentor and I used the internet to teach myself.
But what is the internet, after all?
It is a conglomeration of ideas, knowledge, forums, and information… created by people.
Every idea, website, piece of information, question, and answer on the internet come from real people. (Yes, there is content generated by bots, but let us appreciate the human side of the internet for the time being.)
So I would like to give thanks to the people who have provided amazing content and helped me on my programming journey:
Google and the Android Community 🌐
First and foremost, I would like to thank Google Developers for putting together an amazing Android Developer Course, providing well-explained codelabs and documentation on libraries, and creating an open and inclusive community for developers to connect and thrive.
Android Developers 👨💻👩💻
Next, I would like to acknowledge Android developers who have shared their knowledge on Medium and other platforms to enhance the community:
Donn Felker and Kaushik Gopal: Before I even started learning Android Development, I listened to the Fragmented Podcast, as it was an easy way to learn passively and pick up some general ideas and terms. As I became more knowledgeable about Android development, I received more value from these podcasts, as I could better understand the topics.
Thank you all for your amazing contributions to the community- your work is greatly appreciated. 🙏
👣 Next Steps
So now that I am a Google-Certified Android Engineer, I can just sit back, relax, and all the opportunities will come to me, right? 😬
Nor would I want that.
I still have many things to do:
Share my Knowledge 🗣
I want to share my knowledge with my local community and provide value. I attended one of Chiu-Ki Chan’s talks and learned the importance of sharing your knowledge with others to develop your own knowledge as well. I plan to do some public speaking and educate people on Android topics.
Continue Learning 👨💻
As a developer, you are never done learning. I plan to continue learning more about Android development, start learning Kotlin, and pick up Flutter as well.
Become an Android GDE 😎
Becoming a GDE (Google Developer Expert) is a natural recognition of a developers’ contribution to the community. I have a lot of work to do, but becoming an Android GDE is something I am looking forward to in the future, once I have earned it through giving back to the community.
I hope this was inspiring and useful for aspiring Android developers and software engineers.
Learning to program is an incredible, frustrating, difficult journey- I wanted to quit multiple times. 😭
But if you have enough motivation, patience, persistence, and resourcefulness, you can reap the rewards of being an Android Developer.
Who knows… you might even see your face here one day. 🤓
I dedicated 6 hours each day to learning for nearly one year. ⚙️
Here is what I learned, in sequential order, to become a Google-Certified Android Engineer:
Java and the Fundamentals of Programming
⏳ 2 months
Mastered core Android development by taking the Associate Android Developer Course by Google
⏳ 6 months
🕹 Extremely Challenging
Git and Github
Learned the basics of Git and Github through a Udemy course on Android Development
⏳ 2 days
🕹 Not Challenging
Databases, Servers, and Cloud Storage
Learned about databases, servers, and cloud storage through a blend of the Associate Android Developer Course, writing my own chat programs in Java, and learning Room
⏳ 2 months
🕹 Moderately Challenging
After mastering the aforementioned content, I took the Associate Android Developer exam and passed to become a Google-Certified Android Engineer 😎
If you found inspiration from this article, please consider buying me a coffee.