📜 ⬆️ ⬇️

“Speed ​​is such a feature that no one ever refuses” - an interview with Dmitry Zhemerov from JetBrains

Today is Friday, and Friday at Habré is a great day for something unusual. Today I bring to your attention an interview with Dmitry yole Zhemerov , a man who had a hand in IntelliJ IDEA, PyCharm, Kotlin and many other products of JetBrains.

What we talked about:



')
Under the cut - the transcript of this interview.

- Good afternoon! This is "No Slides." We have a release today with Dmitry Zhemerov, a veteran of JetBrains. Dima, let's start with the fact that you tell me a little about yourself: what did you do, including in JetBrains?

I came to JetBrains in 2003. I was the 28th or 29th employee, and during this time I managed quite a lot to work out. At first I was the head of the Omea project development - there was such an information aggregator, that is, this is a program that collected information from various sources such as mail, news'ov, RSS feeds. He allowed to search for all of them, to organize, categorize, and so on. Then the Omea project was closed, and I switched to the IntelliJ IDEA team. It can be said that he was at the origin of such an entity as IntelliJ-platform, that is, he was engaged in translating IntelliJ IDEA monolithic development environment into a platform, on the basis of which IDE can be built for different languages, not just for Java. It is clear that many people took part in this, but I also did quite a lot there. Then I worked on various IDEs based on this platform: I managed to work on both RubyMine, PyCharm, and WebStorm.

- Where do you think IDEA is now moving at all as a product, as a platform? There is a feeling that some stagnation has arisen: as an IntelliJ IDEA user, it seems to me that nothing is happening. New versions are released, they may work faster, they support new frameworks. So it is not so?

Faster is the most important thing. Speed ​​is a feature that no one ever refuses. We have been investing in user interface quality and usability for quite a long time so that everything is neat and smooth. Great features that change your experience as a developer also appear in some quantity. For example, Inline Debugging, which we had in the 14th version. When you step through the code, you are right in the code, in the editor you see the value of the variables that are calculated on these lines. Or, for example, shortly before this, support for several carriages in the editor appeared - this is also a big feature that matters to many. What will happen next, I really can’t say, because our development process is not planned very far ahead, and the developer may suddenly have an idea: “Let me deal with this functionality. Let me do it. ” He will go and do, and she will appear in the release, and everything will be great.

- About 3 years ago, Oleg Stepanov and Maxim Shafirov became the CEO of JetBrains. First, why are there two? I do not remember any such cases, when the CEO immediately two. What has changed over the years? What, perhaps, tasks and goals were set before them, if it is open information, and how successful is it? What has changed in the company?

Two CEOs - it turned out to be quite convenient, because there are two offices. Oleg lives in Munich, Max lives in St. Petersburg, and each of them is primarily responsible for what happens in their office. There is just a lot of work there, and they somehow divide this work among themselves. Max is now very actively involved in our entire sales infrastructure, that is, our internal corporate information system, if you like, the store. So that users have a good experience in this place. Oleg is engaged in quite a lot of our server tools to make YouTrack, TeamCity and Upsource from our zoo, to make some kind of a single solution that you can just put, and it will solve all the problems with the development process that are in your team.

- That is, besides the division by office, is there still a division by products?

This is not even so much by product, as by area of ​​activity. We, like everything in JetBrains, it somehow happens organically. When we introduced this scheme, we didn’t have such a thing right away, so let's agree on who is responsible for what - just along the way, it turns out that this activity needs to be engaged in it, and, accordingly, the person who can take it upon himself, takes it upon herself.

- How do you evaluate these 3 years? What has changed globally?

In terms of organizing work in principle, JetBrains has remained the same. Some rather large projects happened, for example, moving to our new office on Vasilyevsky Island, in which Sergey Dmitriev, who had previously been the head of the company, did not participate at all. Or, for example, in the organization of sales. A lot of things have changed during this time in our company, some things have been able to make big ones.

- Two CEOs - is this an experiment that continues? Are his results already visible, or is it still in process? Or, in principle, was not expected any global changes?

