What is the hardest questions Android Google Developer could get? Or what path a junior should take to make quick progress? We talk with Huyen Tue Dao.
When did you start your programming path?
I actually started fairly early in high school. At the time I think I wanted to be a journalist. My school required a technical credit, and there weren't that many classes available. To fulfill the first half credit, I took typing, which seems silly now to me, but actually paid off. I had to fulfill the other half credit and found out many of my friends were taking a programming class. I took the class too and completely fell in love with programming. After that I decided to study Computer Engineering in university, wanting at first to be a video game programmer. That didn't quite work out but I ended up taking a small, paid internship at NASDAQ to work on web apps. Eventually, the technology stack I used died out, but I lucked out and met someone who loved this new technology called Android, and the rest just fell into place.
What would you suggest to people starting their career in mobile development?
For people starting their career in mobile development, I have two pieces of advice. First is to keep learning and never stay still. In fact, don't let yourself get too comfortable with a framework, with a component, with a library, or with a UI or design pattern. Mobile evolves incredibly fast and is changing every year, every day. Maintain a core of good engineering practices and a desire to do the best by your teammates and your users. The rest is just unrelentingly changing. That's okay. Keep moving and be okay with throwing away code in a year or two or six months. Your core experiences and knowledge will always stay with you. The implementation details, the popular library, and the UI trends will always change. The second piece of advice goes along with the first: don't be too hard on yourself. You will feel behind. You will feel overwhelmed. You will feel like you aren't doing what all the cool apps are doing. Everyone feels this way from brand new devs to senior devs. Because mobile moves so fast, it's impossible to know everything, to try everything. Just remember that you aren't alone in that and keep moving forward.
What do you think about generalists and specialists in the programming world?
You started with full-stack and then decided to specialize in Android. What made you decide to do that? Do you code in different languages and platforms after hours?
I am always 100% about doing what suits you: your goals, your passions, your talents. I personally tend to focus on one framework, one technology, and dive in as much as I can. After my first stint in Android, I had to switch to iOS. Back then there were few Android jobs. Even though it was necessity, I still loved iOS. But while I was doing iOS I found that I just had to focus on that. I really wanted to learn the framework and good iOS development and UI practices. I did try to do Android on the side, but personally I find it very hard to context switch between work and side projects. That's just how my brain works. When I returned to Android the last time, it was because that’s where a job opportunity took me, and I just stayed ever since.
I know some people that can easily context switch and do web and JS or other languages like Scala or Haskell on the side. I find that amazing and so valuable. There's a lot that devs in different technologies can learn from each other and if you can glean some ideas, patterns, or architectures by working in other technologies, do it. I envy generalists that can act as a bridge between different platform. But that's not me. However, I think generalists and specialists each have a place in the broader community and workplace. I always just hope people do what works for best for them and what makes them excited to sit in front of a keyboard.
Now you are working as an Android developer, but you also have experience in iOS.
From a developer's point of view — which platform is more developer-friendly?
And how does your experience with iOS influence your work now?
To be honest it's been almost 6 years now since I worked on iOS. I unfortunately left right before Swift came out! I can't speak to how iOS is now and it wouldn't be fair for me to compare, but I always thought that iOS and Android had their own strengths and I could never pick a favorite.
Going back to when I was between iOS and Android, I feel like there were less surprises with iOS when I developed in it: if I could figure out how to do something in a UI, it generally worked the way I wrote it.
Right now (and again I'm an Android developer so I'm incredibly biased), I adore the tooling and openness of the Android platform. I love being able to dig into source code of Android if I run into a bug. The Android Developer community is incredibly strong and open, and that is a huge resource: other developers, Google developers and advocates, the collection of OSS we have to draw from. I also love the emphasis in Android on adaptability: it forces you to think about different devices, different user experiences, accessibility, etc. Many times it's not a perfect experience and it's hard to account for strange bugs that occur on one quirky device on that one OEM. But in overall I adore the openness of the Android platform and the Android community.
How do you feel about contributing to the community, sharing knowledge?
Do you think it is something that every developer should do one day?
Having said that, I'd hesitate to say that someone "should" contribute to the community, but I warmly and eagerly encourage everyone to engage with the community. Even just going to a meet-up and listening to someone speak is valuable both to you and to the person that you're watching speak. Sharing knowledge and teaching other is one of the fastest ways I've found for really solidifying what I know. In order to share and teach, you really have to know a subject, and so talking or writing about something forces you to understand it inside and out. And that's great for you. And of course, you're putting your knowledge and experiences out there which is great for others. I know it's intimidating. It's still intimidating to me, but it can be incredibly enriching. So I would just highly, highly, highly encourage devs out there to engage with their communities, and if they have even an inkling of a desire to contribute, to go for it.
What's your opinion about Flutter? On Flutter’s official blog we can read that "Flutter doesn't replace the traditional Apple and Android app models for building mobile apps; instead, it's an app engine that you can either embed into an existing app or use for an entirely new app."
What purposes do you recommend using Flutter for and in what cases is traditional development better?
To be honest I have not looked into Flutter that much. As I mentioned, I tend to be single-technology-minded: not enough room for much more than native Android in my head! I would however like to point folks to a talk by Noe Branagan at Droidcon NYC 2018. He discusses the high value of multiplatform frameworks like Flutter in building apps for and reaching users in emerging markets. https://www.youtube.com/watch?v=XByCuF90aV0 I will say that as long as I've been a developer that I have shared in the dream of multiplatform development. When I was younger I was eager to jump into all of the multiplatform frameworks and was disappointed several times. I generally am more reserved these days, but I have heard lots of great things about Flutter in regards to its tooling and its speed in getting apps going.
What language should a beginner Android developer start with?
Do you think this will change in the next three years?
Oh, that's a tough question. A couple years ago I'd still say Java if you already are a JVM developer. It's hard enough learning a new framework on top of learning a new language. However, with Google really embracing Kotlin and providing doc examples in Kotlin, publishing great utilities like KTX, and the general enthusiasm around Kotlin, I'd say that it is doable to start Android development in Kotlin. If you're a Java developer and want to get up and running with Android as fast as possible, I think it's fine to start in Java. But I think the broader Android community and, again, Google themselves are highly passionate about and investing heavily in Kotlin.
I'd also like to point out that Jetbrains has new book, "Atomic Kotlin", that is aimed at non-Java developers. So all around there is an effort to make Kotlin easier to learn even if you don't have a Java background.
It's hard to predict what will happen with Android: we all just fasten our seat belts every I/O and hope for the best. But my guess is that with the momentum and adoption of Kotlin that it'll become more and more the main development language for Android in the near future.
Can we expect new Jetpack components or instead an expansion of existing ones?
As someone not working at Google, that's a hard one for me to say but I would guess a little bit of both. If there is a problem space where Google can offer an opinionated library to give new Android developers a good starting point, I think it would make sense to see a Jetpack solution for that. However, I don’t have any ideas or intuition on what that might be. At the same time, I would definitely expect to see an expansion of the current Jetpack components especially as Android developers send feedback to Google on the parts of Jetpack that we like, don't like, want to add, and want to change.
What are the hardest questions you get as a Google technology expert and as a Trello developer?
As a GDE or even as a senior developer, the hardest questions are often "What should we do here? What is the best solution for me?" And even though I don't always like giving this answer, my response is often "It depends." Engineering to me is the art of building an optimal solution to a problem within a set of constraints and given a finite set of resources. And what is "best", what is optimal, always depends on what all those things are and how all of those things interact with each other. Even something obvious like, "Should I use the shiny new component on this?" isn't that obvious. Tearing something out to replace it with the new fancy component may not be the best solution. If something works, meets your needs, and allows use to serve your users, the best thing might not be to swap it out for something shiny and new, which might not be tested by thousands of dev-hours and hardened by hundred of bug reports. Maybe the "better" component or library is complex and labor-intensive to implement and maintain and you have a small team. The "better" thing may not always be the best solution for you, your team, and your project. It's the most relevant question to any project but it's the hardest for an individual to answer.
As one of Trello's Android Team (which is now up to ten devs) I think the hardest question I get is something that I bet many product devs hear: "Why can't you do X?" It's often heartbreaking, because often X is something that both the user and I really, really want. However, as a product developer, as a member of a team, I have to understand that we have other priorities as an Android team and as part of a larger company and product. There are also always questions of having the resources to properly implement and test a feature, and those resources are, of course, finite. So even if I feel like implementing X shouldn't be a big deal, I have to remember that there are a lot of other considerations and priorities. Now that's not to say that I or other devs won't advocate for something we feel strongly about. We do all the time. But as part of a large team and a product vision, you have to learn when, where, and how something can fit.
What are your sources of inspiration? Do you have any tips for developers on how to maintain a learner’s attitude?
Number one inspiration for me is other apps and other app developers. The mobile community has so many amazing apps and stories. Big teams. Small teams. So many different apps for every part of a person's life. And there are so many amazing things in design and in development that people have created and built to make these apps happen. It can often feel competitive in the mobile space, but I think more than anything it's just inspiring to see how mobile has become an integral part of our every day lives and understand how each of us influences a person's life in a small but significant way when they use our apps. Each of us, every day are part of this mobile revolution. And I think when you see what other devs are doing, how others are pushing the envelope, how others delight their users, how others are able to provide simple and complex services, it can just greatly inspire you to create something amazing as well. And the great thing about the mobile space is that usually with enough time, effort, and knowledge you can also make that amazing thing happen. You just have to keep learning how. You just have to keep asking and answering questions: what is that cool library or component that was delightful? How did that team architecture their app to scale to millions of users and maintain stability and reliability? What do my users in emerging markets need versus my users in developed markets? So my advice is just to be curious, to look around, keep asking questions, and seeking out the answers.