OK, If you really want to know how git works, this is the episode for you. KG talks with his longtime colleague and mentor Gordon McCreight. Gordon is a wiz in general but his knowledge of git goes deep. So in this episode, KG goes solo and really dives in-depth about how git works.
Buckle up and listen on; you'll come out on the outer side with a much sounder understanding of git.
In this episode, we chat with friend of the show Leland Richardson. Leland is a main contributor to Jetpack Compose. But in this episode, we pepper him with questions on how he came to the position he's in viz. a reputed Software Engineer contributing to probably the most cutting edge library in development for Android.
This was a treat and inspiring episode! Listen on:
Have you ever gone on on-call rotations for your company? What is on-call? How to operate a successful on-call strategy? What does on-call for mobile mean? What are some tools and resources to help with on-call rotations?
In this episode Donn and Kaushik dive into these topics.
What are Polyglot programmers, should you be one? Listen to this episode and find out!
Well, the world took a crazy turn and everyone's working from home now. How do you work from home? An experienced developer who's done this before talks to a newbie and discuss their thoughts.
In this episode, we talk about what a good backup strategy looks like and the different kinds of data you should be backing up.
Stay safe and think about your backup strategies.
Today we talk about logging. When to log, how to log, what to log - our thoughts on the subject.
In this episode, Donn and KG talk about the post Tim Bray recently wrote - Why Google did Android. They then touch on Chrome becoming a monopoly and tips on what folks can do to be a little more privacy conscious on the web.
We've all heard of the Y2K problem, but there's also a similar coming up this 2038 for us programmers. In this episode we dive into the 2038 problem (... after of course talking about our opinions on new year resolutions).
Get 1% better every day folks... Listen here:
In this episode KG and Donn talk about KG's recent jaunt with Docker. In the attempt to setup continuous deployment for his blog, KG explains his simple requirement and how it lands up requiring some basic Docker. Donn then closes it out with some interesting in-depth knowledge on how to use Docker
It finally happens! KG and Donn talk about Coroutines with two experts at Google Manuel & Sean. We've waited quite sometime on Fragmented to discuss this topic. We wanted to make sure Coroutines was mature enough to be compared with the contenders. Listen to find out more!
In this episode, Donn and Kaushik talk about some changes coming down the pipe for the podcast and what it means in the long run.
In this decompress episode, Donn and KG talk about how their 2019 went. It goes from Dagger talk to Kotlin talk to Kotlin Conf talk. Give it a listen and enjoy!
In this episode, we touch on a note so widely discussed topic: should Android application today use a BaseActivity? Doesn't that wreak of inheritance over composition? What would uncle Joshua say about this ineffective approach? What are alternative options? do we have any?
In this episode Donn talks about his strategy for dealing with unknowns in programming, namely around testing and how to figure out how to write tests for new code that might be difficult, unfamiliar or even legacy code.
In this episode Kaushik grapples with the question, where do I put DB objects in a modularized Android app? and tries to come up with an answer.
In today's episode, Kaush asks the question: in this brave new world where everyone is adopting more functional programming, do we just stop doing database operations? Listen to this episode to find out.
In this episode of Fragmented, Donn talks about when it's appropriate to comment your code.
So Kaushik is speaking at the Mobilization conference in Poland and instead of practicing the talk alone in his hotel room, he decided to record this episode on how he writes a technical talk.
As Android developers we know Java and now Kotlin. But to become even more seasoned developers, learning newer languages can be a level booster.
In this episode KG and Donn discuss the merits of learning new languages, what new languages they’ve picked up and how they feel its important for them and their careers as developers. .
In this episode, Kaushik and Donn go back and forth on the topic of over-engineered code.
In this episode, Donn walks through why Kotlin's Not Null Assertion Operator (!!) is a code smell and what you can do to alleviate it.
One question that Kaushik and I get all the time is this ...
I'm starting to learn how to build Android apps, which language should I learn? Kotlin or Java?
In this episode Donn answers this question and gives valid points on why both languages are valid options and why you might want to consider one over the other.
This week Donn talks about what pattern you should use when developing your application.
In this episode Donn and Kaushik sit down with Instacart Engineer Colin White to discuss a new image library he has created called Coil.
This week Donn and Kaushik talk to Leland Richardson from the Android team at Google about Jetpack Compose.
In this episode, Donn talks about public speaking and how it can help you grow your career.
Marcel Schnelle joins Donn in this episode to talk about how to get your application under test and some steps to go from scared to confident in your testing process. The second half of the show they dive in deep to JUnit 5 and its new features.
JUnit 5 is backwards compatible with JUnit 4 and offers a slew of new features and extensibility points which make the framework much more appealing going forward. We're convinced you'll enjoy this episode and leave wanting to get your app under test - even more than it already is.
In this episode, Donn continues his talks about Kotlin Lambda Expressions. He explains how you can use lambda expressions as function parameters and as return types for functions.
Donn sits down with Buffer Android Lead, Joe Birch. Joe is a GDE for Android, Google Actions, Flutter and Google Pay. In this episode Donn and Joe talk about Clean Architecture, what it is, and why you might want to use it.
They break down the concept of what Clean Architecture is in a manner that is easy for even a beginner to understand.
Kaushik decides to hit record on a skype call he has with friend of the show Jesse Wilson. They start off by discussing building features across different platforms today.
In this episode, Donn talks about Kotlin Lambda Expressions. He explains the syntax and how to build a couple of simple lambda expressions with and without type inference and declaration. We wrap up with a small example of passing a small lambda with multiple values to a function. See the show notes below for more info.
In this episode, you'll learn all about Kotlin Sealed classes. Donn walks you through what they are, how to create them, how to use data classes, objects and regular classes to create a restricted type hierarchy.
In this episode, Donn talks to Matt Runo about the Flank project. Using Flank you can run your Espresso test suite in parallel on Firebase Test Lab (FTL). This allows you to lower your feedback loop time and increase developer productivity and throughput.
This Google IO, Donn and Kaushik didn't interview the other developers but they still enjoyed some of the announcements. So in this episode they catch up on the ones they found most exciting.
In this show, Donn talks with Dan Jarvis about Machine Learning on Android with ML Kit and Tensor flow.
With the release of Android Q we now have the settings panel and all its glory. This panel, while most likely overlooked as a minor feature, is actually a diamond in the rough.
In this show, Donn and Kaushik talk to Cameron Ketcham and Connie Shi from the Android Material Components team at Google.
In this show, Donn and Kaushik talk to Don Turner about how to build high-performance audio apps on Android.
We dive deep into history of audio on Android, some of the problems that the platform faced. Then look into the tools that we now have to solve those problems so that developers like you can build killer audio apps.
In this episode, Donn talks about Item #20 in the Effective Java book (third series) by Joshua Bloch. He discusses why you should think about using interfaces over abstract classes.
With the release of Android Q we now have the settings panel and all its glory. This panel, while most likely overlooked as a minor feature, is actually a diamond in the rough.
The Android community has come to use Rx pretty heavily but surprisingly there hasn't been any one convention that's won, when it comes to how we name our functions that return Observables.
userUpdates() ? In this mini-episode dutifully does the yak-shaving for you and discusses what some options are and what the community has been gravitating towards.
Growing as a developer is important for you, your career and your future. One of the best ways to grow your career is to start writing.
Listen to all star Indie developer and friend of the show Chris Lacy. Chris Lacy created the beloved Action Launcher - arguably one of the best Launcher apps on Android. In this epi isode, he talks to us about what it's like being an indie developer, starting on Action Launcher and of course his newest creation - ActionDash(https://blog.actionlauncher.com/act iondash-android-digital-wellbeing-alternative-2765746aad51).
Jeroen walks us through his thinking on app development
In this episode, we continue our discussion from episode 148 on evolving android architectures. We collected some of the questions from the community and try to answer them.
Show notes: http://fragmentedpodcast.com/episodes/151/
In this quick fragment, Donn talks about Kotlin Returns and Jumps with Labels and how to implement them in your app.
In this quick fragment, Kaushik talks about the new Kotlin 1.3 experimental feature "inline classes" and how it helps with Type driven design.
Show notes: http://fragmentedpodcast.com/episodes/149/
In this episode, Donn and Kaushik talk about the state of android architectures and how they've stared to evolve. Kaushik recently worked on a project of coming up with an evolved version of an MVVM architecture, very similar to what the Android community now calls MVI.
In this episode they discuss the specific. A special request: if you have follow up questions or clarifications or things you'd like to see specifically with respect to this dicussion, hit us up on the Discord #fragmented-podcast channel with your thoughts and we'll make sure to address them in future parts!
In this short fragment episode, Donn explains how you can clean up your RxJava 2 streams and ensure no memory leaks are occurring by using the AutoDispose library from Uber.
In this episode of Fragmented, Donn digs into three things that every Android developer needs to know.
In this short fragment, Kaushik explains how you can trace network requests from your app by adding a special header. Easily trace an HTTP request all the way from a client to your backend web process.
In this episode, Donn and Kaushik talk about productivity tools for developers. As developers, what are some additional tools and utilities that really up your game. If you wanted to see how they tweak their development environments and workstations in general, this is a good episode to listen. Also introducing a Fragmented Discord Chat server!
In this mini fragment, Donn and Kaushik share some thoughts on real world testing with Android development - a favorite topic of theirs.
Kaushik recently ran into a case where an espresso test fails because the UI stops performing. It's an interesting discussion on figuring out what matters when you write your tests. They dive into strategies and techniques around testing. What makes a good test, what should you be testing?
They then talk about why Hermetic testing is pretty hard on mobile and ideas around a simple solution that could be provided out of the box. They then round it up talking about TDD and it's role in today's world.
In this mini fragment, Donn and KG talk about Impostor syndrome. Most of us developers are plagued by this. Does this feeling ever go away? How do we deal with this? Listen to this short episode to find out more.
We all know of ProGuard, we want to use it and like it. But let's face it proGuard ain't pretty. In this episode we have Jeb walk us through the magic of ProGuard.
We talk to Jeb Ware of American Express. Jeb works as an Android developer and has given some great talks on ProGuard. He walks us through what ProGuard is, how it works, advancements with R8 and more.
By the end of this episode, you should have a new found appreciation for proGuard and bravely approach adding proGuard to your projects.
In this episode, Donn and Kaushik talk to Uber's Manu Sridharan on static code analysis. Manu's a badass who did his PhD on the subject! He explains how static code analysis works, how Uber leverages these tools in their app development pipeline and how we can use such tools to build high quality Android apps.
In this mini fragment, Donn asks KG about a recent hackathon side project that he worked on with Kotlin scripting.
We go into kotlin scripting (using kscript), pros cons, setting it up and more. We've added links some interesting resources, so you want to make sure you check out the shownotes for this one, so you too can explore kotlin scripting and see if it's a fit for you.
In this episode, DF and KG decompress. They start off talking about ideas around KISS vs DRY in software engineering. They move on then to talk about a dear topic - functional vs unit testing and then dive into some of the woes of having a testing infrastructure spun up. Also announcing our youtube channel !
In this fragment episode, Donn talks about Kotlin extension functions. He discusses what they are, how to build them, why they're useful, how to organize them, visibility and how to call them Java and much more.
Donn's on a roll again this week and talks to us about his experience having developed Android for a while. In the early days of Android development, as app developers we felt like we had a decent grasp of everything you needed to know to pump out decent apps.
But with the time, and the latest updates, that has become a tricky thing. This is a good problem to have for the ecosystem but it can make it seem very daunting for developers, both new and old.
Donn gives his 2 cents on this subject.
In this episode, Donn talks about how you can get effective help with your coding problems with an SSCCE - a Simple, Self-Contained, Correct (Compilable), Example.
A hotly debated topic at the moment is the use of a library like Dagger for dependency injection in the world of Kotlin. In this episode, we talk to Danny Preussler. Danny's a pro who's been around from the Java 1.0 days! He helps trace the history of dependency injection in Java all the way to today, in a Kotlin world where there exists alternatives like Koin and Kodine.
We dive into how some of these use a Service Loader/Locator pattern and the subtle differences with dependency injection. Listen on for an action packed episode.
In this mini fragment Kaushik talks about dealing with the Money object. With money we need decimals, but the obvious solution of using a float or double may not work as advertised. Listen to this episode to find out why and how you can go about dealing with this.
We live in a time of booming AR (and VR). We wanted to talk to someone who’s worked with it and would know a thing or two about the subject. Then we found Yuliya – also known as the walking wizard of ARCore. In this episode, she teaches Kaush and Donn about ARCore, the differences between AR/VR, the fundamental building blocks of ARCore, some of the newer concepts introduced like Sceneform. An action packed episode to say the least. Listen on !
In this episode, we resume our conversation with Airbnb's Gabriel Peal. If you haven't listened to part 1, you really really should go back and do that. In that episode, we kicked it off by first trying to understand the goals and the story behind why React Native was chosen as the code sharing technology/tool.
If you haven't heard, Airbnb has decided to move away from React Native. Friend of the show Gabriel Peal wrote an in-depth series of blog posts about this. We had so many questions around this that we asked him to come on the show and he graciously accepted to answer some of our questions.
It's always a pleasure listening to his insights and this episode is no exception!
In today's episode, we are joined by Sam Bobra - engineering manager @VSCO, android fangirl and gRPC magician (some would go so far as to say evangelist !) to talk about gRPC on Android. Super informative episode!
Show notes at http://fragmentedpodcast.com/episodes/128/
In today's episode, we sit down with Caren Chang from June to talk about audio engineering for Android. More specifically, how stoves can use audio to send notifications.
In this episode, we continue with Part 2 of this GraphQL series. If you haven't listed to episode 125 already, it might make sense to first listen to that one cause we go into the basics of GraphQL.
In this episode, we dive into the specifics of Apollo and how Mike went about creating a GraphQL client for Android. Let's get on with Part 2.
In this episode, we talk about GraphQL. Friend and GDE Mike Nakhimovich helped create the library Apollo for Android, which is the defacto official GraphQL client for Android.
In this first part of two, we take a step back and first try to understand what GraphQL is, why one would use it, how Mike set out to create and contribute Apollo for Android and his journey and satisfaction with open sourcing it when he worked at the New York Times.
If you've ever been interested in GraphQL, this is a good show to get you up to speed.
In this episode of Fragmented, Kaushik talks to Chiuki & Huyen from Android Dialogs and Russell & Philip from Pocket Casts. Fresh after IO we huddled in a room to talk about our first impressions and what we thought were some of the highlights for us Android developers. Hope you enjoy the show! (if you want to see a behind the scenes crossover special, make sure to subscribe to Android Dialogs!)
Show notes: http://fragmentedpodcast.com/episodes/124/
With good –most of the time– also comes the bad. In this episode, Kaushik and Donn chat about the small annoying things about being an Android developer, or more aptly - "Micro Frustrations".
We usually cover the new, latest, greatest and awesome developments. But it helps to step back and also point out the things that are broken and the 1000 cuts so to speak.
Sit back and enjoy this hearty rant!
Show notes: http://fragmentedpodcast.com/episodes/123/
In this episode of learning kotlin, we look at the
typealias keyword. The
typealias keyword allows you to provide alternate names for existing types and and function types. Learn how, why and when you can use it in this episode
In this episode of Fragmented, we wrap up another 2 part series. We dive into the details of the Arrow library with this one. Arrow is a library in Kotlin that helps bring many of the functional paradigms of programming to your daily development. We talk to the team about how it all started, the history of the library, why we even need arrow, how Arrow is structured, some of the pitfalls, and in the end some resources on getting us started with Arrow.
In this episode of Fragmented, we kick off another 2 part series. This time it's with the Kotlin Arrow team! In the first part, we talk to Jorge, Raul and Paco about Functional programming in general, some core FP concepts, do we already use functional programming today, what are pure functions, do I need to know complicated math to do FP, Immutability, Referential transparency and so much more. These are all pretty daunting words, but the Arrow team break it down and make it really simple for us to understand.
In part 2 of this series,
To help us understand Flutter in-depth we talk to Flutter's GDE Eugenio Marletti. In Part 2 of this 2 part series, Eugenio helps us understand what flutter is, why it was created, how it works, some really cool features with Flutter and why an AndroidDev today should really give Flutter a good look.
We got so carried away in conversation, that we were forced to break this episode into two parts. If you missed part 1 but want to go back and listen you'll find it here: 118: Flutter and cross-platform development with GDE Eugenio Marletti - Part 1
In this episode, we dive into one of our most requested topics and highly anticipated ones - Flutter.
To help us understand Flutter in-depth, we talk to Flutter's GDE Eugenio Marletti. In Part 1 of this 2 part series, Eugenio helps us understand what flutter is, why it was created, how it works, some really cool features with Flutter and why an AndroidDev today should really give Flutter a good look.
We got so carried away in conversation, that we were forced to break this episode into two parts. Stay tuned for Part 2.
Show notes: http://fragmentedpodcast.com/episodes/118/
In this episode, Donn and Kaushik sit down to talk about multi-module builds with Gradle. They talk about how you can separate your build into multiple different modules and how you might go about implementing it.
In this episode of learning kotlin, we look at 3 important keywords - inline, noinline and crossinline. The inline keyword is super common and you've probably run across this one at some point. What does it mean and when is it useful? We also look at the related but seldom used variants noinline and crossinline.
In this episode, we talk about the different parts of Android architecture components. We've had episodes on Room and the paging library, so in this one, we thought we'll touch a little on Lifecycle Owners & Observers, ViewModels, and LiveData. Akshay Chordiya helps break it down. Listen on!
In this episode, we talk to Patrick Nikoletich from Microsofts App Center team. We explore the intricacies of the Continuous Integration server system on the App Center platform.
In this episode we catch up with a highly energetic but sick Christina Lee about the delightful details in the Pinterest app, delving with the dark side (Swift), giving live coding presentation talks and touching on some Kotlin details like covariance and contravariance. Listen on for a power-packed 40 minutes.
In this mini-fragment episode, Donn talks about Item #9 of the Effective Java (Third Edition) book - Prefer try with resources to try finally.
Please note, this episode references the third edition of the Effective Java book that recently came out. Previously we were doing the entire series on version 2, but we are now upgrading to version 3 of the book. We will not be re-doing any of the existing lessons, but if one was inserted in the mix, then we will do that lesson.
In this mini-fragment episode, Donn talks about Item #5 of the Effective Java (Third Edition) book - Prefer Dependency Injection to Hardwiring Resources.
In this episode of Fragmented, we talk about CI, CD and CD services. That's Continuous Integration, Continuous Delivery, and Continuous Deployment. BuddyBuild a beloved 3rd party service of ours (and previous sponsor) is sunsetting their Android service, so Donn and KG discuss alternatives and the options they've been keeping an eye on.
show notes: http://fragmentedpodcast.com/episodes/110/
In this episode of Fragmented, we go back to learning some Kotlin and look at the Iterable like data structure introduced called "Sequences". What is a sequence? How is it different from Iterable? When should I use it?
Listen on and find out!
Show notes at http://fragmentedpodcast.com/episodes/109/
In this episode Donn talks to React Native magician Ryan Salva.
React native and cross-platform development is typically one of our most requested topics so we kick the new year off with React Native. Ryan and Donn dive into the state of React Native today for mobile development, how it's matured since inception, what kinds of apps are suited to be built with React Native, what kinds aren't, what are the benefits to using React Native, some tips like pushing updates without having to upload to the play store every time and so much more.
Show notes at http://fragmentedpodcast.com/episodes/108/
In this episode, we talk to Alex Lockwood who created shapeshifter.design, while at Google. Shape Shifter is an amazing tool that can help developers create Animated Vector Drawables without losing all their hair. Think of shapeshifter as a developer-friendly, open source, After Effects alternative for Android developers.
Alex talks to us about how and why he created Shape Shifter, the different tools that have evolved out of its creation and just getting a good grasp of its working.
Show notes: http://fragmentedpodcast.com/episodes/107
In this episode we sit down and talk to Ray Ryan from Square about the Reactive Workflow pattern that he recently gave a talk on. This pattern goes deep into RootViews, containers, ViewFactories and much much more.
In this episode, we talk to Jake Wharton of Google on a recent Kotlin coding style guide that they released: the Android Kotlin Guides. In this episode, we pick his brains and ask him how he structured the guide, how he partitioned it to fit some of the idiosyncrasies of Kotlin, what some of the challenges were, when coming up with the guide and much more.
Jake's one of the best out there and it's always such a pleasure to have him on the show. Listen on:
Show notes: http://fragmentedpodcast.com/episodes/105
In this episode of Fragmented, Donn makes the pilgrimage to Microsoft Connect 2017. Connect is Microsoft's annual developer conference where they announce a bunch of new products and services.
Donn got to interview a bunch of folks, and in this episode, we talk to two of them: Miguel De Icaza (leading open source proponent who also helped create Gnome, Mono, Xamarin etc.) and Simina Pasat (Program manager for Microsoft's very new CI like service AppLink). Both of them were terrific guests and had quite a few gems to share, for us Android devs! Listen on.
In this episode, he breaks down the pattern for us. He tells us how to implement it, how it helps with testing, the benefits of the pattern and some of the pitfalls. Recording this episode was riveting for us and we dive into some juicy technical details. Listen on!
Show notes: http://fragmentedpodcast.com/episodes/103/
In this episode of Fragmented, Donn and I decompress. I had the pleasure of attending KotlinConf 2017 - Jetbrain’s very first conference dealing completely just on Kotlin. I have a quick chat after Day 1 with Donn, giving him the juicy updates.
We talk about how the conference was organized, some of the technical talks I attended (our thoughts on these…) and some of the folks I had the opportunity to meet.
Overall it was an amazing time at KotlinConf and if you want to vicariously enjoy it, listen on to the show.
Show notes: http://fragmentedpodcast.com/episodes/102/
Another day, another opportunity to learn more Kotlin. In this episode, Kaushik walks through the concept of visibility modifiers. How do the modifiers in Kotlin differ from the ones in Java? What is this new internal modifier? When should I use each of the operators?
Listen on to find out!
This is the 100th episode of Fragmented. We do things a little differently for our 100th episode and field a bunch of listener questions that came in. We're going a little meta and talking about our experience starting Fragmented, our process, how we pick guests and topics, our setups, our favorite Android libraries and classes (?!).
Thank you so much for being a listener. We cannot express how grateful we are to have you.
In this episode, Donn talks about Item #17 from the Effective Java book: Design and Document for inheritance or else prohibit it. Learn how you should be documenting your code that is built for inheritance when you should not call overridable methods and much more.
In this episode, Donn is at Droidcon NYC 2017. He sits down to chat with Dan Kim about Kotlin, Gabriel Peal about React Native, Scott Alexander-Bown about Android Security, Jose Alcérreca about the Android Architecture Blueprints and Kevin Galligan about the history of Droidcon NYC and his new library - Doppl.
In this episode Florina returns to talk to us about Google's recently announced paging library!
The paging library is a powerful take on implementing paging functionality in general, not necessarily linked to a paritcular technology or library. Florina breaks down the different components and explains what specific function each of them play.
We start off with DataSources, talk about when one would want to use "Tiled" or "Keyed" data sources, and then talk about making them work with RecyclerViews (which is really what 99% of us eventually want). Florina also explains the role of PagedLists, PagedListAdapters and so much more.
If you ever wanted to get an overarching veiw of Google's first take on implementing the paging library, this is a great starting point. Listen on so you can understand, try it out and then give feedback to Google, to participate in the making of this new library.
In this episode, Romain Guy from Google gives us the lowdown on a bunch of Hardware related stuff.
He starts off by explaining how the refresh rates on screens matter, what it would mean to have something like a 120Hz display for Android screens, how things like V-Sync and double buffering work, using different screen technologies, how much work is done by the CPU and GPU and so much more.
This was one of those episodes where we tried so hard to hold back for fear of recording for another 2 more hours. Romain is clearly one of the most knowledgable and interesting engineers to talk to today in the hardware land of Android. What a blast!
In this episode, we talk to Florina from Google about the recently released Database library Room. Room was introduced as part of the Android Architecture components and has been picking up a lot of steam in the community.
Room focuses on being a beautiful api layer to Sqlite. Florina explains to us how we can use Room to create a database, creating entities and how them map to tables, using DAOs to access data and even observe them
Listen on for the details!
In this episode of Fragmented, Donn talks about a common problem almost all software engineers face in their career - Design Patternitis.
In this episode of Fragmented, our friend and RxJava paragon of the Android - Dan Lew, returns for a record 3 and 1/2 time.
We've been using RxJava over the years now and have even talked to Dan about it in previous episodes.
How has our understanding of Rx use in Android changed over the years? We know some of the super standard usecases for RxJava in AndroidDev. But the important question to be asking is: when are the times we "shouldn't" be using RxJava? Are we over-complicating our code by shoe-horning it in different places. Concepts like functional programming and reactive state management have picked up steam again, how has this influenced our RxJava use?
Listen on to find out more!
In this second episode of our learning Kotlin series, we talk about Kotlin’s support for static members or … lack thereof. Kotlin as a language was designed so that there’s no such thing as a “static member” in a class but there are times when having static members can be useful.
So what do we do in those cases? do we just avoid static members? are there better alternatives? what are the costs with some of these approaches?
Listen on to find out more!
In this decompress episode, DF and KG kick it off with a brief discussion of the highlights from the recent reddit AMA that the Android Engineering folk conducted. What were the interesting things they learnt or were surprised by etc.? They then go on to briefly discuss two topics they've always chatted about (off-air) packaging by feature (not layer) and most recent thoughts on testing. Listen on to find out more:
At I/O '16 Google announced the super cool new feature "Instant Apps". It's only at this IO, have we started to see real world examples and third parties pull off this feature.
In this episode, we talk to GDE Zarah Dominguez who's company "Domain" was one of the partners for this program.
What is the Instant Apps feature? What are some usecases where this comes in handy? How does it actually work internally? What does it take for a developer to implement this feature in their own app? Listen on to find out!
In this mini Fragment, KG talks about his journey learning Kotlin as a newb. Given that Kotlin is most likely going to be the de-facto language for most developers, it makes sense to deepen our understanding of the language (as we have strived with Java over the years).
"Properties" in Kotlin are a first class language feature. But what does that actually mean? What are the nifty features we get with properties? How are these resolved from a Java class when there's potential a name clash? What are some other gotchas and learnings from using properties? Listen on to find out:
In this episode of Fragmented we talk to our friend Piwai from Square.
Piwai's a pro at testing and breaking apps (he built LeakCanary - so not terribly unexpected). He teaches us some strategies on debugging app crashes and briefs us on this concept he calls "offensive programming" which has helped him a lot with his Android development.
It's good stuff and we hope you enjoy the show.
In this mini-Fragment episode, Donn talks about Item #16 of the Effective Java series - Favor Composition over Inheritance. You'll learn why using inheritance is not always a great idea and how you can use composition in place of it to make your code more anti-fragile, resilient and clean.
In this mini-Fragment episode, Donn talks about Working Effectively with Legacy Code. He doesn't just talk about the book itself, but he talks about how to approach a legacy code base and start delivering value as soon as possible, yet with confidence. If you've recently started a new job, moved to a new team, started working on an existing code base, then this episode is bound to help you.
In this episode, we talk to Dan Kim about Kotlin. Dan is an Android developer at the company Basecamp and has some great Kotlin posts on the company's famous blog Signal Vs Noise. He was pretty early, on the Kotlin train and has been working with the new language for quite sometime now.
Instead of trying to go into every single detail about Kotlin, the nuances of the language, it's syntax etc. we take a more general approach and talk about starting out on Kotlin, how does on go about migrating an Android codebase to Kotlin, what are things we should watch out for when using the language. This and a whole lot more!
This was truly one of the most memorable IOs Google has ever conducted. In keeping with tradition, Donn and Kaushik talk with a bunch of awesome #AndroidDev and get their opinions/thoughts on IO and Android in general. As always, these are super fun episodes.
RxJava is considered a functional reactive programming library. But the paradigms of functional programming have existed for a very long time. In this episode we talk to Android GDE Anup Cowkur, about his experience experimenting with "pure" functional languages. He breaks down some of the basic concepts, explaining the different terms along the way.
It's pretty awesome, when you use a third party library, love using it and finally get to talk to the person who actually helped build it. In this episode, we talk to Gabriel Peal. Besides having quite the illustrious career in Android development, Gabriel now works at Airbnb and helped build Lottie - an animation library.
What is Lottie, how do you use Lottie? why is so Lottie so cool? how does it actually work under the hood? Listen to this episode and find out.
It is the world of the Internet of Things (IoT) and Google's answer to that is the Android Things. In this episode, we talk to the amazing Rebecca Franks. She explains how Android things works and talks of some of the adventures and examples she's embarked on with Android Things. If you've had that hobby Raspberry Pi or Arduino board lying around and not sure how to put it to use, this episode's for you.
In this episode Donn and Kaushik recommend 10 books on Software programming that they think every Android developer would greatly benefit from reading. These are books that helped them become better programmers and have had the most impact in their daily lives as Android developers.
Have you ever thought about building VR (Virtual Reality) apps? Where do you start? How difficult is it? How similar is to Android development? Do you still code in Java? In this episode, Etienne Caron AndroidDev extraordinaire and expert VR hobbyist gets us up to speed on what you need to know, to start creating VR apps.
In this episode, Donn sits down with fellow Android GDE, Michael Bailey to cover 10 testing strategies to help you get your application under test and to make sure your testing environment is top notch. They start off with the basics and then progress further down the testing rabbit hole eventually covering topics like cloud-based testing labs, hermetic testing and much much more. This episode will help provide you with a blueprint of how to get your Android app under test and get you to a level where you can develop your app with confidence.
Today on Fragmented, we talk to Eyal Lezmy. Eyal works as an Android developer for Genymotion. While working for Genymotion he had to deal with the Android Debug Bridge a whole bunch, so in this episode we dive into the details of ADB, some super slick commands and in general just get a better understanding of this tool we use every single day.
In this episode Kaushik talks to Kristin of Big Nerd Ranch. You would think that the Android lifecycle is pretty standard and basic stuff. But as Kristin begins to unpack the nuances of the Android lifecycle, we learn there's a world of details that's easy to miss. Listen on, to get an ironclad grip on the Activity lifecycle.
Show notes at http://fragmentedpodcast.com/episodes/76/
In this mini-Fragment episode, Donn talks about Item #15 of the Effective Java series - Minimize Mutability. You'll learn what mutable and immutable objects are, how and why immutability is a good thing and how you can implement it.
It's almost a given these days that most phones will have Fingerprint APIs. But how does the hardware actually work? How does the Software work? How does an Android developer make use of these APIs? Ben Oberkfell breaks it down for us in great detail. Listen on!
In this mini-Fragment episode, Donn talks about Item #14 of the Effective Java series - In public classes, use accessor methods, not public fields. You'll learn why it's important to use accessors in your public classes and some caveats to this rule.
In this episode, we talk to Android developer Andrew Orobator. He gives us the lowdown on the new feature App Shortcuts that was introduced in Android. We talk about static and dynamic shortcuts, use cases for other shortcuts and how to implement them for your app. We also cover what the feature lacks and things to watch out for, while implementing them. Listen on!
Fragmented also has spanking new music from the super talented Blueprint: you can find out more at email@example.com.
In this episode we change the tune and talk with Raveesh Bhalla; Raveesh is a GDE for design specialized in UI/UX.
He starts off by helping us get a good understanding of what UI/UX involves. He then shares his experiences and learnings from having conducted extensive research specifically for Android. What are some good patterns today, what are anti-patterns, what should we watch out for. Listen on to find out more!
Show notes: http://fragmentedpodcast.com/episodes/71/
In this episode Donn and Kaushik have an honest discussion about Realm (a client side database). Donn has worked pretty extensively with Realm and even consulted for their Android platform previously. But Kaushik has only recently dove deeply and tried it out for a production app.
In this episode they have an honest and frank discussion about using Realm, the advantages, the disadvantages, the gotchas and if it makes sense to use a database like Realm as an Android developer today.
We're back with part 2 of our Buck episode. We continue our chat with Uber Engineer, Gautam. We dive into the details of how buck is used, how you can use it and how it can help you and your team. Learn about how to use it with Gradle and more with OkBuck.
We kick off 2017 talking to Uber Engineer Gautam. In first part of this 2 part series, Gautam talks to us about the Uber Android app, the complexity in the architecture, the scaling challenges, the pain points Android developers faced working on such a massive app.
He then goes on to explain how his team (Android Developer Experience) at Uber have approached these challenges and come up with elegant solutions.
We then dive head deep into Buck - the build system for Android development, it's advantages and the benefits that the folks at Uber have observed having migrated.
In this episode, Donn talks with Xamarin cofounder on how one can use Xamarin for Android development.
They start off chatting about using Xamarin just for business logic sharing. This Joseph tells us was the original intention for use. They also touch on Xamarin forms which allows you to additionally build UI elements cross platform.
Even if you don't use Xamarin or plan to use Xamarin right away, this was a fantastic insight into the platform, from the creators directly. They touch on advantages, how to really leverage the platform and potential downsides.
show notes: http://fragmentedpodcast.com/episodes/67/
In this episode, we talk to our good friend and immutability champ Ryan Harter. We start off talking about the benefits and disadvantages of immutability, then we dive into Value types and the subtle difference with Value types. Finally we close out by talking about AutoValue and how you can extend it using the super nifty auto-value extension system for functionality like Parcelability, Json parsing etc.
In this episode we talk to Ty Smith about all things Developer Platform. Currently a tech lead at Uber, Ty has quite the illustrious career having worked on some of the biggest names you've heard like Uber, Twitter(Fabric), Evernote, Zagat etc.
Unlike regular client app development, Developer Platform spans a variety of interesting topics like building consumable SDKs, building libraries with good APIs, creating Android integrations and App to app communication via components like Content Providers, AIDL Integrations, Intent APIS and deep links.
We ask Ty how he got started in this field, how one should go about thinking about it and the interesting challenges that one would run across in this intriguing field.
In this mini-Fragment episode, Kaushik talks about the process of Garbage collection and how it compares to Reference counting (which is the equivalent process in iOS).
How does each work? What are the differences? Which is better 😁 ? Listen on for all the juicy details...
Show notes at http://fragmentedpodcast.com/episodes/064/
In this mini-Fragment episode, Donn talks about Item #13 of the Effective Java series - Minimize the accessibility of classes and members. You'll learn why it's important to limit the access on your public API, how it can help you with development and performance. You'll also learn how changing a public API can affect the consumers of your API, for good and bad.
In this mini-Fragment episode, Donn talks about Item #12 of the Effective Java series - Consider Implementing Comparable. You'll learn about how you can use the Comparable interface to give your code the extra sorting boost it needs. Work with Arrays.sort(), Collections utilities and even sorted data structures. Donn breaks down what it takes to implement the compareTo method of the Comparable interface.
The age old question: should I be using an event bus today? What is an event bus? what are still some good use cases for an event bus? Can i replace an event bus with RxJava?
Donn and Kaushik have at it and try to answer this question that gets asked constantly in the AndroidDev circles. Listen on for our take.
Show notes at http://fragmentedpodcast.com/episodes/061/
We talk with Android UI magician Israel. In this episode, Israel does what magicians are never supposed to do, reveal those exciting magic tricks. He talks about tricks you can use in your Android apps to create a super slick UI, citing examples from Google Photos, Twitter and other apps.
Dazzle your Android users with these UI tricks.
We talk with the all-star multi-talented GDE Chiu-Ki Chan about testing. Specifically, we dive into leveraging Mockito for your testing needs. What is Mocking, what is Stubbing, what are the different test doubles, how does mockito help with this? Listen on to find about that and some more interesting stuff on testing!
In this mini-Fragment, Donn talks about Item #11 of the Effective Java series - Override clone Judiciously. You'll learn about the extralinguistic behavior of clone and the Cloneable interface. Clone and Cloneable are very special, and this episode helps explain the nuances.
In this episode we talk with, Lisa Wray, first of her job title, mother of the Genius Android app and sorceress of Data Binding.
What is Data Binding? How does it work? What can you do with it? ... and what you can really do with it ! Listen on and find out more. Lisa walks us through the basics and then talks to us about how we can really push the envelope with Data Binding and do some really cool things.
Show notes at http://fragmentedpodcast.com/episodes/057/
We wind this two part series down with GDE Philippe by chatting about postfix completion, live templates, structural search/replace, integrating with external tools, cool configurations and much more. Prepare to be mind blown.
In this 2 part series, we talk to the illustrious Philippe of Android Studio tinkering fame. He starts off by discussing the intermediate basics that everyone should know about using Android Studio: window configuration, keyboard shortcuts, navigating the code smoothly, debugging etc. Gradually he moves into ninja mode and starts blowing DF & KG's minds with cool tips and configurations.
Donn and Kaushik discuss how they use git for their development workflow. They also touch on semantic versioning and how they rollout new versions of their app in a controlled fashion.
Show notes at http://fragmentedpodcast.com/episodes/054/
We have Jake Wharton and RxJava in one episode 💥. In this power-packed episode we talk to Jake about the advances in RxJava 1.x since the last time he was on the show and also looking ahead at the advancements coming down with RxJava 2. If you're interested in RxJava, this episode will definitely be a treat!
Show notes at http://fragmentedpodcast.com/episodes/53/
In this mini fragment Kaushik talks about some cool Junit 4 tricks using Parameterize, Enclosing test runners
Show notes at http://fragmentedpodcast.com/episodes/52/
We've always wanted to know more about annotation processing, so in this episode we pick GDE Mike Evans' brains on the topic and ask him a whole bunch of questions. If you've thought about diving into Annotation processing but never quite grappled with what it's all about, this is a good episode to listen to.
Friend of the show -and one of the finest gentlemen we know- Mark Allison chats with us about Constraint Layouts, what they are, why you need them, what to watch out for and how you can start using them in your application.
Friend of the show Dan Lew makes a return! In this show Kaushik talks to Dan about translating an app for other languages.
Show notes at http://fragmentedpodcast.com/episodes/49/
2016's first installment of a grand bonanza of tips and tricks for #AndroidDev! Donn and Kaushik talk about all the tips and tricks they've picked up over the first part of this year.
Show notes at http://fragmentedpodcast.com/episodes/048/
In this episode we talk to Trello Engineer, GDE, Youtuber, Caster IO instructor and View magician Huyen about all things custom View/ViewGroups.
Everyone loves Retrofit & okHttp. But how did they come about? Why ok? What was the need for such libraries? We went knocking on the doors of Square trying to find the answers to these question. We were lucky cause we found probably the nicest most brilliant Android/Java developer of our times - our good friend Jesse Wilson and without surprise, he crushes it!
He gives us the scoop on the origin stories of these amazing libraries and also gives us insight into okio and why it's such a game changer today.
Show notes at http://fragmentedpodcast.com/episodes/46/
We've always been curious about technology and the software surrounding embedded devices and the like. One such technology that's ubiquitous these days is Bluetooth (LE). In this show we talk with embedded technology expert and all round super smart AndroidDev Dave Smith a.k.a the wonderful devunwired.
We try to get a high level understanding of how Bluetooth works. From a developer's perspective, how does this tech work? Why should we as AndroidDevs be interested in this technology. What boundaries can we push? How can we effectively use this technology? In this episode we pick Dave's brain and try to answer some of these questions.
In this mini-Fragment, Donn talks about Item #10 of the Effective Java series - Always Override toString. You'll learn why it's important for your own sanity, future developers, and overall developer happiness.
In Part 2 of our Google IO special we continue asking some simple questions to the best AndroidDev today. This concludes our IO special for this year. Hope you enjoyed it as much as we did.
By popular demand we added some extra specials at the very end, so make sure to listen all the way through :)
In Part 1 of our Google IO special we talk to a whole bunch of amazing AndroidDev. We go around asking them a few simple questions. Questions, that you probably thought to ask when you saw them in person, but just forgot to.
Stay tuned for Part 2 where we talk to another list of top notch Android developers and get their answers for these questions.
Oh and you really should listen all the way to the end :)
In this mini Fragment, Donn talks about one of his favorite topics, YAGNI. YAGNI is an acronym that stands for "You Arent Going To Need It". Donn explains what it is, why its useful and shares a personal story of how he was introduced to the YAGNI concept back in 2008.
In this mini episode, we talk with the lovely Kelly Shushter about Internal Library Dependency Management. Kelly is a GDE, the Director of Women Who Code (Denver chapter), a developer at Thoughtbot, a mind blowingly good AndroidDev and just an all round boss of everything.
She gives us the rundown explaining different strategies for maintaining and managing internal libraries in your organization/company.
In this episode we chat with our friend an all round amazing AndroidDev Elliott Chenger. Elliot does Android development for Under Armour and knows a thing or two about TextViews. We talk TextViews, font rendering complications in Android, performance optimizations, localization (vs internationalization), ECDC (it's a thing!) and wind the discussion off with some design software tools out there.
Show Notes: http://fragmentedpodcast.com/episodes/39/
In this episode, Donn and Kaushik look at the Android N developer preview. They highlight the biggest changes that you as an Android Developer should keep an eye out for. There are tonne of features in N, so listen to this episode to get the highlights.
Show Notes: http://fragmentedpodcast.com/episodes/38/
In this very first edition of our Decompress episode we talk about life being code as an Android developer, some Xcode hating, Testing woes and the intensly discussed library that Google recently released Agera!
In this mini Fragment we touch on a highly requested topic - working remotely. Donn talks about how to ease into remote working, tools for working remotely, tips and tricks for staying sane and productive while remote and he wraps it up by discussing the benefits employers have when hiring a remote workforce.
In this mini Fragment we touch base on all the things you need to know about Vector drawables for Android development. How one can use it today, the recommended usage for vector drawable and formats, the limitations and everything else you need to know as an Android developer.
In this episode we talk Gradle with the amazing and awesome Annyce Davis. We deal with the basics of Android's build system and dabble with some tips on improving your build times.
Also we released our first ever Fragmented T-shirt in collaboration with another amazing GDE - Taylor Ling of AndroidTee fame. Get the goodie here: https://teespring.com/fragmented
The Android Support library framework is the biggest boon to Android developers. But how does one makes sense of the different versions and revisions available? In this fragment we try to address that question.
In this mini Fragment, we introduce Joshua's eighth Item. This one is a doozy, probably one of the longest items in the group of the effective Java series, but most definitely quite important.
Stay tuned for more items from our "Effective Java for Android developers" Fragment series.
In this episode we talk to Material Design Master and Google Developer Expert Mike Wolfson. What does Material design mean to us developers? How does one use the numerous support libraries to help with this? What widgets should and shouldn't we be using? Listen to the show and find out.
Show notes at http://fragmentedpodcast.com/episodes/30/
If you've been an Android developer in the last 2 years, you must have seen this dreaded exception:
dex: method ID not in [0, 0xffff]: 65536
Quick googling would immediately bring up the phrase "65K method count" and the recommended solution "multi-dexing". But if you want to really understand this mysterious number and the reason behind its existence, listen on!
Show notes: http://fragmentedpodcast.com/episodes/29/
Feast yourselves to a grand bonanza of tips and tricks with this episode! Donn and Kaushik talk about the tips and tricks they've picked up over the course of 2015.
Realm pro and overall genius Christian Melchior joins us in this episode to talk about all things Realm.
In this episode Donn and Kaushik chat with the one and only Israel Ferrer Camacho. They discuss a talk Israel gave sometime back on "Android development like a pro", exchanging war stories on patterns like MVP, MVVP clean architecture etc.
In this mini Fragment, we introduce Joshua's seventh Item and a momentous end to the first chapter: Avoid finalizers.
Stay tuned for more items from our "Effective Java for Android developers" Fragment series.
Joshua's sixth Item: Eliminate obsolete object references , in a distinctively croaky voice.
Stay tuned for more items from our ["Effective Java for Android developers" Fragment series.
Donn and Kaushik cover the happenings of Google's very first Android Developer conference - "Android Dev Summit". Together, they attended the conference both virtually and physically! Listen on for the highlights.
In this mini Fragment, we introduce Joshua's fifth Item: Avoid creating unnecessary objects.
Stay tuned for more items from our "Effective Java for Android developers" Fragment series.
In this episode, Kaushik and Donn dive deep into the Dependency Injection library - Dagger. We have a cameo by Dagger creator Jesse!
A tonne of folks have been asking for a show on Kotlin. We got the best person in the business to take us through what could possibly be our new hope.
Singer and Android developer Donn Felker explores Joshua Bloch's fourth Item: Enforce noninstantiability with a private constructor.
Stay tuned, cause we got more of these quick ones coming.
In this mini Fragment, we introduce Joshua's third Item: Enforce the Singleton property with a private constructor or an enum type.
Stay tuned for more items from our "Effective Java for Android developers" Fragment series.
In this power packed episode, Donn returns... If that wasn't amazing enough, Andrew and Akshay from Google join us to talk about Nearby.
In our third Fragment installment, we introduce Josh's second Item: Consider a builder when faced with many constructor parameters.
In this episode we talk to Amanda about how she got started as an Android developer, working at Venmo, her path to mastering Java and Android, dabbling with the dark side and Animations in Android!
We've mentioned the book "Effective Java" by Joshua Bloch quite a few times on previous episodes. At this point, everyone knows they should have read this book (quadruple times). But it's a dense read and everyone could use a reading buddy. Also, what does Effective Java look like through the eyes of an Android developer?
In this second installment of our Fragment (a.k.a mini-episode), we thought we'll do our listeners a favor and help with that reading. We introduce the very first of these venerable "Items": Consider providing static factory methods instead of constructors.
In this episode we revisit the topic of Testing, looking at it from a TDD perspective. Globetrotter, Kata Queen, TDD practitioner and overall boss of Android development - Corey Latislaw, joins us in this episode with thoughts, tips and tricks on pulling off TDD. She also shares some of her wicked sketchnoting tips and made a very special Sketchnote just for this episode!
In the first "Fragment" installment we're going to talk about Continuous Integration (CI) and Collective Code Ownership (CCO). Donn talks about what CI is, why its important and how it benefits you and your team. He then dives right into CCO and how it can be facilitated through testing.
In this episode - Donn and Kaushik dive into a topic that is very near and dear their hearts - application architecture. They talk about how Martin Fowler has inspired a lot of their architectural decisions and how they're moving towards defining what a clean architecture means to them and other developers. They talk about Model View Presenter, Model View Controller and many other topics that surround these two common patterns. Take a listen and go for the ride on architecture train ... all aboard!
In this episode Donn and Kaushik talk to the very talented Michael Bailey about core Java principles and practices. Michael has quite the deep and passionate understanding of Java and we thought it would only be perfect to share this episode with a very passionate Java crowd - Android developers. We talk about IntelliJ, Testing, Inheritance, Static Code analysis, Garbage Collection, Data Structures and much more in this episode. If you're looking to learn a thing or two about Java, then this is your episode. We hope you enjoy.
This is the special Google I/O 2015 episode. In this episode - Kaushik makes the trek to Google I/O and chats with various Android developers about their favorite part of Google IO. I was not able to make it but Kaushik was able to interview of top developers in the industry and I’ll tell you what - this is a great episode - I really wish I was there to join him. I know he had a great time chatting and interacting with everyone. We hope you enjoy the show as much as we enjoyed creating it.
In this episode, we talk to Philip Simpson, one of the rockstar developers of the amazing Pocket Casts Android Application. We learn about how Philip and his partner, Russell, started Shifty Jelly and how they grew their team from a two-person shop to a small staff all while creating one of top apps on Google Play, Pocket Casts. We also talk about some of the tools, tips and tricks that they've used to help them scale, grow and become more effective as indie app developers. We eventually hop into some deep talk about audio software and all kinds of tech in general. If you've always wondered what it takes to be an indie app developer then this is the episode for you - Philip does not let us down.
In the final part of this two-part segment, we continue our talk with Jake Wharton. We dive right into the topic of testing. Jake then talks about his approach to testing apps in Android and the different languages that he finds interesting. We then move on to RxJava, NotRxAndroid, SqlBrite and many other libraries and topics to round out this great second episode. Again, we'd love to thank Jake for joining us here on the Fragmented Podcast show; it has been an honor. We hope you enjoy it as much as we did.
In part one of this two-part segment, we talk to the one and only Jake Wharton. He gives us the scoop on how he operates day to day, what he looks for in a good Android developer and how to become a better Android developer. He also touches upon the various sources and non-Java platforms that he draws inspiration from. Finally, he talks about open source and gives tips on leading an open source project.
In this episode of Fragmented, Donn and Kaushik start off by discussing the tips and tricks available for efficiently loading images in an Android app. Good image libraries make use of these techniques and perform all the heavy lifting in the background. So they then discuss the different image library options available for Android developers.
In this episode of Fragmented, Donn and Kaushik continue their conversation with Dan Lew on RxJava. In the final part of this 2 part series, they talk about many useful RxJava operators and other intricacies of using RxJava in Android.
In this episode of Fragmented, Donn and Kaushik interview Dan Lew - druid of RxJava & RxAndroid! In part 1 of this 2 part series, we find out more about the one they call Dan Lew. We ask Dan how he started off as a developer, how he stays on top of development, where he draws inspiration from for amazing Android development and much more. We then begin disarming the glorious beast that is RxJava touching upon it’s benefits and begin discussion of some common operators.
In this episode of Fragmented, Donn and Kaushik talk about the official IDE for Android development – “Android Studio”. Why should you care about your IDE? Is Android Studio really open source? What are some of the advantages of using Android Studio? How can you customize and tweak Android Studio so you take your android development game to the next level? Listen to this episode and find out. The awesome picks for this episode are particularly awesome too.
Welcome to the very first episode of Fragmented. Donn and Kaushik talk about why they started the podcast, the structure of the podcast and a little about who they are. The main topic for this episode is Testing! What are the benefits of testing, in general? Why does testing specifically help Android developers? What is the state of testing in Android and how does one test in Android?