Workshops
Books
Articles
Store
Kt. Academy Blog
Announcements
Kotlin Essentials
Functional Kotlin
Kotlin Coroutines
Advanced Kotlin
Effective Kotlin
Persistent Memory
Funny
Is reflection slowing down your code?
Let's benchmark reflection and see how it affects the performance of your code.
Marcin Moskała
12/16/2024
Jetpack Compose Modifier Guessing Game!
A fun game to learn about Jetpack Compose modifiers.
Marcin Moskała
12/9/2024
Using BlockHound to track blocking calls in non-blocking dispatchers
How to use BlockHound to track blocking calls in non-blocking dispatchers.
Marcin Moskała
12/2/2024
Representing ViewModel events with StateFlow vs. SharedFlow vs. Channel
What is the best way to represent ViewModel events in Kotlin?
Marcin Moskała
11/18/2024
The best dispatcher for a backend framework
Let's explore different dispatchers and find the best one for a backend request handlers.
Marcin Moskała
11/13/2024
Win a Free Ticket to Droidcon Italy!
Upgrade your Kotlin skills and win a free ticket to Droidcon Italy!
Halina Ciccone
10/21/2024
Books for 2025 company workshops attendees promotion
Our special promotion for company workshops organised in 2025.
Marcin Moskała
10/19/2024
Why using Kotlin Coroutines?
The explanation of why coroutines stand out and offer us what hasn't been offered by other technologies.
Marcin Moskała
10/9/2024
Which Kotlin workshop to choose?
A short guide how to choose the best workshop for you.
Marcin Moskała
9/18/2024
Item 31: Respect abstraction contracts
Just because we can do something, does not mean we should. How to respect abstraction contracts and why it is so important.
Marcin Moskała
7/22/2024
Job and children awaiting in Kotlin Coroutines
What Job is and how it is the most important context responsible for structured concurrency.
Marcin Moskała
7/15/2024
Finance your workshop by company
How to get your workshop financed by your company.
Marcin Moskała
7/10/2024
Item 30: Define contracts with documentation
How do we express our library or module contracts and why are they so important.
Marcin Moskała
7/8/2024
Kotlin Coroutines dispatchers
Where we should use each dispatcher from the Kotlin Coroutines library.
Marcin Moskała
7/1/2024
SharedFlow vs StateFlow
When to use SharedFlow and when to use StateFlow.
Marcin Moskała
6/27/2024
Item 27: Specify API stability
How do we specify API stability and why it is so important.
Marcin Moskała
6/24/2024
Power Assert now in Kotlin!
What is Power Assert, how to use it, and how it works in Kotlin.
Marcin Moskała
6/17/2024
The problem of union types for type systems
Why union types are not such a good idea for static type systems.
Marcin Moskała
6/10/2024
Key advantages of Kotlin Coroutines
Where Kotlin Coroutines shine and why you should use them.
Marcin Moskała
6/10/2024
Cancellation in Kotlin Coroutines
Everything you need to know about the cancellation mechanism in Kotlin Coroutines.
Marcin Moskała
6/10/2024
Mutable objects or properties?
Time to answer the question: var/readonly vs val/mutable. Which one should you use?
Marcin Moskała
6/3/2024
Learn Kotlin with Marcin Moskała
See what materials and options from Marcin Moskala you can have to learn Kotlin.
Marcin Moskała
5/27/2024
The third edition of Kotlin Coroutines: Deep Dive book is finally ready!
Learn about the new release of the famous book about Kotlin Coroutines.
Marcin Moskała
5/20/2024
Updates in Kotlin for Developers series
Noticed any changes in our Kotlin for Developers series? Here's what's new!
Marcin Moskała
5/15/2024
How many threads your network client uses?
Many popular network clients consume way more threads than you might expect. Let's overview the problem and find a solution.
Marcin Moskała
5/13/2024
Kotlin bites on X/Twitter 3
A collection of Kotlin bites of knowledge, in a form of tweets.
Halina Ciccone
5/10/2024
Item 29: Minimize elements’ visibility
Why we should minimize elements’ visibility and how to do it.
Marcin Moskała
5/6/2024
Item 28: Consider wrapping external APIs
Why we should wrap external APIs and how to do it.
Marcin Moskała
4/29/2024
A Pattern for Composing Flow Operations
Extending and operating on top of your existing flows
Renato Costa
4/15/2024
Why Non-Blocking?
From blocking to non-blocking with Kotlin, Coroutines and Spring Boot
Renato Costa
3/25/2024
Books for 2024 company workshops attendees promotion
Our special promotion for company workshops organised in 2024.
Marcin Moskała
3/19/2024
Generics in Kotlin
The essence of how generics work in Kotlin.
Marcin Moskała
3/18/2024
flatMapMerge is... weird
How not to get surprised by flatMapMerge behavior.
Marcin Moskała
3/6/2024
KotlinConf 2024 - what is this all about?
Exploring the Biggest Kotlin Conference
Halina Ciccone
3/5/2024
What is CoroutineContext and how does it work?
A deep explanation of the coroutine context - the powerful data holder for coroutines.
Marcin Moskała
3/4/2024
Item 26: Use abstraction to protect code against changes
How do we abstract elements, and what are the consequences.
Marcin Moskała
2/26/2024
Item 25: Each function should be written in terms of a single level of abstraction
Why each function should be written in terms of a single level of abstraction and how to achieve it.
Marcin Moskała
2/19/2024
Abstraction design: Introduction
What is abstraction in programming and why is it so important.
Marcin Moskała
2/5/2024
Effective Kotlin Item 20: Do not repeat common algorithms
Why extracting utility functions is so important for our programs.
Marcin Moskała
1/29/2024
Static Code Analysers
All you need to know about Static Code Analysers and Detekt.
Nicola Corti
1/22/2024
Functional Kotlin now with exercises
Functional Kotlin was updated! Now it has exercises to help readers practice the knowledge.
Marcin Moskała
1/15/2024
Effective Kotlin Item 19: Do not repeat knowledge
Why knowledge repetition is so problematic and how it relates to the single responsibility principle.
Marcin Moskała
1/8/2024
Simulating dice casting, to calculate Risc game fairness
Using programming to simulate a battle in Risc, and learn about its fairness.
Marcin Moskała
1/3/2024
Big Kotlin Challenge
Do you want to learn Kotlin? Join our Big Kotlin Challenge!
Marcin Moskała
12/28/2023
JavaScript interoperability
How to interoperate between Kotlin and JavaScript.
Marcin Moskała
12/18/2023
Kotlin Compiler Plugins
All you need to know about Kotlin Compiler plugins.
Marcin Moskała
12/12/2023
Annotation Processing
Implement your first annotation processor in Kotlin.
Marcin Moskała
12/11/2023
Effective Kotlin Item 60: Use appropriate collection types
Using non-standard collection types to improve performance in Kotlin.
Marcin Moskała
12/4/2023
Kotlin Symbol Processing
All the essential aspects of KSP in practice.
Marcin Moskała
11/27/2023
Effective Kotlin Item 49: Use caching when possible
Why we should use caching and how to do it.
Marcin Moskała
11/20/2023
Kotlin Essentials now with exercises
Kotlin Essentials was updated! Now it has exercises to help readers practice the knowledge.
Marcin Moskała
11/14/2023
Data classes in Kotlin
What are data classes in Kotlin and how do we use them.
Marcin Moskała
11/13/2023
Get an ebook if you have a paperback!
Special promotion until the end of this year, we give away ebooks for paperback owners who post their photos with those books.
Marcin Moskała
11/7/2023
Effective Kotlin Item 48: Consider using object declarations
Why we should use object declarations instead of regular classes.
Marcin Moskała
11/6/2023
Kotlin Reflection: Type references
Using type references, with practical example of random value generator.
Marcin Moskała
10/30/2023
Kotlin Reflection: Class references
All the essential aspects of class references, and a practical object serialization example.
Marcin Moskała
10/23/2023
Kotlin books for conferences and universities
We have a very special offers for conferences and universities that want to give away books.
Marcin Moskała
10/17/2023
Kotlin Reflection: Method and property references
The general hierarchy of Kotlin reference classes, and details about method and property references.
Marcin Moskała
10/16/2023
Kotlin for developers' series is finally ready!
We are happy to announce that Kotlin for developers series is finally complete.
Marcin Moskała
10/12/2023
Extensions in Kotlin
What are extensions in Kotlin and how do we use them.
Marcin Moskała
10/9/2023
Effective Kotlin Item 35: Consider using dependency injection
What is dependency injection, why it is so important, and how to use it in Kotlin.
Marcin Moskała
10/2/2023
Kotlin for Developers series is updated to Kotlin 1.9 and ready for 2.0
All the books from the series Kotlin for Developers are ready for Kotlin 2.0!
Marcin Moskała
9/26/2023
Implementing Multiplatform Kotlin Mobile
How in Kotlin we can implement Android and iOS projects with shared logic.
Marcin Moskała
9/25/2023
Implementing Multiplatform Kotlin library
How in Kotlin we can use multiplatform capabilities to distribute the same code to multiple platforms.
Marcin Moskała
9/18/2023
Using Multiplatform Kotlin
The essence of using multiplatform Kotlin capabilities and definition common elements.
Marcin Moskała
9/11/2023
The story behind the lighthouse
The story behind the lighthouse used on the new edition of Effective Kotlin.
Marcin Moskała
9/8/2023
The second edition of Effective Kotlin: Best Practices is finally ready!
Learn about the new release of the famous book about the best practices for Kotlin development.
Marcin Moskała
9/7/2023
Sealed classes and interfaces in Kotlin
What are sealed classes and interfaces in Kotlin and how do we use them.
Marcin Moskała
9/4/2023
Effective Kotlin Item 2: Eliminate critical sections
Learn why do we need to synchronize access to mutable state, and how to secure it.
Marcin Moskała
8/28/2023
Kotlin and Java interoperability: Traps and gotchas
The parts of Kotlin and Java interoperability that might be surprising or counterintuitive.
Marcin Moskała
8/21/2023
Kotlin and Java interoperability: Useful annotations
Learn about useful Kotlin annotations, that decide that it is compiled to on JVM.
Marcin Moskała
8/14/2023
Kotlin and Java interoperability: Properties and annotations
Kotlin property is Java getter, setter, field and possibly more. So what to do, when you need to annotate or use a specific JVM element?
Marcin Moskała
8/7/2023
Kotlin and Java interoperability: Types
See surprising transitions that happens on types when you interoperate between Kotlin and Java.
Marcin Moskała
7/31/2023
Advanced Kotlin is finally ready!
Learn about our recently published book dedicated to the advanced Kotlin features.
Marcin Moskała
7/24/2023
Objects in Kotlin
What is object expression, object declaration and companion objects, and how we use them.
Marcin Moskała
7/17/2023
Books for 2023 company workshops attendees promotion
Our special promotion for company workshops organised in 2023.
Marcin Moskała
7/10/2023
Kotlin Contracts
Practical review of Kotlin Contracts - a feature we often use, without knowing about it.
Marcin Moskała
7/3/2023
Eliminating coroutine races
How to make one coroutine await for another coroutine or flow subscription.
Marcin Moskała
6/26/2023
Lindy effect in surnames problem
Using programming to simulate a problem of the number of surnames in population and observing Lindy effect.
Marcin Moskała
6/19/2023
The beauty of Kotlin type system
How type system makes Kotlin so flexible, safe, and intuitive.
Marcin Moskała
6/12/2023
Understanding Flow
We will explore how flow and its processing really works.
Marcin Moskała
5/29/2023
The second edition of Kotlin Coroutines: Deep Dive book is finally ready!
Learn about the new release of the famous book about Kotlin Coroutines.
Marcin Moskała
5/16/2023
Why you should consider migrating your Gradle scripts to Kotlin DSL
Discover the benefits of migrating your Gradle scripts to Kotlin DSL and streamline your development process.
Nirav Tukadiya
5/10/2023
Map as a property delegate
How do we use Map as a property delegate, and why the result of a famous puzzler should not be surprising.
Marcin Moskała
5/8/2023
Observable and Vetoable delegates
What are observable and vetoable delegates, and what are their real-life use cases.
Marcin Moskała
5/2/2023
Best practices
Let's review the Kotlin Coroutines best practices.
Marcin Moskała
4/24/2023
Kotlin revolutionary announcement
Kotlin announcement that will change the way we all will write code.
Marcin Moskała
4/19/2023
Kotlin Coroutines Recipes
Let's see some recipes useful in Kotlin Coroutines projects.
Marcin Moskała
4/11/2023
Lazy property delegate
What is lazy delegate, and what are its real-life use cases.
Marcin Moskała
3/27/2023
Property delegation
What is property delegation, how does it work, and how can we implement our custom property delegate.
Marcin Moskała
3/20/2023
Nullability in Kotlin
How Kotlin null-safety works, and how can we deal with nullable values.
Marcin Moskała
3/13/2023
Interface Delegation
One of the least known Kotlin features, that can be sometimes found really useful.
Marcin Moskała
3/6/2023
Kotlin bites on Twitter 2
A collection of Kotlin bites of knowledge, in a form of tweets.
Halina Ciccone
3/1/2023
Basic values in Kotlin
Learn about the basic Kotlin values, types and operations.
Marcin Moskała
2/27/2023
Variance modifiers limitations
What limitations generic variance modifiers introduce, and how can we ignore them.
Marcin Moskała
2/20/2023
Covariant Nothing Object
The pattern we are all using, but no-one talks about it.
Marcin Moskała
2/13/2023
Kotlin Generic Variance Modifiers
What are out and in, and how do we use them without even knowing.
Marcin Moskała
2/8/2023
Enum classes in Kotlin
What are enum classes in Kotlin and how do we use them.
Marcin Moskała
2/1/2023
Operator overloading in Kotlin
How are operators defined for types in Kotlin, and how can we define our own operators.
Marcin Moskała
1/23/2023
The power of Kotlin for-loop
Learn about the amazing capabilities of Kotlin for-loop.
Marcin Moskała
1/18/2023
Kotlin bites on Twitter 1
A collection of Kotlin bites of knowledge, in a form of tweets.
Halina Ciccone
1/12/2023
Your first program in Kotlin
How to write your first program, how can we use it in real-life projects, and how to explore what Kotlin is compiled to.
Marcin Moskała
1/10/2023
Running Kotlin coroutines on Project Loom's virtual threads
How to use Project Loom to improve Coroutines performance.
Jan Vladimir Mostert
1/9/2023
A birds-eye view of Arrow: Data Immutability with Arrow Optics
Learn to use Arrow Optics to support working on immutable objects.
Alejandro Serrano Mena
12/19/2022
Kotlin Essentials book is finally ready!
Learn about our recently published book dedicated to the essential Kotlin features.
Marcin Moskała
12/16/2022
Functions in Kotlin
Learn about what functions can offer us in Kotlin.
Marcin Moskała
12/12/2022
Slowing down your code with Coroutines
How can we use coroutines to slow down our code, and why would we want to do that.
Jan Vladimir Mostert
12/9/2022
Kotlin Coroutines use cases introduction
Introducing a series of articles about common Kotlin Coroutines use cases.
Marcin Moskała
12/7/2022
A birds-eye view of Arrow: Error Handling
Learn about Error Handling in Arrow, end how to effectively work with Either.
Simon Vergauwen
12/6/2022
Kotlin Coroutines use cases for Presentation/API/UI Layer
How do we use Kotlin Coroutines in the Presentation/API/UI Layer Layer, how do we create scope and start coroutines.
Marcin Moskała
11/30/2022
A birds-eye view of Arrow: working with function with Arrow Core
Learn about essential Arrow functions used for composition, memoization, recursion and functions generation.
Alejandro Serrano Mena
11/28/2022
Kotlin Coroutines use cases for Domain Layer
How do we use Kotlin Coroutines in the Domain Layer.
Marcin Moskała
11/24/2022
Kotlin Coroutines use cases for Data/Adapters Layer
How do we use Kotlin Coroutines in the Data/Adapters Layer, how do we use callback or blocking functions.
Marcin Moskała
11/15/2022
Functional Kotlin book is finally ready!
Learn about our recently published book dedicated to functional Kotlin features.
Marcin Moskała
11/7/2022
Effective Kotlin Item 10: Design for readability
Do we really want out applications concise, or do we rather want them readable?
Marcin Moskała
10/24/2022
Effective Kotlin Item 7: Prefer a nullable or Result result type when the lack of a result is possible
Why should we prefer to avoid throwing exceptions and using types to our advantage.
Marcin Moskała
10/19/2022
Effective Kotlin Item 5: Specify your expectations for arguments and state
How do we specify requirements and expectations in Kotlin.
Marcin Moskała
10/12/2022
Context receivers
All you need to know about the new and powerful Kotlin feature: context receivers.
Marcin Moskała
10/7/2022
Effective Kotlin Item 1: Limit mutability
Why it is so important to limit mutability, and how Kotlin supports it.
Marcin Moskała
9/28/2022
Scope functions
What is let, also, apply and with, and how to use them in our applications.
Marcin Moskała
9/23/2022
Type modelling in Kotlin
Type safety is undervalued in most software projects and causes enormous financial losses throughout the world. Changing a few bad habits can lead to more reliable software.
Jan Vladimir Mostert
9/14/2022
DSL type-safe builders
How to define type-safe DSL builders in Kotlin.
Marcin Moskała
9/9/2022
Lambda expressions
Let's learn how to use lambda expressions, what special support they have, and what traps they generate.
Marcin Moskała
8/26/2022
Object-oriented or functional? Two ways to see the world
The difference between the OOP and FP paradigms is deeply rooted in how we see the world. A few words on the philosophy of both approaches.
Marcin Moskała
8/18/2022
Essential programming nomenclature
Find out what you need to know, before you start writing documentations, books or articles about programming.
Marcin Moskała
8/11/2022
Function references
How do we reference functions in Kotlin, to replace lambda expressions. All functions, including constructors, getters, extensions and more.
Marcin Moskała
7/29/2022
Best Principles for Successful Test Automation (API and UI)
Aligning our testing activities with ISTQB standards helps us to perform efficiently and cope with project scope and deadlines. In this workshop we will go over software testing stages starting from definition to maintenance.
Mesut Durukal
6/14/2022
Leveraging AI in Software Testing
As AI is confronting us in our daily lives and it is improving the development activities by eliminating some manual efforts, it is beneficial to embrace in our tasks. We will see how we can utilize AI based algorithms in Software Testing.
Mesut Durukal
6/7/2022
Software Testing Standards (Aligned with ISTQB)
Aligning our testing activities with ISTQB standards helps us to perform efficiently and cope with project scope and deadlines. In this workshop we will go over software testing stages starting from definition to maintenance.
Mesut Durukal
5/31/2022
How to write a technical book?
A guide for writing technical books.
Marcin Moskała
5/27/2022
Persistent memory design choices and use-cases
Let's understand some design choices with persistent memory and use-cases of persistent memory.
Sarthak Makhija
5/26/2022
Why is Kotlin your next Programming Language?
What is Kotlin, and why it should be your next programming language.
Albert McQuiston
5/24/2022
Persistent dictionary
Let's make our in-memory dictionary persistent and understand some concepts of PMDK.
Sarthak Makhija
5/19/2022
Code or No-code?
What are the strong sides of code and no-code, and why do they constantly fight with each other.
Marcin Moskała
5/17/2022
Introducing persistent memory
Let's learn the basics of persistent memory, its characteristics, how it works and the beauty of byte addressability.
Sarthak Makhija
5/12/2022
In-memory dictionary
Let's begin our journey to understand persistent memory by building an in-memory dictionary.
Sarthak Makhija
5/5/2022
Persistent memory - Introduction
Do you want to learn about persistent memory? Join this journey to explore persistent memory and build a persistent dictionary.
Sarthak Makhija
4/28/2022
Funny programming comics
A collection of funny comics for programmers.
Marcin Moskała
4/14/2022
Kotlin Coroutines: Deep Dive book is finally ready!
Learn about our recently published book dedicated to Kotlin Coroutines.
Marcin Moskała
4/5/2022
SharedFlow and StateFlow
Known as a replacement for Subject, LiveData, and many more. SharedFlow and StateFlow are powerful coroutines classes, every Kotlin developer should know.
Marcin Moskała
2/21/2022
Funny programming videos
A collection of funny videos for programmers.
Marcin Moskała
2/1/2022
Advent of Kotlin Solutions
Solutions to the Advent of Kotlin!
Marcin Moskała
1/2/2022
Advent of Kotlin: Week 4
Week 4 of the Advent of Kotlin: Parsing JSON
Marcin Moskała
12/21/2021
Advent of Kotlin: Week 3
Week 3 of the Advent of Kotlin: k-means clustering
Marcin Moskała
12/14/2021
Advent of Kotlin: Week 2
Week 2 of the Advent of Kotlin: Tree algorithms
Marcin Moskała
12/6/2021
Advent of Kotlin: Week 1: JSON stringify and possible value parentheses
Week 1 of the Advent of Kotlin: JSON stringify and possible well-formed parentheses
Marcin Moskała
12/1/2021
Variables point to objects
A basic feature, that is commonly misunderstood.
Marcin Moskała
11/17/2021
Testing Kotlin Coroutines
How we test Kotlin Coroutines, including common Android and backend cases.
Marcin Moskała
10/27/2021
Constructing a coroutine scope
How we generally define coroutine scope on Android and on the backend.
Marcin Moskała
10/13/2021
Effective Kotlin Item 56: Consider using groupingBy instead of groupBy
What Grouping is, and how groupingBy instead of groupBy can be a performance optimization.
Marcin Moskała
10/11/2021
Effective Kotlin Item 55: Consider associating elements to a map
How associateBy is useful to improve the performance of finding elements.
Marcin Moskała
9/27/2021
Effective Kotlin Item 54: Prefer Sequences for big collections with more than one processing step
What the difference between list and sequence processing is, and when each should be preferred.
Marcin Moskała
9/20/2021
Effective Kotlin Item 53: Eliminate obsolete object references
How to help our garbage collector and avoid memory leaks.
Marcin Moskała
9/13/2021
Effective Kotlin Item 52: Consider using inline value classes
What value classes are, how to use and inline them.
Marcin Moskała
9/6/2021
Coroutines under the hood
A deep dive into how suspension and continuations work under the hood.
Marcin Moskała
9/1/2021
Effective Kotlin Item 51: Use the inline modifier for functions with parameters of functional types
How inline functions work and why they can be so important for the performance of our application.
Marcin Moskała
8/30/2021
Effective Kotlin Item 47: Avoid unnecessary object creation
About the most essential rule of performance optimization.
Marcin Moskała
8/22/2021
Traits for testing in Kotlin
A trick needed when using traits for testing in Kotlin.
Marcin Moskała
8/6/2021
How does suspension work in Kotlin coroutines?
A deep explanation of how suspension works in Kotlin Coroutines.
Marcin Moskała
7/28/2021
Effective Kotlin Item 32: Consider factory functions instead of secondary constructors
What factory functions are and why they are so important patterns for object creation.
Marcin Moskała
7/25/2021
Effective Kotlin Item 46: Avoid member extensions
What member extensions are, how they are possible and why we should avoid using them.
Marcin Moskała
7/18/2021
Kt. Academy new logo: Phoenix
Why we decided to change our logo, and what is the symbolism of Phoenix.
Marcin Moskała
6/16/2021
Effective Kotlin Item 36: Prefer composition over inheritance
Years of OOP made us overuse inheritance. Instead, we should more often use a composition that is safer and more explicit. More often, but not always...
Marcin Moskała
4/25/2021