What is software engineering? Part 1
This term is almost 50 years old the first time he began to use in 1968. The fact that the methods of classical engineering such as the splitting into separate components have become seriously used in creating software. But why they were not used before, and what new meaning acquired the expression "software engineering" in recent decades?
What is the process of creating programs? This is the theme of our lectures, this is the essence of software engineering.
As with any production, trade programs have come a long way: from artisanal to industrial. What distinguishes modern production generally, not only in programming, as a craft? There are some distinctive features. What are the signs? First of all, the division of labor. Not casually say: "a single craftsman". Probably some scientific results are brought that craftsman is seldom afford. More modern technology. That was the division of labor, you need to maintain some standards. Have you ever tried to stick some kind of connector where it is not stuck? So, we need to maintain some professional standards. What else? Result.
What is software engineering? What is engineering? If you climb into "Wikipedia", as everyone likes to do the first thing you read there that this application of a systematic disciplined approach to development, operation, maintenance, and study of all the above, to do better. "Engineering" at all from the French word for "to contrive" this is an area of technical activity that aims at practical application of knowledge. We're at the end with you a little bit discuss what computer science are different, or how they relate to software engineering. About the same as any other science relate to engineering. Engineering in General is the science?
Where did the term and why I decided to start my story from 1968? Because in 1968 for the first time in history, the term began to be used. There was a conference, which is sponsored by NATO, in the German city of Garmisch Partenkirchen, where they held the winter Olympics, there were 50 major specialists from around the Western world, and they tried to answer the question, which by that time 1968 overdue very serious, namely: "How to make a program so that they were reliable, on time and so forth?" By that time, in 1968, I graduated from this the 444th school and was admitted to the first year of the MIEM (then it was the Moscow Institute of electronic engineering, as once a breakaway from the Computing faculty of the University and now it became a Department (or campus, as we like to say) of Higher school of Economics. Thus it happened that in 1968, I, not having much of the attraction to this activity, has been a professional sense, the same age as software engineering.
The conference in Garmisch Partenkirchen was devoted to the fact that in those years in the West, it became clear that to write programs longer and more expensive and more time consuming than doing the hardware for which they work. And the question arose: why is this happening and how to make it so quick to develop a reliable program?
The theme of the main report at the conference, which first heard the term "software engineering", was the question of how efficiently, economically, reliably and efficiently to develop IN an industrial way, not artisanal and industrial way? And all the luminaries at the time recognized that the main and fundamental difference between hardware and software is that hardware components are designed and programs are written every time with a clean sheet (usually happened in those years). Asked a question: "Why the functionality is widely used in industrial production equipment and is not applied sufficiently in the software?"
What is software component? There's long been a term that appeared with the conference component oriented programming. What's that all about? And it's a lot. It's about how to program, how to create a great software system, which involved a lot of developers how to use the results obtained in this development, other software systems, and what is generally regarded as the result of this development? How to debug such a large system, by what means? How to use the results of the labor of others? How to organize the development process and in what order to do it all, that it was foreseeable? Moreover, it is foreseeable should be not only for someone who does, but for the person who pays the money. And then, when this system has been done, how does it develop? Because there is a system, and I very soon saw them, which always work. And it would be a disaster if they stop doing it. And they need to develop.
So, you want what? I want to collect software product just like you in the childhood did it with Lego.
How to build houses, cities, machines, the matched parts, but different, or are developing radios from any standard as iron itself early developed, all sorts of computing devices.
And how it to do? The main content of this conference, 1968. Here are the topics that were discussed then. And who was there? There were teachers, manufacturers of iron and programs, there was, in particular, Edsger vibe Dijkstra. You know that?
And not one, many. Semaphores Dijkstra, Dijkstra algorithm. "On the Fly Garbage Collection" a classic article on how to mathematically justify the concurrent garbage collection in the present day platforms Java,.NET and so forth, where there is on the go concurrent garbage collection. The author also Dijkstra.
Here are the main themes, some of them are already out of date. For example, the last "whether to evaluate the Software separately from the Hardware?". Seriously discussed this question. Everyone already know that this Hardware compared to Software, which he stuffed, not worth anything.
And the main report was about how to organize such component programming, to put the matter to the industrial stream. This question is still relevant, although many years have passed. It's such a programming paradigm. What is a paradigm? Approach to programming, one of many. Where some software designs can be reused, once writing (in modern object oriented languages is usually classes or sets of classes) so that they can be, first, to write well, be sure to reuse, be sure to reach their unmistakable quality, and then quality component is to collect high quality product. What do you want? It is necessary to restrict the freedom of programming because you need to follow some rules. Rules are standards of programming. And this is our first time moving from the industrial to the conversation. It is necessary to introduce production standards. This is a highly discussed, but some standard relationships, because standardization is a necessary condition of industrial production, reliability, result, division of labor, and answers almost all the questions that I wanted to clarify.