Kotlin, IT in Estonia and (suddenly) a tunnel between Tallinn and Helsinki: an interview with Anton Keks

    Recently we have a very specific post about Kotlin on our blog : not very serious, rather superficial and unexpectedly vigorous. But we are well aware that criticizing technology after spending a few days studying it is moveton. And so this time we decided to talk about Kotlin with a man who writes on it on the prode from version 1.0.

    Today, the name Kotlin is already difficult to surprise someone, especially in Android development. Whether it was at the beginning of 2016: demand was an order of magnitude lower, official support for Google was out of the question, and writing to Kotlin was a lot of brave in spirit. One of these brave souls was Anton Keks., and subsequently he also paid a lot of attention to Kotlin (for example, he spoke twice at KotlinConf). Therefore, we decided to ask him about how the life of a Kotlin-developer has changed over time.

    And in order not to get up twice, they covered another topic. Anton is a co-founder of the Estonian company Codeborne, a practitioner of extreme programming, so at the same time we learned that in Estonia it is with IT and what it is like to create your own company there.

    - How did you start writing on Kotlin, and how do you use it now?
    - Began to use at the beginning of 2016, from version 1.0. My first project on Kotlin was the safest: a plugin for IntelliJ IDEA, which I did for a Japanese customer. After that, I started to transfer my personal projects from Java to Kotlin, and try to use it for backend.

    In the last year we use the language on the backend in the banking environment, gradually transferring a large Java project to Kotlin. And we also write microservices on it, and there is pure Kotlin. When you have a project only at Kotlin, everything becomes even more pleasant: you do not need to think about interoperability with Java.

    - Since you saw the language from version 1.0 to today 1.3 - how did it change from the point of view of the developer writing on it?
    - In the beginning I thought, once the release version, then everything is fucking awesome and will work without problems. It turned out to be not quite the same, and the first gap, between 1.0 and 1.1, is largely a correction of the jambs, an improvement in performance, and so on. But versions 1.2 and 1.3 are about new features.

    For example, coroutines that became stable in 1.3 can change a lot. I played with them and am very pleased. However, in production we have not tried them yet: everything is still limited by the difficulties associated with the JDBC drivers. But in the development for Android, it is easier to build an asynchronous model, so Android developers used Korutiny and up to 1.3.

    And here's something else very interesting: in version 1.2, experimental support for multiplatform projects appeared, it became possible to compile both in JavaScript with Kotlin / JS, and into native code with Kotlin / Native. But for now, it’s scary to compile in JavaScript, and with Native the main problem is that Kotlin has a very small standard library. In the case of the Kotlin JVM is very dependent on the standard Java library. And in Kotlin / Native, in theory, you can use any native libraries, but then you lose “full cross-platform”, everything becomes separate. However, JetBrains are now working on this, and the cross-platform may have a great future. Cross-platform iOS / Android applications are what many would like.

    “They already tried to give us both Xamarin and React Native ...”
    “They all have a problem that Kotlin doesn't face.” In the case of React Native, Xamarin and the like, the framework needs to keep up with the OS releases. Constantly something breaks, and all these frameworks do not ripen. You are in an incomprehensible state, when the new version of the OS is already out, and your framework is not working yet, and you still need to do something. This is the most annoying moment. And with Kotlin in this sense, everything is different - they directly use from the language all the standard APIs and libraries.

    - Often the feature in Kotlin appears as "experimental", and before a stable version has time to change. Do you like this approach? If you use experimental features, how much do they change and do you have to redo much?
    - Yes, I like it. Because in beta versions and release candidates 1.3 there were actually a lot of bugs (I even found a couple of puzzlers on this topic for my report with puzzlers), and in the final release they fixed them, which is very good.

    In Korutinas, some things have become a little more complicated, but it has become clearer what is happening: for example, it has become necessary to more clearly transfer the context to Korutina. And as a result, the code with Korutins, written under Kotlin 1.2, now simply will not compile. But at the same time, these changes are not so large that it was difficult to migrate.

    - If we are not talking about the language itself, but, for example, about the IDE, how was the development going there? How was it before, and now what?
    “Since JetBrains produce both the language, the compiler, and the toolkit, from the point of view of support in the IDE, there was an unprecedented situation. Very often, when a language is born, early adopters are first written on it in a text editor without highlighting, and the like. And with Kotlin, this was not even until version 1.0, support in the IDE was immediately.

    However, it was not perfect, and over time it is constantly improving, inspections are added with each minor version. And the fact that now is much better than it was. For example, one of these bugs that I was waiting to fix: Kotlin has template strings, and I wanted to try to use them in my projects instead of another templating language, but because of a bug in IDE, the backlight broke as soon as the variable started inside the template string in kotlin. And now it is finally fixed, so I started using it. At the moment, I no longer have specific things that would not suit.

    - And what about the development of the ecosystem as a whole - the community, responses to the stack overflow, frameworks?
    - As far as I can see, the community is very active, a lot of activity in Slack. On Stack Overflow, too, already written enough. Maybe the only problem is that when you google, there are sometimes some posts that were written before version 1.0, when some features were completely different. For the relevance has to follow.

    There are frameworks that are immediately made for Kotlin. For example, an excellent framework for MockK unit tests, it is designed for Kotlin, there are much more beautiful APIs. In addition, many Java frameworks are now also specifically involved in Kotlin support, not only that it is strictly necessary with its interoperability, but they add some kind of tokens or make using it even more convenient.

    - The explosion of popularity in the Android world has not led to a bias in the community, when everyone cares only about Android, and the rest of the platform faded into the background?
    - I somehow do not feel the bias. Of course, Google’s decision to make Kotlin the official language for Android dramatically affected the increase in interest in the language, but it seems to me that it was not only Android that fired, but interest in the language in general. There were a lot of Android developers on KotlinConf, but many of those who write server applications are desktop, even JS: I met people who actually use writing code for both the client-side and server-side. And there is no feeling that this is the “language for android”. Although Android has become a driver of interest, it is still a general purpose language.

    - With new technologies, there is an eternal fear “it is interesting, but you cannot drag in production yet,” and there is no such problem in Android, but outside of Android there is another question. If these concerns are relevant for Codeborne, what has changed in the time that you use Kotlin?
    - We mostly choose technologies ourselves, but it often happens that the client also wants to participate in decision-making. And at the moment, when we bring Kotlin to different projects, there are no objections. What has changed: before, clients had heard nothing about Kotlin at all, but now he is already well known. And now, if we say “we are starting to switch to Kotlin”, there is no longer any fear, for example, that he will disappear. There is the Kotlin Foundation, there JetBrains and other companies in good financial condition. And the support of the community is big. In general, there is absolutely certainty that Kotlin will not go anywhere.

    - Many come to Kotlin now, skipping the described stages of the formation of the language. This can only be envied because they have already acquired a more mature technology, or without early adopter experience, do they lose something important?
    - It depends on the person that is more interesting to him. Having connected earlier, it was possible to personally participate in the development, to influence the formation. Especially before version 1.0, there was a time when it was possible to talk with the JetBrains team, influence their decisions, help them. And now the team still appeals to the community and takes into account its opinion, but at the same time, many basic decisions have already been made and will not be changed. Therefore, it all depends on personal interest in such.

    In my opinion, starting to use technology for development, when it is no longer raw, helps a lot: you spend time on your tasks, not on shortcomings. And your tool just works for you. I think now is the time when those who do not try Kotlin - that they are already really late and lose a lot.

    - Now, when everything is generally good, what do you personally lack in the case of Kotlin?
    - Perhaps two small things. Very minor - ternary operator. It is clear that since if is an expression, you can simply use it, but you want to write more familiar.

    A little bigger is package-local access. It seems to me that internal in Kotlin is more likely an error. Tried to improve what is in Java, but, in my opinion, in vain did so. In Java, it worked more or less well, and internal is useful only if you are writing a library, and not a regular application. And I miss the fine-grain access control that Java has.

    Well, the development of cross-platform want, which has already been said. There you have to work on the standard library. But there is still the Ktor framework, and it is now such a testbed to write everything on Kotlin, and from this project some libraries are now being born

    - Let us turn to the second part of the questions: Estonia, Codeborne, entrepreneurship. For a start, the non-IT question: what is it like to live in Tallinn?
    - I may not be quite the right person for this question, because I am a fan of Tallinn, it seems to me that this is the best place on Earth. On the one hand, we have here the European Union, European currency, European order and European purity. On the other hand, Russian can be used widely enough (a third of the population speaks it accurately), and geographically we are close by. A lot of IT specialists from Russia, Ukraine, Belarus come to us now - I think it is for these reasons.

    The city is not as big as Moscow or St. Petersburg, so you do not spend a lot of time on transport, and it is often convenient to reach on foot. At the same time, if you want diversity, it is easy to go abroad. And in terms of prices, Tallinn is cheaper than England and other European countries, so the standard of living that you can afford for the same salary in Tallinn is much higher.

    Of the minuses only climate. It is very good in the summer, and it is beautiful in the winter with snow, but November is a very depressive month.

    - Well, to the last Petersburgers / Muscovites are no strangers. And what about a country with IT?
    - We have a very high level of technology development. Everything that is connected with the “electronic state” is actively developing - right up to the electronic residence program, when you can become a resident of a country online without being in it at all. Many online services, which are now new in other countries, are taken for granted. Startups appear - for example, Skype was originally Estonian. Jobs are also abundant. Therefore, I would say that there are many interesting things for IT people.

    - It sounds suddenly: it seems intuitively that such IT centers will be in places like the Valley, and not in a country with a smaller population than Novosibirsk.
    - Well, in the Valley, the IT manager can be worse, there are unrealistic prices for real estate and in general the cost of living.

    And, perhaps, in Russian sources about Estonia, little is written, but if you look at the international press, there are a lot of texts in the spirit of “electronic state, the first in the world” (here is a great example ). When I go to IT conferences around the world, they say to me: “Estonia? Oh, you have IT there! ”

    And besides, there is Helsinki next to Tallinn, half an hour between them by water or 15 minutes by helicopter. And there are talks about bringing Tallinn-Helsinki into one European IT hub. Possible tunnel between the two cities, then it will be the longest tunnel in the world.

    - When in a country with a small population of large IT, it is likely that it works primarily for foreign customers?
    - Yes, any company emerging here wants to get out onto the international market as quickly as possible. Internal small by the number of people. But due to the fact that we are in the European Union, we have an EU market right away. And besides, the small domestic market allows IT to test things before the world release.

    - Many Russians in the minds of the Baltic states merge together, so let us clarify: how much is said about Estonia applicable to Latvia and Lithuania?
    - Not very applicable, in fact. There are some intersections, but the mentality is different, in Latvians and Lithuanians it is closer to Eastern Europe. The history of the countries is also completely different. Therefore, if you come and take a walk in Tallinn, in Riga and Vilnius, you will feel that they are different, and if you live longer, there will be even more differences.

    I once worked on work with both Latvians and Lithuanians - then the Estonians turned out to be the most progressive in IT, then the Latvians took over, and the Lithuanians later.

    - You are one of the co-founders of the Estonian company Codeborne - tell us about it first.
    - We are small, we are 32 people. All developers, we call them not “developer”, but “software craftsman” - this is a very important difference, because we have neither analysts, nor testers, nor product managers. We have universal fullstack-people who, apart from fullstack-development, are also engaged in communicating with the client directly without any intermediaries who can set tasks themselves. Thanks to this, the efficiency is several times higher than that of many other IT companies. We can build two or four people things for which a conventional Sberbank will require thousands of people. By the way, I am not joking, we communicated with Sberbank on this topic, they were interested in interacting. But it seems to me that with large scales such efficiency, as with our small ones, is impossible. That’s why we don’t want to grow too much. Company culture - to act quickly, with a small number of people to do super-efficiently, to solve big problems so that the customer does not wait for six months. For this we use, for example, extreme programming and pair programming.

    - And this whole extreme is a specific feature of Codeborne, or is it typical for Estonia in general? In another country, would you be able to?
    - Let's just say, agile in Estonia is typical, small teams are quite typical. But I think we are different and go even further. It is unlikely that there are many companies that do pair programming in such numbers and which are so developer-centric.

    I think that this can be done in any country, we didn’t think up a model from scratch - we were guided by several companies, one of which was in Chicago. We read some blogs, and mostly in America I saw the approach that is closest to ours.

    I think the approach of customers initially helped. In Estonia, hourly pay is common, you can say that you see so many man-hours, and let's think together how to do as well as possible with the available budget. In Estonia, this idea does not need to sell. And, for example, in Russia most of the companies-customers are not ready for this, they want to pay for the project, although as a result, as a rule, the customer turns out to be more expensive.

    - At the beginning of the interview a Japanese customer was mentioned - is that typical? When customers are overseas, and even those which languages ​​have to deal with in work?
    - About Japan - yes, typically, Estonia works a lot with the Japanese, they come here with whole delegations.

    We communicate with almost all our clients in English, only with Russian in Russian. They do not agree in any way with English - perhaps, many could, but are embarrassed. Because of this, we realized that we have especially valuable developers who speak Russian.

    And we work in English with the rest of the countries - although the Japanese do not usually speak English, but those who arrive in Estonia for negotiations usually speak. And even in Estonia we often communicate in English, because in the past ten years it has been very cosmopolitan, especially IT. Many experts came from all over the world, so it almost always turns out that not all those participating in the dialogue speak Estonian. I think this is also the reason why it is easy enough to move to Estonia - the main thing is to know English, Estonian is not required.

    “I think many developers would theoretically want to create their own company, but they are afraid that then they will have no time for programming, and the change will be for the worse.” What does your experience of creating a company in Estonia show?
    - I would say that. Codeborne - soon nine years, and during this time, when someone left the company, most often in order to create their own. On the one hand, it is a shame, because we have grown and trained people, and on the other, it is flattering that people believe that the next step after Codeborne can be just that.

    And I would say that creating a company is a cool option, but really be prepared for the fact that most of the time (especially at first) you will have tasks not related to IT. And this is not even “endless discussion”, but sales, finding the first customers is a lot of work.

    It is not suitable for everyone, so I would advise some time to poflans. In the case of freelancing there is the same problem - it is necessary not only to develop, but also to find suitable customers.

    - Another developer fear is “instead of code, people should be managed”. Do I understand correctly that your case shows "you can find self-managed and much less distracted by management"?
    - Yes, we have an absolutely flat structure. We initially decided to get rid of all things like “annual interviews,” so we specifically looked for people who were formed not just as developers, but also as individuals — they should not be “led by the hand.” But I would say that now it is a little more to do this than in the beginning, because initially there were 10 people in our core team and everyone understood everything, but from 30 people were different. But for now, we spend quite a bit of effort on this and rather try to make an open organization.

    - Returning to the “electronic state”: how much has it simplified the life in creating a company? Things like bookkeeping are made easy?
    - In Estonia, the Guinness record was set in time for the creation of a company: about three minutes. If you are a resident of Estonia (or an electronic resident), then creating a company is a matter of a few minutes online. This is no problem at all. And with accounting too: we do not have our own accountant, we buy this service, and since Estonia has a fairly simple taxation system, this is quite cheap.

    - Everything sounds so good that, finally, I want to find some kind of pain compared to the usual hired work. Is there such?
    - I personally have no pain exactly. Well, naturally, when you are a hired employee and you are engaged in only one project, you can relax much more. Especially in Codeborne, because we have non-working time - really non-working, we very strictly explain to customers that we will not do something at night and in the evening. Naturally, the founders (including me) spend time and effort on issues that other employees are not worth - for example, so that people are always busy in a project. But this is also interesting. Therefore, I personally do not regret anything and everything suits me.

    This weekend, Anton presented the second set of Kotlin-puzzlers in Moscow at the Mobius conference . In addition to it, the program also contains a lot of interesting things for mobile developers (for example, the report “Kotlin for writing common code for Android and iOS” ).

    Also popular now: