[00:00.000 --> 00:13.160] Hello, thanks for coming. It's my pleasure to be the first time at FirstDem in person. [00:13.160 --> 00:20.320] Last time was online two years ago. And so today I want to show you no Kotlin line of [00:20.320 --> 00:27.640] code and just inspire you Kotlin developers who is already doing Kotlin here and who is [00:27.640 --> 00:33.400] not to be easier to see. Okay, so it might be slightly less relevant for you, but it's [00:33.400 --> 00:40.120] interesting going forward if you come to like Kotlin and want more support for it. One, [00:40.120 --> 00:45.440] so it's no code that means that soft skills will be required if you want to leverage what [00:45.440 --> 00:54.920] you learn or what you might see as inspiration in this short talk. So what can we do to push [00:54.920 --> 01:04.680] for better support, wider support for Kotlin? We can plant seeds. For example, when I first was [01:04.680 --> 01:11.680] introduced to algorithms with Python, that was a seed that could have led me to do a carrier in [01:11.680 --> 01:17.920] data science maybe or anything related to Python. That's kind of a seed and you have seeds everywhere [01:17.920 --> 01:23.400] or in the browser if you right click and then you can see some CSS, HTML, JavaScript. That's [01:23.440 --> 01:30.200] also a seed that sometimes lead people to become web developers or just developers, maybe not web [01:30.200 --> 01:38.280] developers. So you can plant seeds. You can also water plants from time to time or every day. Be [01:38.280 --> 01:44.480] aware not too often or you can just wait for rain. Sometimes just planting a seed is enough. You [01:44.480 --> 01:52.360] can also find and train new farmers. And it's always a bit better that there are also people [01:52.360 --> 01:57.560] that share your point of view when you want to say, hey, this thing is cool. But if you are the [01:57.560 --> 02:03.360] only guy saying this thing is cool, at some point people are like, but why is he the only person [02:03.360 --> 02:12.440] that finds Kotlin cool? So all of that is kind of lobbying. And lobbying might be a big word, but [02:12.440 --> 02:18.320] there are multiple ways to see it. I don't see it as a bad word, but anyway. So it can be [02:18.680 --> 02:25.560] boot Kotlin. I think it does actually boot Kotlin. And so I will use the lobby world just to make [02:25.560 --> 02:31.800] things a bit simpler. So where would you want to lobby? Where do you plant the seeds? So of [02:31.800 --> 02:38.300] course online, this is a place where many, many developers find new content and learn about new [02:38.300 --> 02:48.080] stuff, discover things. You can ask. You can ask for example for a new feature or you can ask for an [02:48.080 --> 02:55.040] issue to be fixed. You can send a support ticket to an SDK vendor. For example, you can send a [02:55.040 --> 02:59.160] support ticket to Firebase. How do I do that with coroutines? I don't see the example in the [02:59.160 --> 03:05.600] documentation. That's one such example. Sometimes it's just about telling people, hey, I'm using this. [03:05.600 --> 03:15.160] And when they get a bunch of people telling about Kotlin or some questions, then you raise a [03:15.200 --> 03:18.920] priority internally. You don't see it. It's very hard because you don't have immediate feedback or no [03:18.920 --> 03:25.920] feedback at all, but it does have an impact. You can suggest things. So you can comment in an [03:25.920 --> 03:33.280] issue. For example, is there something with a lot of Asynchrony in a Java library? You can say, oh, [03:33.280 --> 03:38.680] if you also make a Kotlin version, or if you change it to Kotlin, you can make it a bit easier or [03:38.680 --> 03:43.920] score with coroutines, for example. But you don't have to be very pushy. You can just suggest that [03:43.960 --> 03:47.600] alternative. And then maybe other people will say, oh, yeah, that would be a good idea. Or maybe no [03:47.600 --> 03:54.880] one. But you are planting a seed. You can also suggest to collaborate on open source projects, [03:54.880 --> 04:02.280] even if they are not in Kotlin in the first place. But contributing is also a way to reach better or [04:02.280 --> 04:08.480] wider support for Kotlin. Because when there are libraries existing in Kotlin, well, you don't have [04:08.480 --> 04:13.880] to write it. So it's easier to do whatever you want. You can sit on the work from the community [04:13.880 --> 04:20.360] previous work that now has been done. Thanks maybe to you. Blog posts. You can be a guest writer. So [04:20.360 --> 04:28.160] instead of writing blog posts in a Kotlin-only community, you can find a way to get your post in [04:28.160 --> 04:34.960] a publication that is about any programming language. And then people that are just curious also hear [04:34.960 --> 04:42.840] about Kotlin before they are very deep into the job. And of course offline. Like now, it's kind of [04:42.840 --> 04:52.160] online as well. You can talk to folks at work, at events, at the bar anywhere. Or maybe you are just [04:52.160 --> 04:57.520] meeting someone that, oh, yeah, I like developing. I found the inspector. Oh, yeah, cool. And what do [04:57.520 --> 05:04.160] you like? Making apps, maybe website, making things that work behind the scenes. And then Kotlin is [05:04.160 --> 05:09.080] not relevant for all of those. But sometimes when it is, you can also mention it. And at least they [05:09.080 --> 05:15.200] know. And maybe one day, maybe two years from now, they will think again about it. And they will look. And [05:15.200 --> 05:19.600] then maybe they will make you educate that we use five years from now or 10 years from now. You don't [05:19.600 --> 05:30.440] know. And yeah, you can, when I said talk to folks at events, I'm not saying like a speaker speaking to [05:30.480 --> 05:36.960] an audience, but like you can talk to, yeah, there are many developers today at first then. And you can [05:36.960 --> 05:43.720] just talk to anyone here. And if they don't reject you, then you can mention that whatever you are [05:43.720 --> 05:52.480] doing. And they will know a bit more. Kotlin is a very young language. So that doesn't help the language. [05:52.480 --> 06:02.480] Like 2016 was a one or two release. So if you want it faster, we have to be actors of that move, I would [06:02.480 --> 06:14.800] say. So then who to lobby? Anyone starting from about 80 years old, I think? I don't know about the [06:14.800 --> 06:25.080] other bound. Maybe 80, 80, 80 years old. Anyone has an 80? For those that are interested in computer [06:25.080 --> 06:32.360] science, of course, you will not tell all the cashiers that you meet, hey, you know about Kotlin, maybe [06:32.360 --> 06:38.560] they are not all interested into that. But something also very important is folks that impact other [06:38.560 --> 06:43.160] developers. So that might be developers, for example, someone that is making an SDK or a library, but [06:43.200 --> 06:55.200] that might also be a manager or a CTO, project leaders, generally speaking. Also, something you can do is [06:55.200 --> 07:00.400] when Kotlin doesn't work the way you want or something around it doesn't work the way you want, you can [07:00.400 --> 07:06.040] find issues. That is something that really has a positive impact long term. For example, people have [07:06.040 --> 07:17.680] been complaining about long compilation time. Who is affected by this? Yeah, so someone, I'm very sure that [07:17.680 --> 07:22.880] there is at least one issue on the Kotlin issue tracker for that. If you want to submit a new issue, some [07:22.880 --> 07:30.440] problem that you find, you can just go to Kotlin.in slash issue and the issue tracker has some people [07:30.480 --> 07:39.400] really triaging the issues. So there is a good chance that it helps at a long term getting Kotlin in a better [07:39.400 --> 07:45.720] shape. And of course, it can be any other issue tracker, depending on what it is exactly, because you might [07:45.720 --> 07:51.720] have issues in Kotlin or the ID support, but also in a library. And that might also affect developers, their [07:51.720 --> 07:59.320] experience with Kotlin overall or making their project. So yeah, few links. Also, you try www.jotelbrain.com if you [07:59.320 --> 08:07.240] know that it's only in IntelliJ. Also, right in your ID, there's a help menu and then send it back. You can [08:07.240 --> 08:13.760] send an issue for Android Studio or IntelliJ, depending on which one you are using. There's also links in [08:13.760 --> 08:21.280] AndroidX release pages, sorry, release notes pages, a link to send a new issue. So I don't know, you find an [08:21.280 --> 08:27.560] issue in androidx.compose compiler, then you can go there and then you click on the release notes, latest [08:27.560 --> 08:33.360] version. Maybe you will see, oh, I'm not using the latest version and the bug actually has been fixed, but if it's [08:33.360 --> 08:44.640] not, there's a link right here. And more, probably you can find out the right place. And so something [08:44.640 --> 08:54.880] important is going beyond the Kotlin circle. I will give you one example. It was, I think, two years ago or [08:54.880 --> 09:04.760] something. I wanted to run a Kotlin script on GitHub Actions. I knew how to do it to install Kotlin on the [09:04.760 --> 09:15.200] GitHub Action Render for continuous integration. So there was one liner that I could work on Linux, but I also [09:15.200 --> 09:22.160] wanted it to run on Windows. And I had no idea how I could make it run on Windows in one liner. And Kotlin was not [09:22.160 --> 09:27.400] pre-installed on the machine, so I could not run Kotlin script like this. I could run batch script, but I'm not [09:27.400 --> 09:35.320] familiar with batch. And I don't think I would really want to deep dive into it to do what I wanted. So what I did is [09:35.320 --> 09:41.400] that I submitted an issue. There was a project from GitHub that was about the GitHub Actions Render when you [09:41.400 --> 09:47.360] could request for them to install new software on all GitHub Actions Render. So I said, hey, can you install [09:47.360 --> 09:56.560] Kotlin? And a few weeks or months later, I mean, I think they said, yes, a few days later, and then a few weeks or [09:56.560 --> 10:02.480] months later, Kotlin was installed on all GitHub Actions Render. So now if you have a Kotlin script, you can just [10:02.480 --> 10:08.560] run it on GitHub Actions. And so you just have to ask, and it was really outside the Kotlin community. I don't [10:08.560 --> 10:16.160] think GitHub is very, very Kotlin-y company, even though they now have an Android app and they use Kotlin instead. So [10:16.160 --> 10:25.880] yeah, and see if we want to not always stick to our circle. And another example is for FOSDEM. So what's this? This tomorrow [10:25.880 --> 10:39.480] morning, it's a JavaScript webroom. And the first talk, let's see it a bit bigger is... Okay. Can you read? Okay. I don't [10:39.480 --> 10:48.680] know why they put it at the beginning of the day. But I see that it's not orange, it's green on the side. So maybe it's like [10:48.680 --> 10:55.200] they want to fade it a bit away. I don't know what the colors mean on the side. Sorry? [10:55.200 --> 10:56.040] They're random. [10:56.400 --> 11:08.760] Oh, random. So thanks, randomness then. So I really tell that they will never select my talk. [11:10.480 --> 11:17.000] So you can try that. And also if you are, I don't know, maybe you are interested in web development, that might also be an [11:17.000 --> 11:24.120] opportunity to learn more, because you also get to the event. So maybe you will watch a few other talks. Because I [11:24.120 --> 11:30.160] think a bunch of us usually are not just about doing, I don't know, mobile development or backend [11:30.160 --> 11:35.400] development, but sometimes we have a pet project and we do other stuff. So it might seem to be relevant to go at [11:35.400 --> 11:46.040] not Kotlin at all conferences. So yeah, it's important to spread the word as a right places, I believe. And keep in mind that [11:46.040 --> 11:52.120] you need to adapt your approach to the target audience or the expected audience. Sometimes you don't really know. For [11:52.120 --> 11:58.360] example, if you come at a deafness in a place you know nothing about it, you might learn on a lot of professionals, or [11:58.360 --> 12:04.200] maybe half of the conferences from that company that is doing only that programming language, or maybe it's all [12:04.200 --> 12:11.840] students, it really depends. So sometimes try to find out, or otherwise make it a bit generic, but don't talk like [12:11.840 --> 12:19.760] they know everything about Kotlin or they know why Kotlin is interesting. You know, you probably know why Kotlin is a [12:19.800 --> 12:29.320] good language, or what it's not good about, it's important to that. Being productory, if you're not at a Kotlin event, I [12:29.320 --> 12:38.800] think that's a given. And also why requiring Kotlin only specific things are explained. For example, receiver types, not [12:38.800 --> 12:49.000] many programming languages have that. I learned it when I learned Kotlin. I think it exists in Scala, maybe. But yeah, [12:49.000 --> 12:56.440] sometimes if you want to show something cool, take the time to explain it or don't. And also think problem first, [12:56.440 --> 13:02.800] because we know Kotlin, oh yeah, if I had to do this, I would do it, and if I had to do this, I would do it in Rust, and [13:02.800 --> 13:12.400] this also in Kotlin. But people are not always aware of what is the problem that Kotlin will solve. So instead of [13:12.400 --> 13:19.520] thinking about all solutions, think about what problems they might have encountered in their other tools. So it's kind of [13:19.520 --> 13:31.520] you putting yourself in the shoes of other people. And while there are things that you can imagine, that's just a few things [13:31.600 --> 13:46.100] that I'm hoping to inspire you. So which other communities you might want to target? Beginners? Because there's not a lot of [13:46.100 --> 13:54.600] ceremony, you can do cool things in Kotlin, I believe. For example, writing Hello World is two lines, and you don't have to [13:54.600 --> 14:08.680] create a class. So that's kind of classy, I think. Teenagers, amateurs, students, pros that you believe are not that pro, that [14:08.680 --> 14:19.160] might still change going forward. And pros and experiments personally, I think that seeing Kotlin helped me a lot to be critical [14:19.160 --> 14:27.800] about what tools I'm using, and taking things less forgiven. So that might also be an opportunity for your colleagues to go even if [14:27.800 --> 14:39.880] they don't end up using Kotlin going forward. You can also target some specific pro communities, web developers, data science, [14:39.880 --> 14:52.600] iOS developers, desktop apps, backend devs, and the corresponding programming languages, of course. Kotlin 1.8 now, I think there's a way to have [14:52.600 --> 15:04.120] Kotlin.js export type script declarations. So that's also something interesting in terms of new audiences that now you might target because [15:04.120 --> 15:14.320] Kotlin is evil. So sometimes staying a bit on top, kind of like Six Mom Delay if you want, but on the news in Kotlin can help you be a better [15:14.320 --> 15:25.720] advocate. So yeah, so even Objective-C, there are still a bunch of very good macOS apps made with mostly Objective-C, and it works very well with Kotlin [15:25.720 --> 15:36.880] native. Better than with Swift, I think some of you know. And backend development, because backend developer might switch companies, so they might target [15:36.880 --> 15:47.360] something different later on. You really never know, I think. I mean, probably you know better than I do, because you know the person. Some plans are better [15:47.680 --> 15:59.400] with beer, especially here, I guess. But not all of the people like beer. Personally, I don't drink a lot of beer, but just wanted to shoot out for the good beer [15:59.400 --> 16:11.880] here. And so what you will be about, again, try to be context-relevant, but you can share your experience. Sometimes it's not about saying, hey, Kotlin is good because [16:11.880 --> 16:22.320] it's just a technical fact, even though it also might be very interesting, but sharing your experience is really something that helps people see which situation it might be helpful in. So that can be [16:22.320 --> 16:34.280] experienced from you, but also folks that you know, or folks online that you maybe don't know, blog, talks, case studies. There's a case studies section on the Kotlin's website [16:34.600 --> 16:52.280] somewhere, especially for KMM, I think. And also some companies are just publishing their case studies. For example, I think DoorDash has been doing a bunch of blog posts about Kotlin related stuff and how it had them do a bunch of actually useful [16:52.280 --> 17:04.240] things for them. You can of course talk about technical facts about the language or its ecosystem. One of them is coaching and structural concurrency, but it's also not so easy to [17:04.280 --> 17:23.240] explain. So beware if you talk about it. But that's probably my favorite thing in Kotlin. So sometimes I mention it. Language videos, like extensions, that is, I believe, not so hard to explain as well. So type and new safety. [17:24.200 --> 17:46.200] But beware that people have an idea of what a type is, because languages do a very good job at making you not know what even a type is. And also compatibility sharing multi-platform is also a strength in Kotlin, even though it's not always smooth, and yet it's becoming better and better. [17:47.160 --> 18:02.160] This can be sometimes the only reason why some people are using Kotlin. And then they also get the other nice things and less nice things as well. And also you can share new things. [18:03.120 --> 18:21.120] Personally, it occurs to me that I look at really notes from Dart or maybe Python or other programming language just to see how they are evolving. It might be a bit particular because I'm kind of interested also in language design sometimes, especially Dart. [18:22.080 --> 18:40.080] It's been taking an interesting path lately. But maybe just as a blog post about Kotlin 1.8.20 that is coming sometime in the future, maybe it will interest some of your colleagues. Who knows? [18:41.040 --> 18:55.040] And it was a bit hard to structure these slides. I hope you will forgive me. So now it's random things we can do. You can nudge SDK vendors to put Kotlin as a forefront. That also has an impact. [18:56.000 --> 19:14.000] If I always say a mechanism can only be a man, then less non-men will see them as impossible mechanisms of future. There's been people that have been looking into this and that's a fact. It unfortunately happens that way in our brains. [19:14.960 --> 19:32.960] So you can say to SDK vendors, can you put Kotlin before Java? And then more people will see Kotlin. That also has an impact. If they are using Kotlin, they will say, oh yeah, maybe this is a good SDK. So you can tell them that that could be a good thing if you could put Kotlin before on your page. [19:33.920 --> 19:59.920] I've personally seen a bunch of SDKs where they had written Java, Objective-C, Swift, and Kotlin was very far away. You had to dig a bit. So yeah, nudge. Always be nice about it. So you can act as a leader. Something quite different that works best I think when you are in the company and people are taking into account your feedback. [20:00.880 --> 20:18.880] You can suggest using Kotlin when it's the right time. For example, we have a new greenfield project and we are not sure how we will approach it. So you can say for this thing that could be helpful, we can consider and then have just a normal discussion. [20:19.840 --> 20:35.840] You can also get people to discover Kotlin. I think you already know. You can help your teammates master Kotlin. That can also be through pull requests. You can review some code because knowing about Kotlin is only the first step. [20:36.800 --> 20:44.800] And again, report their user experience issues, please, before they target the effect of more people. [20:46.800 --> 21:00.800] About acting as a leader, one thing is to get everyone on the same page. So again, start with problems that you would avoid with Kotlin. Otherwise, why would we use Kotlin if there are so many problems? [21:01.760 --> 21:17.760] Just because it starts with a K. And also about others' concerns, because there probably will be, take them into consideration. Listen about that, acknowledge them. And when possible, you can address them or put them into perspective. [21:18.720 --> 21:28.720] This is a problem. At the same time, we are avoiding those three problems that are affecting us even more. So that's a good trade-off to make, maybe. [21:29.680 --> 21:47.680] That really depends. And remember that you can never be perfect at this. I'm sure I'm not. Putting yourself in other shows, taking their point of view helps to know what to tell them about Kotlin because there is so much to tell about Kotlin. [21:48.640 --> 22:02.640] And you cannot say everything. Personal experience helps. What I mean is that if you try to spread somehow Kotlin more, you will learn things on your own. And that works best for who you are as well, because this is a very social thing. [22:03.600 --> 22:23.600] Listener acknowledging helps, because then people are like, okay, you actually want to help them. It's not just about telling them, do this, do this. And being nice, even when you have a feeling that it's always a good thing. [22:24.560 --> 22:34.560] And also, it can take a while. It can take, as I told you, months, years, you never know. So don't overpush. This is something I remind myself. [22:34.560 --> 22:46.560] And yeah, that's about it. And if you want to talk about that later, I think you don't have a lot of time for questions. Or maybe two minutes, maybe one question. [22:54.560 --> 23:06.560] I have a question. Will you open source how to make this? [23:06.560 --> 23:08.560] I repeat the question. [23:09.520 --> 23:19.520] Yeah, the question was, will I open source how to make the Kotlin handkerchief? So yes, I will do it right now. This is made with an actual handkerchief. Inside, there's some plastic. [23:19.520 --> 23:31.520] And with four hands, so thanks, mom. With four hands, you can hold the thing while some of the two other hands are suing the plastic thing that keeps it, you know, holding. [23:32.480 --> 23:40.480] It's only at the top. You don't need to put plastic here. And this is some LEGOs that I put behind. [23:40.480 --> 23:46.480] Then I fold it, and then in the packet.