 Okay. So hi everybody. Welcome to today's session on, you know, Kotlin. So we have like quite a few awesome people here. Thank you. As we can use and apart putting this together. So we have got, you know, Madhu from able lot to do. We've got Pulkit from coding blocks and we've got Rohan from Red Hat. All of them have been using Kotlin in different ways in their work and Pulkit even teaches people using Kotlin. So we will be discussing a bunch of things today. So we will take up questions for, you know, people who are just going to start beginning with Kotlin and, you know, how to migrate into Kotlin from your existing language, what are the places where, you know, Kotlin makes things interesting. And we'll start off with that. We will move on to some of the, you know, things that people who are already using Kotlin for a while have to discuss about like, you know, things that, you know, say, usually people make common mistakes when they're using Kotlin. One of the places that Kotlin makes, you know, life really better. You know, we have heard about things like, you know, core routines in Kotlin makes it much more easier to handle with threads and everything. And then we would end up in the section discussing more about more of the experimental and upcoming opportunities that we have with Kotlin, you know, things like, you know, people are using Kotlin for writing even IOS apps these days how that kind of stuff is done. And you can, in fact, right front end Kotlin JS, you can write Kotlin and Kotlin turns into JS, all of that stuff. So we'll discuss a few of those things. I think to get started with, I would just like to go to each one of you one by one and quickly introduce yourself in just, you know, a minute like and what has been your journey till now working on Kotlin and all. Madhu, maybe you can start. Hey, everyone. I'm Madhu here. I lead engineering and we are a consulting company for mobile and web applications. I am a particular developer. I work across different stacks, both on server and I've been using Kotlin and Android for a long time now, almost three to four years. And the good thing that I liked about Kotlin is a lot of boilerplate coming from the Java world. Kotlin has completely gotten laid off. And it really feels modern. Android development finally feels modern. When I come from web development, everything is hot reloading is there is super fast. The languages, you know, pretty good support. In Android, we are just stuck with the whole Java system with XML and we're going back into a kind of very slow process but Kotlin tries to nicely fit everything there. Expressivity is great. There are great set of features that we're going to talk about very soon but overall my experience with Kotlin has been amazing. And I've also gotten a chance to experiment with multi-platform. It really, it really shined there. There's a great opportunity to actually get multi-platform into a very good state. For a multi-platform iOS and Android application, some of the important things are database related things. You want your database to be shared across both platforms and serialization and how you serialize your entities. So I think they're trying to, the community has been putting great efforts in terms of SQL Delight and Kotlin serialization. And I have an extremely positive feeling about how Kotlin multi-platform would work out in the future. Other things also like coroutines, we'll probably discuss that more detail when we are done. Definitely. Okay, about you Pulkit, so how has your experience with Kotlin been? What are the things that you use Kotlin for in your life? So first of all, right now I'm working at coding blocks. I teach Android development there and I do make courses as well. And along with that I do something like this stuff. And along with the coding blocks, I'm right now part of the Google Summer of Code at OPA. So OPA is an open subject that deals with the tech stuff like, sorry, tech. So, so far with the Kotlin, I've been using Kotlin for like two years. And I started Kotlin using when I joined CB as I interned. So at that time I started using the Kotlin and so far the journey has been, I would say, great. I learned a lot about things that I didn't know about even at the time of Java. But right now I know a lot of things that do happen in Java and that do happen in Kotlin. There are some fallbacks, there are some pitfalls about the language. But otherwise the experience with the language has been quite good. And in fact, I recently launched a course on Kotlin. We had about 5,000 enrollments of the course and the response from the users was great. They loved the language. They got it into the language. They liked the language. Even whenever I do write something in the Kotlin, I fall in love with the language. That is a very, I would say, a modern language. And it feels great to write code in Kotlin. So yeah, that's been my journey with the Kotlin. Okay, okay. Nice, nice. I think we'll have more questions for you as we go ahead. Rohan, what about you? What all are you doing these days? And so how has your relationship with Kotlin been so far? Oh, I think you are on mute. Am I audible now? Yeah, so I also started my journey with the Kotlin blog. I started with the Android development and got to know. When I started the Android development, it was Java first and Kotlin was just an introduction. So first feature which I liked was data classes because that was the first feature I was introduced with. And then data classes literally reduce a lot of boilerplate code. Then slowly, slowly I moved into the language itself. Then the most impactful thing was for me, coroutines. I started to go deeper into the coroutines stuff and got to know that coroutines is not nothing new which Kotlin reduced. But the way Kotlin introduced the coroutines is very different. I mean, it really makes the coding for the coroutines is very grateful. Coroutines existed in Go language, but still Go language wasn't that much successful with the Go routines. Kotlin made it really seamless and functional. After that, I got into some native stuff, experimented with a little bit of Kotlin native and made some little library for the Android and Linux, the common multi-platform library. And then currently I am working at Red Hat and adding the Kotlin support for Quarkus framework. So the Quarkus is a web framework which is, I mean, which has a very less boot time as compared to Spring Boot. So you can say Quarkus is another framework, another Java or Kotlin framework into the world of web frameworks like Ktor and Spring Boot. But what we are targeting is less boot time for the, the least boot time for the web framework and the less memory conduction, the less memory footprint. Currently Spring Boot and Ktor are, I mean, they are working on the JVM thing, they are working on the JVM. So they have the basic memory footprint, the high memory footprint, but the Quarkus, they use a graph VM. So we have less memory footprint and the integration of, and Quarkus is also Kubernetes and, I mean, Kubernetes integrated platform. So you can easily deploy your application to the cloud frameworks. So currently I'm adding the Kotlin support in that framework. And also I am a GSOC mentor for Quarkus and helping the students regarding the Gradle support. Oh, nice, nice. So I think great round off introductions. What I'd like to delve into. So, you know, and everybody who is watching, if you have any questions, especially like, you know, beginner questions like about getting started with Kotlin, anything that you want to ask about that, you know, what are the reasons somebody should move to Kotlin or, you know, if you're trying to move to Kotlin right now, any challenges anybody is facing and somebody wants to ask something about that. Please go ahead and ask questions along those lines. You definitely pick those up from, you know, the YouTube messages when really sends across. But I do have some questions that I wanted to go ahead and ask to begin with right in the beginning is, so how, and I will go to all three of you one by one. Do you think like, you know, Kotlin is just a language that, you know, is for people who are using Java earlier, and now it's, you know, just language to replace that. Or do you feel like when you look at Kotlin, it has its own world and maybe like, you know, it makes sense to use Kotlin even for people who are not writing Java before it just makes sense in itself is a great thing. You know, what are your views on that. And also, like, you know, whether like if you're working on any project, if it's a, you know, server project or Android project, does every project written in Java should that I'd be rewritten to Kotlin should we all migrate to Kotlin and leave Java. So, because a lot of people beginning they have questions around this direction, because if you look at the Android development world, like the Google messages thing, they say, you know, forget Java, everything is going to be Kotlin now. So what do you think about that, you know, moving to Kotlin. So I think maybe do the same order, Madhu, what are your views. I still need to think I need to unmute yourself. I get used to this. Sorry. So, I, I wouldn't say all the use cases of Java would migrate to Kotlin. First, I would say that, because I recently I'll give you one bad thing and then talk about all good things. One thing that actually happened with us in our recent project is we were trying to use, let's say, MongoDB with Java project, and the Kotlin data classes serialization is not straightforward there. So it involves a lot of hacks. Right. So, so for the purposes of saving time and moving ahead with the project, we didn't spend time. But that was something we definitely wanted to explore where we wanted to put, you know, data classes in Kotlin and have them shared with Android project two. And we, I would say we have not been successful, but I would definitely want to go in the direction in future. As far as other places are concerned, Android development where it is actually picking a lot of more steam than any other place in the developer ecosystem. So people can directly get started with Kotlin. I don't think they should have Java background. It's definitely not necessary. And especially when people start with Kotlin, they might feel more closer to Android development today than they would have felt before, I guess. Coming from the days of Android development where we were using Ant to build the project to the Gradle to KTS now. I think I've seen a phenomenal improvement and the new users who start Android development should definitely jump on to Kotlin and do not have to look into Java at all. Definitely not necessary. And a great deal of, you know, Android architecture components jetpack, a lot of things that are pushed from Android side, I think are heavily Kotlin friendly and even the code looks much, much better. So I would advise people to start with Kotlin if they could. But if they've already started with Java and they want to migrate to Kotlin, right. IntelliJ has great set of tools, right? The first thing you could try the first immediate thing, paste code in Java and see how it looks in Kotlin, right? That would be our immediate action to try out something. And there are great deal of tools available in IntelliJ, right? You can double shift action convert to Kotlin. Another thing is people, I think, would definitely get overwhelmed by the number of features that Kotlin has. Whenever people Kotlin developers start, they talk about a lot of things, right? They talk about objects, they talk about classes, data classes, seal classes. There are a lot of things. So my suggestion for beginners, don't get overwhelmed by those. Don't try to get into all features and try to see if you can fit those things in your app. But read through some of the popular repositories, understand the code. I'm sure out of 100 features, probably you will use only a handful of features every day, right? So that's my take on Kotlin for beginners. If you're coming from Java world, quickly change, use the migration tools, change, see how your code looks, right? And secondly, definitely don't get bogged down into the features and the awesome things that everybody talks about, right? Take one or two things, study, understand them, try to use them and then slowly move into the deeper parts because I myself have moved from Java to Kotlin. And there were little given, even given my experience with dealing with a lot of different programming languages, sometimes it does feel overwhelming. So there's actually a question from one of the attendees also is somebody asks if they don't know Java but they know C sharp and can they start learning Kotlin. So as I move to, you know, pulkit, I think, so you have been teaching a lot of people basic Kotlin, like, you know, Kotlin as a language itself, not specifically from an Android perspective or something. So we'll take the last question, of course, expanding upon that, you know, whether everybody should learn Kotlin or not. Along with that, like when you teach, like, you know, the basics of Kotlin to somebody compared to if you want to teach the basics of language, like, say, you know, Java or C sharp to somebody is Kotlin. Do you think it's easier to learn and do you recommend learning Kotlin to people, whether or not they want to, you know, learn Android later on some people might want to learn Android. Do you recommend in general people to learn Kotlin or do you think people should learn Java, then only they should learn Kotlin. What are your thoughts on that pulkit? So my thoughts on that, like, I have taught a lot of people in the past and the only thing that I feel that the people should not directly. There are certain things about the explicit typecasting or the other typecasting that we have or type inference that we have that we get in the Kotlin. Like, we don't have to give any type to that to any variable. So that is actually not true. People should know about that. There is a type there. There's a type of any variable and you should give the type type of the label. Otherwise, you can't work with that. So you should have these kind of things. You should know about these things. And I would also that you should know about the concept of oops. If you if you start with the Kotlin for the oops, you might get confused about something like there's a single pattern. There's object pattern, then there's a companion object, a lot of things in Kotlin which are does not really apply to the oops. And I, as an Android developer or any developer, I prefer that people should know a good set of a good knowledge about the oops before starting any development. The oops is a basic building blocks of everything. If you don't know, I wouldn't say that you can start with Android or any depth. If you know a basic set of oops, that should be good to go. So learning about Kotlin, like whether you should learn Kotlin or not. So it doesn't matter that you are an Android developer or a computer programmer, it doesn't matter. You should learn a language like if you talk, if you see like in the last year, not last year, this year, what happens at the ICPC that is the competition for the computer programming. So they have introduced Kotlin as a language and people have started using Kotlin as a language in computer programming too. Although I know that that would be as good as C++ so which can be as good as C++ that we all know. But yes, you can definitely learn the Kotlin language. There are a good set of features that does make it work easier. Like recently I got to know about a function in Kotlin that is called join to string. And I love that feature. Like I used to write that on my own and when I actually learn how to use that feature or the function. I actually love that I use a lot of, I lose that function, a lot of where I used to do that string manually. So yeah, my take is that you should definitely learn Kotlin, whether you are an Android or you are a computer or you are even starting with some server language. You can definitely learn Kotlin. But you should basic knowledge of OOPs and that should be done in some of the language which does not have this sort of feature. Like especially like type inference and anything like this. Good, good. So I'll just round it off by going to Rohan. I see some good questions also coming in. I think for example, Bhargava and Ravi, they have asked about specifics about the language. I'm just going to those questions very soon. Like the next segment will actually take a look up on some specific coding structures like objects and statics that you're saying. So we'll definitely go to that. I'll just finish this round by, you know, asking Rohan. So what has your experience been about like, you know, getting started with the language and your opinions also about whether somebody should directly pick up Kotlin or not. And what do you think are prerequisites for starting to learn Kotlin? Is there some other language people should learn before that? And how much does Kotlin make sense for, you know, general use cases? Well, not just specifically Android, but I think you are using Kotlin in a non-android use case as well. So how is it growing in there? So I would first say that if a person is, I mean, let's say I would split up use cases. Let's suppose if a person is starting with a competitive, then they are the language pickup doesn't, I mean, make such so much a difference. I mean, you can pick up Kotlin over there and Kotlin would be easily, and you could easily grasp the, I mean, Kotlin will help you over the, I mean, focus on the algorithms because Kotlin does give you a really nice set of features. And the collections library of the Kotlin, which has a lot of features and a lot of functions readily available as compared to Java and other C++ templates library. Then if you are going for the competitive, I would say you can pick up the Kotlin. But as I said, it would be only for competitive. Then you would be only focused on DS and Elko. Then Kotlin is fine. I mean, you can go over there. Now let's come to a development stuff. Suppose you're picking up Android or non-Android platform like server side or backend development, right? So there, I mean, we should know first that we should know first the background of Kotlin. The Kotlin started with the JVM language only. The first thing the Japanese introduced the Kotlin as a JVM language only. And it is still, I mean, based on the JVM only. So you should know about the basics of JVM, how the JVM works. I mean, you don't necessarily have to see all the structures of Java, how it is written in Java and how it is written in Kotlin. But yeah, you should definitely know how the JVM stuff works, how the object works, how the objects are created in the heap. These kind of things you should know. And as the pulkit said, I would second that the pulkit said about the types that Kotlin has a nice feature of tap inference. It is just for the developer's simplicity that I know that it is of this type. It would be fine. And it is also for developer, I mean, it is for simplified developers productivity. And but yeah, but if you are starting with the Kotlin, then I don't think so that you should just directly jump into type inference thing. Because later on you would, I mean, if let's suppose if you're seeing your code after two to three months, I mean, even five to six months, you would be confused. Okay, what was what was the type. So type inference thing is a use, I mean, is a feature for the somehow intermediate to experienced developers. Then now come to like, again, Kotlin is expanding to other platforms as well. It is not only restricted to JVM. It is move to native and multi platform stuff. For that, I would say, again, the same thing applies. You should know on which platform you're applying like Android is a JVM based thing. And so you should know how the JVM works. And now if you're targeting the Kotlin for Linux apps, because I made a library for the Linux too. So you should know what are the, I mean, basic function, which the Linux supports. So that's the thing I mean, you should consider. I mean, what platform are you targeting? Kotlin is a language which gives you basically cool features over there and helps you with the productivity. But if you're not familiar with the platform you're targeting, it won't help you. Right, right, right. Okay, so good set of points. And so I'll take up another question from Ravi has a question. What kind of Android app or games should we target first when we want to get a good hands on experience on Kotlin? That's the question. If anyone of you wants to get ahead with the question, then we will delve more into actual code samples and we can share our screen to discuss some more patterns of coding as well. But yeah, if anybody wants to take up this question, what kind of Android apps or games should we target first when if you want to get a good hands on experience in Kotlin? Anybody wants to go ahead? Madhu, I think you're... I'll take care of that. So I think when you want to get hands on experience, there are two things. You know Android already and you want hands on experience on Kotlin. That is one. And you don't know Android and you're trying Kotlin. So these are the two different things. So if you already know Android app, so you could pick up something that not at the level of games because that's not probably where you would want a lot of... See, we write app logic in Kotlin. Games, game development could be spanning across your C code, C++ code and Kotlin. So I would probably suggest an app development that involves... If you're coming from an Android background and want to start Kotlin is something that involves a database, basically a storage that involves a network call. You can think of any app, but the fundamental should be a storage layer for you, a network layer because that practically taps into how people are practically writing Kotlin. Do a display on the device and then store it on the database. And people who really want to actually try out Kotlin without prior experience on Android, I would say aim low, start with some samples on the Android platform. First figure out... Because when you start with Android, it's just not plain Kotlin that you're writing. You're writing into a Kotlin that Android expects. There are some components to it. If you have to run your Kotlin code, maybe your activity has to be displayed. That's the first time probably you would see your Kotlin code work. But if you just want to try out Kotlin, I would definitely suggest put this all aside, fire up your IntelliJ editor and start writing Kotlin classes. Kotlin classes, as Pulkit mentioned, if you're good at understanding books, write a bunch of classes, write a function with main and then you can get started. Kotlin also has this nice feature of scripting. If you're not really into classes and calling things, you can actually fire up... You can just write a Kotlin script and execute it as a script. These are the various ways I see that you can actually do a hands-on exploration. I think I can add on to that. I am a very, very big proponent of play.kotlinland.org. It's a great website. Go to play.kotlinland.org. If you go to Kotlinland.org, there's a top right corner. There's a link for the playground. You can do a bunch of stuff. Maybe, in fact, I can share my screen as well. Is that visible? The Kotlin playground on my screen. He's just a very, very small example. Just go to kotlinland.org. You can try out stuff like this. There's a run button. Click on that. As you can see, it's one of the fastest, I think, code executors online. You can see Kotlin people have dead brains. People have put in snappers into that. They have done this. You can go here and you can just share that as well. This piece of code, you can share to somebody. You just want to show a small snippet of code to somebody and ask, is this the right way of doing it? Or is it not the right way of doing it like that? There are such playgrounds for almost every language to start with. I have seen these days. Types, Swift, Dart, all modern languages, the creators of the languages, they usually make such an online playground. There are a lot of online IDs also. We have an online ID. That's the very first step. You can just go there. Try out playing around with the language. If you have basic programming knowledge, you have basic idea of object-oriented programming and all in some other languages, you can just try out a lot of different things here. You can go to the Kotlin examples and we can just open up a particular example, say how to create enumson Kotlin and you can then click on the play button. It starts running. That's also a great way to learn. Learning by doing this is something I really love and I suggest people to do as well. That rounds up most of our questions around how to get started with Kotlin, why to get started with Kotlin and when you do get started with Kotlin, what are the things you should take care of. If there are more questions around this, about the beginning part, where Kotlin makes sense, please feel free to ask further questions. Till then, I'll just move ahead into more actual specifics of actually using Kotlin. I see somebody has asked, what's your thought about people using objects in Kotlin? Any drawbacks for using objects for declaring constant and also for declaring static method? I think what probably Bhargava wants to ask is, maybe if I just open the intelligent window. Let's just say, to take this question forward and I would like to ask views from you guys as well. If I create, for example, Java class and this is something that we do a lot is, say, basically create, we create a class in Java. The purpose of this class is largely to hold, say, cons. So maybe, let's say, we have a class which is called rather than cons like this. You find this kind of code very frequently in your code base. You have got a lot of public static final string. Let's say, you have some tag there. Maybe you have some something like base URL here, which is something, you know, stuff like that. So, and another thing is you might have some, you know, another pattern that people use a lot is having utility function. So, for example, create, let me just say create another class. So here's a utility class and it has I think what let's say, it returns something here. I'm just not fleshing this function out. I'm just asking maybe if there's a URL and there is, say, a path to it and it append that path into it, whatever. Okay. So you have this kind of utility functions and you're using it from the rest of the part of your code a lot. You call URL to string, from a lot of your parts of your code. So you have this utility classes with a bunch of static functions and you have got lots of const classes with a lot of, you know, public static final items. So, what do you guys usually do to achieve the similar kind of effect in Kotlin? What do you think is, you know, people should do, you know, say implement this pattern? Anybody wants to take this up? What's something that you suggest usually? Okay. I could speak up. So, like coming from the Java background, we often use utility class and constant class like this, as you mentioned. I would say that I often use objects classes for this. I mean, with the constings, it would be like we just have to first create objects for constant class and then just call static functions and static variables of that. With the Kotlin object, it's quite simple because we just declared the object. Okay. And the Kotlin object also provides a facility that it would be singleton because the thing is it would be declared only once. It would be only in, I mean, take the space in the heap only once. So we won't be creating the constants again and again. With the Java thing, it would be like we have to implement the singleton pattern in the Java. First we have to check, I mean, that singleton pattern. First, the private constructor and then if it is already initialized and returned, that already initialized instance. That would be quite cumbersome. I mean, it's already implemented in Java for so many years and so a lot of developers won't think it's cumbersome but when you come to Kotlin, it's just only one keyword object and that's all. And, you know, your singleton class and the best if I want to go ahead with say something similar in say Kotlin kind of atmosphere we can I think a lot of times people see a code which is of this format that is, you know and somebody creates an object and inside that object you can like, for example, just copy this mother was just saying this is a great thing you can copy Java code into Kotlin it converts them directly like this. I think this is something you know, intelligence tools are of course very fantastic for these kind of things. Similarly, like we have this piece of code as well, so paste it here like so let's say, you know this is what we had you know the Java word we have say a const file which has some const written like this we have some utils written like this and in Kotlin we do something like this. So is that a good pattern I think the question is and is that what we should do does it have any advantages or disadvantages or is there something better that we can do about it maybe going on to Maju as well for this so I have been using object classes in a variety of ways so the problem comes with object classes when let's say you want something to be a singleton this is very tied to the concept of oops so I am just giving a heads up there so when you want a singleton object so what do you put in the constructor what do you want to initialize it now all is well when you have a singleton with simple initialization logic that doesn't have to go for something in the background and then initialize so in those cases object really shines so if you can just load everything into memory just without doing any background loading and all so you declare an object and you are guaranteed to get you are always guaranteed to get a single object but you want to use that singleton but somehow have references to let's say your database and you can only initialize database let's say not in the main thread whatever in the background restriction so and you still want to use this object now there is a trouble how do you expose it because in the initialization time you have your db but later on in different parts of the app you want that db because you think that ideally you would say that hey my entire object app context is a singleton object I want my references of database everything here now that's where object becomes tricky and I don't think you should if you really want to do that you should put a lot of concurrency checks you have setters set methods for these kind of reference objects basically you are saying like in a big project what the problems happen with global statics so you have the same slippery slope yes you will eventually end up there so you definitely have to draw a line on what is the problem your object class is solving so you really need to understand from how many thread context because just guaranteeing singleton might sound very good at the beginning but then you start using it in a way that you are not supposed to like somewhere in the code in some thread you set something in the object and you expect it to be present in another thread reference just because it is singleton right so these kind of things will start proving difficult so you have to be careful I think that has been in my experience so far this constant things like that object declaration is good but if you want to hold a real singleton then with references to your resource classes that access to network or db and all you should probably refrain because you will eventually see that hey now this object can actually become a class and I have to ensure that I do double locking with the class and people either solve it with coin or dagger or any other tools but object is good but you need to know the purpose and its usage across your app or else it will give you surprises very soon and you need to change your object to class okay anything to add here Piltith for this sorry I used to use a lot of objects in the past but recently I have started working on the OPRA project that is actually that is one of the best project that I have been working on on the open source and they are mentored by some of the few Google employees they have been working for Kotlin like for about 4 or 5 years and they have been working for Java like 10-15 years they are way more experienced than me and then I got to know about the pitfalls of the object methods and the way we do things like this is good actually I do prefer to use object thing but as Madhu said that there are pitfalls of that especially when you have the thread things so yeah you should use this very wisely you shouldn't be using this singleton pattern too much this may cause some issues in a in a big object but when you are starting with some simple Kotlin stuff I would say that you can definitely start using that you would find this very useful compared to your singleton pattern that you do for the single classes right I would have something to add to this as well I think a very good tool that we all should use especially if you are working with synthesis I just want to prefix by saying if you are working with Kotlin that will end up running on JVM so what I am going to show you right now is not something that might hold a lot of ground if you are working with Kotlin native or with Kotlin in JavaScript or something like that but like an atmosphere like say you are working on JVM on the server you are using Kotlin with Play or Spring Boot these kind of things or if you are using Kotlin with Android so in these kind of things I think a very useful tool is if you just open tools and then there is Kotlin and you can do is show Kotlin bytecode here and in Android Studio and IntelliJ or LIDs you have this so what this shows is the Java bytecode that this class will turn into and then you can actually click on decompile and that basically gives you the it will decompile it into Java so this kind of now starts showing you that when I write my Kotlin code like this what is the corresponding thing in Java that it would have looked like it is not really converting Kotlin to Java to be very honest because this code will not be able to compile directly there are certain problems here but it is kind of you can substitute this for doing the opposite like you can paste Java code and it turns into Kotlin doing the opposite is directly as such not possible but going to bytecode and decompiling it can give you a bit of insight and the biggest part of that insight is for example this URL to string is that as you can see tag and base URL is actually constant they are public static final as it is I had picked them up from console.java it is exactly the same form they are retained but URL to string in fact although I had copied code which was static in nature in my end result it is not actually static in nature as you can see it is a dynamic function it is part of the instance of URL to string and utils class has an instance which is basically a single instance and when you try to call say utils.url.to string what really happens in that sense when you have a code let's say I will just go and write a main function below it and then you start to understand that so if I have a main function here and if I try to do utils.url to string and actually I pass say some URL in some string in that case what will essentially happen is I will just do this step again I think need to have so you know this code will not run of course this is not a valid URL and just showing it to see what code it gets formed into so you will see that my actual call is not utils.url utils.instance.url to string instead of that so these are kind of things where you know the exact Java code that you copied from you don't end up with the exactly same thing how you can achieve that is there are some annotations in Kotlin which the Kotlin compiler understands so for example if you write JVMState here and then you do this and if I just take a look at the same process again how to show Kotlin bytecode now and if I decompile this so now as you can see my URL to string function is actually a public static final function the way I would have wanted it to be so these are I think kind of Java and Kotlin interoperability that you should take care of and I believe if you go to the Kotlin lang website you will have an entire section on Java Kotlin interoperability and even the Android developer documentation also has docs on this so when you are working on this kind of an environment where there is Java code and Kotlin code you are mixing them together and finally the product is going to be running on JVM then you should keep this thing in mind that you know there are certain at the JVM kind of annotations and they all do some special stuff which makes it more compatible with the original Java thing that you are trying to achieve so that's something it's a good thing once you start off with Kotlin go across the basics it's a good thing to keep in mind helps you know keep your memory footprint and performance better if you have these things in your toolkit cool I think let's do a fun thing now okay and the fun thing is I will go through all three of you one by one and you guys name you know three features in Kotlin three things that you can do in Kotlin that you feel are game changes to you okay that you feel like you know have completely made your life better when you write code with Kotlin or you know any pattern which is possible via Kotlin which you see on a daily basis helps you prevent problems from occurring or helps you write a lot less code whatever it is the top three you know things in Kotlin that you really really love and at least one maybe you can speak of two as well at least one thing that you wish Kotlin had or you know or anything in Kotlin that is not really you know you feel nice which you feel is a hindrance which you feel can be better which you feel is kind of a problem in Kotlin so let's let's start with I think Madhu three things you really love about Kotlin you really recommend one thing you feel missing or you want to change about it can I list more or we are just restricted to three no you have to restrict to three because otherwise we will get able to finish in time because even if I am allowed to say more than three I will list probably ten as well but top three you have to stick to that my top three would be data classes okay suspend functions right and sealed classes okay so let me actually write that down so for Madhu it has been you know data classes and sealed classes and extension functions no suspend oh suspend if you give me options for four no I will not give you four but yeah so anything that you you know want to change in Kotlin if it could be better or something that's missing yes one of the things with data classes I know this is against so data classes the soon the problem becomes about the concept of whether you are going to compose an object inside your data class or you want to inherit obviously data class doesn't support inheritance but sometimes you would be like oh I have written so much you know if instead of data class if it were to be a class I would have inherited and things would have worked but now I have to embed another class and it's a good ending right and it really becomes a huge mess when in middle of the project you are like oh I need to add something and there is a base class my serializers would work correct that's very interesting I think that is something I usually run into and with Giza or Moshi or anything you just add the new fit in your base class and you are done right all your children classes get all those feats right very interesting I completely agree with you on that I think data classes have been created with a very specific use case in mind and that is just for modelling things not to give you all the advantages of object oriented programming there it's just to model serialization and desolation but interesting okay good few points so I think let's move to pulkit so what's like you know really good things you so for me first the extension functions I use them a lot especially the apply function the let function that we use okay and after that the special thing about the Kotlin that I love is the if everything is an expression that you can return from if you can return from when that really saves a lot of time and that is the best thing I would have in every language so that's one thing and isn't that I would say lambda functions the way we do use a lambda function or the receiver functions we can say that they are actually quite useful and in fact extension functions cannot exist without the lambda functions they are part of them correct correct of course so yeah I think somebody who moves from I think especially from java c-shop to Kotlin it does appreciate that yeah it gives you the same world but it allows lots of functional programming in it as well now yeah okay something you feel missing in Kotlin or you hate about any feature in Kotlin that shouldn't have been there or I haven't thought of it like this in that way actually so I can't really comment on that there is something that I would miss in the language itself oh yeah there's anything yeah okay okay so we'll go with so somebody likes Kotlin a lot right okay so yeah Rohan what all things have you used in Kotlin the top three things you really like features that you can't live without infix operator I mean it really makes a code like English language seriously then there is obviously suspend functions it really makes a code I mean synchronous then yeah the lambda function other one will really make the code I mean easily writeable that's the one I mean I really use lambda function and the hate thing I mean not hate thing I would say I mean am I allowed to say two yeah sure sure I think the anybody can go more than one I just wanted the first thing I mean I mean if you are checking for nullability for only one object then you can surely use dotlet operator and that's really nice nice syntax but what suppose I have to check two three more objects for nullability then it becomes a hassle over there even after the check nullability the I mean the lint just shows that it could be null and then I just have to as a developer I have to put the double banks for the compiler stuff only I know that that it won't be null but still I have to put it that's the thing nester nullability for that Kotlin introduced the contracts but I would but it's still overkill I mean the Kotlin contacts are overkill seriously just for checks then the issue which I faced more regarding the compiler plugin stuff I mean Kotlin has introduced compiler plugins but there's very less support for developing compiler plugins I mean and also I mean the compiler plugins does the I mean they do make the change they do make the code in the compilation stuff normally the JVM bytecode we don't have the I mean opportunity to tweak the compiler compiler stuff the compiler plugin stuff is not that much great currently okay so good point and it's a pretty interesting point and only people who have worked around with those parts of the language kind of share this pain I kind of empathize with that also I think I believe this thing a lot of people when they are discussing way about like say Java versus Kotlin or you know whether to use Java or Kotlin or like comparing the ecosystem of Java to Kotlin or like if Java is dying down and if Kotlin is the new way to build things and Java will not exist in the next couple of years I see a lot of discussions kind of like that in Hacker News and Reddit and those kind of places yeah so I think what a lot of people may say is that when you are using Kotlin with Java like in Android or in a J2E Java backend kind of an atmosphere what people don't see is the existence of Java for like 30 years that Java brings in to this you know ecosystem, the annotation processing the bytecode analysis so there is so much things that you can do in I think for example there is this Google library called Jetify if people have worked with Android people have moved from Android support to AndroidX anybody has been around with Android for that much time and that happened you know that there is a Gradle plugin which can take all of your pre-compiled JAR files and R files and convert the class names and the function names in that so that's a bytecode transformation that's happening it can transform the name of your classes and all that's a very powerful thing and it's all part of the tooling ecosystem and all of these things are there and that's why it's so easy to work with these kind of languages compared to that I think compilation stage changes that you can do in Kotlin it's still very nascent the compiler people have been the outer community not just the people who work on the compiler like the open source community they have been with the compiler for only 2 or 3 years so to be very honest and what all is possible using that there is a lot to go even like annotation processing in Kotlin all of you guys using Retrofit or GCN or Moshi these kind of libraries the annotation processing that happens in Kotlin it's way slower than how it happens in Java because when you want to do annotation processing in Kotlin the Kotlin classes have to be transformed into Java classes there is a step for that people who work on big Android projects dread that step it's called KAPT Kotlin stubs and that's like the step that takes an entire lifetime when you are compiling but yeah so that slows down your Android many times a lot when you are doing that and definitely there are these kind of things so I think Java is not going anywhere there are a lot of things that are there in Java which are hidden from you not just the language intact the compiler plugins and those kind of things still has a lot of ground to cover in that okay so I would like to move ahead to you know another question that we have is from YouTube somebody called DeathCode has asked this question how does named parameters in function call work in Kotlin when Java doesn't support it interesting question here and again like I said you should of course try this thing out try out decompiling into Java and that will give you a bit of visibility into that I would love to do that step for you so you know let's say just have this this out yeah but there is one thing that also a night thing in Kotlin that's safe that's actually a really like headache that we don't have to save the, remember the order of that in which we actually name the arguments then we created the function you don't have to remember that we can actually use it as random as we want so that is a really good thing about Kotlin so let's say we have this function called greet it takes person's name as a string and it takes greeting as a string and what it will do is it will just print this thing hello sorry I think so this kind of function if I want to call this function I think we can call it with so we can call greet with the name of a person like I can call maybe you know pulkit with hello something like this so if I run this the output you would see hello pulkit how are you is just give it a while for this to compile yeah so hello pulkit how are you like it says so we can also do is we can call greet and we can call it like this we can do greeting equal to hello we can write the greeting first and then we can write the name of the person after that like this so if we do that way then also it will give you the same result as you will see so how is this possible again you can just go to show the Kotlin byte code for this again decompile that and you would find that basically it transforms your code it creates those as variables first then it calls the function with ordered variables only so no magic I think there is very little magic a lot of things that look like magic you can just go under the hood using the compilation step and see that the compiler is just doing extra work for you I think it's true for every language don't think there is a lot of magic going on there is of course a very simple explanation that lies beneath your compiler and that's why if you have a function with name parameters in Kotlin when you call it from Java then you won't be able to use the name parameter style because name parameters do not actually exist in the final product they just exist in your syntax while your compiling code so if there are any more questions anybody has on your code usage people can feel free to ask about that I want to go into my next question again for all three of you again maybe we can do it in the same order again I don't want to restrict the number of answers that you can give this time you can pick one or two or whatever what are the next two three things you can say don't list 20 things let's keep the numbers that we can handle next few frontiers for Kotlin you feel is like whether it is Kotlin multiplatform or doing back end work with Kotlin or Kotlin native or using Kotlin to share code between iOS and Android lots of different things maybe a few things that you guys know about I don't know as well what do you think next couple of years are really promising opportunities that exist with Kotlin what do you think if you have to bet your money on what are the things that you feel Kotlin will come and take over and change the world in I think let's go with the same order like whether if you want to take this one first I am going to really bet on the multiplatform Kotlin's approach to multiplatform is very different from what other platforms are targeting I like to expand a little bit on that instead of just throwing a word because when people think about multiplatform they might actually think about having one language being written and the UI shows up in both places but that's not what Kotlin multiplatform is trying to do but Kotlin multiplatform is trying to ensure that the Kotlin code that you've written is basically running natively on different places on the JVM and on the Objective-C runtime, on the JS and things like that so what it essentially means for me at least I've been building apps and you know server code for a long time is ability to put a lot of business logic and the databases and we've been able to successfully try that out and I'm pretty confident that this will have a good future So Kotlin multiplatform like you know sharing common code in iOS and Android is what you're thinking Yes Okay Pulkit, you want to take a stab at this like you know what do you think are like the next few things that Kotlin is coming up you are really excited about Kotlin KMP is one of the things Kotlin multiplatform is one thing that I'm seeing grow a lot in the open source there are a lot of people who are coming up with a lot of things like that you can use and you can make Kotlin multiplatform application not just Android or iOS you can make web apps you can make server side code you can do a lot of things and I'm not sure how it would go along in the future but if that really do like if there's something like that it can do perform well I would say that that would be one of the best things that you can have because right now we do have to write a server code in the like we have to make a server code in the JS or anything like Django or may pipe Python, JS, it can be anything and then we have to do Android then we have to do iOS and we have to make we have to make classes all again and again we have to write code that is actually not the way it should be there like it should be a common thing that we can use a common classes and we should share code that we should have the same logic throughout the application level or throughout the entire platform so that Kotlin is one of the things that we can use and along with Kotlin we have like in the Kotlin we have a thing called flows and flows are new thing I haven't really explored that much but yeah I've been saying that I've been following how does flows work and the Kotlin flows basically can replace Kotlin flows along with the coroutines can display the whole use case of RxJava and keeping that along the like Kotlin ecosystem that is not specific to any Android or anything you can use it throughout the multi-platform and if that's the thing we can use it on iOS or web that would really save a lot of time for me as well as a lot of developers so yeah these are the two things that would say that that would be a game chisel in the future for the Kotlin nice nice what are your thoughts Rohan am I audible yeah yeah yeah so I mean Kotlin multi-platform is a bit mostly most people are talking about the multi-platform but I would like to go a little different I would like to talk about the server side Ktor is really a great platform which I mean it's completely based on the asynchronous thing the right now the only problem which I see in the Ktor not problem but the limitation it's based on JVM and because the JVM boot up start it's itself a problem I mean the JVM boot up start itself slow that's why the Ktor is laggy otherwise the Ktor stuff is really great one thing which could enhance the Ktor plus Kotlin native the work is going along these things Ktor using the Kotlin native if this thing works because the Kotlin native the Kotlin native the way they are targeting Kotlin native is quite different currently we at Ktor using Graal VM which also converts bytecode to the native stuff that's how we are targeting the native stuff but Ktor with Kotlin native could literally I mean fast the boot up start and but also decrease the memory footprint yeah I mean we can think of probably go or rush level performance from code written in Kotlin server code get all the benefits of Kotlin language and then finally runs as a native by native as in JVM that's really promising I think also looking forward to that how that will pan out definitely yeah I'd like to add a little bit to Ktor from my experience yeah sure sure so as I've been telling we've been tinkering around with multi-platform a lot and we actually wanted to ensure to have a common networking logic so we tried Ktor client actually and I think it's a beautiful replacement for OKHTP that has been de facto for a long long time and the expressivity of Ktor client is very good it kind of works on Objective C and this was a story three months back but we did at the limitation of Kotlin multi-platform concurrency runtime is really really is putting kind of blockage for Ktor's option for multi-platform what it felt so I think there's a lot of work going on on the concurrency side to have a similar or routine and the way we work with Kot JVM as a native but at this point from my personal experience I've not been able to share a network logic between multiple platforms concurrency or the multi-threaded runtime of KMV is going to improve it's super promising but I'm actually not able to implement this right so yeah definitely so interesting few threads starting from here I think Kotlin multi-platform is something everybody is excited about and I think the most interesting thing about Kotlin multi-platform I feel is that when different people say Kotlin multi-platform they mean different things so there is you know the ability to run so if I have to pick the same answer out myself I think what's really exciting is ever since like you know in web like frontend and everything in one language that is JavaScript you can write frontend code you can write back using Node.js and you can make mobile apps using a lot of tools like Kodoba which is a web view basically but you can also use something like React Native so I think the 2010 to 2020 decade has been a lot of winning for JavaScript I have felt and if you are a JavaScript developer you can literally make a true full stack setup for say you want to start up your own company or something you can make your web app you can make your even mobile app you can make your website you can make your backend and you can make all of these in JavaScript I'm not going into the pros and cons of that I'm just saying that it can be done many things have the pros and cons but I'm just saying it can be done personally I'm really interested in is like the different experiments that the Kotlin team is doing with say Kotlin.js which allows so it again has a lot of dependencies like your JavaScript code if it has got TypeScript type declarations then Kotlin actually plugs in really well with that you can write in Kotlin it turns into JavaScript the transform code is also very readable it's understandable it does not turn into some garbage like my code kind of a thing it's still source code and you can basically so I think the the journey will start with a lot of people turning say libraries like base 64 encoding people will write a library like that in Kotlin it can be turned into JS it can be used as a front end library as a back end library in Node.js it can be turned into Kotlin native and compiled into proper exe kind of a native binary that can be used anywhere and that library can be used as a jar or something in an android app there's going to be like a lot of business logic level consolidation that I feel can happen where you're writing in Kotlin once and it can be used as a component within an android app, within an iOS app, within a web app, within your server as well and I think that will grow I feel there definitely is a possibility too early to say but maybe you know we can write entire modules, entire components and maybe even the full platform itself and writing it in Kotlin seeing the Kotlin code on front end in browsers running as JS and then you know on the server maybe as native and then on apps as well so that's a really exciting thing that Kotlin is moving towards I think right now it's still very nice and you know there's a lot of experimental stuff out there I think like directly Madhu pointed out the the level at which core routines work on JVM Kotlin native does not have a single level of multi-threading and concurrency framework right now out of the box but those things I think will keep coming so pretty interesting so now I think again another round of questions to all three of you one by one I would like to say so people who are learning say Kotlin and they might have been even using it for a while maybe say a few weeks or months they have used what's a you know learning path that you would suggest like what are the things that people should try out first what they can do after that what some experimental stuff they can try out you know what is like your ideal structure for learning and implementing Kotlin in your daily workflow maybe you can go with the reverse order this time so Rohan will be starting with you okay so firstly I mean I would start with the play.lang play.kotlin.lang I mean it's a big good thing and they have a certain code labs too I mean for the beginners too I would prefer to go over there I mean as a beginner then I would go into the JVM stuff because whether we say that Kotlin is expanding but still as you said it still nascent Kotlin still heavily I mean depends on JVM so I would study the JVM thing that how the JVM works and how the Kotlin and JVM works so that is the very basic thing and that would also benefit the developer in the future too then according to the platform I would go I mean whether on Android or the server side that would be differentiated right so makes for a good strategy like what do you say or maybe I will come to someone who is teaching Kotlin I will kind of take that as a final word for people to learn Mother has been using Kotlin for quite some time he will as well so it's a professional developers how do you suggest trajectory for learning so my take on Kotlin learning is it depends definitely on the expertise of your programming so one level could be exploring starting small with the features and exploring features in a way that you make your code more readable more organized maybe you are coming from a Java background and you are comfortable with classes and you are just writing everywhere classes around in Kotlin and retrofitting everything to work and then slowly you would want to explore the features how do I replace my enums with more decorated sealed classes how the discriminated unions and things like that how sealed classes are solving things for you there so you start exploring I think that you explore by refactoring your code in a way that it becomes more readable so you use features like builder patterns use applies in view classes to apply attributes of paint or object or something like that so slowly you actually turn your code which is more closer to Java I am giving a specific example here of Android which more or less looks like a Java retrofitting into the Kotlin world because it is cool now do something that is more Kotlin idiomatic one of the things even Rohan pointed out is why not use infix operators you start using infix operators somewhere and almost feels like your business logic is becoming a DSL right so I think that would be my suggestion you know you start with something you are comfortable with slowly going to explore features and then put it back as a refactoring into the thing that is already working next is exploration on the concurrency part you are not going to write production on Android or any other platform without concurrency you will be surprised if you are not trying to do that actually I was actually very surprised that Kotlin has features from all features from all languages all cool features you want lightweight tech we will get core updates you want a pipeline feature we will give you flow you want the chp mechanism where you communicate messages on a channel we will give you a channel there is everything for everybody coming from every language so start with that and they have very good documentation definitely go through that your understanding of concurrency will not be as bad or as not friendly as java world because the code I think the Kotlin world they are calling it as structured concurrency yes structured concurrency that is the world I have been seeing mostly in the Kotlin world structured concurrency really it is definitely the word it has a lot of meaning you will see with suspend functions and core attains that when you read the code you actually understand that it is pretty much a sequential code but Kotlin is doing magic in running the pieces of code so start slow explore features refactor your code understand concurrency make it more performant with concurrency constructs I think that would be my part finally coming to Pulkit taking this conversation towards people who are just beginning with language maybe not have worked on professional projects a lot for them like what kind of parts do you suggest to begin with projects and to take in what order to be honest I started with the part that actually I used the same path I started with something small then I actually started refactoring my code and then I finally moved to core attains I didn't started with the core attains immediately when I started with using Kotlin I started using core attains about like 8-10 months back after that after when I have done with the Kotlin basic that is one thing I would say that Madhu is absolutely correct that you should follow this pattern only but as a beginner before that when I started Kotlin I was doing Java for about 2-3 years and I had a basic knowledge of the language how those things works but if you are a very you have started coding about a year or so in that case things like JVM and like concurrency they don't really matter you don't have any background context about these knowledge and you won't even understand these things in one go you need actual production code understand how these things actually matter in production application you won't get them like now I am working on whenever I try to optimize something my mentor say that you shouldn't be focusing on that much optimization in the code because you may overkill that so you shouldn't do that if that is not necessary and I think that is true I shouldn't be focusing on that I should be focusing on writing a much more cleaner code rather than focusing on the optimization in the first go being a beginner I would say that I am a beginner I am a beginner I need to learn a lot about Kotlin language so as a path for learning Kotlin I would say start with something very basic like what is nullability the nullability thing in Kotlin is a different thing you don't see that everywhere so if you are a beginner you probably have used Java or C++ or C language maybe you have used Python like schools have started using Python so you may have used Python but a lot of these languages don't have like nullability checks or like Python has the type in something but C++ or Java doesn't have that thing so you should focus on that thing you should have a basic hands on with the basic syntax what does this thing actually work then you should move to some pattern like the higher order functions lambda functions they do well with Kotlin and live in the android then I would say that you should go more into some Kotlin stuff and the channel flow that we are coming so that should be the pattern of learning the Kotlin language so that's it and there is one thing I have taught a lot of people who are actually coming from no background from programming image or a language from C or C++ and when they see the features of the Kotlin they do get overwhelmed with the language itself so if they get into a lot of concepts like they started figuring out how this function works and how this actually works that would be much much better instead of trying out different features like a student that could ask how does parameter thing works in Kotlin so they should focus on that thing because that decapitation thing actually gives them a lot clean look about how things actually work in languages not just the Kotlin thing they should get a knowledge about how this actually works inside the any language or anything so yeah nice it's a pretty good round up on what all parts we can take for this so yeah I think any other questions that anybody has people who are attending on Zoom 1.2 Bulkits yeah sure while beginning a lot of Kotlin articles obviously when you start coding you will read articles that's not a point but a lot of articles you will see that Kotlin is compared to Java stuff most of the time therefore I would say community is trying to push the thing in a Kotlin way so if the Kotlin community if the Kotlin community and if the beginners try to understand in the Kotlin way only not compare to Java that would be beneficial to them and that would also I mean enhance the learning part because the thing is when you see it is compared to Java then the person would try to first jump into the Java stuff what does this thing mean in Java then it will come back to Kotlin the best example I would say the generics one in the official documentation of the generics the Kotlin generics are being compared to Java one so if the person is coming to the Kotlin first and it is trying to let's see what's the generic in Kotlin the beginner will firstly jump to the Java one how the how the generics works in Java what are the keywords in generics in Java and then it will come back to Kotlin and then it will make the comparison all the time that's the problem I also faced in the beginning but when I just so after one time I just stopped comparing with Java and just see the things in Kotlin way only and it was way easier so that would be my point if you see the Kotlin in the Kotlin way only and if the community also try to push the things in Kotlin in the Kotlin way that would be better I think a pretty interesting point out there in fact about the generics as well also like this is not something I think the final what all things to learn and all I think why I want to add one thing is there is something called keep KWP that's like the Kotlin team uses keep for you know I'm just forgetting the full form is so it's Kotlin evolution enhancement idea so keep is like you can go to github.com. and it's the place where the Kotlin developers write their RFCs you know request and they write like new features that they're getting added to Kotlin and I think I picked up the Kotlin keep on co-routines and then he's a famous person he's a Russian programmer he used to he has I think won ICPC a few times and then been like a question center on ICPC a few times like when he was like a kid and now he's like the person at JetBrains who drives a lot of new features in Kotlin I followed like a lot of his articles on the hard process behind how the coroutines was implemented and I think I'll generalize computer science theory learning reading the Kotlin keep on coroutines it was a heavy read in fact first time I started reading and I was like I can't just read it in a casual sitting I will have to take time out to properly sit and understand how they have implemented it and it was a great learning experience for me I had to go back to a lot of other learning material to understand how all of these things work so yeah I think once you have gotten through this journey got a basic understanding of how Kotlin works using Kotlin on a daily basis in your things I think you can take a look at some of how a language evolves and you don't see that easily with a language say like C++ or Java which are so old languages that not too many new features get added into these languages on a daily basis and Kotlin is a very fast evolving language and you can go and see how people who design a language how they think how they work how they add new features how they implement it how they how they have been transforming a language that runs on the JVM into a language that can run anywhere so that's a very useful source for learning you know of course I wouldn't recommend that for somebody who is beginning to use Kotlin but if you are like a seasoned developer and using it for some time then I can definitely recommend that as very useful learning resource so apart from I think questions from the audience does anyone of you three have questions for the rest of us any questions any things that you want to discuss you want to take an opinion from the others of anyone of you wants to go ahead and ask any questions anybody has yeah so I this is mostly targeted to first-time programmers in Kotlin when I learn a new language I always want to see the result immediately it could be print hello world and then slowly move on to android and whatever is the case right right now in the Kotlin world what it means is as I see is downloading the IntelliJ if you are not writing Kotlin script of course you can always go to play Kotlin play and try it out but if you want to write a real small project and really try and so on you need to have an idea I think the setup process is something I feel is a little hurdle for people I'm actually comparing to actual beginners to let's say a web world where you can bring up your score write HTML write a small js everything runs in browser and you know web app right that feeling I think is generally lacking in terms of either it could be Kotlin or script I can compare to any of those languages but that something I feel is kind of a limitation for these set of languages where the general purpose usage is not as much as what we see in the language yeah I think something like you take a copy of VS code or Atom and you write a js file and there is a button and it runs so compared to that I think here say a lot of people are on windows if you are not a seasoned developer if you are a student you might be on a windows laptop or a linux one you might have installed linux on your laptop and in that case I think you would face issues even with there is like I think a lot of baggage around that and I saw a really good trend that I saw with you know Dino which I think is a Node.js founder has created a new you know alternative to Node.js Dino have been seeing and so again it's a whole different thing about can Dino replace Node but I think one really nice approach I saw in Dino was instead of having to install Node.js and setting a Node path and all of that stuff there is a single Dino.exe and that is the just download the Dino.exe for windows it's exe for other languages it could be corresponding binary format but you download the Dino binary and it can open the console it can compile and run your project it can run your script file you don't need to worry about setting up so many things which is I think if anybody like can help improve upon and the people who are backing up are hearing and they can improve upon that will definitely be a very good step for beginners because you know you want to learn a new language you see very nice syntax on the website and you try to run it and you know Java not found and you know restart your computer two times then that kind of turns you away that's definitely true very good point I think yeah people who are actual beginners seeing this video who will be seeing this video later I would say be a little patient and persistent because I think it is always there yeah I can feel that I am not any other questions when I taught students like Android Studio one of the biggest problem that I faced was getting that and solved and getting that environment set up and especially in windows in windows I do use and for Mac things are not that much complicated I would say but windows if things get messed up I would say that please google it I don't know how to do that I can't do that because there are things that get trickier and even if in the Mac we have to a lot of time we have to clean the greater files and we have to clean the built files in order to actually build our own projects so yeah that's one thing I would say this whole ecosystem is but it can be I have worked on Swift as well so I would say that is true for all the things like Xcode Swift so yeah Xcode Swift Kotlin and there's things with that Kotlin do support a standard on compiler but the thing is I mean like I mean but still even setting in that standard on compiler is a pain I mean but I mean most of the beginners are still on windows and even setting the standard on compiler on windows is also a pain because with the java I mean with the JDK you just click the button and all the environment part variables are set on windows I'm specifically talking about windows currently here but with the Kotlin standard on compiler too you have to manually set up the part and that's still a pain for the beginners I would say and even in the VS code I mean you can set up the standard on compiler in your computer and there's an extension for the Kotlin but it's not an official extension that's true since we are on this topic I think I would definitely thank you all three of you would actually bring up this topic I would just quickly plug this in for people you know definitely use SDK man it's a great tool it works on all three operating systems and it's like my highest recommended way to install java related stuff everything you can install whichever version of java that you want easily you can install whichever version of gladl, kotlin everything so the standard on kotlin compiler also you can actually install using that and as you can see it's very easy to install SDK man there are scripts to install it on windows for mac for everything else and there are like you know I think I use SDK man to maintain the local copy of kotlin java gradl and maybe all of the java related stuff so definitely a suggestion for anybody out there how to fastest way to get the kotlin compiler SDK install kotlin c that's something that always works well for me it also has a managing tool managing different java versions if you are using yeah so great any other topics that anyone of you want to discuss or any like I said any questions that anyone of you have for the rest of us I have another question I wrote about gladl server side how are server side things looking especially do you think I am actually more interested do you think it would become a go-to place for building microservices as of today what is the situation can you really compete with onslaughter that is going to come with java 13 and all the features java 13 is going to introduce I would say kotlin I mean still I mean I mean it's a competitor but I would say it's difficult to replace the java thing because server side a lot of things are java ee based they are basically enterprise edition based and they have to follow the specifications too so like we at quarkus quarkus is also java ee based framework and a lot of the cloud environments already support the java environment like kubernetes and we are deploying to google cloud and aws problem with the we are facing problem with the kotlin most of the time we face the problem with that open thing like by default all the classes are closed in kotlin we can use all open compiler plugin by the jet brains but it's not that much configurable because we at quarkus like as I said we are aiming at least boot time and least footprint so we are basically trying away that we can push dynamically what classes to open and in the all open we have you have to pre-feed the classes so that it can open that's what we are facing and as I said the java has already evolved to enterprise edition kotlin is still not that much evolved I mean for the enterprise edition but I would say that's also a plus point for that because when you come to enterprise edition you have some I mean limitation restrictions you have to follow the specification that also becomes the kind of you could say friction for a developer that you have to follow that kotlin is free for that and I would not recommend that kotlin to go into enterprise version because it would restrict the development and your features won't be that much friction less and that would be so for the server side thing kotlin is picking up kotlin could pick up even in fact when we launched the quarkus it was tag a supersonic subatomic java framework but we are slowly adding the kotlin support because we know that kotlin kotlin could be the future and we should integrate the kotlin that's why we are adding the kotlin support but currently I don't think so that I mean it's wholly replaceable I think both of the things would coexist yeah I think a lot of points are covered so if you want to know the direction probably is I would actually look at spring projects and recently as recently as last one spring has started taking kotlin seriously and is making kotlin as a first class citizen so if you look at their samples just like android documentation you have tabs for java and kotlin in the spring also you will see whether you want to develop the java kotlin and groovy of course spring has groovy support too so I think that's the kind of positive direction for server side but apart from spring I have not much so whenever I am stuck on the server side kotlin though there is a very little help on the internet right now I think that seems to be a problem I would say that like I said even in the server side there are two ways spring is not a java e-specification base so it's kind of free thing and that's why it is able to pick up the kotlin very frequently I would say that we are the we are using the java e-specification most other things and that's why we are quite phase friction porting the kotlin and features to the kotlin and also I would say while working with the kotlin thing I would say the support of gradle with the kotlin is seamless but the maven is not that much supported and also I mean spring has moved to gradle and that's why they were able to integrate quickly but we did a survey a month back we just wanted to know what are the build system currently most probably used in the server side in the jvm stuff so it was 65-35% I mean 35% people use gradle and 65% people still use maven and kotlin integration with the maven is not that much effective I mean it's been I guess four months I'm still working on that issue I mean we I'm supposed to develop a compiler plugin for kotlin and the problem we are facing is I have to develop the different compiler plugin for maven I have to different compiler plugin for gradle and the compiler plugin does the same work only that's the overkill because all the logic all the stuff is the same but it requires all the different build system I have to use different dependencies and that's kind of overkill and that's why only spring is able to pick up the kotlin first because they were using gradle and also they were quite freely they were not having javae specifications that's why they were able to pick up the kotlin first as compared to other frameworks got it thanks for all the explanation welcome so I think we are I think in the last minute of our allocated time frame as well so you know I think there aren't any further questions from the audience I think so maybe we can wrap up if anybody has any last words for people who are learning kotlin some words of encouragement I think we will just go around everybody once and we will just wrap up then so I think let me so I would definitely say that you should definitely try out kotlin language at least once even if you do any language like you do JS you do python you should definitely try out kotlin one and it's not going anywhere anytime soon because one thing you can say that because this thing this language is now being promoted by Google itself so as you can say same about the goal language so you should definitely try out the kotlin language and you should give it a try at least once without actually thinking about how it should actually work kotlin and how you can do various things in kotlin nice Rohan any closing remarks mute sorry regarding the kotlin I would say I started with the kotlin with only with less feature like data classes but as a kotlin expanding I'm quite intrigued how the kotlin would how the kotlin would take the things and I would say kotlin is taking the things very differently as compared to other languages so I would say definitely keep the eye on the kotlin how the kotlin works and definitely try out the language because once you start with the language I would say that if you get started with the language because starting friction for the language is very less I mean kotlin for beginners is easy if you start with the kotlin so yeah if you start with the kotlin and then if you slowly slowly move to other features so you definitely love the kotlin okay and just before finally going to Madhu actually we just have a question that has come in last minute one which is somebody is asking thoughts on jetpack compose anyone of you have tried it out to share your thoughts on that oh I can I can jetpack compose first of all it is very android specific not maybe related to kotlin but kotlin as a language has enabled them to be ambitious in terms of building UI tools like jetpack compose I think I would put it that way and jetpack compose its other competitor on iOS Swift UI are probably the evolution that has to come to UI because on the web world react has changed the paradigm of how to build the UI with state machines and that took probably two years or three years to come to the mobile world and somehow iOS world were able to put it first but I am extremely excited about jetpack compose I really want to use it as of today but my companies saying hey its not in production so don't use it but I think when it comes jetpack compose when it comes to production you will just love it I believe its the right its the best way to build the UI is what I presume because I have been writing in the last three days probably around 60 xml files in android right I hope not to do that and I hope jetpack compose really really solves that problem the foundation started with co-ordinator layout then constraint layout and motion layout heavy strong foundation of view hierarchy manager on which jetpack compose is going to get built I am excited to use it all full 100% positive thoughts on that if you get a chance to use it use it I have a little bit of differing opinion on that actually and the reason for that is I think its like a motion of the pendulum I have seen too long I have been programming for too long and I have read enough about programming history to know that going from declarative markup languages to composable programming language based UI that is something at least on the UI world I have seen it happen this way and that way too many times going from one kind if you have been working with xml files for too long you see too many of the pitfalls and then immediately seeing the jetpack compose syntax seems little nice but when you start working on that that comes up with its own pitfalls as well so people on the web know this pendulum swing a lot because they have worked with templating languages like HBS they have worked with React which is similar to the composing syntax that we have on jetpack I believe like that aside the major challenges you know no UI rendering engine will ever work without good previewability so that they need to work on so unless like when the project starts becomes bigger and bigger you won't be relying on running your code and actually seeing it so that's the situation that SwiftUI is in that's the situation that Flutter is in that's the situation that jetpack compose is in if you want like wider adopting then you need like a way to preview them easily and I see that Android Studio team is actually working in that direction there is a jetpack compose previewing plugin it's very alpha level that's one thing the other thing is fighting an ecosystem that is 10 years 11 years old is also very hard because jetpack compose renders without using Android views and that means there are going to be hundreds and thousands of awesome libraries written using Java views and you can't you know mix and match them with jetpack compose so how is that going to be like because removing the entire view life cycle and having new kind of a view rendering engine in Android is not a small change and it will be as breaking as SwiftUI is you can't use it for old versions of iOS and at least in iOS within a new iOS version releasing I think 50% of the people migrate within the first few months it's not the same in Android so that's also going to be a challenge towards that so I think these challenges if they are kind of solved so then we can get to that there is one question I think a small question about are we asking Kotlin on BS code so I think my suggestion would be to get IntelliJ community version if you can because that's the best possible way if you still like really really insist on writing Kotlin on BS code that's possible you can use the Kotlin extension and make sure that you have Kotlin compiler installed on your laptop so if you have Kotlin C installed and you can use the code on our extension and then on BS code also you can write Kotlin code but the beautiful autocomplete and nullability checks and control click auto-stations and all they will of course be better if you use the IntelliJ community addition one or if you are a student then you can even use the ultimate version for free and then so that's definitely what I would suggest you can use EAP version early access program and you will still get the benefit or ultimate yeah EAP is actually it's legal to use the ultimate version via EAP because at all times some version of the EAP is always available so yeah that's also possible but yeah so I think definitely would recommend actually using JetBrains IDs rather than BS code so I think adding to I think Madhu's earlier point this is this is also a challenge I think BS code can run on much less resources it can run on something like a Chromebook or an iPad as well and that way I think Kotlin is still not that accessible if you want to like you know start programming on a Chromebook or on an iPad it's not that easy I think play.kotlin.org would be your friend in that case so I guess yeah we will just wrap it up I think thanks to all of you thanks thank you Rohan, Madhu, all of you guys for turning in for this really nice Saturday afternoon conversation on lots of things about Kotlin getting started progressing so we have covered a lot of those if there are any further questions this video on YouTube you can know you can put your questions there I think we all would probably visit it once in a while later as well and try to answer your questions thank you everybody who turned in thanks everybody who asked your questions hope you are able to take them up so yeah thank you guys thanks everyone for participating I hope you had an information session we are also at least myself I'm still a Kotlin learner quite long time but there are always new things I keep learning I enjoy writing in Kotlin in fact I learned little bit of things here in today's final discussion too Kotlin is definitely going to be an enjoyable writer right so yeah okay bye then guys have a nice day bye bye