Lesson 1: Start Kotlin and run your first program
Run Kotlin in your browser, understand main, and learn to verify program output.

Build a study planner step by step. Each lesson includes a complete example, expected behavior, and an exercise to check your understanding.
Run Kotlin in your browser, understand main, and learn to verify program output.

Describe a study plan with val, var, String, Int, and Boolean; understand numeric conversion and integer division.

Extract progress rules into functions, handle invalid targets with if and when, and total study sessions with a loop.

Combine data models, lambdas, null safety, and result checks in a complete Kotlin program for managing study tasks.

Continue the study planner with a clear input boundary, useful validation messages, and predictable handling of missing or malformed values.

Move task updates into a small class, distinguish identity from titles, and protect the planner from accidental changes through shared collections.

Read planner snapshots, pass a selection rule into a function, and produce ordered reports without mixing calculations with printing or mutation.

Connect validated text input, stable task identity, explicit updates, and report calculations in a complete console project with repeatable acceptance checks.

After the eight ordered lessons, deepen individual skills with these optional practice articles on missing data, collections, screen states, testing, and asynchronous work.

Build a reading queue, compare eager and lazy processing, and choose a sequence only when its behavior fits your task.

Build a reusable batch validator, keep result types meaningful, and choose the smallest generic interface your application actually needs.

Turn a study planner specification into deterministic checks, test boundaries and failures, and move the same cases into a Kotlin test suite.

Build an explicit task-import result, preserve useful error messages, and separate invalid user input from exceptions at external boundaries.

Build a reusable task summary, choose let and also deliberately, and keep Kotlin transformations easy to understand and test.

Use nullable types, explicit validation, and small recovery rules to make missing values understandable in an Android app.

Filter, sort, group, and update records with clear rules for identity, ordering, and empty results.

Replace contradictory flags with explicit outcomes and make loading, content, empty, and failure behavior easier to review.

Practice suspend functions, structured concurrency, dispatchers, and cancellation before connecting asynchronous work to Android screens.