
Explore loops in Kotlin, including repeat and while, using examples like temperature changes, a guessing game with random numbers, and age-based cinema rules.
Master the char data type in Kotlin, using single quotes. Explore ascii codes and print A to Z with loops and ranges, using isLetter and isDigit for password validation.
Master Kotlin basics by comparing do-while with while loops, avoiding code duplication, and using split to parse strings into tokens for a simple calculator expression.
Discover the fundamentals of object oriented programming by learning how classes describe data types like int, and how objects or instances realize those classes in code.
Create a Kotlin class named person with properties name, age, height, and gender, using default values, then instantiate person objects and access or modify their properties via dot notation.
Explore functions with parameters by declaring names and types, passing single or multiple arguments, and printing each action step via a coffee assistant example.
Explore upcasting, downcasting, and smart cast within an inheritance hierarchy, learning how parent and child types interact, when to cast, and how smart cast ensures safe access to members.
Explore polymorphism in Kotlin by upcasting workers to type and iterating a worker collection to call work, overriding behavior for director, assistant, and consultant while noting open, final, and any.
Remove elements from a mutable product card list in Kotlin by name, load cards from a file, and save updates back, using generics, smart casting, and simple file I/O.
Explore encapsulation in Kotlin by using a private backing field and an overridden getter to return a copy of a mutable collection, preventing external modification while preserving internal state.
Explore how Kotlin's data class copy method works, its generated parameters, and how overloading and parent-child method signatures prevent conflicts while enabling object copying with all four fields.
Use nullable salaries to compute total pay with null checks and the Elvis operator. Learn that Kotlin's unit is a singleton type used for methods that return nothing.
Explore exceptions in Kotlin by building and throwing arithmetic and number format exceptions, and master try catch blocks to gracefully handle division by zero and invalid input.
Master filtering collections in Kotlin with a single filter method and a condition interface. Use anonymous object implementations to combine criteria like age, name start, and gender.
Master extension functions in Kotlin to extend int and collections, create is positive, and apply filter and transform in a functional, immutable style.
Master generics and extension functions to transform any iterable into another type via a reusable map-style function, using type parameters T and R for lists, sets, and beyond.
Link to the official documentation on scope functions https://kotlinlang.org/docs/scope-functions.html
Explore Kotlin map collections by deserializing a json dictionary into entry objects, using immutable and mutable maps for fast lookups, and implementing a phonebook example.
Explore how the with and apply scope functions configure objects after creation, using lambda with receiver vs lambda with argument, and distinguish extension versus non-extension forms in Kotlin.
Master basics of multithreading in Kotlin and explore design patterns by moving from a single-threaded example to concurrent execution with thread, runnable, lambda, and Kotlin concurrent thread.
Explore how to implement a singleton in Kotlin in a multi-threaded environment by using synchronization blocks, locks, and double-check patterns to prevent race conditions.
Implement the observer pattern by introducing an interface observer and generics to decouple the repository from concrete displays, enabling anonymous observers and cross-package reuse.
Explore the Kotlin builder pattern by constructing a drink with a builder and producing an immutable drink, addressing multiple-parameter construction and default values.
Dependency for the junit library:
testImplementation("org.junit.jupiter:junit-jupiter-params:5.11.3")
Describe how array lists extend fixed-size arrays by doubling capacity and copying elements, size property to track elements, and shifting left on removal with the last cell set to null.
Explore extending a Kotlin array list with add, add at index, remove by index, remove by value, contains, clear, and size, verified by tests.
Implement index bounds checks and index out-of-bounds exceptions in a Kotlin array list, and optimize element shifting with system array copy.
Implement a numbers linked list in Kotlin by building a node-based singly linked list with first and last references, supporting add, get, remove, contains, and index checks.
Explore how Kotlin differentiates mutable and immutable collections by defining immutable interfaces, implementing immutable lists and sets, and creating immutable copies with toList.
Interview presentation:
Show minutes and seconds in a timer, padded with zeros using String.format. Use an action listener for button clicks and simulate loading a book and author to illustrate async patterns.
Learn how to use the callback mechanism to run long operations on a background thread, keep the user interface responsive, and avoid blocking, while understanding callback hell and coroutines.
Learn to parallelize tasks with Kotlin coroutines by launching multiple loads, using join and join all to wait for completion, and replacing blocking sleep with delay.
Explore structured concurrency with a scope and a hierarchy of parent and child coroutine jobs, including daemon threads, runBlocking, and dispatchers, and observe cancellation behavior.
Load data from the network, convert json into a Kotlin data class via Kotlin serialization, handle unknown keys, and ensure safe, asynchronous access.
Learn to wire user input into a flow via channels, convert to a flow, and apply debounce to trigger searches after typing pauses, while exploring flow marbles and operators.
Understand hot data streams in Kotlin flow, compare cold vs hot flows, and implement a backing property to expose an immutable shared flow while keeping mutation internal.
Explore Kotlin flow backpressure by buffering a producer and consumer, using buffer with a default capacity of 64 and overflow strategies such as suspend, drop oldest, and drop latest.
Demonstrates how the flow on operator switches upstream context in a Kotlin flow, showing dispatcher behavior, single-thread execution, and how downstream emissions remain on the original thread.
Explore Kotlin coroutines channels and hot flows, compare channel and flow behavior, configure channel buffers and overflow, and handle closure and delivery of elements in practical examples.
Project where we worked with collections:
Explore crossinline and noinline in Kotlin, discovering how inlining affects lambda execution across different contexts (threads, coroutines, anonymous classes), nonlocal returns, and suspend function calls.
Learn Kotlin interface delegation through a game example with zombie and human players, using a decorator wrapper to add premium features without inheritance and a logging mutable list wrapper.
Clarify inner versus nested classes in Kotlin, including anonymous inner classes and how they access outer properties. See concise examples with a display class, text field, button, and action listener.
Interview presentation:
Celebrate completing the Kotlin course and recognize that you know Kotlin very well, building a strong foundation for your programming career. Choose a direction and keep developing.
Hello everyone, and welcome to the Complete Kotlin Course: Zero to Job-Ready!
My name is Andrey Sumin.
This course is for anyone who wants to learn Kotlin—a modern language used to build Android apps, create server-side applications, and work on multiplatform projects. It’s designed so you can start from scratch, even with no prior programming experience. Not just the basics—we’ll dive into the language’s nuances and practice hands-on, so by the end you’ll be fully prepared for a Kotlin interview. Throughout the course, you’ll complete practical assignments and projects that reinforce each topic and help you build real development skills.
I wish you success in mastering Kotlin—may you gain new knowledge and the inspiration to conquer the world of programming! See you in the course!
Why Kotlin?
Because it’s a modern language with official support from Google. Designed with lessons from dozens of other languages, Kotlin keeps the best practices and removes unnecessary complexity. Code is shorter and clearer, and writing in Kotlin is fast and convenient. Built-in null-safety and a modern concurrency model with coroutines improve application stability and safety. Plus, it’s fully compatible with Java and the JVM ecosystem, so you can leverage existing libraries and familiar tools without extra hurdles. Most importantly, Kotlin has strong prospects: active development, broad industry support, and high market demand.