Candidate of Technical Sciences at MIEM, Deputy Head of the Software Engineering Department of the Computer Science Faculty of the National Research University Higher School of Economics and Yefim Grinkrug, Deputy Head of the System Programming Department of the Institute of Computer Science, gives his answer to the question of what software engineering is.
This term is almost 50 years old - it was first used in 1968. The fact is that it was then that the methods of classical engineering - for example, the splitting into separate components - began to be seriously applied in the creation of software. But why have they not been used before, and what new meaning has the expression “software engineering” acquired in recent decades?
')
Under the cut - a detailed transcript and slides. So let me introduce myself. My name is Efim Grinkrug, I am a professor in the Software Engineering Department of the Higher School of Economics, there is a new faculty organized with the participation of Yandex. You probably know the Faculty of Computer Science. There are three departments, one of them is the Department of Software Engineering. Simultaneously from this year, I am the deputy head of the department of system programming. This is the basic department, which we have opened since this September, and what it is, I will also tell you a little bit today.
You see this slide, which shows that I graduated from the Physics and Mathematics School No. 444 in 1968. Is there anyone from there? This is lyceum number 444 in Izmailovo, 13th Parkovaya. I was there two weeks ago, he still remained. It was the first physical and mathematical special school in Moscow, which instead of joinery and plumbing in 1959, long before I studied there, introduced programming lessons. Before that, everyone was planing stools. And when I received the certificate, together with the certificate of maturity in school, I received such a piece of paper - a certificate of qualification, which says that I was awarded the qualification "computer programmer of the 3rd category." In those days, the working professions were from the 1st to the 6th category, the 6th was the coolest. The third digit was received by those who have the top five in programming, the second digit is received by a quadruple, we did not have troechnik-first dischargers. And it so happened that in 1968 I came across the word “programming” for the first time. Why in 1968? Because I came to this school not from the very beginning, but from the middle of the ninth grade, the penultimate in those times. And when I came there, because the old districts of Moscow began to be torn down and the schools were closed, and I went to the university to study at the mathematics group, I was advised to go to this school in the middle of the 9th grade, because the teacher was interested, I can catch up there or not. There were three of us from this circle. I went there, and a week later it became clear that there was some kind of semi-annual control programmer. I, of course, neither sleep nor spirit. I was given a textbook, I honestly read half of this textbook for a couple of evenings, and then I had to write a program. And the program was a kind of double nested loop. It was necessary to have time in 45 minutes to depict something like this in a double cycle, and in the language, as they would say now, an assembler. I managed to read only half of the commands that happen in this machine, the cycle operator did not reach me, he was in the other half, and I had to manage to do a double cycle, using a conditional transition, nothing more. You, probably, imagine how it can be built now. The paradox was that the class “five” received two for the control class: one boy who studied there from the very beginning and who was always the winner of all conceivable olympiads, and your humble servant, simply because the program worked for us two, and for the rest of the approximately thirty-five students, everything was very good with cycles, but did not work. And since then I have imbued very firmly with the idea that there is nothing serious in programming. If a person strains and in two days can overcome what has been two years before, and get the top five without doing anything and nothing, then there can be no serious attitude to this business at all, and all this is complete nonsense. Here is mathematics, physics - this is serious, and this is complete nonsense. And this attitude to the matter, to programming, was preserved for about six years after that, that is, almost until the end of the university (then it was called an institute, but we will talk about this later).
My first textbook, which I was given to read and which I did not have time to read, was called “Programming in meaningful notation”. Immediately the question arose: what, is programming in meaningless notation? The Russian language in this sense is very indicative of the translation of programmer terms, we will still see it. After many years I will say: yes, sometimes it happens. Sometimes consciously, often unconsciously. Substantial designations in comparison with the contentless facilitate the process of creating programs, and contentless, respectively, complicate this process. There are special programs that are called obfuscators, which in spite of this make the designation empty, just to reduce code theft.
What is the process of creating programs? This is the topic of our lecture, this is the essence of software engineering.
Like any production, program production has come a long way: from artisanal to industrial. What distinguishes modern production in general, not only in programming, from handicraft? There are some distinctive signs. What are these signs? First of all, the division of labor. It is no coincidence that they say: "lone artisan". Probably, some scientific results are attracted that the handicraftsman is rarely able to do. Still modern technology. In order to have a division of labor, you need to maintain some standards. Have you ever tried to plug in any connector to where it is not stuck? So, you need to maintain some professional standards. What else?
- Result.
- It is right. The quality of the result. And where does it come from? And in general, what does it affect? And why do you think I came here from the Higher School of Economics, where there is a new faculty of computer science? Because, as Anatoly Karachinsky, the president of IBS, a large Russian holding company that computerizes everything in the world, wrote the other day in the Vedomosti newspaper (this holding also includes Luxoft, which is probably the only company in the country that has a quality certificate the highest level in the world of software production), the economy of India, for example, receives almost two times more from software exports than Russia from oil and gas exports (this is in figures). Therefore, serious program development and you, as future serious program developers, are probably the national treasure.
What is software engineering? And what is engineering at all? If you go to Wikipedia, as everyone likes to do the first thing, you will read there that this application is a systematic and disciplined approach to the development, operation, maintenance of software, as well as research all of the above in order to do it better. "Engineering" in general from the French word "izlochitsya" - this is a field of technical activity, which is aimed at the practical application of knowledge. We will discuss with you a little bit how the computer sciences differ or how they relate to software engineering. Approximately the same as any other sciences correlate with engineering. Is engineering at all a science?
Is shipbuilding a science? Yes, Academician Krylov made some achievements in shipbuilding. Is it a science? What is there besides the law of Archimedes? That is, science is different: there is theoretical science, sometimes practical, engineering, and so on.
Software engineering is an activity related to the production and maintenance of software.
Where did this term come from and why did I decide to begin my story in 1968? Because in 1968, for the first time in history, this term was used. There was a conference sponsored by NATO in the German city of Garmisch-Partenkirchen, where the Winter Olympics were held later, there gathered 50 top specialists from all over the Western world, and they tried to answer a question that by that time - by 1968 - had already matured very badly , namely: “How to make programs so that they are reliable, on time and so on?” By that time in 1968 I graduated from this very 444th school and entered the first course of MIEM (then it was Moscow Institute of Electronic Engineering, like once a breakaway I am from the Computing Faculty of MEPI, and now it has become a department (or campus, as we used to say) of the Higher School of Economics). Thus, it turned out that since 1968, without having a particular attraction for this activity, I was in the professional sense of the same age as software engineering.
When I was in school, there was one of the first computers standing there, it was called “Ural-1”. Unfortunately, the Polytechnic Museum has been closed for repairs a long time ago, and its entire exposition has been scattered around some corners. In fact, quite a number of domestic computers were presented there. The best students were allowed to program on “BESM-4” then, to non-excellent ones - on “BESM-3” and this very “Ural”. This is a tube machine. But the picture of the school.
Who developed it? It was written here that only 183 of them were made, and one of the developers was Yuditsky Davlet Islamovich, who later became one of the founders of the city of Zelenograd. Zelenograd - it was an attempt to make the "Silicon Valley" near Moscow. He is known for being one of the developers of unconventional arithmetic devices that were considered in residual classes. This is such an arithmetic that does not have transfer units, so it works very quickly. This line somehow faded, because then from this representation of the number, which is suitable for such fast arithmetic, it is very difficult to convert it into ordinary numbers back and forth, but it feels great.
Here is this car "Ural-1", when it was still standing in the Polytechnic Museum.
But this is the BESM-4 car, on which I, without knowing it, correctly wrote a double cycle. This machine is also known for the fact that it was the first time a computer cartoon was made in the Soviet Union. Sometimes it is shown in the same museum.
The conference in Garmisch-Partenkirchen was devoted to the fact that already in those years in the West it became clear that writing programs is more expensive and longer and more laborious than doing the hardware on which they later work. And the question arose: why is this happening and how to make it so that you can quickly develop reliable programs?
The topic of the keynote speech at the conference, which first voiced the term “software engineering,” was the question of how to efficiently, economically, reliably and efficiently develop software in an industrial way, not artisanal, but industrially? And all the leading figures at that time recognized that the main and fundamental difference between iron and programs is that components are developed in iron, and programs are written every time from a clean sheet (as a rule, that was the case in those years). They asked the question: “Why is component widely used in the industrial production of equipment and not used sufficiently in software?”
And what is software component? There is a long time such a term, which appeared just from that conference - component-oriented programming. What is it all about? And this is about a lot. This is about how to program, how to create a large software system, where many developers are involved, how to use the results obtained in such development for other software systems, and what is generally considered the result of such development? How to debug it, such a large system, by what means? How to use the results of the work of other teams? How to organize the development process, in what order is all this done so that it is visible? And it should be foreseeable not only for the one who does, but also for the one who pays money. And then, when this system is already done, how to develop it? Because there are systems, and I very soon saw them, which always work. And it will be a disaster if they stop doing it. And they need to be developed.
So, I want what? I would like to collect software products in the same way as you did in your childhood with the help of the Lego designer.
That is, take some ready-made set ...
Maybe, if not enough, another to buy.
Assemble a team.
And to build this business, like Lego, from typical ready-made components.
How to build houses, cities, cars, from suitable parts, but different, or develop radios from all sorts of standard radio components, like the hardware itself was previously developed, all sorts of computing devices.
These are, by the way, products of one of the companies in which I worked then until relatively recently.
And how to do it all at all? The main content of this conference, 1968. Before you are the topics discussed then. And who was there? There were teachers, manufacturers of both hardware and programs, there was, in particular, Edsger Wibe Dijkstra. Do you know this?
- Yes.
- What is he famous for?
- Algorithms did.
- And not one, much. Dijkstra semaphores, Dijkstra's algorithm. On-the-Fly Garbage Collection is a classic article on how to mathematically justify parallel garbage collection in current platforms — Java, .NET, and so on — where there is parallel garbage collection on the go. The author is also Dijkstra.
Here are the main topics, some of them are irrelevant. For example, the latter is “Should I evaluate Software separately from Hardware?”. This issue was seriously discussed. Everyone already understands that such Hardware, in comparison with Software, with which it is stuffed, is not worth anything at all.
And the main report was about how to organize such component programming to put this business on an industrial stream. This question is still relevant, although many years have passed. This is such a programming paradigm. What is a paradigm? An approach to programming, one of many. Where some software constructions can be reused once having written (in modern object-oriented languages these are usually classes or sets of classes) so that they can, first, write well, be sure to reuse, be sure to achieve their unmistakable quality, and then from the quality component to collect quality products. What is needed for that? It is necessary to limit the freedom of programming, because you need to follow some rules. Rules are programming standards. And here we are, for the first time, moving from amateur work to an industrial conversation. It is necessary to introduce production standards. This is highly said, but some standard relations, because standardization is a necessary condition for industrial production, reliability of the result, division of labor, and answers almost all the questions that we wanted to clarify.
Software components must be manufactured and used in accordance with certain standards, which are commonly called component models. What is a component? The component model — there may be many different ones — answers the main question: what is a component and how does it differ from a noncomponent?
Here I must note (and you probably already felt it yourself) that there is no non-component programming, and the whole conversation is about what to consider as a component.
What is programming? This is the process of forcing more or less large amounts of iron to some useful activity. It is a struggle for the machine to do what you want from it. But this struggle is not with the machine, but this struggle is with you, with yourself, because there is a tendency to dissolve the infinite disgrace, and when you do something, you fight with yourself. To fight iron is absolutely pointless. You are struggling with your misunderstanding, inability, and so on. And this whole struggle is somehow connected with component, if you think about it.
If you look at the history of computing technology, then, for example, the university taught me to program on two types of computers: analog ones, which you probably will not see anymore, most likely, never, and already digital ones. Why not see? Because all the analog technology starting from the phone has already been digitized. Nevertheless, initially the analog computer was a set of ready-made components, and a hefty box with wires in front of it in order to connect these components to each other, and to receive such a function only at the output, or voltage, which simulates the problem statement solved analog machine. In addition, the digital machine itself is made of electrical components that are somehow analogous. That is a kind of dialectic.
On the left, you see a relatively late analog computing machine, the components of which are just wired in order to produce some desired function, was modeled.
And here you see the first digital machine (or one of the very first). I once photographed it myself in the library of Harvard University, it was called MARK-1. The letter "K" from the word MARK-1 in the upper right corner has fallen off. Maybe now already glued back. You see the parameters of this machine.
Why is all this important and why did NATO take it for the first time? Because you see that it began to develop approximately at the end of the war, and it was not just that, but because it was necessary to make a bomb, and it was necessary to simulate and calculate the bomb, because if each time the field tests were done, any question arose, and would not use computing equipment for this, it is quite likely that the Earth would have been split in half for a long time. It is no coincidence that the Los Alamos National Laboratory, which made the bomb in America, is considered to be one of the main laboratories, which dictated and dictates all sorts of supercomputers, for example, evaluations. , 24 ( ) .
I must say that Intel holds an annual competition that is similar to Oscar in Hollywood. There, new developments are awarded prizes. Among its Intel employees, it is called the Intel Technology Award. Everyone goes on the red carpet, like in Hollywood, they come in tails and so on. We just do not show it. When we have the same respect for this business, preferably by the time you mature as specialists, then you will have a wide street for work, which I sincerely wish you.