Programming
The core ideas every developer uses, shown side by side in Swift, Kotlin and Java.
- 01
Variables, types and type inference
Declare constants and variables, let the compiler infer types (and know when to write them), and avoid the classic number and string traps, from integer division and overflow to parsing and locale formatting, in Swift, Kotlin, Java and TypeScript.
6–25 min beginner Junior & senior
- 02
Control flow and pattern matching
Make decisions with if, guard and early returns, repeat work with loops and ranges, and match values against patterns with switch and when, including the ordering, fallthrough and boundary bugs each language makes easy, in Swift, Kotlin, Java and TypeScript.
6–30 min beginner Junior & senior
- 03
Functions, closures and lambdas
Write functions with clear parameters and return values, pass behavior around as closures and lambdas, and understand what a closure captures and how long it keeps it alive, in Swift, Kotlin, Java and TypeScript.
5–25 min beginner Junior & senior
- 04
Null Safety: Optionals and Nullable Types
Handle values that may be missing without crashing, with optionals in Swift, nullable types in Kotlin and Optional in Java.
9–35 min beginner Junior & senior
- 05
Collections and functional operations
Choose between lists, sets and maps, and transform data with map, filter, reduce, groupBy and friends in Swift, Kotlin, Java and TypeScript, with the laziness and performance details that matter in production.
5–25 min beginner Junior & senior
- 06
Classes, inheritance and interfaces
Bundle data and behavior in classes that protect their own rules, describe abilities with interfaces and protocols, and use inheritance sparingly, with the dispatch and initialization traps that differ between Swift, Kotlin, Java and TypeScript.
5–25 min beginner Junior & senior
- 07
Value types vs reference types
Know when assigning a variable copies the data and when it shares it, with structs, classes, data classes, records and objects in Swift, Kotlin, Java and TypeScript.
8–35 min beginner Junior & senior
- 08
Generics
Write one function or type that works with many types safely, add constraints, and understand variance, type erasure and reified generics in Swift, Kotlin, Java and TypeScript.
4–25 min intermediate Junior & senior
- 09
Error handling
Report, handle and recover from failures with Swift throws, Kotlin exceptions and Result, Java checked exceptions and TypeScript errors, without swallowing the errors that matter.
6–30 min beginner Junior & senior
- 10
Enums and sealed hierarchies
Model "exactly one of these" with enums, Swift associated values, Kotlin sealed classes, Java sealed interfaces and TypeScript discriminated unions, and let the compiler find every place you forgot to handle.
6–30 min beginner Junior & senior
- 11
Extensions
Add methods and computed properties to types you don't own with Swift extensions and Kotlin extension functions, see what Java and TypeScript do instead, and avoid the traps of static resolution, hidden costs and name collisions.
5–20 min beginner Junior & senior
- 12
Memory: ARC vs garbage collection
Understand how Swift frees memory with automatic reference counting and how Kotlin, Java and TypeScript do it with a garbage collector, why retain cycles and long-lived references leak, and how to find and fix leaks on each platform.
6–25 min intermediate Junior & senior
- 13
Concurrency: async/await, coroutines and virtual threads
Run work concurrently without blocking, with Swift async/await, Kotlin coroutines, Java virtual threads and TypeScript promises, compared side by side, from parallel requests and timeouts to shared state and the bugs each model makes easy.
5–30 min intermediate Junior & senior
- 14
Immutability
Use data that can't change after it's created, update it by making changed copies, tell read-only views from truly immutable collections, and keep immutable objects immutable at their boundaries, in Swift, Kotlin, Java and TypeScript.
5–25 min intermediate Junior & senior
- 15
Unit testing
Write fast, reliable unit tests with Swift Testing, JUnit 5 and Vitest, choose the cases worth testing, replace slow or random dependencies with fakes, and avoid the tests that can't fail or fail at random.
4–30 min beginner Junior & senior