Today I will answer a question that seems to bug many people, as I was asked about many times on workshops or conferences: Why did I choose Phoenix as the logo of kt.academy? How is Phenix related to reaching new technologies?
To me, a phoenix represents the deepest form of learning because, to learn something new, you must relinquish the preconceptions you brought with you in the first place; you must burn what you already know to make space for learning something truly new.
Let’s see an example. Most developers who move from Java to Kotlin think of Kotlin as a better Java. They still follow Java style and practices, so they only benefit from a fraction of Kotlin's advantages. They do not want to learn about Kotlin DSLs or scope functions; their code looks like better Java, instead of like an idiomatic Kotlin; it could have been otherwise.
They often think of Kotlin as a syntactic sugar over Java, so they think it is harder, instead of thinking in Kotlin terms and seeing it is actually much easier. Let me give you some examples.
For years, Java developers were masters in overriding equals, hashCode, and toString. No wonder they thought of Kotlin data classes as “data is a modifier that overrides equals, hashCode, toString, etc.” So it seemed to them that learning about data classes was hard because you need to learn all those concepts in the first place, but that is the wrong way to think about it.
In Kotlin, we have two kinds of classes, regular and data classes. The first type is appropriate for components of our applications, such as services, controllers, and repositories, while data classes are appropriate for representing data holders, similar to collections. Kotlin developers rarely need to override equals, hashCode, or toString, and they do not need to know them in everyday programming.
Similar story with constructors. In Java, we need to define fields, constructors, constructor parameters, and associate arguments with fields. In Kotlin, we just have primary constructor properties. When Java developers learn about it, they think, “How would it look in Java?” I explain them because it is good to have a bridge between new things and what you already know, but in the end, they should stop thinking of primary constructors as syntactic sugar for classic syntax and start thinking in the Kotlin way. In Kotlin, classes have constructors and bodies. Whatever is defined in a constructor can be passed during class creation. If it is defined with val or var, it will be stored; if not, it can only be used during class initialization. That’s it! This is very simple, just different.
Preconceptions can be misleading and prevent the capture of more appropriate conceptions. In cognitive science, it is known as Einstellung.
To learn something new, we need openness, a willingness to let go of the old way of thinking, and space for a more appropriate way of thinking. This is often hard for people; they are often attached to what they previously learned. We must burn it to give space for something new. This is what Phenix represents for me, the deepest form of learning.
We do not develop projects by simply adding code; we must remove or modify existing code. The same with knowledge: it is not enough to build on what you already know; you must accept that some of what you know isn’t up to date or isn’t the best way of thinking. Only then can we truly learn.
Marcin Moskala is a highly experienced developer and Kotlin instructor as the founder of Kt. Academy, an official JetBrains partner specializing in Kotlin training, Google Developers Expert, known for his significant contributions to the Kotlin community. Moskala is the author of several widely recognized books, including "Effective Kotlin," "Kotlin Coroutines," "Functional Kotlin," "Advanced Kotlin," "Kotlin Essentials," and "Android Development with Kotlin."
Beyond his literary achievements, Moskala is the author of the largest Medium publication dedicated to Kotlin. As a respected speaker, he has been invited to share his insights at numerous programming conferences, including events such as Droidcon and the prestigious Kotlin Conf, the premier conference dedicated to the Kotlin programming language.