Some exciting stuff has happened in the past week: I was offered a "scholarship" to participate in Udacity's Android Developer Nanodegree along with 999 other developers across India! Briefly, the program is a set of online courses involving building a portfolio of small apps with code review + interaction with Android developers and designers within Google, who also teach the course. Needless to say, I'm super-excited!
I plan to blog about my experience throughout, under the udacity tag here. Hopefully this will help other students of the Nanodegree, or those contemplating signing up for it!
Some context about my past exposure to Android is in order, so you know how to interpret the content of these posts. Feel free to skip this section.
I was introduced to Android 2 years ago while I was at Adobe, on the Revel photo-sharing app (sadly, Revel is being shuttered now as the business isn't working out for the company). I created some of the base UI elements in Revel, including a set of font-aware widgets like text labels, dropdowns, and switches that employ Adobe's corporate font Adobe Clean. I also implemented several different UI experiments for one of the photo library screens before settling on one the team liked. And I was the resident UI nazi of the team — fixing little UI issues all over the app that bugged me, occasionally annoying co-workers. It was great fun, especially understanding the trade-offs involved in designing and developing for mobile.
Following that initial success, I began to dive deeper into Android — made a few apps in hackathons around New Delhi, and also started working on my own apps on the side, hoping to one day release a production-quality app on the Google Play Store. That quest continues to date — I've struggled to finish and release my projects. As the initial excitement of prototyping a cool idea fades, boredom and that fear of judgement sets in. As someone rightly said, the last 10% of any project is the hardest. (UPDATE 15/05/2016: Quest completed! I've released Quill, an Android app for writing and publishing blog posts on the Ghost blogging platform. Check it out here!)
Motivation is just part of the story though. The other part is that I lack a deep understanding of several critical Android components, including dealing with low-level Android classes, writing custom views, Services, Receivers, Content Providers, Spans.
My goal is to tackle both of these issues head-on by completing this course. Let's see if it succeeds :)
Things I worked on this week
Having had a fair bit of experience with developing apps, Project 0 ("My App Portfolio") was simple to do. It consists of a simple list of buttons that launch the other apps I am going to develop as part of this course later.
This is a good way to get a beginner's feet wet, as the initial success is motivating. The feedback by Udacity reviewers is concrete and on point, and motivates the student to forge ahead.
Project 1 ("Popular Movies") is more interesting, and resembles a realistic app to some extent. The idea is to display a list of popular / high-rated movies using the Movie DB API, and allow the user to view reviews, trailers and favorite movies. I have a bare-bones version working now:
I also took the opportunity to make the grid fully-responsive, this will help when adding tablet support later in Project 2:
My plan is to submit Project 1 and begin working on Project 2 ("Stage 2 of Popular Movies") in the coming week.
Building this app requires working knowledge of Activities and their lifecycles, layouts, ListView / RecyclerView, displaying remote images, making HTTP calls, JSON parsing, and basic Intents — all the foundational ingredients of a solid, practical introduction to Android (my prior experience has at least given me a high-level perspective of how to go about learning Android). All of this is covered in good detail in Lessons 1-3 of Udacity's Developing Android Apps course.
This project is where I believe most beginners will flounder, as I did 2 years ago. Coming from a desktop / web dev background, wrapping your head around how to deal with the severe lack of resources on mobile (screen space, battery, RAM) can be very difficult. You want to display a list of 100 items? "Sure," you think, "I'll just put my 100 items in a
LinearLayout and wrap it in a
ScrollView, done." Then you find out, the hard way, that RAM on a phone is so limited, you can't just dump 100 items in a
LinearLayout — you must instead recycle
Views as they scroll into and off the screen, which is why
RecyclerView are core Android widgets.
Developing for mobile is hard — significantly harder, arguably, than developing for the Web. Learning to "think in Android" takes time. The long compilation times and lack of a rapid interactive dev environment (like the Web developer tools built into any modern browser) only make it more difficult. My advice: keep working, things will fall into place in a month or two, and you'll undoubtedly have your "aha!" moment, like I did. And then you'll start loving it.
That's all for this week! If you have any questions or suggestions, please leave a comment below!