No, in fact, just first and foremost, the motivation for this decision was very simple. At some point Sergey Dmitriev said: “I am no longer young, roughly speaking. I can either continue to do further JetBrains, or I can leave JetBrains, which was made, to some other people from the team, and myself go to engage in some other activity. ” Judging by the fact that he has been successfully engaged in other activities for these 3 years, without being distracted by JetBrains or being very little distracted by JetBrains, then, in general, everything turned out. JetBrains during this time grows, is successfully broken and so on. This task was fully accomplished.

- On your old site there is a record dated 2003 that you got settled in IntelliJ Labs. Now we know the company as JetBrains. Can you talk a little bit about JetBrains and IntelliJ Labs?

It is very simple. IntelliJ Labs is the name under which the company appeared. In 2000-2001, the first versions of IntelliJ IDEA were released under the brand name IntelliJ Software or IntelliJ Labs. Then, when it became clear that we want to make products not only for Java, respectively, the name with the letter “J” is no good for us. We put the letter "J" in the beginning and came up with the name JetBrains. IntelliJ Labs is still preserved in the name of the Russian legal entity of our company - INTELLIGEY LABS LLC. JetBrains is, accordingly, the legal entity headquarters of the company.

- JetBrains, which was in the mid-2000s, and JetBrains of the 2015 sample - do you feel any difference between them, and if so, what do you like and don’t like?

It is clear that a company of this size is simply another level of personal connections. When I come to St. Petersburg from Munich, I go around the office and see a lot of people I often don’t even know about: they work for us in the company, they come to visit someone or they just brought pizza. These are people I do not know; I do not know what they are doing. On the positive side, JetBrains was chronically understaffed for a very long time, that is, there was a state all the time that there was more work than people who have to do it. It seems to me that recently in very many projects we are getting out of this state - not all, but many. Roughly speaking, we have as many people as necessary to really move products forward.

- Now you have 300 people, 400?

400 with something.

- This is mainly Peter and Munich, right?

Yes, we now have, probably, 80 people in Munich and, accordingly, 400 with something in St. Petersburg for now.

- Hundreds of people. Distribution creates any difficulties for you?

I do not think that creates. As a rule, people who have worked for some time in the St. Petersburg office and who are already familiar with the team with which they work together are leaving for Munich. Accordingly, there is no such thing that you have some kind of sudden person in another office, with whom you need to somehow establish relationships. Plus, we often go to each other.
- Do you yourself often ride here?

Every two or three months I’m definitely in St. Petersburg. Plus, we have videoconferencing stand-ups every day, that is, every day there is a certain amount of personal communication via video communication. It seems to me that we have no problems due to the fact that we are distributed.

Moreover, I would like us to be more distributed. I would like us to be able to hire people, for example, in Silicon Valley. Those who are satisfied there, and they do not want to move.

- Do you have working language English, Russian?

Russian. Comments in the code are always in English, any internal communication - we always try in English, and oral communication is always in Russian, except for those rare cases. We still have a number of non-Russian-speaking employees, and of course we communicate in English with them.

- I see. Now another interesting story. Just a couple of weeks ago, Andrei Breslav released a post to which many people noticed, in which, in general, he was actively looking for product managers. Such a question from here: are you dissatisfied with your product-managers or are you just looking for it?

We are looking for people in a position called “Product Marketing Manager” (PMM). In fact, our team is very good. As far as I know, we are satisfied with all those who work in this position now. Andrei was looking for a person specifically in Kotlin, where now PMM simply does not exist. Or, for example, in IntelliJ IDEA now there is only one person, Andrei Cheptsov, is engaged in product marketing. This is a great product, complex, with a large number of different features, and it is clear that there is work for the second person, and maybe for the third one too.

- About a year ago Ilya Ryzhenkov came to Kotlin. Isn't he in the PMM position?

Now, in fact, it turned out that Illya is primarily engaged in libraries and infrastructure around Kotlin. He leads the team that makes the framework for Kotlin, he also writes the code. We are constantly experimenting with new frameworks for Kotlin. We already have one, but we are trying other options, looking for how we could have done better.

- And Andrei Breslav?

