Kotlin
roadmap.sh: https://roadmap.sh/kotlin
Suggested path through the Kotlin nodes. Each node links to its lesson when written.
Nodes
Fundamentals
- What is Kotlin
- Kotlin vs Java
- Setting up the environment
- Kotlin compiler and runtime
- Hello World
- val and var
- Basic types
- Type inference
- String templates
- Operators
- Comments and conventions
Control Flow
- if as an expression
- when expression
- for loops
- while and do-while
- Ranges
- break and continue with labels
Functions
- Function declarations
- Default and named arguments
- Single-expression functions
- Variable number of arguments (vararg)
- Local functions
- Extension functions
- Infix functions
- Lambdas and higher-order functions
- Inline functions
Null Safety
- Nullable types
- Safe call operator
- Elvis operator
- Not-null assertion
- let, run, also, apply, with
Object-Oriented Programming
- Classes and constructors
- Properties and backing fields
- Inheritance
- Interfaces
- Abstract classes
- Visibility modifiers
- Data classes
- Sealed classes
- Enum classes
- Object declarations and singletons
- Companion objects
- Nested and inner classes
- Delegation
- Delegated properties
Functional Programming
- Function types
- Closures
- Collection operations (map, filter, reduce)
- Sequences
- Scope functions
Generics
- Generic functions and classes
- Variance (in/out)
- Type projections
- Reified type parameters
Collections
- Lists, sets, maps
- Mutable vs immutable collections
- Collection builders
- Grouping and aggregation
Coroutines
- What are coroutines
- Suspending functions
- Coroutine builders (launch, async)
- Coroutine scope and context
- Structured concurrency
- Dispatchers
- Flows
- Channels
- Exception handling in coroutines
Advanced and Ecosystem
- Exceptions
- Annotations
- Reflection
- Operator overloading
- Type-safe builders (DSLs)
- Java interoperability
- Kotlin Multiplatform
- Gradle Kotlin DSL
- Testing (JUnit, Kotest)
- Android with Kotlin
Resources
See resources.md.
Project ideas
- Build a coroutine-based CLI that fetches and aggregates data from several APIs concurrently with Flows.
- Write a small type-safe DSL for generating HTML or configuration using Kotlin’s builder syntax.
- Create a shared Kotlin Multiplatform module with business logic consumed by a JVM and a native target.