What is it like to do Kotlin: an interview with Andrei Breslav



    There is no shortage of technical materials about Kotlin, there are many places to learn about korutin or nullability. But the other side remains much less illuminated: what does the language development process look like? How are decisions made? What are the tasks of the "most important person"? Does he still have time for anything else?

    And now, when Kotlin 1.3 is about to come out, we asked “the most important” Andrei Breslav not about Korutiny, but about something completely different: from what he did to Kotlin, to what psychotherapy is useful for.

    - You are a developer of a programming language. Did you do something like this before?

    - Before that, I taught programming a lot and was engaged in academic work. It was a research activity on domain-specific languages ​​(DSL), essentially purely speculative, without users. Now everything is different: the general-purpose language, a bunch of users and tasks related to real-world development.

    - Why do you need all this at all?

    - This is quite an interesting engineering activity. It is unusual, with great dedication - if you manage to do something good, you get a big effect. Once and globally, what people write on has changed. When I started working on Kotlin, it was clear that this is potentially a product with a large number of users. The risk, of course, is high, but the motivation, in turn, is also high. This is interesting because the system is complex, involves a lot of different knowledge. These are probably the most important things: great effect and complex and interesting tasks.

    - This is all the motivation for the techie. In general, in life - why are you doing this? You could be, for example, a politician or anyone else.

    - The question is complicated. I chose a profession early enough. What I did then, what I liked then, was what I devoted a lot of time to. I liked programming at school, I programmed a lot, I went to study at the university. Then he quickly switched to teaching, doing it at first full time, about eight years, probably, then - in parallel with the programmer’s work and then finally switched to Kotlin’s development. I also tried to study science, computer science, but in the academic world I did not like it.

    - In the public consciousness, the development of a programming language is the very computer science.

    - Well, in the public consciousness often mixed concepts. The development of a programming language is an engineering job, computer science is the study of something new, some scientific novelty is needed here. To obtain a scientific result, it is necessary that the results be at least somehow measurable or proven. In the case of a programming language, it is extremely difficult to measure something commonly used. There are people who are engaged in the development of academic languages ​​- an incredible amount of scientific work has been written on Haskell, and it is specially built so that it can be used to prove theorems. In terms of language like Kotlin, theorem is extremely difficult to prove, because it is simply not for that. From the point of view of mathematics, mainstream languages ​​are very dirty, it is very difficult to formalize something there. People try, for this small versions of these languages ​​are made. And it turns out that those proofs that were written for these small versions may not work for the big ones. Not so long ago was raspiarennayaarticle Ross Tate and Nada Amin about the fact that the Scala and Java type systems are unsound. This is precisely due to the fact that the small models that were considered before did not take into account one important property of a real language.

    - What do you think about this?

    - It does not matter. Mainstream languages ​​are dirty because it just doesn't matter. Very few people suffer from the fact that there are no pure mainstream languages. This has no noticeable effect; people both used Java and will use it despite this article. Similar to Scala. For a long time it was not known, for example, whether the Java type system is soluble, whether it is possible to write a correct compiler - then it turned out that it was impossible. So what? Real programs can still be compiled. With the Scala type system, it was originally known that it was insoluble. But this is not important, because we still write programs with our hands, and we still do not write such strange programs that no modern compiler can compile.

    - What is important?

    - This is a very interesting psychological and philosophical question. Obviously, it is important for people not to be annoyed. For example, from the experience with Java: we know that if there are a lot of words to be repeated, then this is annoying. It can be seen that modern Java is excellent in the direction of enraging less. Kotlin was largely invented in the wake of the fact that some things were very enraged, and Java was not developed. You need to feel that the system does not really resist the way you want to express your thoughts. Here I have something in my head, I want to write something, and if I need to break through the programming language for this, it is painful. That is, if it is necessary to do it all the time, it is hard, if rarely, then it is normal. I think this is one of the most important emotional things.

    We are now seeing some polls that Kotlin is “one of the most favorite languages ​​on the planet, people who use Kotlin love him very much”. It is very nice. Why it happened so hard to say. Firstly, of course, there is the effect of HYIP, because the language is new, when a “new toy” appears, this in itself is like. But it seems that, indeed, Kotlin is not very enraged, that is, he has less resistance compared to other languages ​​when you implement on him what was born in your head. People obviously care how short or long they express their thoughts. It is important for them not to repeat the same thing many times. It is important how easy it is to read programs after they are written.

    The idea of ​​the readability of the code has long sprung up in the minds. There were several generations of programming languages ​​that were difficult to read. Probably the brightest of the later examples is Perl. And in the old days, for example, some APL is a very bright representative. Now more or less everyone agreed that reading a program is much more important than writing. By the way, the programs have become much bigger and more complicated than before, which also pushes this idea. I want to somehow deal with this complexity, to somehow contain it. Therefore, for example, many people hate boilerplate - the “obvious” code, in which there is nothing substantial, I want to skip it when reading, but bugs can still be hidden there.

    It is important for people to be able to reuse some structures in their programs. I don't want to write the same thing a thousand times. I really want to bring some general structures to the library. And the means of abstraction in programming languages ​​is always not enough to reuse everything. This is the law of being. Everything in the world can never be reused. But you can choose a class of things that occur frequently, and learn to reuse these things. Therefore, in Kotlin, for example, some abstractions have appeared that were not present in other mainstream languages, for example, the delegated property or inline functions as a structure in the language. Other languages ​​experiment with other abstractions. For example, Scala has an incredible number of abstractions, Haskell has a lot of abstractions that are not found anywhere else, etc. These are all attempts to do so

    These things are obviously important. Of course, people are still important and just the culture around them. If there is an ecosystem, there is a community, there is an opportunity to communicate with someone, get answers to your questions, there are libraries that are developing, some kind of infrastructure - it supports us very much, people feel that the system is alive, it is nice to be in it.

    - Do you somehow do something that supports culture?

    - We are trying very hard to work with the community, it’s pretty friendly here, people like to answer questions, suggest something to newcomers, discuss some complicated things. The community is alive, we use slake, there we have some incredible number of people - tens of thousands, it seems. Naturally, not all are active, but nonetheless. There are many active users who communicate with each other. We work with them - we answer questions ourselves, and we try to make sure that everything is civilized. We also help to organize user groups, they already seem to be under two hundred, if I'm not mistaken. This is also a very pleasant story, it’s cool to look at the user-group map, there are many places - from the biggest technical centers to countries I don’t know in Africa. We try to support active people in the community. If someone writes a lot of posts, makes some tutorials, writes libraries, we try to somehow highlight these people, support them, give them the opportunity to speak. We are holding our conferenceKotlinConf , people send their reports there, we select the most interesting ones. So we work quite actively with the community.

    - I understand correctly that you yourself also answer?

    - I do not answer very often, I do not always have enough time to follow this, but it happens that I answer. Sometimes we arrange some purposeful activities. Once there was a video engine , when we collected questions on Twitter and streamed the answers, I sat and answered questions. There was also a pretty successful “Ask me anything” on Reddit.

    “When we were looking for people who could talk about programming languages, libraries, etc., it turned out that the skill“ good programming ”and the skill“ good speaking ”are things that are not so common. How do you find and pick people for yourself? How should the person who should simultaneously think about the user and code should be?

    - Fortunately, such people need a limited number. It is clear that each developer must in some way think about users. In this sense, if a person programs very well, but programs something abstract from users, then we are unlikely to find a common language with him. To some extent, everyone should take care of the user. There are some small number of people who work a lot with users, that is, people who have such inclinations. This is not very connected with the ability to incendiaryly tell a long report; this is a slightly different activity. Generally speaking and writing are very different skills, and there are people who write with great pleasure detailed detailed clear texts and at the same time do not like to speak, because this is a different format of interaction. There are people who love both. This is my case but I like less to play with slides than to participate in some kind of lively dialogue. Luckily, on TechTrain I hadQ & A format : people asked me questions, and I answered. Because every time I give a report, I have a feeling that the structure of the slides that I had invented in advance is kind of wrong, here, according to this logic, the story would be worth a little different, but the slides are on the way not change, and it interferes.

    - The usual question: what pushed you to make the first report?

    - Now I will try to remember how it was. It is very simple to say when the first report about Kotlin was - we announced Kotlin at the JVM Language Summitin 2011, and there was the task to announce the project as loudly as possible. And we wanted to collect feedback from the experts. And just that year I went to do some first large public reports, these were my first speeches in English. That is, I was pushed solely by marketing need.

    - Are there any amazing observations from the reports? Something you didn't know about people?

    - Especially nothing surprising. Still, I taught a lot before, and in general, the basic things are clear. For example, not all people come to the report to learn something. I doubt that even half of the audience comes to really learn something. Many who come to talk with the speaker. For example, when a person is known for some reason, like me (“one of the creators of Kotlin”), people come to my report not because they want to know something about Kotlin, I ask some question, but simply because This is a report from a person they have heard about before. Some people come to show themselves, and this happens both constructively and not. Sometimes people who have come to show themselves ask very interesting questions. I'm not sure that they are aware of this, but what their task is - they want to perform somehow, they ask interesting questions because they have some thoughts. And sometimes you want to show yourself, but you couldn’t find an interesting question, then the questions turn out to be strange. Well, there are those who want to teach something to the speaker or all those present. Sometimes it is very funny when a person comes and, instead of asking questions, simply formulates his opinion, gives a whole speech.

    - Was there such a person who taught you something?

    - About "taught" is hard to say. Maybe it was, but I just did not remember. But it is clear that when people express some kind of opinion, it is usually representative - some group of people think so. In this sense, this opinion is always valuable. Another thing is whether it is valuable to express it in such a format - when you ask a question on a report - it is already difficult to say. But in general, any opinions, in particular, those that seem to me incorrect, are important, because what is important is not only what is actually true, but what people think. If someone has a chain of arguments in his head, even those that I can refute, it is important for me to know that it arises, and then I can interact with it. In principle, this is all useful. Another thing is that it is always presented in different ways.

    We had at an early stage, even when Kotlin did not release himself, there were all sorts of ridiculous conversations. Somehow we spoke with Stephen Colborn, and he argued with us a lot about the fact that writing types on the right after a colon is terrible, it is necessary to write types on the left. And it was clear to everyone who had at least a little immersed in tongues, that this is a point of waggards with blunt-tips - nothing, it doesn’t matter. Pascal was already popular, Scala - what difference does it make which type to write from. Where it is more convenient from the point of view of the structure of the rest of the language, there it is necessary to write. But there are people who believe that this is really very important, and are willing to spend a lot of energy to discuss it. This is strange, but you still have to formulate some arguments, because such a person is not alone, it didn’t just happen. Steve didn't just cling to it, and the rest didn’t care - no, there was a large enough group of people who thought it was important. About syntax is often the case. Programming languages ​​are quite complex, and not much of this area is easy to understand. And the syntax is clear, the syntax is simple. First of all, very many were taught how this all is formed, the university often has a course on formal grammars. Yes, even if I did not study, it’s all not very difficult to understand, and therefore there are a lot of opinions about the syntax. And there the further (execution time semantics, the type system, and so on), the fewer opinions, because it is difficult to understand. And this is a pity, because generally there is a lot of interesting things to discuss, but basically all the energy of discussions is dissipated somewhere in the area of ​​syntax, no matter how sad it is. there was a large enough group of people who thought it was important. About syntax is often the case. Programming languages ​​are quite complex, and not much of this area is easy to understand. And the syntax is clear, the syntax is simple. First of all, very many were taught how this all is formed, the university often has a course on formal grammars. Yes, even if I did not study, it’s all not very difficult to understand, and therefore there are a lot of opinions about the syntax. And there the further (execution time semantics, the type system, and so on), the fewer opinions, because it is difficult to understand. And this is a pity, because generally there is a lot of interesting things to discuss, but basically all the energy of discussions is dissipated somewhere in the area of ​​syntax, no matter how sad it is. there was a large enough group of people who thought it was important. About syntax is often the case. Programming languages ​​are quite complex, and not much of this area is easy to understand. And the syntax is clear, the syntax is simple. First of all, very many were taught how this all is formed, the university often has a course on formal grammars. Yes, even if I did not study, it’s all not very difficult to understand, and therefore there are a lot of opinions about the syntax. And there the further (execution time semantics, the type system, and so on), the fewer opinions, because it is difficult to understand. And this is a pity, because generally there is a lot of interesting things to discuss, but basically all the energy of discussions is dissipated somewhere in the area of ​​syntax, no matter how sad it is. Programming languages ​​are quite complex, and not much of this area is easy to understand. And the syntax is clear, the syntax is simple. First of all, very many were taught how this all is formed, the university often has a course on formal grammars. Yes, even if I did not study, it’s all not very difficult to understand, and therefore there are a lot of opinions about the syntax. And there the further (execution time semantics, the type system, and so on), the fewer opinions, because it is difficult to understand. And this is a pity, because generally there is a lot of interesting things to discuss, but basically all the energy of discussions is dissipated somewhere in the area of ​​syntax, no matter how sad it is. Programming languages ​​are quite complex, and not much of this area is easy to understand. And the syntax is clear, the syntax is simple. First of all, very many were taught how this all is formed, the university often has a course on formal grammars. Yes, even if I did not study, it’s all not very difficult to understand, and therefore there are a lot of opinions about the syntax. And there the further (execution time semantics, the type system, and so on), the fewer opinions, because it is difficult to understand. And this is a pity, because generally there is a lot of interesting things to discuss, but basically all the energy of discussions is dissipated somewhere in the area of ​​syntax, no matter how sad it is. As this is all formed, the university often has a course on formal grammars. Yes, even if I did not study, it’s all not very difficult to understand, and therefore there are a lot of opinions about the syntax. And there the further (execution time semantics, the type system, and so on), the fewer opinions, because it is difficult to understand. And this is a pity, because generally there is a lot of interesting things to discuss, but basically all the energy of discussions is dissipated somewhere in the area of ​​syntax, no matter how sad it is. As this is all formed, the university often has a course on formal grammars. Yes, even if I did not study, it’s all not very difficult to understand, and therefore there are a lot of opinions about the syntax. And there the further (execution time semantics, the type system, and so on), the fewer opinions, because it is difficult to understand. And this is a pity, because generally there is a lot of interesting things to discuss, but basically all the energy of discussions is dissipated somewhere in the area of ​​syntax, no matter how sad it is.

    - Everyone is discussing what they understand. Okay, go ahead. You work not alone, but in a team. Does the team also form some kind of a representative group?

    - Of course. We, of course, the opinions of people within the team play a big role in the development of the language. And the team is chosen so that the opinions are relevant. In general, JetBrains is a company that is very dependent on dogfudding. All of our products we actively dogfud (this is from the English expression "to eat your own dog's food" - if we do something, we use it ourselves). And Kotlin we also use themselves, and in the Kotlinov team, and beyond. Feedback from the inside comes the fastest. We must understand that we have a specific case. For example, we would really need some language features in the compiler that no one else needs.

    - Can you give an example?

    - There is such a global dispute about pattern matching. In functional programming languages, it is customary to have pattern matching, and in Kotlin it is not. There is only a fairly limited option. And at some point we consciously did not begin to do full. It was once designed, but we did not implement it. The feature is quite large, complex, and for an object-oriented programming language it is rather dirty. We looked at the complexity of the implementation of this feature, and decided to try not to do it and see what will happen. Have tried. It turned out, of course, that the compiler could be written more comfortably. And everything else - it seems that most users do not care. Of course, there is always a part of people who knows that there is pattern matching, and they really want to use it in those rare cases when it is relevant. But it seems that as always, 80+ percent of user cases do not require this feature. It's all pretty funny, because now Java is trying to look in the direction of patternmatching, and Brian Götz and I talked about this more than once. I tried to agitate him, that it is not necessary to complicate Java so much, and so everything is not easy in many places. But Brian says that people need patterning, he has his own arguments. I still do not really understand how weighty his arguments are. But now we have a chance that they will add this feature, we will see what they do and decide there. But Brian says that people need patterning, he has his own arguments. I still do not really understand how weighty his arguments are. But now we have a chance that they will add this feature, we will see what they do and decide there. But Brian says that people need patterning, he has his own arguments. I still do not really understand how weighty his arguments are. But now we have a chance that they will add this feature, we will see what they do and decide there.

    - If they add.

    - Well, it is very likely. Judging by how optimistic Brian is, I think they will add sooner or later. How long it will take, however, is not clear. It should be noted that in Kotlin it is not that there are any trace of pattern matching at all, there is something quite similar. Due to the fact that we have smartcasts, there is a when expression, there is a destructuring assignment. In general, a very large part of pattern-matching user cases is covered in the language. We with him are not able to do only complex things. And it seems that they can not be able to. But if it turns out that it is still very necessary, then it will become easier for us to write the compiler.

    - Can you tell a little about the team - how do you live?

    - We live a lot of fun. We are already very many. When we started, I was the only full time developer, but that was a long time ago, 8 years ago. Since then, we have grown a lot. We are already about 50 people, we are sitting in different offices. In St. Petersburg, most of all, but there are people in Munich, in Novosibirsk, perhaps, they will appear in Moscow. There are some isolated isolated people. There are several teams inside the project. We have a team that deals with the front end of the compiler and, as historically, the JVM backend. There is a javascript backend team, Kotlin / Native, a library team that deals with all libraries, an IDE team and another tulling, a build tool first, an incremental compilation, and so on. We have a fairly diverse profile, we do a lot of things, so there are a lot of coordination tasks: all teams need to,

    - How does it look like? You sit on top, God on Mount Olympus, and throw lightning bolts - “You do this, you do this, everything, you have diverged”?

    - No, this is of course not working. First, it is impossible to keep track of everything. I mainly do language design and some general strategic issues. This means that in some form different considerations come to me that someone who is in pain, I have some thoughts about our strategic line of development. We are trying to somehow combine it with the current capabilities, with the technical situation: what happened to us (or did not happen) in the compiler, and what hurts us in the infrastructure, where we have accumulated technical debt or something else. This is all you need to make up and decide what we are doing in the next big release. This is a collegial work, absolutely not in one head. We look at all this with such a group of persons: the language is designed by one subgroup of persons, the technical part is the intersecting, but not identical, subgroup there is still Q / A, which is quite powerful in order to understand what to look for, where we have problems, where it is not clear to the user - support and Q / A do it. And from all this diverse information we get a picture of where our priorities are and what we should pay attention to. In this sense, I am the person to whom they come to, if it turns out that it is not clear what to do. For example, it is necessary to choose between two incompatible reasonable strategies, this is already solved with my participation. And the design of the language on me is locked in the sense that the language must be logically consistent inside, all solutions must pass through any one head. Today is my head. And from all this diverse information we get a picture of where our priorities are and what we should pay attention to. In this sense, I am the person to whom they come to, if it turns out that it is not clear what to do. For example, it is necessary to choose between two incompatible reasonable strategies, this is already solved with my participation. And the design of the language on me is locked in the sense that the language must be logically consistent inside, all solutions must pass through any one head. Today is my head. And from all this diverse information we get a picture of where our priorities are and what we should pay attention to. In this sense, I am the person to whom they come to, if it turns out that it is not clear what to do. For example, it is necessary to choose between two incompatible reasonable strategies, this is already solved with my participation. And the design of the language on me is locked in the sense that the language must be logically consistent inside, all solutions must pass through any one head. Today is my head. And the design of the language on me is locked in the sense that the language must be logically consistent inside, all solutions must pass through any one head. Today is my head. And the design of the language on me is locked in the sense that the language must be logically consistent inside, all solutions must pass through any one head. Today is my head.

    - I want to clarify something. Many companies, especially enterprise and banking development, which, quite possibly, read us now as users of the language, are organized according to the principle of the army. What about you? This is the army, this is special forces, this is a set of writers - what is happening? Because when you look at YouTrack outside, you get a very strange view of the company - there are even some people there.

    - The company and the project are a little different conversations. JetBrains has projects with a completely different internal organization. Traditionally, sometime at dawn, JetBrains was a team of autonomous developers, each had some kind of responsibility area, and everyone in it more or less decided everything that happened: what to do, how to do it, communicated with users and so on. . And in some projects this model still dominates. The IDE is a very viable thing, at least, while the IDE is not huge yet. There are projects that work on Scrum, someone works in a vertical organization mode, where someone at the top decides how to do it. It is clear that there is still some independent activity there, but there is some more vertical structure. As for us, it is difficult to say where we are in this spectrum. We definitely do not have Scrum, we have a fairly lightweight process, which we eventually formalize more, because we have to coordinate more and more people - after all, 50 people are completely ad hoc difficult to coordinate. Now we are just trying to formalize our planning a little more, so that we understand more precisely when we are going to be in time, because teams sometimes cannot understand what priorities anyone has and some failures occur, fortunately, not very noticeable from the outside. .

    We have the following scheme: there are subcommands, subcommands have timlides, information flows through them. At the same time, a lot of things inside are solved independently, collectively. We mainly make important decisions by consensus. We usually talk until everyone comes to a more or less common opinion, only if it is not necessary to decide something very urgent. In this case, the decision can be made very quickly, abruptly: “we do this, we do not do this, we will discuss later” But this is very rare. Scientifically, this is probably called "synchronous organization."

    - Does work affect the balance of life?

    - Very influential. Work takes an enormous amount of time.

    - Does it turn out that you work 24 hours and sleep in the office?

    - I can not work 24 hours. Once upon a time in my youth I had a year when I worked about 80 hours a week. The following year, I decided that I would never work that way again, because it is physically very difficult. I have to monitor the distribution of work and personal time quite strongly, because otherwise I just get very tired, stop thinking and fall into a sad state. I work a fixed number of hours a day and consciously try not to work on weekends, in the evenings. In general, I try to spend time outside the office on other issues. In parallel, I have another project, a startup about the search for psychologists and psychotherapists . This is also a job, but different, and there is some allocated amount of time that I do.

    - Do you work after work?

    - No, I try to do everything in this order: on certain days I am engaged in one project, in others - another project. If you do it all in a row, then you can go crazy. It’s very hard to work for several hours on one thing and then several hours on another.

    - Regarding your second project: you are a developer, what does psychologists have to do with it?

    - Although I am a developer, but I do not cease to be a man? I have a feeling that the usefulness of psychotherapy is very much undervalued in modern society. People have already learned that going to the gym or to the pool is useful, many people have learned that it is useful to develop something else - someone reads books, someone trains applied rationality, something else. This is the development of various "organs", functions of the body. And you can develop that which is connected with awareness.

    It is difficult to briefly describe what a psychotherapist does. What interests me most is the translation of the decisions we make from the automatic mode (when I did something and I don’t know why, and didn’t know at all what I could do differently) to a more conscious one (when I did something, I I know why, I know that I could have done it differently, and I made the choice consciously).

    Disclaimer: it is physically impossible to make all decisions consciously. It is very good that we have some kind of automatic mechanisms, because otherwise you can just go crazy. Every time thinking your head about every thing you do is too much time and effort. But at the same time, being able to make those decisions that are important, make consciously, is very important, because it gives freedom. Freedom, from my point of view, is just the opportunity to make your own informed choice, and not to go along some kind of rails that are prescribed by culture, parents, traditions or something else. This is one of the things that, it seems to me, is a bit undervalued in modern advanced society, although the very value of such freedom to make your own decisions is. And a tool that is very useful for getting there is undervalued. And it seems to me

    I once thought that I would somehow advertise it all, but I was seized with conscience, because I’m starting to advertise it, and they will ask me where to find specialists who will work with us. At that time I did not have an answer to this question, and therefore I went to work on a project that helps me find such a specialist. It turned out that I’m not thinking about such things at all. I found like-minded people with whom we do this project.

    Now there are some other projects that are trying to do something like that. So we have everything for real: competition, excitement. I really believe in our project. We, it seems to me, stand out in that we pay attention to some things that are inconvenient to pay attention to from a business point of view, but it is very important from the point of view of result. We are committed to selecting the psychotherapists themselves at the entrance, very strictly, according to their professional characteristics. If you received a recommendation from us, then it will be a very well proven specialist, professional. We spent a lot of time to formulate the method of how to distinguish good specialists from not very good ones, we work with scientists from the Moscow research institute PI RAO. This technique is quite versatile, and we are confident that the specialists we offer, really good. In addition, we collect feedback and make sure that we no longer recommend those who do something wrong. This is exactly the part to which our colleagues from other projects pay little attention, you need to pay more. We are still trying to learn how to pick up automatically, which is quite interesting.

    In general, I believe that psychotherapy is useful, and therefore I try to make it more accessible.

    - What is the trigger? When should I go to psychotherapy?

    - There are two approaches to this issue. The first is when there is a feeling that something is not comfortable in the emotional sphere: I am sad all the time, the same emotional situation repeats itself, I get frustrated all the time when they say something to me, I have everything in a relationship with a partner time repeats the same thing - for example, such a circle a year long, etc. It makes sense to deal with such things with the therapist, because, firstly, it is very effective, you can quickly learn a lot of useful things, and secondly, these are things that are very difficult to realize yourself, even if it seems to me that I understand everything - 100%, that is not true. And the point is not that I am not smart enough to understand everything in myself, but that consciousness has limited possibilities for reflection:

    A psychotherapist in many ways acts as a mirror. He should not give you advice, one of his functions is to reflect, to give me the opportunity to truly see what is going on in my head. I will take all the decisions anyway, I will set all the priorities, but another person can help me to find out what is really going on there. It is important that this is just a professional, because, generally speaking, telling everything that is going on in my head, to some person who, in general, it is not clear how he will react to it, can make me unpleasant, do something that in the future it will affect me (or even tell someone else) - this is simply dangerous. Therefore, it is important to find a specialist who, firstly, works ecologically, and secondly, is bound by a non-disclosure obligation. This is very different from a friend or relative because with them I have some kind of relationship, and if I tell you something, it can affect this relationship. And in the case of a psychotherapist, no matter what I say, I’m not particularly risking anything.

    - It's like when you talk to the compiler.

    - Well, I don’t know, the compiler is very offended at me, but can not say anything in response, this is a little bit different.

    So, this was one reason to go to a psychotherapist - when there is some discomfort, something does not suit you, you want to improve something. Another reason - when you just want to develop (even when everything is in principle comfortable, everything is in order), it seems to me extremely useful to note some things that you do automatically. Here I am doing something that seemed to be important, but I do not know why. It doesn't seem to bother me, but if I find out why, and I get the freedom to make decisions at this place, I will be even better. This, in my opinion, is a good enough reason to go on psychotherapy.

    - How important is awareness in the work of the developer? I heard that now they have become Google as an almost semi-obligatory exercise in some test groups to do meditation or something else.

    - This is very interesting in terms of terminology. The word "awareness" means different things. There is a story about meditation or mindfulness, other practices of bodily awareness are very useful things in terms of managing attention, the ability to concentrate. It helps psychological comfort a little more - it helps to relax better, with easier stress, etc. This is closer to physical exercise, it is a question of rather low-level mechanisms in the brain, which allow you to train some attention control. People who strain the brain a lot certainly benefit because they train this place and may have more control over where the attention is directed and what proportions of energy are given to which field of consciousness. This is one story. Another story is a conscious choice, it is not the same.

    For example, in life there is a lot of controversy. It is clear that there is often no best opinion, therefore there are some disputes. And the fact how constructively the disputes go is directly dependent on the awareness of the participants. This is such an important part of the culture of communication: how we can share our personal opinion and objective reality - where there is something that I believe in, and where there is an external fact that proves something irrefutably. People often confuse it, and even in all sorts of psychotherapeutic groups and at trainings there are many wonderful exercises that are aimed at ensuring that a person shares that this is his opinion, and this is some kind of external reality. There are practices of non-judgmental communication, non-violent communication, I highly recommend.

    And another thing. Everyone has an intuition. It happens when you are sure that you need to do so. Why are you sure? It can be difficult to explain, and you need a certain awareness, rather high, to admit that you don’t know why you want it that way. You do not come up with any strange arguments, you do not try to overpower your opponent with pressure, force of character, but clearly articulate: “I don’t know why. It seems to me. And if you can justify why this is not necessary, then I will believe you, and if you also “think”, then we just have different intuitions, and none of us are more right. ” This is also very important. I think that, on the whole, such an opportunity to reflect and the opportunity to let go of your ego a little at work helps a lot. This is directly related to the awareness of motivation, with the ability to make an informed choice. You can separate your personal from the objective and the worker.

    - In the mode of not a psychologist, but an ordinary person, are there things in the surrounding life in which people behave super-unconsciously, and maybe you would like to somehow improve it?

    - By definition, most of the things that we do, we do unconsciously. There is a lot of work, and if you are aware, you can go crazy. In different books, this is called differently, but, roughly speaking, we have "fast brain" and "slow brain", "System 1" and "System 2". The bottom line is that there are automatic decision-making mechanisms that I am not aware of. They are fast, but they were formed without my will. I do not know how they turned out, I somehow grew up, learned something and unconsciously, implicitly learned it all. There is such a mechanism, implicit learning, which, in fact, forms all of this. And there is my slow brain, where I consciously, verbally, can think of something. This is a much looser system. Naturally, they are connected, so what I learned automatically influences my thinking, but I have much more freedom in thinking. But it is much more expensive. I do not have the opportunity to apply it everywhere, but where it’s important for me, I would like to use it. If you look around - everything that people do, in general, everything is unconsciously for a large share, and this is not always bad, but it is often a sign of some kind of lack of freedom: how we choose, what we should do, with whom we live and communicate, how we decide what is important or not important for us, everything depends on it very much. Many of the priorities that we set in life are dictated by culture. That is, some people, as a rule, for a very long time, have formed some kind of idea, which may be completely irrelevant today, and therefore I today make some choice that affects my whole life. We are not aware of all this and we think that to make such a choice is the same “natural”. I do not have the opportunity to apply it everywhere, but where it’s important for me, I would like to use it. If you look around - everything that people do, in general, everything is unconsciously for a large share, and this is not always bad, but it is often a sign of some kind of lack of freedom: how we choose, what we should do, with whom we live and communicate, how we decide what is important or not important for us, everything depends on it very much. Many of the priorities that we set in life are dictated by culture. That is, some people, as a rule, for a very long time, have formed some kind of idea, which may be completely irrelevant today, and therefore I today make some choice that affects my whole life. We are not aware of all this and we think that to make such a choice is the same “natural”. I do not have the opportunity to apply it everywhere, but where it’s important for me, I would like to use it. If you look around - everything that people do, in general, everything is unconsciously for a large share, and this is not always bad, but it is often a sign of some kind of lack of freedom: how we choose, what we should do, with whom we live and communicate, how we decide what is important or not important for us, everything depends on it very much. Many of the priorities that we set in life are dictated by culture. That is, some people, as a rule, for a very long time, have formed some kind of idea, which may be completely irrelevant today, and therefore I today make some choice that affects my whole life. We are not aware of all this and we think that to make such a choice is the same “natural”. If you look around - everything that people do, in general, everything is unconsciously for a large share, and this is not always bad, but it is often a sign of some kind of lack of freedom: how we choose, what we should do, with whom we live and communicate, how we decide what is important or not important for us, everything depends on it very much. Many of the priorities that we set in life are dictated by culture. That is, some people, as a rule, for a very long time, have formed some kind of idea, which may be completely irrelevant today, and therefore I today make some choice that affects my whole life. We are not aware of all this and we think that to make such a choice is the same “natural”. If you look around - everything that people do, in general, everything is unconsciously for a large share, and this is not always bad, but it is often a sign of some kind of lack of freedom: how we choose, what we should do, with whom we live and communicate, how we decide what is important or not important for us, everything depends on it very much. Many of the priorities that we set in life are dictated by culture. That is, some people, as a rule, for a very long time, have formed some kind of idea, which may be completely irrelevant today, and therefore I today make some choice that affects my whole life. We are not aware of all this and we think that to make such a choice is the same “natural”. with whom we live and communicate, how we decide what is important or not important for us, everything depends on it very much. Many of the priorities that we set in life are dictated by culture. That is, some people, as a rule, for a very long time, have formed some kind of idea, which may be completely irrelevant today, and therefore I today make some choice that affects my whole life. We are not aware of all this and we think that to make such a choice is the same “natural”. with whom we live and communicate, how we decide what is important or not important for us, everything depends on it very much. Many of the priorities that we set in life are dictated by culture. That is, some people, as a rule, for a very long time, have formed some kind of idea, which may be completely irrelevant today, and therefore I today make some choice that affects my whole life. We are not aware of all this and we think that to make such a choice is the same “natural”. which affects my whole life. We are not aware of all this and we think that to make such a choice is the same “natural”. which affects my whole life. We are not aware of all this and we think that to make such a choice is the same “natural”.

    - Are you on religion now?

    - I'm talking about everything in principle, why is it only about religion? For example, there are people who believe that by some age it is necessary to start a family. This age is different for different people, but I know quite a few people who believe that this should be done fairly early and for the rest of their lives. Why "need"? Why is it more important to start a family now than to understand how relations between people work in general? This is a common topic when you met a person, you fell in love with each other, everything is great, let's start a family right now, because fairy tales say that this is the most important thing you can achieve in life. To become a person, I “must” start a family, and hence the feeling that the sooner I do it, the better. But the sooner I do this, the worse it will usually be.

    Once there was a society in which everything was not so, in which no one was absolutely interested in how happy you were in marriage, marriage was a property relationship that was reasonably meaningful at that time. There were completely different ideas about happiness, about the function of the family, and then it was relevant. Since then, everything has changed. The way we evaluate today after creating a family, whether it turned out to be good or bad, has nothing to do with the way it was assessed by the people, who in some sense dictate to us that we need to do this as soon as possible. These people have become extinct long ago, and we still think that it is necessary to start a family as soon as possible and that the person who did not do this did not materialize. And it's not that you have to start a family late. You just have to think about why I am doing it now, what I can / cannot do, what are my risks, and make a conscious decision. It’s not because my upbringing puts pressure on me, the books I read, or the opinions of other people, my grandmother drips on your brain that you are 25 years old, and you still have no children, what a horror. You can have children at 21 and at 18 — the question is why I did it, how I made the decision.

    - Those things that people believe in, these often used delusions build a system. And when you try to change one piece, all the others are pulled too. For example, legal issues are related to family.

    - Yes, they are connected. Legal issues that are really related to the family do not affect everyone. For example, while there are no children, it is worth considering whether marriage is necessary. Someone needs, someone does not, depends on how you want to manage the property. If someone enters into marriage in order to have any legal possibilities, then always please, just explain to yourself that you are entering into a marriage for the sake of these legal possibilities, and not to tie your partner to yourself with a rope. This is a completely normal explanation. Any explanation that is true is normal. The main thing is not to deceive yourself.

    There are a lot of stereotypes about the family. For example, a very difficult question: is it good or bad to live with your parents? It is important that many people think about it in the category of “good or bad”, but in fact it is “useful or not useful,” you need to think about it. Or, for example, it is known about me that you can talk with me on the topic of whether our relations should be monogamous or non-monogamous. There is no universal answer for any person, but in culture there is, and this is a contradiction. In culture, it is believed that there must be relationships, and they must be monogamous. It is also believed that they must be heterosexual, and this is generally strange. But nowhere is it shown and proved that it really shouldbe. Relationships may not be, they may not be heterosexual, not monogamous, they can be arranged at all as you please, if people choose it consciously and act not to harm each other. Another thing is that some of this is convenient, something is not, something is useful or not. The question is how to choose. Not WHAT is chosen, but HOW.

    - By the way, you are also building a culture in Kotlin. Do you have one universal answer to everything?

    - Not. The issue of awareness of what we want a culture, we are not enough engaged, we need to work out more. Culture is built under the surface. At first, there were few of us, and we somehow communicated, we liked it, everything was fine. Then there were more of us, we began to grow faster, it became noticeable that different people communicate differently, something does not work, and I want some things to improve. We recently started trying trainings: with some external people, trainers work out different human skills, from communication to decision making. The team Kotlin tried only one training for team leads, it was interesting, I liked the result. It is good even as a team building, the opportunity to communicate. And there is a difference in how to communicate: you can drink beer, rub for life, and there is a way to communicate productively. I like the second option more. This does not mean, that it is not necessary to gab at dinner about anything, but from productive communication one can bear some results, there is something to think about - there is a post-effect. It was a good experience, we did it not so long ago, and I think we will do more. Culture is not built according to some model (“it should be like this”), it is produced from the inside. We have an idea of ​​how we are more comfortable and efficient, while talking to each other, we gradually synchronize it, and this is how some kind of culture is built. At the same time, elements of some ready-made solutions are brought outside, processed, thought out and implemented. Culture is not built according to some model (“it should be like this”), it is produced from the inside. We have an idea of ​​how we are more comfortable and efficient, while talking to each other, we gradually synchronize it, and this is how some kind of culture is built. At the same time, elements of some ready-made solutions are brought outside, processed, thought out and implemented. Culture is not built according to some model (“it should be like this”), it is produced from the inside. We have an idea of ​​how we are more comfortable and efficient, while talking to each other, we gradually synchronize it, and this is how some kind of culture is built. At the same time, elements of some ready-made solutions are brought outside, processed, thought out and implemented.

    - It would be funny to have a culture in which informed decisions are an important part of this culture.

    - Frankly speaking, I think that communication with me emphasizes this need a little, because I start to get rather nervous when I see that a person insists on something and cannot explain to me why. I begin to worry that a person, based on these incomprehensible considerations, will continue to make decisions, and suddenly he will be blown into a strange place by the wind - and what will we do then? Therefore, when I argue with someone, I often ask questions “Why do you think so? Explain! ”

    “The brain is very smart, even in its current state it can complete the picture“ why do you think so. ”

    - Yes, there is such a thing as rationalization. I have some kind of intuitive feeling that I’m supposed to do this, and I can further explain with a very intelligent look why, fitting the arguments to the answer.

    - For example, what to write types on the left.

    - Yes Yes. And this is exactly the case when it would be nice to share "I just like it" and "there are objective reasons to think so."

    It is also important to be able to admit your mistakes. Say: yes, it just seemed to me, I'm wrong. The logic helps in this. If I say: “We need A, because C”, and someone said to me: “Listen, no, something A should not come from B,” then I can look and see that yes, indeed, it does not follow. Such a moment of insight can happen. I said something, it seemed to me that it was ironic, and then it turned out that it wasn’t, it’s not irony, and it’s possible that it’s not even so.

    Naturally, there are social effects. Anyone who must admit his mistake must be sufficiently confident that his social status will not diminish from this. In general, it can often even improve, but it seems intuitively that this is terrible, if I was wrong, I will be less respected. It works not only in the Kotlinov team, not only among engineers, it works among all people in principle. People are very irrationally worried about their social status, therefore, it is difficult to admit mistakes. But if people around you work with you in the same bundle, and these are thinking people, then the fact that you are able to admit mistakes, increases your contractual capacity, confidence in you increases, and in general, it causes respect - the person is clearly quite sure of himself if he can admit: "I just said bullshit, no, it's not like that."

    - But it needs some kind of self-testing procedure. Lists of cognitive distortion.

    - Yes, it does not work, you can train in different ways. I am generally a big bore. When I, a long time ago, I became acquainted with some, say, laws of logic, I really liked them, and I often apply them. Apparently, there are many such engineers among engineers, because people often cling to every little thing that is not even important in a conversation. Sometimes it just slows down communication with no visible result, but in principle, it is a good tool. There are others, for example, the very lists of cognitive distortions - this is quite an interesting tool that can hone your reflection mechanism. But it’s very important if you tell someone else that he was wrong, to do it politely, correctly, not to attack, because, of course, it’s important to admit mistakes, but when others gloat, it’s very unpleasant.

    - Especially if this is some kind of scrum-rally and 15 people are showing you.

    - Yes, the more a person shows, the more unpleasant. The greater the social mass of disapproval, the more unpleasant it is. Therefore, it is very important that when we communicate, we do it correctly.

    - Can you wish anything / advise our readers on Habré?

    - I really wish all people to make decisions freely, both at work and in life. And I think that “free” means, as a rule, consciously.

    - Thank you very much!

    Even more about how the “one day in the life of a programming language designer” looks like, Andrei will tell on October 19 at our Joker conference. And after speaking in the discussion area, it will be possible to clarify everything that is of interest, so the format “people ask questions” will also be close to Andrei.

    Also popular now: