What is Kotlin doing: an interview with Andrei Breslav
There is no shortage of technical materials about Kotlin, it is possible to learn a lot about where or where corundines or nullability can be found. But there remains much less lit the other side: how does the process of language development in general 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 be released, we asked "the most important" Andrei Breslav not about korutiny, but about something completely different: from what he was doing to Kotlin, before psychotherapy is useful.
article Ross Tate and Nada Amin about the fact that the systems of types Scala and Java are unsound. This is due to the fact that the small models that were considered before did not take into account one important property of the real language.
- And what do you think about this?
- It does not matter. Mainstream languages are dirty because it's just not important. Very few people suffer from the fact that there are no pure mainstream languages. This has no noticeable effect, people like using Java, and will use it, despite this article. Similarly with the Rock. For a long time it was not known, for example, whether the Java type system is solvable, whether it is possible to write the correct compiler - then it turned out that it is impossible. So what? You can still compile real programs. With the system of Rock types it was initially known that it is insoluble. But this is not important, because we are still writing programs with our hands, and we still do not write such strange programs that no modern compiler can compile.
- And what is important?
- This is a very interesting psychological and philosophical question. Obviously, it's important for people that they do not get irritated. For example, from the experience with Djava: we know that if you have to repeat a lot of words, then it hurts. It can be seen that modern Java is doing well in order to infuriate less. Kotlin in many ways was invented on the wave of the fact that some things were very infuriating, but Java did not develop. You need to feel that the system is not very resistant to how 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's excruciating. That is, if it needs to be done constantly, it's hard, if it's rare, then it's fine. I think this is one of the important emotional things.
We are now seeing some surveys, according to which Kotlin is "one of the most beloved languages on the planet, people who use Kotlin, love him very much". It is very nice. Why it happened, it's hard to say. Firstly, of course there is a HYIP effect, because the language is new, when a "new toy" appears, this in itself is like. But it seems that, indeed, Kotlin is not very angry, that is, he resists less than other languages when he realizes on it what was born in your head. People clearly care about 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 convenient it is to read programs after they are written.
The idea of readability of the code for quite a long time sprouted in the minds. There were several generations of programming languages that were difficult to read. Perhaps the most striking of the late 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 more important than writing. By the way, the programs have become much bigger and more complex than before, which also pushes this idea. I want to somehow fight this complexity, somehow restrain it. Therefore, for example, many hate boilerplate - "obvious" code, in which there is nothing meaningful, I want to skip it when reading, but there still can hide bugs.
It is important for people to be able to reuse some structures in their programs. I do not want to write the same thing a thousand times. I really want to put some general structure in the library. And the means of abstraction in programming languages is always not enough to re-use everything in the world. This is the law of being. Everything in the world can never be re-used. But you can choose a class of things that are often found, and learn how to re-use these things. Therefore, in Kotlin, for example, some abstractions appeared, which in the other mainstream languages did not exist before, for example, 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 many abstractions that are not found anywhere else, etc. It's all trying to make sure that some things can be reused, so that what I once did, I then came in handy many times.
These things are clearly 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 other infrastructure is very strong, people feel that the system is alive, it is nice to be there.
- Do you somehow do that you support culture?
- We try very hard to work with the community, it's quite friendly, people like to answer questions, suggest something to newcomers, discuss some complicated things. Community is alive, we use slack, there we have some incredible number of people - tens of thousands, it seems. Naturally, not all are active, but nevertheless. There are many active users who communicate with each other. We work with them - we answer the questions ourselves, and we try to make sure that everything is civilized. We also help 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 great to look at the user group's map, there are a lot of them - from the biggest technical centers to the countries unknown to me in Africa. We try to support active people in the community. If someone writes many posts, does some tutorials, writes libraries, we try to illuminate these people somehow, support them, give them an opportunity to speak. We are holding our conference KotlinConf , people send their reports there, we select the most interesting. So with the community we are working quite actively.
"Do I understand correctly that you yourself are also responding?"
- 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 was videojouter when we collected questions on Twitter and streamed the answers, I sat and answered questions. Still there was a pretty successful "Ask me anything" on Reddit.
- When we were looking for people who can talk about programming languages, libraries, etc., it turned out that the skill "to program well" and the skill to "tell good" are things that are not so common. How do you find and select people for yourself? How should the person who is supposed to think about the user at the same time, and how to code?
- Fortunately, such people need a limited number. It is clear that every developer should to some extent think about users. In this sense, if a person is very good at programming, but programming something abstract from users, then we are unlikely to find a common language. To some extent, everyone should take care of the user. There are some small number of people who work very hard with users, that is, people who have such inclinations. This is not very related to the ability to incendiaryly tell a long report, it's a little different activity. Generally speaking and writing are very different skills, and there are people who write with great pleasure detailed good understandable 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 just my case, but I much less like to speak with slides than to participate in some kind of live dialogue. On TechTrain, here I, fortunately, had format Q & A : people asked me questions, and I answered. Because every time I make a presentation, I have a feeling that the structure of the slide, which I invented in advance, it is somehow incorrect, here, according to this logic, the story would have to be turned slightly differently, but the slides are on the way you will not change, and it hinders.
- The usual question: what prompted you to make the first report?
- Now I'll try to remember how it was. It's very simple to say when the first report was about Kotlin - we announced Kotlin at JVM Language Summit in 201? and there was a task to declare the project as loud as possible. And we wanted to collect feedback from specialists. And just that year I went to do a few first major public reports, these were my first speeches in English. That is, I was pushed solely by marketing necessity.
- Are there any amazing observations from the reports? Something you did not know about people?
- There is nothing surprising. Still, I taught before that a lot, and in general the main things are clear. For example, not all people come to the report to find out anything. I doubt that even half of the audience comes to really learn something. Many people come to talk with the speaker. For example, when a person for some reason is known, like me ("one of the creators of Kotlin"), people come to my report not because they want to know something about Kotlin, I have a question to ask, but simply because this is the report of the person they heard about before. Some people come to show themselves, and this happens both constructively and not. Sometimes people who came to show themselves ask very interesting questions. I'm not sure that they realize this, but what is their task - they want to do something, ask interesting questions, because they have some considerations. And sometimes I want to show myself, but it did not work out 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, pronounces a whole speech.
- Was there a person who taught you something?
- About "taught" it's hard to say. Maybe it was, but I just do not remember. But it is clear that when people express an opinion, it is usually representative, as some group thinks. In this sense, such an opinion is always valuable. It's another matter whether it's valuable to express it in this format - when you ask a question on the report - it's already hard to say. But generally any opinions, in particular those that seem to me incorrect, are important, because it is important not only what is really true, but what people think. If someone has a chain of arguments in my 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, it's all useful. It's another matter that this is always presented in different ways.
At our early stage, even when Kotlin was not unreleased, there were all kinds of ridiculous conversations. Once we talked with Stephen Colborn, and he argued with us a lot about writing types on the right after the colon - it's awful, you have to write types on the left. And to everyone who even plunged into languages a little, it was clear that this is a dispute between spikers and stupidists - about anything, this is not a matter of principle. Pascal, Scala have already been popular - what difference does it make which type to write. Where it is more convenient from the point of view of the structure of the rest of the language, one must write there. 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 all the same you have to formulate some arguments, because such a person is not alone, it's not just that it took. Steve did not just grab it, but the rest did not care - no, there was a large enough group of people who thought it was important. About the syntax this often happens. Programming languages are a rather complicated thing, and not much of what is easily understood from this field. And about the syntax is understandable, the syntax is easy. First, many people were taught how it all forms, at the university there is often a course about formal grammars. Yes, even if I did not study, it's not very difficult to understand, and therefore about the sintaXris a lot of opinions. And then the further (semantics of execution time, type system and so on), the less opinions, because it is difficult to understand. And it's a pity, because in general there is a lot of interesting things to discuss here, but basically all the energy of discussions is scattered somewhere in the syntax area, no matter how sorry.
- Everyone is discussing what they understand. Okay, let's go further. You work not alone, but in a team. Does the team also form some kind of representative group?
- Of course. 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 such company which very strongly depends on dogfendinga. We will actively dogfood all our products (this is from the English expression «to eat your own dog's food» .- if we do something, we use it ourselves). And we also use Kotlin ourselves, in the Kotlinov team, and beyond. Feedback from the inside comes the fastest. It is necessary to understand that we have a special code. For example, we would be useful in the compiler for some language features that no one else needs.
- Can you give an example?
- There is such a global dispute about the patterning. In functional programming languages, it is customary to have patterning, but in Kotlin it does not exist. There is only a fairly limited option. And we at some point deliberately did not do full. It was once designed, but we did not realize it. The feature is large enough, complex, for the object-oriented programming language is rather dirty. We looked at the complexity of how much the implementation of this feature is worth, 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 and more conveniently. And everything else - it seems that most users do not care. Of course, there is always a part of people who know that there is patterning, and they really want to use it in those rare cases when it is relevant. But it seems that, as always, 80+ percent of users do not require this feature. This is all quite amusing, because now Java is trying to look towards patterning, and Brian Goetz and I talked about this more than once. I tried to agitate him, that it is not necessary to complicate Djava so much, and so everything is not easy in many places. But Brian says that people need patterning, he has some arguments. I do not quite understand yet how much his arguments are weighty. But we now have a chance that they will add this feature, we'll see what they will get, and we'll decide.
- If you add.
"Well, that's very likely." Judging by how much Bryan is optimistic, I think, sooner or later will add. How long it will take, though, is unclear. It should be noted that in Kotlin, not that there are no traces of patterning, there is something quite similar. Due to the fact that we have smartcasts, there is when expression, there is a destructuring assignment. In general, a very large part of the patterns of patterning is covered in the language. We do not know how to do only complex things. And it looks like they can not be able to. But if it turns out that after all it is very necessary, then it becomes easier for us to write the compiler.
- Can you tell us a bit about the team - how do you live?
- We live a lot of fun. We already have a lot. When we started, I was the only full time developer, but it was a long time ago, 8 years ago. Since then we have grown strongly. 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, will appear in Moscow. There are still some isolated remote people. Inside the project there are several teams. We have a team that deals with the frontend of the compiler and, historically, the JVM backend. There is a command of a jаvascript backend, Kotlin /Native, a library team that deals with all libraries, there is an IDE and another tuling team, build-tula first of all, incremental compilation and so on. We have a fairly diverse profile, we do a lot of things, so there are so many coordination tasks: it is necessary that all teams doing different things get together at the same point and give something useful.
"How does it look?" You sit on top, God on Olympus, and you shoot the lightning - "Do you do this, you do it, everything is gone"?
- No, this, of course, does not work. First, you can not follow everything. Basically, I'm engaged in the design of the language and some social and political issues. This means that to me in some form get different considerations about who is hurting, I have some thoughts about our strategic line of development. We are trying to somehow combine this with the current possibilities, with the technical situation: what happened (or did not happen) in the compiler, and what hurts us over the infrastructure, where we have a technical debt or something else. It's all necessary 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 people: the design of the language is dealt with by one subgroup of persons, the technical part is the intersecting but not coincident subgroup of persons, there is also Q /A, which helps quite enough to understand what needs to be paid attention, where we have problems where the user is not clear - this is done by support and Q /A. And from all this diverse information we have a picture of where we have priorities and what we need to pay attention to. I am in this sense the person to whom they come, if it turns out that it is unclear what to do. For example, it is necessary to choose between two incompatible reasonable strategies, this is already being decided with my participation. And the design of the language on me closes in the sense that the language must be internally logically coordinated, all decisions must go through some one head. Today, this 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? It's an army, it's special forces, it's a set of resellers - what's going on? Because when you look at YouTrack from the outside, you get a very strange view on the company - there are even some people there.
- The company and the project are a bit different conversations. In the company JetBrains there are projects with completely different internal organization. Traditionally, once at the dawn, JetBrains was a team of autonomous developers, each had a zone of responsibility, and everyone in it more or less decided everything that would happen: what to do, how to do it, talked to users and so on . And in some projects this model still dominates. In the IDE, this is a very viable thing, at least until the IDE is huge. There are projects that work on Scrum, someone works in a vertical organization, where someone at the top decides how to do it. It is clear that there is some kind of independent activity there, but there is some more vertical construction. As for us, it's hard to say where we are in this spectrum. We certainly 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 quite ad hoc difficult to coordinate. Now we are just trying to formalize our planning a little more, so that we will more accurately understand when we are going to be in time, because the teams sometimes can not understand what priorities are at what, and there are some failures, fortunately, not yet very noticeable outside .
We have the following scheme: there are subcommands, subcommands have timlids, information goes through them. At the same time, a lot of things are solved internally, collectively. We mainly adopt important decisions by consensus. Usually we talk until everyone comes to a more or less common opinion, only if there is no need to solve something very urgent. In this case, the decision can be made very quickly, it is urgent: "we do it, we do not do it, we will discuss later." But this happens very rarely. In scientific terms, this is probably called "synchronous organization."
- Does the work affect the way of life?
"Very influential." The work takes a huge amount of time.
- Is it not 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 somewhere 80 hours a week. The next year I decided that I would never again work this way, because it is physically very hard. I have to keep a close watch on the distribution of working and personal time, 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. Generally I try to devote time outside the office to other issues. I have another project in parallel, 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 - with another project. If you do this all in a row, then you can go crazy. To work for several hours over something one, and then several hours at once over another is very difficult.
- In occasion of your second project: you the developer, at what here psychologists?
- Although I am a developer, but I do not cease to be human? I have a feeling that the utility of psychotherapy is very much underestimated in modern society. People have already learned that going to a gym or swimming 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 development of different "organs", functions of the body. And you can develop something that is connected with awareness.
It is difficult to describe briefly what the psychotherapist is doing. I'm most interested in translating the solutions we accept from the automatic mode (when I did something and I do not know why, and I did not know what I could do differently) into a more conscious one (when I did something, I I know why, I know that I could have done it differently, and the choice was made consciously).
Disclaimer: it is physically impossible to take all decisions consciously. It's very good that we have some kind of automatic mechanisms, because otherwise you can just go crazy. Every time you think with your head about every thing you do, it's too much time and effort. But at the same time to be able to make those decisions that are important, take consciously, it is very important, because it gives freedom. Freedom, from my point of view, is just an opportunity to make your own conscious choice, and not to go on some rails that are prescribed by culture, parents, traditions or something else. This is one of the things that, it seems to me, is slightly underestimated in the modern advanced society, although the very value of this freedom of making its own decisions is. And the tool, which is very useful for getting there, is underestimated. And it seems to me that it is worthwhile to somehow promote this idea to the masses.
I once thought that I would somehow re-advertised this all, but I got stuck with conscience, because I'm starting to advertise it, and I will be asked where you can find specialists who will work with us. I did not have an answer to this question at that time, and therefore I went to work on a project that helps me find such a specialist. It turned out that I'm not alone in thinking about such things. I found like-minded people with whom we together make 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 uncomfortable from the point of view of business, but it is very important from the point of view of the result. We are engaged in the fact that at the entrance we select the psychotherapists themselves, very strictly, according to their professional characteristics. If you received a recommendation from us, then it will be a very well-tested specialist, a professional. We spent a lot of time to formulate a methodology how to distinguish good specialists from not very good ones, we work with scientists from the Moscow Research Institute of PI RAO. This method is quite versatile, and we are sure that the specialists we offer are really good. In addition, we collect feedback and make sure that we do not recommend those who do something wrong. This is exactly the part that our colleagues from other projects pay little attention to, we need to pay more. We are still trying to learn how to select automatically, which is quite interesting.
In general, I believe that psychotherapy is useful, and therefore I try to make it more accessible.
"What trigger?" When should I go to psychotherapy?
- There are two approaches to this issue. The first is when there is a feeling that something does not suit you in the emotional sphere: I'm always sad, I have the same emotional situation, I get upset all the time when they say something to me, I have everything in my relationship with a partner time repeats the same thing - for example, such a circle of length in a year, etc. In such things, it makes sense to deal 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 understand for yourself, even if it seems to me that I understand everything - 100%, that this is not true. And it's not that I'm not smart enough to understand everything in myself, but that consciousness has limited possibilities of reflection: we use the same instrument called "brain" to study the same instrument - physically the same, not the same, but the same.
And the therapist in many respects 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. All decisions will still be made by me, I will set all the priorities, but another person can help me find out what is really going on there. It is important that it is just a professional, because, generally speaking, telling everything that is in my head is going on, to some person who does not understand how this will react, it can make me uncomfortable, do something, that in the future it will affect me (or even someone else will tell) - it's just dangerous. Therefore, it is important to find a specialist who, firstly, works environmentally, and secondly, is bound by the non-disclosure. This is very different from a friend or relative, because I have some kind of relationship with them, and if I tell anything, it can affect these relationships. And in the case of a psychotherapist, whatever I say, I do not take much risk.
- It's like when you talk to a compiler.
- Well, I do not know, the compiler is very upset with me, but can not say anything in response, it's already 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 want to just evolve (even when in principle everything is comfortable, everything is in order), it seems to me, it is very useful to ponder some things that you do automatically. Here I am doing something that seems to be important, but I do not know why. It does not seem to bother me, but if I find out why, and I get freedom to make decisions in this place, I'll be even steeper. This, in my opinion, is a good enough reason to go to psychotherapy.
- How important is awareness in the developer's work? I've heard that in Google now, as an almost compulsory exercise in some test groups, meditation or something else has been started.
- This is very interesting from the point of view of terminology. The word "mindfulness" denotes different things. There is a story about meditation or mindfulness, other practices of bodily awareness are very useful in terms of attention management, concentration skills. It still helps a little the psychological comfort - it helps to relax better, with stress easier, etc. It's closer to physical exercise, it's about fairly low-level mechanisms in the brain that allow you to train some control of attention. People who stress the brain a lot, certainly benefit from training this place and can have more control over where attention is directed and what proportions of energy are given to which sphere of consciousness activity. This is one story. Another story is a conscious choice, it's not the same. A conscious choice - a thing is also quite useful not only in the work of an engineer, but also wherever decisions need to be taken.
For example, there are many disputes in life. It is clear that often there is no best opinion, so there are some disputes. And the extent to which constructive disputes are taking place directly depends on the participants' awareness. This is such an important part of the culture of communication: how do we know how to share our personal opinion and objective reality-where is something that I believe in, and where there is an external fact that irrefutably proves something. People often confuse this, and even in all psychotherapeutic groups and at trainings, there are many wonderful exercises that are aimed at making people share that this is his opinion, but this is some kind of external reality. There are practices of non-price communication, non-violent communication, 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, high enough to admit that you do not know why you want it so. Do not think up any strange arguments, do not try to overpower your opponent with pressure, strength of character, and clearly articulate: "I do not know why this is so. It seems so to me. And if you can justify why it is not necessary, then I'll believe you, and if you also "think", then we just have different intuitions, and none of us is more right. " This is also very important. I think that in general, such an opportunity to reflect and the opportunity to let go of your ego in your 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 regime of not a psychologist, but an ordinary person, are there things in the surrounding life in which people behave super-unconsciously, and you, maybe, would like to improve it somehow?
- By definition, most of the things that we do, we do unconsciously. There are a lot of things, and if everything is realized, you can go crazy. In different books this is called in different ways, but, roughly speaking, we have "fast brain" and "slow brain", "System 1" and "System 2". The bottom line is that there are mechanisms for automatic decision making, which I do not realize. 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 this all. There is such a mechanism, implicit learning, which, in fact, it all shapes. And there is my slow brain, where I consciously, verbally I can think something. This is a much freer system. They are naturally connected, therefore what I learned automatically affects my thinking, but I have much more freedom in thinking. But this is much more costly. I do not have the ability to apply this everywhere, but where I care, I would like to apply it. If you look around - everything that people do, everything in general, it's a big part unconsciously, and it's not always bad, but it's often a sign of some kind of lack of freedom: how we choose, what we do, with whom we live and communicate, how we decide what is important or not important for us, it all depends very much on it. Very many 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 representation that can be absolutely irrelevant today, and therefore I am making some choice today that affects my whole life. We do not realize all this and we think that it is "natural" to make such a choice.
"Are you talking about religion now?"
- I'm talking about everything in principle, why only about religion? For example, there are people who believe that by some age it is necessary to create a family. This age is different for different people, but I know a lot of people who think that it needs to be done early enough and for life. Why "should"? Why is it more important to start a family now than to understand how people work in general? This is a common topic, when you met a man, you fell in love, everything is great, let's create a family right now, because in fairy tales it is written that this is the most important thing that you can achieve in life. To take place as a person, I "must" start a family, and from here the feeling that the sooner I do it, the better. But the sooner I do it, so, as a rule, it will get worse.
Once there was a society in which everything was not so, in which nobody was interested at all, how happy you were in marriage, marriage - it was property relations, sufficiently meaningful at that time. There were completely different ideas about happiness, about the functions of the family, and then it was relevant. Since then everything has changed. The way we evaluate today after the creation of a family, it turned out to be good or bad, it has nothing to do with how people evaluated it, which in some sense dictate that we need to do this as soon as possible. These people have long been extinct, and we still think that we need to quickly create a family and that a person who did not do this was not realized. And it's not that you have to start a family late. You just need to think about why I'm doing it now, that I can /do not know how, what risks I have, and consciously make a decision. Not because I'm under pressure from my upbringing, the books I read, or the opinions of other people, my grandmother is dripping to the brain, that you are 25 years old, and you still do not have children, what a horror. You can have children at 21 and 18 years old - the question is why I did it, how I made the decision.
- Those things that people believe in, these often used misconceptions build a system. And when you try to change one piece, all the others also stretch. For example, legal issues are connected with the family.
- Yes, they are. Legal issues that are really related to the family, do not affect everyone. For example, as long as there are no children, it is worth considering whether a marriage is needed. Someone needs someone, some do not, depends on how you want to manage property. If someone marries in order to have some legal opportunities, then always, just explain to yourself that you are marrying for these legal opportunities, and not to tie a partner to yourself with a rope. This is a perfectly normal explanation. Any explanation that is true is normal. The main thing is not to deceive yourself.
About the family a lot of stereotypes. For example, a very difficult question: is it good or bad to live with parents? It is important that very many people think about it in the category of "good or bad," but in fact it is "useful or not useful", one should think about this. Or, for example, I know about me that you can talk with me about whether our relations are 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 relations, and they must be monogamous. It is also believed that they should be heterosexual, and it's generally strange. But nowhere is it shown and proven that it's so real should be. There can be no relationship, they may not be heterosexual, not monogamous, they can be arranged in any way, if people choose it consciously and do not act harmfully to each other. Another thing is that something of this is convenient, something is not there, 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?
- No. The question of realizing what kind of culture we want is not enough, we have to study more. Culture is built in the background. At first, we were few, and we somehow communicated, we liked it, everything was fine. Then we became more, we began to grow faster, it became apparent that different people communicate differently, something does not work, and I want to improve things. We recently began to try trainings: with some external people trainers we practice different human skills, from communication to decision-making. In the team, Kotlin tried only one training for team-leaders, it was interesting, I liked the result. This is good even as a team building, an opportunity to talk. And there is a difference how to communicate: you can drink beer, you can rub your life, but there is a way to communicate productively. The second option I like more. This does not mean that you do not need to fret over dinner about anything, but from productive communication you can make some sort of 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 on a model ("it is necessary like this"), it is developed from within. We have an idea of how we are more comfortable and effective, we are talking with each other, we gradually synchronize it, and so some kind of culture is being built. At the same time, elements of some ready-made solutions are brought from the outside, processed, thought through and embodied.
- It would be funny to have a culture in which conscious decisions are an important part of this culture.
- I honestly think that communication with me a little emphasizes such a need, because I start to get pretty nervous when I see that a person insists on something and can not explain to me why. I'm starting to worry that the person, based on these strange reasons, will continue to make decisions, and then suddenly blows it into a strange place - 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 clever, it can even finish the picture" why do you think so? "Even in the current state.
- Yes, there is such a thing as rationalization. I have some kind of intuitive feeling that I have to do this and I can further explain with a very intelligent kind of why, adjusting the arguments under the answer.
- For example, that you need to write types on the left.
- Yes Yes. And this is just the case when it is good to separate "I just like it" and "there are objective reasons to think so."
It is also important to be able to recognize your mistakes. To say: yes, it just seemed to me, I'm wrong. Logic in this helps. If I say, "We need A, because B", and someone told me this: "Listen, no, something A of B does not follow", then I can look and see that yes, indeed, do not do it. Such a moment of insight can happen. I said something, it seemed to me that it was so iron, and then it turned out that no, it was not iron, and maybe even not so.
Naturally, there are social effects. Anyone who must admit his mistake must be fairly confident that his social status will not go down from it. In general, it can often even rise, but it seems intuitively that it's terrible, if I was not right - I will be less respected. This works not only in Kotlin's team, not only among engineers, it works among all people in principle. People are very irrationally worried about their social status, so it is difficult to admit mistakes. But if people around work with you in one bundle, and these are thinking people, the fact that you know how to admit mistakes, increases your contractual capacity, trust grows to you, and in general, it causes respect - a person is clearly quite strong in himself, if he can admit: "I just said garbage, no, it's not like that." Whenever I understand that I said something wrong, and someone else disproved or convinced me, I try to say out loud that he is right, but I do not.
- But it needs some kind of self-test procedure. Lists of cognitive distortions.
- Yes, it does not work, you can train in different ways. I'm a big bore. When I, a very long time ago, became acquainted with some, say, laws of logic, they really liked me, and I often apply them. Apparently, among the engineers there are a lot of such people, because people often cling to every little thing that is not even important in the conversation. Sometimes it just slows down the communication without a visible result, but in principle, it's a good tool. There are others, for example, those same lists of cognitive distortions - this is quite an interesting tool that you can sharpen your mechanism of reflection. But it is very important, if you tell someone that he made a mistake, do it politely, correctly, do not attack, because, of course, it is important to recognize mistakes, but when others gloat - it's very unpleasant. And the next time to recognize the mistake will be much more difficult.
"Especially if it's some kind of scram-meeting and 15 people show you."
- Yes, the more a person shows, the more unpleasant. The more 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 /advise our readers on Habr?
- I very much wish all people to make decisions freely, both at work and in life. And I believe that "freely" means, as a rule, consciously.
- Thank you very much!
Even more about what "one day from the life of a programming language designer" looks like, Andrei will tell October 19 at our Joker conference. And after the speech in the discussion area, it will be possible to clarify everything that is of interest, so the format close to Andrei "people ask questions" will also be.
It may be interesting
Thankyou for sharing the data which is beneficial for me and others likewise to see.Gulf Coast Western Reviews