Andrei, firstly, is the chief designer of the language, and secondly, until recently he was the project manager of the whole team. I recently took the IDE-management team from him - we already have 5 people who are engaged in plug-ins for IntelliJ IDEA, and now I’m their manager. Andrew just decided to stop programming recently, because he lacks all the time for this. We strive to make the release as soon as possible, and at the moment there are just a number of open questions on the design of the language. We want to close them as soon as possible, and Andrei is primarily focused on this now.

Five people in IDE alone?” When I last talked closely with Kotlin'a team, it was a couple of years ago, there were only, in my opinion, 9 people. Looks like the Kotlin team has grown a lot since then?

There are more than 20 people now.

- That is, the company really invests in Kotlin?

Yes.

- Two or three years ago, it seemed that Java 8 will be released, and that’s it, Kotlin will not be needed anymore. And you now only increased investment. Do you make a serious bet on him? Do you write it yourself?

Yes, we now have a certain number of projects that are being developed at Kotlin, but not as many as I personally would like. For example, the next version of YouTrack is written in Kotlin. We have one not announced product, it is also written on Kotlin. The new CRM system, about which I mentioned, is all written on Kotlin from beginning to end. This is a business critical decision; all our sales pass through it. We trust the code on Kotlin to our sales, and this, I think, speaks about something.

The guys constantly take Kotlin from the master, that is, they are not sitting on release versions, and every few days they upgrade to the latest version of Kotlin from the newly collected ones. At the same time they are satisfied, everything works.

About Kotlin vs. Java 8 is actually a common misconception. First of all, Java is pretty tied to its legacy. In the last issue of No Slides, this was also discussed. Sergey Kuksenko said that it would be great to throw everything out and write from scratch. He probably meant more like a library and a virtual machine, but from the point of view of the design of the Java language, there are also decisions that were once made and that will be with us forever. For example, Raw Types, Wildcards, the division into primitive and non-primitive types, and so on - this is not going anywhere, and no matter how much Java develops, this legacy will remain forever. In itself, the fact that we are not tied up with this backward compatibility, we are already free from our hands, already gives us the opportunity to do some interesting things.

Now, when I tell someone about Kotlin, and I give reports from time to time, I don’t mention any lambdas for the first 20 minutes - I just show Kotlin’s various features. There is a lot of everything there that does not affect at all those changes that occurred between the seventh and eighth Java - just things in which we improve that part of Java that is not affected by all of this.

Then, of course, lambda. We have lambdas, and they are better than in Java 8, because we have inlaying support at the language level. The point is that when you use lambda just to go through a cycle of some very simple function - for example, to find all the elements that are more than 8. The naive way to translate it is to generate an inner class with one method that checks that the number is greater than 8. Then you have a filter function, which, in fact, receives an instance of this class and applies it to each element of the collection, and there is code from which all of this is called.

In Java, something like this works. It uses invokedynamic and method handle. Therefore, there is a part of this generated during execution. As we learned at the Geekout conference, Java is currently not able to inline all this. And we have support at the language level. We simply say that the Filter function fits in inline. This means that this code, which is inside the lambda itself, and the function body itself are written directly to the place where we are calling. Accordingly, it turns out that we do not have any overhead project on performance. We do not have the creation of individual objects. We do not have any virtual calls, God forbid, still megamorphic. Our code does exactly the same thing that would happen if you wrote everything by hand without using lambda.

- I understand that exactly invokedynamic is some kind of hindrance to inline?

No, I would not say that it is in the invokedynamic case, but the inlining works in such a way that it does not know how to understand that through the lambda and the function through which it is transferred, it can all be zainlaynit. Perhaps sometime this deficiency in the JVM will be eliminated. As far as I understand, work is underway on this, but at Kotlin it is decided at the language level.

- I see. And when did Kotlin appear? How did such an idea come to mind?

