"High level of self-discipline." Jeffrey Richter on how to code, write books and create your own companies
Today in our virtual studio one of the most famous dotnetchikov - Jeffrey Richter .
He is currently Partner Software Architect at Microsoft, working in Distributed Cloud Apps & Storage. In other words, a person who knows everything about Azure Storage.
Too much text. What is it all about?
To make it more fun to read, for this article, we came up with a more interesting layout. On the left will be talking heads, and on the right - the text. If you are sad to flip through to the part of interest, then there are anchor links in the table of contents. Starring:
Eugene phillennium Trifonov ( non-technical issues )
Олег olegchir Чирухин (технические вопросы)
Только для тех, кому интересно мнение архитектора Azure относительно JS и его позиция в холиваре о типобезопасности. Этот холивар перетекает у нас из интервью в интервью, и конца ему не видно.
Why did this article get into the C ++ hub?
Изначально Рихтер писал книги про C++. Только для тех, кому интересно мнение архитектора Azure относительно будущего и применимости C++
Jeff became known in the early 90s when he wrote a book on how to program Windows 3.1. His book Programming Applications for Microsoft Windows became a classic, later published as Windows via C / C ++ and has been published in several editions.
With the advent of .NET, he wrote “CLR via C #” - it also turned out to be a classic, also several editions. At that time, he was one of the founders of Wintellect and, formally being not part of Microsoft, was more free to evaluate. What earned the reputation of a major independent expert on Windows. This is the human legend of the level of Charles Petzold and Don Box.
About life: engineer, writer, entrepreneur
We have a lot of different questions for you, and I’ll start with a few less technical issues. Did I understand correctly that you are simultaneously working in Microsoft and Wintellect?
I was the owner of Wintellect for eighteen years and until last week. Three years ago, I joined the Azure team at Microsoft, and since then I have not worked at Wintellect. I have no significant connections with Wintellect.
Got you. But I would still like to ask you a few questions about your experience as the creator of Wintellect. At our conferences, there are many programmers who are well acquainted with the software development process, and some of them are most likely thinking about creating their own company, but they are not familiar with the entrepreneurial side of things. You also have knowledge in both areas, so it would be interesting to hear your advice to people who are going to start their own company.
You definitely will not spend all your time on development, and will learn a lot of new things about other areas: business, money management, economics, finance, hiring and firing. You will need to constantly make a lot of decisions and interact a lot with people: with clients, partners. You will need to find options that suit all parties. Despite all this, in Wintellect I was able to spend enough time on development, because we had people who were mainly engaged in business. However, I also had to participate in the entrepreneurial side of the business, and I did it with joy, because it was an interesting new experience. The fact that I did not need to think about bits and bytes all day and night made me, in my opinion, a more solid person. I do not regret anything.
Have you encountered any unexpected difficulties? Or, on the contrary, were any things easier than you expected?
Our path was unequivocally uneven: sometimes the business went well, new customers came. At other times it was a little different. When we made WintellectNOW's video subscription , it was much more difficult to start it and achieve profitability than we thought. As a result, it turned out, and now it is quite successful, but it took about a year more than we expected. In addition, surprises happen to employees: some are wonderful, others bring harm to companies, and these things often become clear only later - in everyday work they are invisible. In general, our expectations were often deceived in a good and in a bad way.
It seems to me that many developers do not want to create their own company, fearing that, spending time on business, they will no longer be guided in the latest technologies. Was it difficult for you to stay up to date with the technical side of things?
This is a good question. In my opinion, the solution is specialization. When Wintellect was founded, it had three technical partners. Each of us engaged in a particular area. None of us could be an expert in all these areas. My sphere was system programming — operating systems, languages, runtime, multithreading, and the like. Such an organization of affairs saves great resources. If a new version of a language comes out once a year, it is not difficult to follow this, and in those areas that are important to me - it has never been difficult for me.
You do many things related to the entrepreneurial side of things: make reports, write books. Do you have the feeling that these various forms of activity interfere with each other, or vice versa? For example, does writing a book help with future reports?
It definitely helps. Of all the classes, writing books absorbs the most time and nerves, makes paying attention to language, grammar, organizing material, searching for the right demonstrations. It is very difficult, and the writing of each book takes, as a rule, many months. But when this work has been done, it is much easier to make the slides, since there are already demonstrations, and you just have to squeeze the material. Further, understanding the internal structure of various systems allows me to give the right advice and choose the right technology to solve problems when working as a consultant or at Microsoft in the Azure Storage team. In general, all these activities greatly help each other.
Has your writing experience changed how you read books? Do you pay more attention to books because of this?
I think that I have changed it, and I think that I also pay more attention to the presentations of other speakers. I see if the speaker has the skill of presenting the material, how familiar he is with the material, if he repeats what has been said by others or does he really deeply understand the problem. I also pay attention to the same things in books: is the book well written, is there a deep technical understanding of the question, are there direct recommendations given or is the internal structure of the system described. In my books, I try to describe the operation of the system, note the positive and negative sides, show ways to set aside possible problems, describe the performance requirements. It seems to me that my books are considered relatively successful due to the fact that I give a lot of context for each technology, rather than just pointing out: do it, do it differently. I continue to learn new technologies, so I read technical literature, watch videos from YouTube and other sources, visit reports. It is not enough for me just to find out that some technology works this way and that, I need to delve deeper into it, understand when it is good, and in which it isn’t, what tricks it has.
If you follow the books and reports of other authors, can you recommend someone else's work or video?
Recently, I have been studying Go and Python in connection with my work at Microsoft, for this purpose I am reading the logs of the Go command and the specification of this language. I have always been surprised that developers do not read the specification of the language in which they write - after all, it fully describes how the language should work. Instead, people read books. I recommend always reading the specification. Otherwise, I usually watch videos of speeches at conferences about various technologies. It is difficult to advise anything here - some speakers are better, others worse.
You do not need to call someone who is definitely better than all the others - just tell me who you like.
I like the speakers who go into the details of the question. I am always interested in memory management reports. Memory management usually causes a lot of performance problems, which is very important to me. Any report on the work of the garbage collector in the language in which I write will be interesting to me: for example, does it use compression or not and the like. Especially well, when a report talks about things that are not readily available - the work of the garbage collector is usually not described even in the specification. There are patterns that make garbage collection more efficient. All this interests me.
Technology and materiel
Let's get into a bit of conversation with our boring technical questions. Jeffrey, you're from Microsoft. Why do you need Go and Python if you have a wonderful C #?
At Microsoft, I work in a team dedicated to the SDK and tools for Azure Storage. We develop SDK for Azure Storage in a variety of different languages - Go, .NET, Python, Java, NodeJS, PHP, Ruby, C, C ++. We are changing the structure of our SDK, and the first implementation was done on Go. It was a critical change, and we were not sure how our customers would react to it. We didn’t have the Go SDK at that time, so the first SDK was written on Go, so that our clients wouldn’t have anything to break. But, having received positive feedback, we switched to Java, because we had important clients that needed an asynchronous Java library. In this regard, I began to learn RxJava and, in general, work more with Java. Naturally, my experience with C # helped me a lot here. We are currently working on NodeJS, so at the moment I am studying it and TypeScript. Besides, we started to port the new SDK to .NET - there was less new for me here, since I already know it. Next in line is our Python, so I am also studying it. This is the work of our team - we write SDK for all these languages, so my activity is not limited to one language.
Ok, got it. On Amazon you can find a huge amount of your books. The oldest book that I found there, “Windows via C / C ++,” is dated 2007. But you did become famous as the author of books back in the 90s. How so?
In fact, I have a book that was published earlier, but it is quite old, I’m not sure if it is on Amazon. It was written for Windows 3.0, i.e. we are talking about 1990 or 1991. But quite a few people bought it, and very few people know about it.
As with Windows 3.0.
Yes, that was a long time ago.
Then you switched to C # and started writing books about it, right? What, in your opinion, is the future of C ++? Does it even exist? Should we continue to pull on our luggage C ++, or is it better to switch to Rust, Go or something like that?
I don’t think that we will ever have just one language that will conquer all the others. The power of programming languages is that each of them performs a particular kind of work particularly well. I check the popularity indexes of various languages about every month, and today C and C ++ remain very widespread. Since our Azure team at Microsoft has many clients who use C and C ++, we are not going to leave these languages. Moreover, thanks to IOT, there has recently been an increasing interest in these languages. We are talking about small devices like a thermostat that controls the temperature in your apartment. They have little memory and weak processors, and, in addition to assembler, C and C ++ are best suited for them. So I think that these languages will continue to be used for a very long time. Since we started talking about Rust - I have some experience with it, and, in my opinion, there are a lot of very interesting ideas in it. It can be a kind of secure C / C ++. In my opinion, it is very promising. Nevertheless, it seemed to me rather immature. Our team has not yet dealt with it, but we continue to monitor him, and in the future the situation may change.
I understand correctly that you have an SDK for C and C ++?
Yes, we have C ++ SDK for Azure Storage. Some other teams also have C / C ++ SDK, but not all, and they have not yet decided whether they will create them in the future.
How has the Windows development industry evolved? As I understand it, you have seen everything there. The first thing I remember myself is Delphi. Then I gained popularity with C #, and so far I do not see any signs of C # /. NET falling, Java and the like. Are they, in your opinion, the last step in the evolution of imperative programming? What is the probability that in the next year or ten years something completely new will appear? Say, a language with support for neural networks?
I am a man of respectable age, especially in comparison with you, and I have seen a great deal in our industry. I have been programming for about 45 years. The significant change over the years is that the operating system has become less important. I mainly dealt with backend software services and command line tools. I used to work much more with the GUI, and my first books were devoted to exactly this: GUI applications with menus, listboxes, comboboxes, event handling from the mouse, keys, and so on. At a certain point, I no longer have enough nerves to do this, because in this area I constantly encounter extremely fierce debates about whether in some cases you should use a listbox or a combobox, whether the width should be 100 or 1000 pixels, what color should be. I have been disgusted by these discussions, so in the end I stopped doing it. As far as languages are concerned, I think we will still have many different options. Languages die for a very long time, even today you can meet people writing in Cobol, Fortran or extremely obscure languages. New languages will appear all the time - recently Julia has gained some fame, Clojure exists a little longer. These new languages have attracted substantial attention for some time, after which some become successful, while others do not. With # passed an impressive way, he is 15 years old, and he is still extremely common. In my opinion, the Microsoft .NET team in many ways breathed new life into it, thanks to the fact that they created the .NET Core, which now runs on Linux. If you write in C #, Your skills are applicable in a huge number of different scenarios. I think that interest in C # will not subside for many more years.
Minute advertising. Jeff will soon arrive at the DotNext 2018 Moscow conference with the report “Building responsive and scalable applications” in which he will talk about using asynchronous IO to build highly scalable systems (both on the server and on the client). Live to Russia, he arrives, to put it mildly, not every day - this is a great way not only to listen to the report, but also to discuss actual problems face to face in the discussion area.
Do you want to write now " GNU / Linux Runtime via C #" ?
Yes I want to. In my opinion, for developers of GNU / Linux services, for many reasons, it is better suited than Windows - with the exception of some cases. I believe that C # is an excellent language. I recently met Java: for reasons of correctness, I can only say that after it I began to appreciate C # significantly more. I really like value types in C #. We recently worked with displaying a file in memory in Java, and could not close it directly, we had to wait for garbage collection. Some solutions in Java seem completely meaningless to me. In my opinion, C # and .NET are made much better.
In three years we, javista, will have type-values.
Yes, I know, and you have any generics ...
"Some" - in my opinion, a very accurate description.
Well, yes, your generics are a little weird. But Java is a hugely popular language, and people use it very productively. He is certainly very important. But, in my opinion, in .NET some aspects are better. Even if you add value types, we still need to provide support for older versions of Java. So it will not be possible to realize these new opportunities for a few more years. But this is good: all languages are developing, new possibilities appear in them. Java, .NET, C # - they will all live for a very long time, especially with some recent changes, such as .NET Core. So, in my opinion, C # for GNU / Linux is a great combination for people writing services.
I'm not sure that they are related to languages or operating systems. Operating systems at the moment, in essence, have become commonplace things. They are used to send emails and access the Internet. For most people, it doesn't matter if they use Windows, Mac or Linux. The languages that we use today are already powerful enough. Most languages, in fact, simply move data from point A to point B. You have a collection, you view it, you filter content — every language can perform this kind of action. Next, we need the machines to communicate with each other. Here the standard is TCP, HTTP is widely used, but there are other protocols. All these technologies work wonderfully, however, the performance can be further improved. In my opinion, The most serious difficulties today are associated with the creation of services. Developers deploy services in cloud environments, and they need these environments to have the flexibility and ability to scale applications. I already mentioned our site with a subscription to a video that became successful much later than we expected. When we wrote it, we did not know whether we would have ten customers, a hundred, a thousand, or a million. Therefore, I designed it from the very beginning, relying on scaling, which made it necessary in the early stages to work a lot on the architecture and think over usage patterns, as well as possible future changes in the system. In general, I believe that the greatest difficulties today are associated with the creation of scalable, flexible and reliable cloud services. This is what we do at Microsoft in the Azure team, and judging by our conversations with customers,
And Azure offers a solution for these problems? Or not?
Yes, I would not say. No cloud provider is a solution to these difficulties. The provider only provides the infrastructure, the hardware on which your code will run. It can also provide some services, such as Azure Storage (the team I work for) or CosmosDB, or competing services from Amazon — all of which can make your life a lot easier. It can help manage your condition, provide a reliable database. But anyway, many problems you will need to solve for yourself. For example, if we run ten instances of the first version of the application, how to upgrade them to the second version without stopping them and continuing to process requests? There are several different patterns for this. Azure can help implement some of them, but not all. And we need to write the code correctly, so that the first and second versions of the application are launched in parallel and can communicate with each other until the transition to the second version occurs. Cloud providers simplify some of these tasks, but their customers still have a lot of work to do on their own to provide the flexibility they need.
Let's talk about people now. On Wintellect there is an epigraph, a big title: “We don't just build software. We build developers. ” Can you share how to create modern developers?
Wintellect has three main business areas. We advise other companies, review their architectures and train their developers. We have special classes that tell you how memory management works in Windows, garbage collection in .NET. In general, we have an approach similar to the one I use in my book: we demonstrate some technology, show what it is capable of. And so we improve the skills of other developers. In our team at Microsoft, we hire quite a few people who have just graduated from college. Their work experience is a year or two, mine is decades. Every Thursday at one o'clock I do an hour-long lesson for young developers from our team. We choose a particular topic and discuss it. The last topic was garbage collection, before that we talked about threads, asynchronous I / O operations and their benefits. I try to develop them as developers, talking about the history of programming, about which things are more important and which are less and so on. Due to this, I hope their code will be of higher quality, which will improve the quality of service to our customers. I periodically repeat the phrase: what is at the entrance, then what is the output ("you get out what you put in"). If at the entrance I spend more effort educating our employees, then at the exit I get a higher quality of work, which generally improves the position of the company. Thus, I am essentially interested in the future of these people. which will improve the quality of service to our customers. I periodically repeat the phrase: what is at the entrance, then what is the output ("you get out what you put in"). If at the entrance I spend more effort educating our employees, then at the exit I get a higher quality of work, which generally improves the position of the company. Thus, I am essentially interested in the future of these people. which will improve the quality of service to our customers. I periodically repeat the phrase: what is at the entrance, then what is the output ("you get out what you put in"). If at the entrance I spend more effort educating our employees, then at the exit I get a higher quality of work, which generally improves the position of the company. Thus, I am essentially interested in the future of these people.
You said that you take the time to personally discuss garbage collection, memory management, and other such things with your employees. In addition to this, you are the company's founder, a well-known author, speaker, low-level systems hacker, and corporate developer. How do you manage to do all this? Yes, and at the same time? Usually, world-class hackers and people acting in public have psychological characteristics at different ends of the spectrum. This difference is at the level of psychology, at the level of the work of the cerebral cortex. Do you have any special tricks? Or maybe you're a mutant from the X-Men? Why I ask: I also try to program at the same time, and write articles, and read reports — and all this is wildly difficult.
Thanks for the kind words. But I must say that not all of this is equally good for me - something is better, something is worse. Something is much worse. And I do not do all this at the same time. If something distinguishes me from other people, then this is a high level of self-discipline. This is especially true of writing books. I wake up in the morning, get dressed, go to my office, spend hours sitting alone in a room and typing endlessly, checking various scenarios, and so on. Then I have lunch, go back to this room and work again, not communicating with other people. When you work in a team, someone always continues to work on the project when you have a break. And when you write a book, all the responsibility on you is one. Having self-discipline allows me to do this. Perhaps this is the most important quality that distinguishes me from some other people I know.
So, you have a very tight schedule, which is painted, what do you do at each certain hour of the day?
Yes, I set myself goals. For example, in the morning I say to myself: today I need to finish the seventh chapter. After that, I sit down and work on it. Sometimes for various reasons this cannot be achieved. In this case, the next morning I say to myself: well, today I definitely need to finish chapter seven. In the end, this can be done, but in the process I constantly pushes myself, setting myself goals, constantly limiting myself in time. If, however, it does not succeed, I shrug and set myself a new goal the next day. Because of this, I am very persistent in my work.
Last question. As far as I know, you have the rights of the pilot?
Yes, for the helicopter and for the aircraft.
So you have somewhere in the airport conditionally “your” aircraft, which you can take and fly?
Yes. But I'm not flying anymore. Many years ago, right after college, when I was still single and had no children, I experimented and tried many different hobbies. A friend of mine suggested that we try to learn how to fly by plane. I agreed, we went to the airport and found an instructor. After trying, I decided that it was the most beautiful entertainment, I began to attend classes regularly and in the end I got rights. Together with my friend, we came to the airport, got on a plane, flew for a while and landed at the same place from which we took off. But on the plane it is impossible to stop and how to consider something. And in a helicopter it can be done. Therefore, I decided to get the rights to the helicopter. Generally speaking, it is much more interesting to fly a helicopter than a plane. Do not be offended, but if you do not agree with this - you are wrong. Then the situation changed, because it is an expensive hobby that requires a lot of time and constant training. If you do not use the skill, it quickly rusts. When I got married and I had children, the fact that there is always a certain risk in flight also became important. Then Wintellect was founded, and I went into business. Sometimes, in order to have something new in life, the old need to leave. Such is life, and that is good.
Last-last question. Is there any wish for our readers on Habré?
I have been in love with our industry for the past 45 years, I cannot imagine any other occupation for myself. Technology is constantly changing, all the time there is something new that needs to be learned. This is a great career choice. I constantly meet wonderful people here, and I am pleased to count them as my friends. Even this interview brought me a lot of positive emotions despite the fact that we just met you. Looking back at the life I have lived, I cannot imagine any other way. I think we live in a wonderful time, and we are doing a wonderful job. My wish is enjoy it! Most likely, this is a long time.