Free to read · Three levels
Kotlin: Types, Ownership, and Structured Concurrency
Learn Kotlin through explicit values, nullable boundaries, collections, models, generics, controlled effects, and coroutine lifetimes.
Start learningIn this course
Eighteen developed lessons explain Kotlin language and JVM-oriented design through synthetic workshop examples. Worked code, expected output reasoning, cause-and-fix records, and exercises connect concise syntax with precise behavior. Advanced lessons develop coroutine scope ownership, cancellation, Flow, Java boundaries, and shared-state correctness.
The course is a read-only educational resource. Examples use fixed local data and do not access accounts, providers, services, databases, or credentials. Platform and library requirements are stated per example; expected output is distinguished from an actually executed result.
What you will learn
- Use Kotlin types, nullability, functions, and collections with explicit input and ownership meaning.
- Model valid state with classes, sealed alternatives, interfaces, and controlled updates.
- Read variance, extension dispatch, scope-function returns, and module visibility accurately.
- Explain coroutine lifetime, cancellation, Flow state/event distinctions, and synchronization scope.
- Validate Java boundaries and distinguish reasoned source examples from execution evidence.
Your learning path
Three levels
Language foundations and explicit state
Develop values, control flow, nullability, collections, classes, and failure boundaries.
- Run a Kotlin program and reason about values
- Express decisions and reusable functions
- Represent absence with nullable types
- Choose collections and transform them deliberately
- Model state with classes and data classes
- Separate validation, exceptions, and cleanup
Reusable behavior and typed boundaries
Use functions, sequences, generics, sealed outcomes, extensions, delegation, packages, and deterministic checks.
- Control evaluation with functions and sequences
- Use generics without unsafe type promises
- Make alternative outcomes explicit
- Use extensions and scope functions with clear receivers
- Compose behavior with interfaces, delegation, and objects
- Organize modules and make checks deterministic
Concurrency, interoperability, and integrated design
Reason about structured coroutines, cancellation, streams, Java boundaries, shared state, and a typed capstone.
- Own concurrent work with structured coroutines
- Preserve cancellation and design failure ownership
- Distinguish cold streams from shared current state
- Defend the Kotlin and Java boundary
- Protect shared state with the right atomic boundary
- Build a validated reservation pipeline and review its limits
Who this is for
- Programmers beginning Kotlin who want accurate types, state models, and function contracts.
- JVM developers reviewing Java integration and coroutine lifecycle behavior.
Before you start
- Basic variables, functions, conditions, and collection concepts in any language.
- JVM-oriented examples assume a compatible Kotlin toolchain; coroutine examples additionally require a compatible kotlinx.coroutines dependency in a learner-owned isolated project.