What is software engineering? Part 6
The cost of software has long been disproportionately higher than the cost of iron on which it works, unless we are talking about unique hardware. Those machines that were unique to solve unique complex problems, they can be expensive, of course. To accompany such software is much more expensive than to do it, because there arise the problems. How did the program? Wonder? We are accustomed to the fact that the program is written to start work, and you stop. Then she worked for five years, your laptop died, you threw it out along with all the programs.
How to make a program to live forever? How to make it evolve? In General, a virtual world it needs to look like a real. To the real world came to this state in which we are now seeing, it took some geological periods, right? None of them have worked more than I lived, because I'm probably the same age as the very first programs just by age. Which artificial intelligence may be involved in this, do you think? There is no evolution, no geological periods. Of course, car events are happening more and more than in real life, it's all entirely consists of some events, but there's something to accumulate, something reused. I repeat, the life time of any of the box an average of five years, and then goes to the dump. With the advent of languages like Java, which, thank God, allows for the accumulation of the results regardless of what iron there is hope for evolution. And, of course, component oriented programming will be the main place here.
What is software anyway? What are we doing? Does anyone know the definition of the word "program"? Have you seen the book, what is the strict definition? As we talked about how to give a rigorous definition of this, what is the system and the operating system?
In those days we had an employee, a pure mathematician, he was a postgraduate course in pure algebra at the faculty of mechanics. He somewhere wanted to get paid, he was brought to us in the programming Department in Institute, but because he was a pure mathematician, he was assigned to write the documentation the user manual for the programming. Then, there was only bare metal, he was forced to write instructions in programming. He started brilliantly, like a true mathematician. He had to define what a program is. He otherwise did not understand how to begin such instruction. But he wrote. I have never seen a serious attempt to give a definition of the program. Basically, software engineering is such a pair, because the program itself is no documentation, can develop. She will be thrown out after you stop working.
Computer science is probably the science about what is happening in the virtual world, it's all Sciences that are relevant to the virtual world. And software engineering is the engineering science in this virtual world. Is their ratio. It has a purely practical orientation, as with any engineering discipline, but it yields the same product that India produces, getting more for it than for the oil and gas we have. So this is an important thing. We also no coincidence that the faculty of computer science deals only with programming and only justification can be that science and scientific results when programming. But I repeat, not computer science can be without iron.
And that defines the whole architecture of iron novelty. It defines a reasonable approach to what can be done, because if the machines, for example, are not parallel, then we immediately threw out the baby with the water from this basin. Now trying to do everything in parallel, because just in physics. Not having plenty to do, can be done. Not having what to do, you cannot develop it the production of the means of production, and this, we have seen, the basis of industrialization. But you can gradually accumulate experience, after all that there is. At this stage. Now our programmers are good at producing the software consumption programs, consumed in a variety of areas.
I hope that there will come a time when our technology will evolve, and then you can expect a breakthrough. What a breakthrough? You know, I slightly hinted that things are developing in the direction that the dynamics becomes richer, there is a computer the universe can afford more during execution of the program than the actual program itself. For now, if you look at a typical Java application, there is a computer, executing a Java application, not 100% finish on it, and there in the dynamics occurs in parallel a lot of things. The same garbage collector runs, which justified once Dijkstra referred to us, the same just in time compilation on the go optimizes this program, and so on and so forth.
Many years ago there was talk about the fact that the addressing system of data and instructions in modern architectures obsolete already many years ago. I can only say that there are hints to separate pure hardware access to memory cell data and the ability to specify who can do it, and who is not. Now it is solved the same hardware node and therefore memory addressing combined iron architectural control access to this memory.
Already 30 years ago, it was understood, and experimental architectures proven that those are two completely independent mechanisms. Developing these things can be made much more robust software, but it requires to together with the implementation of the program in parallel doing something else in dynamics, some rules of the road in the virtual world. Modern architecture do not know how to do it. Why? I'll finish again with reference to the Bible.
You know that the first thing Jesus did Christ, when he came to Jerusalem? He drove the merchants from the temple. Pushed. Kicked the money changers out of the Temple. And this perspective probably will engage software engineers related to system programming, which are system thinking, which can establish the correspondence between the mathematical theory of systems and the system software, which will be dictated by new architectures. But it's probably to do you.
About the languages. Python is a popular, good language used mainly in web programming, very good for him to start training, but much less used than the C language and the Java language. If you go to the website this website is already 25 years old monitors every month the popularity of programming languages. The last 15 years in the first place the two languages Java and C. In Java this year increased its advantage over All the others far behind, C#, about which you talk. C# is a different story, it's a cast from Java. Why? The very thing why I'm tired of unique machines programming.
The C language is a high level language low level. While microprocessors are popular for, say, Internet of things, there's a small microprocessors, where memory is initially all sensor nodes in wireless networks.