We started, as I recall, around the end of 2010. I will not say that this is right, I thought of everything. At some point I came to Sergey Dmitriev (one of the founders of JetBrains - author's note) and said that it would be cool if JetBrains had its own language. For me, it looked like a natural development. Our slogan, - “Develop with pleasure”, in Russian - “Develop with pleasure”. We do quite a lot in the field of tools, so that people really develop with pleasure: refactoring, komplishn, highlighting errors - everything that we can do very well for 25 different languages. All the same, we see that the IDE has to make gaps for the shortcomings of the language.

For example, IDEA can show anonymous class in the form of lambda. If you are using Java 6 or Java 7, you write anonymous classes: new Instance, method declaration, body. In IDEA, it all collapses into lambda. This is a clean plug for language deficiencies. We decided that we can try to just make a language in which gags will not be needed, in which it will be just nice to write.

IDEA, of course, is still useful and helps, but it is not some kind of crutch. There was a feeling that we can do this, because we have enough accumulated relevant experience with the development of IDE plug-ins and language support. There was a feeling that we had enough weight on the market to make people interested. There was a feeling that we needed it ourselves, because we all wrote there in support of this, the fifth, the tenth, and program ourselves in Java.

The whole IDEA is still written in Java 6. We started using Kotlin, but everything else is written in Java 6. There was a feeling that this is something that can fire. It was clear that this is a long story, but I guess I underestimated how long it was.
Then it threw some grain, there it was also discussed with various other people in various other contexts, and so on. Then we were very lucky to meet Andrei Breslav, and we actually started making the language itself. I also had a hand at the initial stage - I wrote the first version of the bytecode generator for the JVM. Then other people did it, and I switched to other projects. I haven’t been engaged in Kotlin for quite a while, and now I’ve returned to Kotlin.
And I came up with the name. At some point, Dmitriev came and said that we needed a name right now. Like, think up a name - and it is above the soul!

- Like the name?

At first, we were a little embarrassed, because we have a German office, and in German the word Kot means something not very harmonious. But in fact, neither the Germans nor anyone else - did not hear this. So at the beginning it was like a temporary name, code name, “Project Kotlin”. We only then realized that we do not need any other name, we are not bad at all.

- It was just recently announced that you and Sveta Isakova will be writing a book about Kotlin. Tell me, please, what kind of book, who initiated this project, and how does the whole process of writing a technical book about language work?

We want to make a book about Kotlin for Java developers. Kotlin, , Java: JavaScript, , , , 1.0. JVM: c , -, Android. Android — .
, , Jav, Generics JVM. Kotlin. , Kotlin' , , Kotlin Java-.

Kotlin' , — Kotlin'. , . , -, , - . , Java , Java: , . ? , , Kotlin. , , IDEA .

, . , — . Scala , , Ruby on Rails . - , , . , . , Kotlin', , .
, . Table of Contents () . . - . Manning, , , Kotlin. , . , , , , . , . .

?

«Kotlin in Action». In Action – .



Manning Kotlin'? - ?

, , acquisition editors, , , , , . , . .

. , , . , , . ? ?

, . , – royalty.

JetBrains ?

Yes. , - , , . – , . , , - .

, – .

- , .

. -

, , CEO .

, Kotlin , , , , . , . ? Language Design Review. , , , . ?

- , . , 5 - . , . , , . , , , , .

JetBrains, , . , IntelliJ IDEA, API . Kotlin' . , , , Kotlin' , IDEA. commitment, Kotlin' 0.1, Kotlin' 1., , 2., - - , .

, , . . , - , - , . , , , , .

- ? ?

, , , . .

?

Python - , . new ArrayList , -, new ArrayList . , , , , - .

, , ?

, . , – , 1.0 - . , . , , , , .

, ?

. , . , , , .

, – API . NetBeans , : , SigTest, , API-, , API . , , , . - . ?

, . IDEA Plugin API , , , . IDEA. , , - . , .

15 . Java IDE, API. 1.0 , API – , . , . 3.0 - Plugin API, . Java, . 5.0 JavaScript . IDE, Java .
PyCharm Java . . Kotlin Upsource. , , Java Java, , UI -UI. Kotlin' . . , PSI, , . . .

, – , , . API .

. , Major- API . Major Major API .

. major-. migration guides, , , . , . build- TeamCity, build'a IDEA -, , . — ?

Yes. , NoSuchMethodError - .

- API?

- API.

, , ?

, , - .

JetBrains



- JetBrains . ?

JetBrains Google. 10 JetBrains. - .

, ?

CTO, . PyCharm WebStorm. , . , , , , - , , . .

- . , JetBrains, , Google. , : , . , .

, Google? ?

Google Cloud Platform. , — loud Debugger: production-, App engine, compute engine - . , . source code call stack, . , . production'. breakpoint'. , , , - . : call stack, , source code

? - , ?

, . Google . Google – , . «do cool things that matter», , « , ». Google. , , , , , , .

Google — 50 . ?

25-30.

Google , , , , , , , . ?

, . ? Google . .

, . .

3-4 , Mountain View , , , Google - . , , , Kotlin, , , , JetBrains . .

, , JetBrains, — , . JetBrains, Google - . , , Google, , . , .

Kotlin. - 2011 . , ( ), . . , , , JetBrains , . , , . ? ?

, . , - , , performance , . , - . , . Kotlin, -, feedback . , . , , , , . , , .

Kotlin - ? , - ? ?

It was. , , , , . , nullability, , null, .

The billion dollar mistake.

-, . Java, Java . , Java, . , , Java- , - .

: , - , - , xml , , : – not nullable, – nullable, nullable. JDK , - . , , Java. .

KAnnotator – , . , - , , , not nullable. . , KAnnotator — , . , data flow . , . — , . , .

— . , , nullability . Java. Java-, nullability. , nullability , , . , . , . , workflow . , Java- Nullable NotNullable — - .

KAnnotator' . , , , .

. , , .

May be.

, , null-?

– Java Kotlin . assertion, . .

, ?

Java Kotlin.

. , , - Google. , , , -. , ?

, , . , , , «», . Not.

JetBrains, , ?

JetBrains , , .

, JetBrains ?

22, . , . , , - – 17.

?

, . , — . 13 . - . OpenSource-, .

Google. Google . , , , 100 . , 100 , . .

Google, , , , - , , . It turns out no. , . , (, , Google) — , , .

-, storage-. , . — , . , NoSQL-.

, - Google? , ?

Hard to say. Google . BigTable, . , , . Spanner, Google, — . , .

, , , «-» . , , , . . , data storage, . Google, . , , TeamCity, Youtrack, , , Youtrack .

Xodus .

Xodus, . , … , - . , . , Youtrack , Google .

( Youtrack — . ) , - Atlassian, SaaS- JIRA. , 30 . Youtrack SaaS- .

understaffed, . , - , .

C Google — . . , , , , , Youtrack, attachment-. , , , . , , . , — . , . 95 lanency, median latency — . , . , , , Google Search.

, - , . - ? , ?

-. , . , . , , , , , . , , . , alerting, - — . alert , , , . , , , alert . , SRE (Site Reliability Engineers), Google, , . , . , alerting, , .

SRE , . , SRE . . , — . , , storage quota, response time , , DoS- .

, – Google ode. - ?

Google Code. : Google Code , , Google. , , 20 000 . – . , , middleware -. middleware . middleware , , , . - middleware, .

Google Code — , , , . , , , abuse . , , , , - android-, - . , . - download . abuse…

, , , , . GitHub , , , Google GitHub. Google Code .

, - ?

, , . . , . , , , , 15 , , … « , ». , , Google . - — 75% . , , - .

-?

Google - , . .


, . - ru_java, . . , ? , c, - , ? , - , . - IDEA. — . , .

. 2011 , , , , , 2013 .

, newsletter .

, , 2 , .

, .

? ?

. PhpStorm, , , . , , . , , . PyCharm .

, - Kotlin. , . , -, Reddit . subreddit Kotlin , -. , , . -, . , - , , .

JUG


, . JUG.ru , -, , . . JUG?



JUG TeamCity, - , 2006, -, . - , . .

, , , . , - JUG . - . .

, .



PS: :
Joker 2015
Kotlin JetBrains

jemerov
Kotlin — JVM, Android JavaScript, 2010 JetBrains. , , Java- IDE. JetBrains, .

Kotlin JetBrains — ( Web-, Kotlin) IntelliJ IDEA ( Kotlin ). , . , Kotlin .




Joker 2015 — .

Source: https://habr.com/ru/post/263905/


All Articles