Mission
At Yelp, we're big believers in continually improving our skills as developers. For the past two years, our Android team has been doing that at our weekly Android School, where we get together and watch some of the best videos from the Android community and beyond. Sometimes these are programming related, but sometimes they're on more general topics like how to be better technical leaders.
We've found this to be immensely useful in growing our skills as software engineers, so we wanted to share it with the wider Android community to help other teams wade through the ocean of content that exists out there.
We'll be updating this once every month or so as we complete new topics in our own Android School!
Videos
The Android System
General Android Development
Android Build Tools
- Gradle For Android
- What's New in Android Development Tools
- Creating a Custom Build Platform with Gradle
- Using Mat (Memory Analyzer Tool) to Understand Memory Issues in Your App
- Udacity Course - Gradle For Android And Java (Gradle 101)
- Android Studio For Experts
- Deep Dive Into the Gradle Based Android Build System
Android OS
- Introduction to Project Volta
- The Art Runtime
- Android Binder IPC Framework
- Interprocess Communication
- How The Main Thread Works
- Android Internals for Developers
- How Android Rendering Works to Provide Pixels on the Screen Faster Than You Can Read this Sentence
- Breaking the Android ClassLoader
Google IO 2016
- What’s New in Android Development Tools
- The Experts’ Guide to Android Development Tools
- Recyclerview Ins And Outs
- What the Fragment?
- Android Layouts: a New World
- What’s New in the Support Library
- What’s New in Android Security (M and N Version)
Google IO 2017
Tools (Android Studio, Debugger, OS X productivity)
- Knowledge Is Power: Understanding git
- Mac OS X Automation Workshop
- Mastering the Vim Language (intermediate)
- From Vim Muggle to Wizard in 10 Easy Steps (advanced)
- Don’t Sweat the Small Stuff
- Digging into D8 and R8
- What's New in Android Studio UI and Debugging Tools
Google I/O 2018
- What's New in Android
- What's New in Android Development Tools
- Android Slices
- Android Jetpack
- Android Jetpack: Manage Infinite Lists with RecyclerView and Paging
- Android Jetpack: how to smartly use Fragments in your UI
Deeper dives into Android apps
Android Features
Views
- The World of ListView
- Enabling Blind and Low-Vision Accessibility
- Writing Custom Views for Android
- Mastering the Android Touch System
- Efficient Android Layouts
Views - Next Level
- Mastering Android Drawables
- Filthy Rich [Android] Clients
- Framing the Canvas
- How LayoutInflator Works
- Window Content Transitions
- Bringing your app to life - Motion Animations everywhere
Android Performance
- Performance Patterns with Colt McAnlis
- Android Performance: An Overview
- Finding and Fixing Performance Problems
Various Cool Android Libraries
- Dagger 2: A New Type of Dependency Injection
- Retrofit 2
- Android Tech Talk: Annotation Processing Boilerplate Destruction
- Upgrading to Moshi
Making Your App Work Offline
- Realm - A New and Easy to use Object Framework and Database
- Rule Your Realm
- Android Architecture for the Subway
- Don’t Fear SQL: Store and Handle Data with SQLBright and SQLDelight
Android App Architecture
- Architecture Components - Introduction
- Architecture Components - Solving the Lifecycle Problem
- Architecture Components - Persistence and Offline
- Clean App Design With Architecture Components
- The Rx Workflow Pattern
- App Development - Pragmatic Best Practices
- RIBs - Uber's new mobile architecture that scales to hundreds of engineers
- Netflix's componentization architecture with RxJava + Kotlin
Experimentation
Security
- Attacking Android Applications
- Security And Privacy in Android Apps
- The Art of hiding Sensitive Info in Plain Sight
- Your App is a Giant DDOS Botnet and Other Reasons to Manage and Monitor Your Network Traffic
Networking
General Software Engineering Principles
Software Engineering Theory: Patterns
- Composition vs inheritance
- The Clean Code Talks - Don't Look For Things!
- Robert C Martin - Clean Architecture and Design
Software Engineering Theory: Writing Clean Code
- Simple Made Easy
- The Clean Code Talks - Global State And Singletons
- Hammock Driven Development
- How To Design A Good Api And Why It Matters
- Applying S.O.L.I.D. Principles
- Domain Driven Design By Example
Software Engineering Theory
- Bret Victor: Inventing On Principle
- Writing Software by David Heinemeier Hansson
- Scott Meyers - The Most Important Design Guideline
- Donald Knuth - My Advice to Young People
- Bjarne Stroustrup - Object Oriented Programming Without Inheritance
- Greg Wilson - What We Actually Know About Software Development, And Why We Believe It’s True
UI Design
- Fundamentals of Design: How to Think Like a Designer
- Material Science: Developing Android Applications with Material Design
- Material Design For Android Developers - Udacity Course
- Inclusive Design And Testing: Making Your App Accessible
- Writing Code That Lasts Forever
- Constructive Code Review
Testing
- GOTO 2015 • Unselfish Testing • Jay Fields
- How to Write Clean, Testable Code
- The Clean Code Talks -- Unit Testing
- Why You Don't Get Mock Objects
- Acceptance Testing For Continuous Delivery
- Advanced Espresso
- Advanced Android Espresso
- 10 simple rules for writing great testcases
- Effective Unit Testing
- Mocks, Stubs, and Spies, Oh My
- Advanced Espresso
- Junit5: the next gen of testing, don't stay behind
API Design: How Does the Backend Work?
- Pragmatic Microservices - Randy Shoup
- REST I don't think it means what you think it does - Stefan Tilkob
- What is a CDN and why Developers should care about one - Artur Bergman
- Demystifying Docker - Andrew T. Baker
- 5 Features of a Good API
Leadership, People Skills and the Bigger Picture
Being a Great Engineer
- Robert C. Martin (Uncle Bob) - Demanding Professionalism in Software Development
- The Ethical Consequences of Our Collective Actions
- Bake the Cookies, Wear the Dress: Connecting with Confident Authority
- Your Brain's Api: Giving And Getting Technical Help
Being a Great Engineer (Month 2)
- "Uncle" Bob Martin - "The Future of Programming"
- Effective Java - Still Effective After All These Years
- Working Effectively with Legacy Code by Roberto Hernandez-Pou
- GOTO 2016 • Seven Secrets of Maintainable Codebases • Adam Tornhill
- Case Studies in Terrible Testing
- The Silver Bullet Syndrome
Being a Great Engineer (Month 3)
- Simplicity - The Way of the Unusual Architect
- "Uncle" Bob Martin - The Scribe's Oath
- How and When to Explore - An Engineer's Guide
- Dan North - Decisions Decisions
- Tech Talks For Humans
- Want To Make A Change? Stop Talking And Start Listening
Organizational Culture
- How Our Engineering Environments Are Killing Diversity (And How We Can Fix It).
- The Art of Organizational Manipulation
- Keynote - Jacob Kaplan-Moss - PyCon 2015 https://vimeo.com/242043944
- Algorithms to Live By: The Computer Science of Human Decisions
- Move Slow and Mend Things
- Hammock Driven Development
- The Art of Organizational Manipulation
- Retrospectives
- Mentoring Junior Engineers
- Distributed Teams
- How to Enhance the Skills of Experienced Developers
- The Joys of Engineering Leadership
Tech Debt, Documentation and Maintainability
- Crushing Tech Debt Through Automation at Coinbase
- Escaping the Technical Debt Cycle
- Seven Secrets of Maintainable Codebases
- We're Agile, We Don't Do Documentation
- How documentation works, and how to make it work for your project
Languages
Kotlin
- Introduction To Kotlin
- Life is Great and Everything Will Be Ok, Kotlin is Here
- Kotlin, the Swift of Android
- The Road to Kotlintown
- Idiomatic Interop
- Two Stones, One Bird: Implementation Tradeoffs
- You Can, but Should You?
- Introduction to Coroutines
- Better Android Development With Kotlin and Gradle
- Kotlin's Hidden Costs, Revisited
- Sealed Classes Opened My Mind: How We Use Kotlin to Tame State at Etsy
- Functional Programming with Kotlin
- Representing State: the Kotlin Edition
Kotlin+
- Dissecting the stdlib
- KotlinConf - a Multiplatform delight
- Kotlin/Native Concurrency Model
- Writing your first kotlin compiler plugin
- Functional Programming in Kotlin with Λrrow
- Writing the next great kotlin novel - about code style
- Exploring the Kotlin Type Hierarchy from Top to Bottom