If you take nothing else away from this post, I hope you may at least consider the following as a framework for how to approach a conference, a meetup, or any other gathering of peers where you plan to learn something.
In the past two weeks, I’ve had the great fortune to participate in two different webinars for programming learners across the globe.
I love meeting students from different parts of the world, so I was very excited for these opportunities to share my experiences and hopefully impart some technical knowledge, lessons learned, and maybe even a little inspiration.
would love to include community examples of challenges or "things you wish you would have known" when starting with Android (learning Android itself, finding a job, growing in career, etc)…will shout out in slides 🙂
The responses were illuminating, supportive and thought provoking. They came from developers of all experience levels, on a variety of topics.
Because the advice was so varied and relevant to developers of all skill levels, I thought It could be useful to consolidate it in a single place; making it easier to discover and share for those looking for tips, advice and validation.
So that’s what you’re reading now.
A community-sourced collection of useful tips, tools, and advice for Android developers.
The most popular theme was centered around the Android “community.”
What’s the “community” you might ask?
The Android community is You, it’s Me, its anyone and everyone building for, and contributing to, the Android platform.
I started out with solely reading Android documentation and put most of the logic in Fragments =/. I wish I had utilized the community and learned about all the gotchas earlier!
It can be tough to be critical of something you've just learned, but don't let that stop you! 💪🏽
Interacting with the community can be incredibly useful and rewarding:
generators of documentation
filled with helpful people that love to answer questions and help solve problems
source of support and validation
place to find mentorship
builders of amazing open-source tools and libraries
It helps you stay informed. It will help you solve problems and be more efficient. You also may build great friendships, and discover that the members of the community you’ve looked to for tools and support are extremely welcoming and willing to help.
Don’t underestimate the power of teamwork and never be afraid to ask questions!
As others mentioned in these tweets, I wish I would have been more involved in the Android community early on in my career. If you’re someone that’s been considering reaching out to someone on social media, or going to a meetup, or sharing a blog post… I highly encourage you to take that step 🙂.
Being a lone wolf will only get you so far, you need to have a few solid relationships with others in the business to expand your sphere of influence <- definitely wish I had realized this sooner 🤷🏽♀️
Not learning the basics. I jumped into library development for a project without even doing a proper app before, the amount of things that I had to "relearn" later was alarming 😂 Also not engaging with the local and online Android community before, which I wish I did earlier
The Android platform, tools, and patterns are constantly evolving, and as developers we must continue to learn to keep up.
If you’re new to the platform and/or starting out in a career this learning curve may seem especially daunting. You may start asking “how do I keep up with all of this?” or “how do others seem to have all the answers?”
I remember early in my career feeling this constant sense of not knowing enough and always needing to research the latest tools and trends so I could be useful/relevant to my team.
The good news is that, in fact, nobody knows everything. Nobody is always up to date on the latest and greatest from the entirety of the Android platform.
Slightly related: I wish I had mentally prepared for how much it changes. Example – learning how to use a ListView and CursorAdapter only for that idea to be more or less obsolete after RecyclerView came out.
“not asking questions is a good way to avoid looking silly and a great way to avoid becoming smart” — Craig Russell Android dev at duckduckgo
It’s perfectly normal and expected to not have all the answers. No one does. It’s also completely normal to feel like there is so much to learn and too much new stuff to keep up with. You’re right.
A big key towards learning (and maintaining a balanced life) is to prioritize what you need/want to learn.
Once you know what your priorities are, don’t let shame or embarrassment keep you from seeking out answers. Everyone has different skills, experience, backgrounds and everyone will have different questions and answers.
This is a vague response, for which I’m sorry. I’m coming into Android from 20 years web. I don’t know what good Android java looks like. Conventions, style guides, file locations, patterns. Knowing where to look for that is the hardest. Where is the best place to find info, etc.
Another idea, just throwing it out, which even applies to experts sometime… While there are so many things evolving in Android community, try not to get overwhelmed/distracted and loose focus. Has happened to me. This will only help in frustrating yourself.
There were a lot of people interested in Jake Wharton’s thoughts about objectively evaluating tools/patterns/etc that come from Google.
This is great advice, particularly for Android where there are many ways to accomplish most tasks. Google often recommends a general approach or provides a solution and because it’s from Google it’s easy to take that as THE way to do things.
I certainly thought this way when starting out. Spending most of my first 2 years developing for Android on my own or in school projects, I didn’t know where to look for answers so I generally went to the Android developer docs and treated the recommended solutions as gospel.
Google doesn't always know best, and justifying something as "because Google/Android says/does it" isn't smart. Evaluate their stuff the same as you would anything else. Their engineers are no different than the ones everywhere else.
We shouldn’t single Google out as a special case to evaluate fairly. Any tool, library, pattern, etc should evaluated fairly. The same goes within your teams and projects.
“a good engineer is curious about everything and questions everyone…” — Andreas Ioannou Mobile software engineer
As a junior developer, or a dev new to a team/project, it’s easy to defer to others on your team that you view as more experienced and/or knowledgeable. They very well might be more knowledgeable, but that doesn’t mean their work and ideas shouldn’t be evaluated the same way anyone else’s are.
Everyone on your team should have a voice and the opportunity to contribute to and evaluate ideas and code. In doing so, better solutions may be found and more knowledge shared.
If you find yourself not speaking up, or not asking questions because you assume you’re wrong I would really encourage you to try and put that fear aside and add your voice to the conversation.
The same can be said for those on the other side. More senior members of teams should be working to ensure everyone has a say and is contributing their thoughts/ideas. If you find that someone isn’t, try and have a conversation with that person and understand what you can do to make sure they feeling comfortable and encouraged to contribute.
A good engineer is curious about everything and questions everyone – the only way to a more accurate result and innovation.
One of my fav chrome extension is Android SDK search. type ad and it will show you results from https://t.co/REqHmxcpPR. Also, option to view source of a class while on https://t.co/REqHmxcpPR. Pretty nifty if you wanna look at actual implementations
Android Studio shortcuts! ☝️ Not that I know all of them now, but the ones I know are increasing my efficiency so much. They are really powerful! Like crazy powerful. My favorite so far is "CMD + G" 😍 Learn them as soon as you can to enjoy coding #productivity
I can’t understate how useful the right tools can be. When I first learned of Genymotion it really did change my life. I used to alter my entire work/study schedule for a day if I forgot a physical device to test on because the stock emulator was so poor. (This was years ago. I actually love the stock emulator these days). After using Genymotion I was finally about to efficiently test on an emulator and I became more productive.
I also want to add throw in my own suggestion here of a really useful couple of tools that I didn’t discover soon enough.
Git & GitHub
Git is a widely popular, open-source solution for source control (ie. managing changes to your projects). GitHub is a platform for hosting & sharing projects which uses Git to track changes.
Source control is a vital part of my daily work habit today, and I highly encourage you to give it a look if you haven’t before.
Udacity has 2 free courses to help you get started:
We’re often on the look for the “best” or “correct” way of doing things. When we don’t have as much experience in a particular area, it’s natural to want some guidance so we don’t stray too far down the wrong rabbit hole.
That’s always been a challenge for new Android devs.
What UI architecture should you use?
MVC? MVP? MVVM? MVI?
Activities, Fragments, or Custom Views?
Enums: Yes or No?
Java or Kotlin?
Native, React Native, Flutter ?
It’s easy to become really invested in these debates and forget that the end goal is to build working software that benefits our users. Users want a great experience, and typically don’t care how that’s provided behind the scenes.
Ask questions, study, check out sample apps, learn about these different concepts if you want. But remember that you don’t have to know them all right now. Often the choices will be made for you based on whatever your team is already using.
Architectures! At least exposure to the different types of them, so I wouldn't have written everything in my activities and fragments.
In addition to learning the Android platform, it’s patterns and tools plenty of other challenges arise.
Planning and scoping of work was noted as one such challenge.
Learning to accurately break apart, scope, and plan your weekly work will set you up for success by placing reasonable expectations on yourself. This takes time, experience, and often a lot of trial and error.
If you’re starting a new, or especially your first, role you should talk with your manager/team about how your planning process works and what the expectations will be. Then practice breaking down a task, estimating the required time, and comparing that to how much time it eventually takes.
Through this repeated process you’ll be able to more accurately plan and help your team consistently reach its goals.
The importance of creating appropriately sized JIRA tickets for my work and keeping those organized.
Other challenges shared were the hiring/interview process, work-life balance, and product aims like boosting engagement and user retention.
The variety in these illustrates this fact: there will always be new, and varied challenges.
You won’t, and can’t, have all the answers all the time. But you’re not alone 😀
Don't let job requirements put you off applying, my current job (working as the sole Android developer for a small golf tech startup) was seeking for someone with a couple years experience, I applied to join straight after I finished university and got the job.
Android development is constantly evolving. It can be overwhelming, but learning to accept, manage and embrace that change will set you up for continued long-term growth.
How can you manage and embrace that change?
curiosity — Be curious. Ask questions. Seek out answers.
self-compassion — Avoid putting pressure on yourself to learn/try/know everything.
community — The developer community is an awesome support system. It can be a source of information, questions, support, validation, and friendship.
I’d love to hear more about the challenges people face when learning Android, starting a career as a developer, or about tips/tools/advice on how to overcome those challenges. Leave a comment, or share on social media.
The more we share about these, the more we can help others avoid the same.
The Android developer community is always ready & willing to help out. Here are some more great resources to help you develop for my favorite mobile platform 🙂