Contacts

Different programming languages \u200b\u200band their scope. Lecture in Yandex. Extension of existing programming languages \u200b\u200bExtended programming languages

Zalina January 13, 2016 at 15:42

Different programming languages \u200b\u200band their scope. Lecture in Yandex

  • Yandex blog
  • Website development,
  • Programming
  • Industrial programming

Our first post this year we decided to devote a very basic topic, a lecture on which was read in a small schedule. They are engaged in high school students who are interesting technologies, from here the specificity of the presentation - the lecture will be particularly interesting for those who are just beginning to program and think about how to develop. For them, Yandex has a course "Introduction to Programming (C ++)", which can be passed on the Stepic.org platform.

Lecturer Mikhail Gustokashin is a curator of Yandex academic programs, director of the Center for Student Olympics of the Faculty of Computer Sciences HSE. Mikhail prepared dozens of winners and medalists of All-Russian programming competitions.

As part of the lecture, it is described about what programming languages \u200b\u200bare that they differ as they appear and which of them are better, and what are worse. In the beginning, we will talk a little about the history of languages \u200b\u200b- how they appeared how people began to program how everything developed, which is happening now. In the second part, it will be affected by what tasks what language is suitable, how to "choose your favorite language and enjoy life." The lecturer will also tell a little about how, in his opinion, to learn everything to this and then get a job.

As always, under the cut - detailed decoding of lectures so that you can navigate in its content.

History of programming languages

Let's start from the very beginning. At the very beginning, the computers did not even have a keyboard! That is, everything was very bad - they didn't have a keyboard or the screen, there were cards (these are such stuffs with holes or with the lack of holes). Accordingly, the pins were put there, whether the light was shining there. If there is a hole (or vice versa is not) - it meant a nolik or one. And the programs at that time wrote with the help of machine codes - each operation in the computer (addition, subtraction, some more complex operations) was some kind of machine code. People themselves chose this code on the table, all sorts of addresses in memory, all this was knocked out with their hands and put it in the reader - and it was considered everything. Of course, the work of the programmer was, probably, then not particularly interesting - to do holes - and with the development of science and technology, of course, began to invent all sorts of "interesting" pieces. For example, Asssembler (Assembler), which has already facilitated a few life.

Well, how did he facilitate life? Instead of memorizing that there is some kind of "magic" code from the team, all sorts of words were used, similar to "human" English - some add or MOV - and then the registers or memory registers, the variables with which these operation operations. But it is clear that this in general, also demanded a rather large tension of the mind to keep in my head, in which register we have, where what variables and what is happening at all. Why did it happen? Because the computers were "stupid" and could not understand anything more "smart". Actually, and collect the machine code from the assembler also takes time, memory (for those times it was certainly few).

Gradually, it became clear that it was very difficult to develop so large complex programs. The performance of the programmer in these teams was extremely low - that is, he wrote several lines per day (meaningful), and each line did not really do anything - some simple arithmetic action. And people wanted to make languages \u200b\u200bmuch more like a human language, in English, in particular, to write programs was easier and more convenient. And went, went!

Old and dead languages

One of the first languages \u200b\u200bwas Fortran. By the way, it was also still knocked out on the chapels - there were special chapels to knock out programs on Fortran. But if you take this Fortran now - in my opinion, it is even somewhere between 50-60. It appeared - and you try to write something on it, then you will be very unpleasant, I guarantee you! Modern Fortran is still alive, but is already quite different from what was before.

Other languages \u200b\u200b- now I will write one thing about which you probably have been heard, then only in any events, where programming is told about the history is Cobol. It was a language for writing business applications. What is a business application? Some transactions in banks, something else wrote all this on a cobol. We, understandable, is not very popular. I think a programmer on a cobol, in Moscow, you will find with great difficulty. And somewhere not in Moscow - with even more difficulty. But, which is surprising, 10 years ago more than half of the whole code written by mankind, it was written on a cobol. And so far, a significant part of all bank transactions is underway with the programs written on it (COBOL), and still people write something on it.

There is also a "funny" language, he was called Algol (68th version, which characterizes the year of its creation). This is an algorithmic language. In general, they were able to die there, but now we are not very interested in what they know. And on this, our excursion in antiquity and in relatively unused languages \u200b\u200bcan be finished and proceeding to the fact that there is still live (and actively lives).

Old, but live languages

Algol was invented in Europe, and Fortran used mostly in the States - there are no big differences. What is the trend noticeable? At first everything was difficult and to write it was necessary to be almost an engineer, electrical engineering, to understand where which contacts are closed and something else for programming. Then he also needed to sit with leaves and count the memory, watching her. And gradually everything became easier, easier, easier and further even easier for the programmer - as little as possible to think a person as much as possible can be done automatically. At about the end of this period (the lecturer indicates Algol and Cobol), languages \u200b\u200bbegin to appear, which in some sense "lived" to the present day.

Basic. Perhaps still some people write something on it, at least I have seen that in some institutions it is taught on QBasic 'e - such a blue window, where "1989" is written. In general, "Mightwall" lives! It was invented as a language for non-programmers. At that time, the programmer was such a very specialized profession. And here they tell you: "We have a cool language Basic, and any reasonable person will take and write a program on it - easy." Again, the Beysik and modern Beysik are a huge difference. All sorts of these rows with numbering after 10, all sorts of Goto and other horror - they have no relation to the modern Basik, and even to the Basic of the 89th year they have a little relationship.

Another funny story is Pascal, widely known in university circles, mainly in Russia and in the countries of the former Soviet Union. It was used and continues to be surprisingly as a training language. Inout the rest of the world, he is smalmarked, but also lives and live. There is such a man Wirth - here he is a scientist, theorist. He participated in the discussion of Algola, he did not like what happened, and he came up with his language - Pascal. And then the company Borland (and before that many other firms - Apple did, in particular) they took and spoiled everything. He had a beautiful theory, slim - "everything will be fine," and they took and stuffed the fact that people need to work. Well, and it turned out not so beautiful as he wanted.

And finally. Si invented engineers. If Pascal came up with a scientist, then si invented Kernigan and Ritchi, they worked as engineers in Bell. How did this happen? At that time in these languages \u200b\u200b(the lecturer indicates Fortran, Cobol, Algol), nothing systemic wrote. What is "system"? For example, an operating system, some drivers, something else. These languages \u200b\u200bwere intended for mathematical calculations, for business calculations, for all such. And everything else wrote on the assembler. There were some languages, they now died, that is, the language Xi appeared not immediately from the assembler, but through some intermediate things.

The essence of what? Kernigan and Ritchi loved to play asteroids toy - a spaceship flies, and there are asteroids, he shoots them, and they fall apart. They had a server on which they played, but there were a lot of people, and the toy slowed down. And they discovered somewhere in the office that they have some kind of computer that no one uses. But there was a problem - he was another architecture, and the game was written on the assembler.

They rewrote it, of course, even sculpted the features of some kind of playing on it. But it brought them to the idea that it is not very smart to rewrite to a new architecture every time. And they decided to write such a language high levelwhich will be suitable for system programming, that is, in which you can manage the memory in which you can understand where-what lies and how to contact these pieces of memory. And so the SI language appeared, which had a huge impact on all further. They are all (the lecturer shows Algol, Further and other mentioned languages) had a great influence, but here si - straight yes ...

Accordingly, it was the main language in the UNIX operating system, which at that time was even more popular than now. And about the 80s, the situation was some kind of such a situation (the lecturer shows on Basic, C and other mentioned languages). Suppose that all this is already slowly died (the lecturer erases references to assembler, fortress and algaole) ... and in the 80s, computers have become less, smarter, cheaper, and people wanted all sorts of oddities to live even better, living has become More fun.

Languages \u200b\u200bfrom the 80s

One of the first oddities was C ++. Language C has a huge number of shortcomings (well, just greatly) - everything can be done on it in general, including to shoot yourself, shoot yourself with fiction, to another leg, shoot one foot to another leg, in general - what To do it. But at the same time, some architectural things are made there quite difficult - again, as in the assembler, we have to follow all the time, where we, what and what memory is allocated; She is there all the time "flows" somewhere this memory - that is, we allocated, forgotten to remove, they did not remove it, got out of memory, in general - I looked out a bunch of problems.

C ++ was created first as a set of additions to C, which will make it easier to develop. At that time, fashionable object-oriented programming and people decided that everything could be described in the form of a hierarchy, that is, you had a ball (abstract), you inherit it a soccer ball, a volleyball ball, another abstract ball. Then it was fashionable that "we now write everything in the form of some hierarchy, and everything will be fine, life will work out, everything will become beautiful and that's it." C ++ In some sense, this object approach was implemented - it was not the first language of object-oriented programming, but it became quite popular and all sorts of features began to appear in it. At the same time, C ++ retained almost complete compatibility (at that time) with C language, the program written on C 99% of cases was successful as C ++ - naya and even worked as well. It was intended to make it easily go to C ++.

In addition to the object approach (in C ++), it quickly appeared standard Library templates (STL). I think that at school, those who still taught Pascal found that you have there, firstly, there is no built-in sorting (in the ancient, blue Borland Pascal, now it is already in modern versions) - there is an example (source) Sorting, it can be copied and pasted. But if you want to sort entire numbers here, here you want real numbers, and here the lines that can be compared between themselves, you had to write three different sorting that makes absolutely the same thing, just they simply have different types of data. This is not very good and templates that did not immediately appear in C ++, this problem was greatly relieved. That is, you had an abstract program, which something that can be compared between them, successfully sorted.

Script languages \u200b\u200bfrom 90-x

But the time did not stand in place, in the 80s there was still a lot of interesting things. But somewhere at the turn of the 80s and 90s, computers have become so good that it was already possible to make very strange and very inefficient things. In particular, these were scripted languages \u200b\u200bthat were not compiled into the machine code, but were interpreted. Beysik, too, was interpreted for some time, but these scripted languages \u200b\u200bwere intended mainly to process texts - this, for example, Perl, Python (it was not very famous then), PHP, Ruby - these are the scripted languages \u200b\u200bthat in one or There is still a different degree (they all have time to appear until 2000, even much earlier).

Let's go a little on them, because these are specific things and now many are used. The idea is what? If we do not compile, you can afford much most. For example, the program can look at your code and somehow use it; She knows what happens in it and due to this, you can do a lot of interesting things.

Perl was designed to handle texts - in those days already the memory has become so many in computers that there was some text to shove there and with this text something useful to do (for example, consider words, some kind of searching). But, in my opinion, he was designed by people who were a bit not in themselves, because there is such a joke about him: "Any set of characters written is the correct program on the pearl." In my opinion, you can only write on it, it is impossible to read it. When I look at the code on Pearl and trying to understand something, I do not understand anything. Maybe if I knew him better, I would understand something, but as I heard from those people who still know how, they say that it is easier to rewrite again. That is, the program works are short and it is really easier to rewrite again than deal with what is there and fix it.

At about the time, in the mid-90s, Internet appeared. At first, these were mail, siters with static HTML, but people wanted to add some kind of dynamics there so that everything happened to us dynamically, some molds could be filled, the guest books to do something else. Accordingly, this required some interaction, came up with a protocol, as it interacts, and, most importantly, the generation of these static (conditional) pages that will be "strained" by the user in response to its request.

In general, nothing but the pearl at that time did not fit. Write on pure SI or C ++ handler was a bad idea. And from the lack of the best at that time (and long enough) Pearl was popular for web development. Of course, the scale will not compare with what is happening now.

PHP appeared as ... by chance. One person quickly stopped doing this - did his page some kind, he had some kind of guest book, somehow, some things. And he wrote a set of macros of some for a pearl, which were similar to Si, because he knew how to si, simply because he was so comfortable. And called it Personal Homepage. She shared and says: "People, see what kind of thing I wrote, everything is much clearer here than on the pearl and can be edited." And people liked it.

Then he threw this thing. In general, in the end, this PHP began to live and began with time much more popular than Perl. But this is his "generic injury" (idea as a set of macros for the pearl) with him played a rather evil joke. Language turned out strange. That is, he developed by itself, no one designed him, no one administered the development process (neither the company, nor a person), and there were a lot of group, each of which saw what they like. As a result, the functions are called differently, even there is no style, everything is through the emphasis, in general, as it fell, the settings lie here and there, and how it all will work not very clear. But you can sit down and write in two hours to PHP, because he thought so.

Python and Ruby: Ruby is now less popular, Python is somehow better "sharing", let's talk about it. It is clear that in those days it was (the lecturer indicates Perl, Python, Ruby, PHP) strongly specialized languages \u200b\u200bfor highly specialized purposes. In general, no system programming, no business logic on them wrote at that time and now does not really do it.

Compiled Languages \u200b\u200bfrom the 90s

We will go about the same times, but in the other way. At that time, C ++ was used almost for everything that it was necessary to write not for the web, not for processing text, but for simply applications, for operating systems, for toys - in general, for anything. But C ++ is a terrible language in fact. Why? Because, first, he inherited due to the backward compatibility, all the problems si. There could still be killed a million in different waysThe same thing that was in C (naturally, new methods in C ++ were added. At the same time, if you write everything well and correctly, as was conceived by the authors of C ++, then, of course, it was impossible to kill with old sishy ways, and it seems like smaller than them. Nevertheless, he had a very strange object model peculiar. The splitting of the program on the modules, on some kind of pieces at all came out of Si (if include you can write on si or on C ++ - in fact it was intended how to just insert the text of the library into your program, as a result, when you write a bunch of inclouds you have everything - if "primitively", as it was at the very beginning - everything is inserted into one file and then all this is terribly compiled for a long time, because it goes around several times. The same Pascal, Wirth, was much thoughtful in this plan, later Versions have become even better.

In general, C ++ has a lot of flaws. The programmer's qualification should have been high to write on C ++, and cost such programmers expensive (and preparation, and something else, that is, finding the programmers in the market is difficult, they need to pay a lot, and in general it is not ... ). And our computers are faster and faster and faster, becomes more cheaper, people buy new computers and want more applications, more toys for the phone, in general - more joy.

So Java appeared (Java). There is also a rather funny story, as the name has appeared from this language. There are programmers, they drink coffee all the time and at that time was fashionable to drink coffee, which on the island of Java Ros. The language was conceived as a language for embedded devices, in particular for a coffee machine. So it turned out the name ...
What started with it at all, what was good in her and why did she win more popularity? First, they got rid of the heritage of a blue, completely. No pointers, much less ways to shoot yourself some part of the body and break everything. Secondly, they have implemented much more recent ideas in terms of object model - that is, C ++ has appeared much earlier than Java and used more archaic, "wild" model object. Well, here (the lecturer points to Java) she was already more thoughtful then, and in theory people thought, and in practice they used and made everything much cooler.

Finally, the third. We have a program on Java not gathered in a machine code, but in the code for a virtual machine. That is, you lived virtual machine (VM) JVM - Javovskaya. Your programs were going to some intermediate representation and then, with the help of these cars were already performed. What did it give? First, it slowed down, secondly, it erupted the memory with terrible force, in the third, it was transferred anywhere (theoretically) - at least to the coffee maker, even on the coffee grinder, at least on the computer, at least on the mobile phone. This, on the one hand, well, that is, you just wrote the implementation of the virtual machine, then you run your Javov programs everywhere. But, on the other hand, it is bad that on the same phone then there was little memory, there was a low performance and all this was further started to blend and slow down.

But even this is not the main thing, for which in general the language was invented. The language of Java was invenched to reduce the requirements for the qualifications of programmers. That is, more bad programmers can write good programs on Java, because it does not allow you to write bad programs - there are no means to write programs badly. There you can write only well, programs. Well, in understanding the creators of the language.

That is, if on C ++, on Python, on what pleases, we can breed from your project a terrible garbage some kind of where everything is going on there, going for hours and there is something else. In Java, the garbage can also be diluted, but for this you already need to make some effort. That is, by default, there is no "garbage", there are other problems that there is something there, they pretended - in general, one meaningful string is not very meaningful. But, maybe such a secondary qualification, a programmer writing a fairly quality code.
We almost came to an end. We, the following, which appeared is. It. It (dotnet), well, in particular, we are interested in C # (almost the same [lecturer indicates Java], that is, there are differences in the details if you choose between them - see where Money pay more).

And one more thing - JavaScript. Has nothing to do with the language of Java, appeared in the same year - the word was fashionable, they licensed trademarkTo use.

What, most importantly, you need to pay attention? (The lecturer draws the arrows from C ++ to Java, .NET, C #, JavaScript and PHP). To write a simple program on one of these languages, and on many others - if you know C ++, you don't need anything else anything else - you take and write on C ++, and then add dollars at the beginning, something else Doing the little things and you have it begins to work on anything (the lecturer shows the languages \u200b\u200bto which the arrows from C ++ were reserved). That is, they are extremely similar in some simple things. If you decide some school challenges, tasks, something else (do not design a big project - you have one file that reads numbers, displays numbers in the console, something else does something), then there is almost no difference between these languages. It is clear that JavaScript and PHP are specialized, they are all a little different. But here (the lecturer indicates Java and C #) generally much more difference.

Since then, all sorts of interesting things appear, but it is not clear - they will live or successfully die. What is now, for what tasks do you use?

Select language depending on the task

Suppose you have a task to write a driver for a video card. What language will you use today? (Crying from the hall: java!) And what ... Java is excellent, but what is not on Ruby or PHP? (The lecturer speaks with sarcasm.)

Low-level programming

If you write something low-level, then the best choice is si, but actually I heard something (but I did not see) that C ++ is used for this. But I weakly believe in it, because in si can be clearly controlled - since you gave so much byte of the memory, it means so much. And in C ++ (STL) how is the line implemented? Well, somehow implemented. And in the end we do not know how and what is happening there, maybe our memory will end on our video card or something else will happen. Therefore, Si still lives and does not die, such tasks of system programming are still there - write an operating system, write drivers, write something else - si great for this. In addition, all sorts of devices appear now, the Internet of things promise that he is about to come) who live from the battery (and, naturally, there will be millions of them, everything will be engaged in this Internet of things), they must be very cheap and very little electricity consume. Accordingly, there will be 2 KB of memory, the processor is 5 kHz, well, it is clear that you will not turn some virtual machine or the scripting language in the near future - it means that you have to write something on si. Yes, and now, for example, calculations on the video card (OpenCL or any other technology) - there are no new language in order to write programs for them - they make si with some big limitations. Just because people already know how to learn something new? Formally, it is probably also, in some sense of si.

Web programming

Suppose you want to write a new Facebook (social network). What will you write to this? (From the hall they speak about HTML and CSS.) HTML, CSS is a design, and we want to add photos there, friends, comments to leave.

For the scripting part, that is, what will happen on the client side is JavaScript. Moreover, sometimes JavaScript is generated in another language and is sent (it happens that the script is generated ... because it is so easier sometimes to handle some changes in logic).

Surprisingly, it is written in PHP - and Facebook, and many other big projects. Of course, it was necessary to write my own things that it was still working fine, and not as "Trep-Lyap" was done, but they coped. In principle, more or less, on what you will write, but I do not advise Perl. Here and now, a clear case, no one writes anything from scratch for the web. Everyone writes some framework or something else. Online store? I downloaded the framework for the online store - well, all, wrote online store.

Programming for business

Next you want to write some boring application for the bank. Or, for example, do you have anyone who sells Sims? Perhaps you have ever bought a phone or something else they told you: "Here is the system hanging, we can not do anything." What will you write such an application? (Crying from the Python Hall) On Python, it is impossible to write, what are you?! Nothing for business should not write on Python. Why? Because when you write something on Python, you cannot detect a significantly amount of bugs in the process of writing. Python is in every way dynamically typed, and in general there can be so hidden the bug that it will emerge in such a situation that you can't even understand what these cruise users have done here that everything broke out. That is, it is better to write on Python for yourself, small scripts - you understand what is happening there and what is being done. Well, or something that is not a pity to throw out: you want to roll out something before competitors, so that that it will break in times. You wrote on Python and all - you captured the market. And if you write something for a long time, for example, a bank application is some kind (so that it approved the loans, something else) - you write it on Java. Because there is a serious, paper, money, documents, something else, but in it it is impossible in it, that everything will break, otherwise people will be offended - they have no money left and have not reached anywhere, because you have some kind The moment of the string has become a number or vice versa. So, it means, we take a methodically on Java and write, write ... Well, or on .NET, also such situations, in principle, there are. There, of course, you can also run into problems, but still the probability of this is somewhat lower.

Programming for the army, aerospace industry

And now imagine that you decided to send you to the moon on the rocket. What would you prefer to write a code that controls the rocket engines? Let's see. This is probably (the lecturer shows on Perl, Python, PHP, Ruby), it is not worth it - it slows down, something else happens, well, in general, I would not agree to fly on such a rocket. On C ++? I would also, honestly, did not entrust, because on C ++ too many ways to kill. When you are there somewhere in space, it is not very good.

Maybe on java? It seems there is quite reliably everything and the architecture is good, no wild types, no outputs beyond the limits of unnecessary memory. Suppose, the most responsible moment has come, and our Java decided to collect trash for us. We need to land, slow down, and it is: "No, Garbage is going." In general, not very much.

Honestly, I would prefer that the Pascal wrote this program. Of course, I do not really like Pascal, but somehow in such matters it would be very great.

Use immediately multiple languages \u200b\u200bto develop

Well, what you need to say about modern languages. Now many projects do not live in some one language, that is, they someone live in one language, part - on the other, another part is on the third. For example, if you have some web application that processes wild amounts of information, accessing disks (not even to databases, they are so huge that there is even a database that has not yet written) is probably written on any That low-level si to wildly write to the disk and all that. Naturally, writing the entire project on si is not worth it. Maybe there is some kind of intermediate logic written in Java, which refers to the blue functions for rapid appeals. Well, the Frontendian (then what the user is watching), of course, already written on something, on some scripts, on what is directly executed by the browser (JavaScript). And all this lives together and successfully interacts.

In the development of some applications, even big, sometimes people do what? They take and write a prototype on Python (as it will work everything), they throw out some kind of architecture are thought out. Writing on it really very quickly - they threw the prototype, experimented with him and said: "In! That's how cool! " And completely rewritten. It would seem that they did the work twice, from this twice the time left (well, in one and a half). But no! It often turns out that such a way is not bad, because if you write immediately on something, for example, on Java, and then decide: "No, let's refactoring, change the architecture completely and all that," then spend 10 times more time . Such things also exist and live.

Success conditions of any programming language

Now let's talk about why some good languages \u200b\u200bdid not survive, well, or live in very limited space. When Wirth saw that the bad firms apple, Borland, and all that, and all that, he came up with a language even better - Oberon. He was just wildly minimalist - that is, there were very few teams (lines? Why do we need strings? We will make an array of characters!). Well, something did not go with him, to the extent that might go.

Another thing. The US military asked them to develop a steep language, on which everything works and everything can be written. The result was a rather monstrous language ADA, on which, however, still writing something, but again - for the military only.

What is the problem? Why some languages \u200b\u200blike Python, who did not support him at the beginning, captured the market. PHP, which is also poorly designed, also took himself and captured the market (most). And all billions of dollars are embedded (the lecturer shows on the ADA) and did not go anywhere, nothing happened. What is it connected with? This is due to the fact that there is no infrastructure around these languages. That is, the language can be excellent, but there is no documentation until there is no community that is able to answer questions (on Stack Overflow) and, finally, the most important thing is not the large number of libraries, the language does not shoot. That is, you, for example, wanted to write a website on Oberone. And what about, why not? And the moroka begins ... You can't raise your web server on the Oberone to test lightly, any libraries you cannot connect, because there are no them on the obouron. And all this through some crutches is done, the forces go away, and in general you are spitting and write on clean si site instead of the obouron. And those languages \u200b\u200bwho know how to use libraries from other languages \u200b\u200blive well. The same Python in those places where it slows down. In general, all sorts of standard things like sorting and something else written on C, and he (Python) can interact with them.

Java also has Java Native Interface. This is essentially si, that is, there (in my opinion, all the time they want to ban, but it seems not yet forbidden) these languages \u200b\u200bcan interact with existing libraries (mostly blue). And at the expense of this take and work. It is understood by the idea that I am trying to convey to you, right? Do not write in those languages \u200b\u200bthat do not know how to connect a blue library. Well, if you want to use something cool. Well, and gradually they (languages) turn their own infrastructure. And they live somehow well.

Programming language and vocational guidance

Now let's talk about how to understand what you want in life. What happens of funny things? You can engage in some kind of system programming, right? You're cool to consider these bytes there, you want to run quadcopters, some cameras, something else to do. Then, probably, C is your choice.

If you want to write, maybe not the most interesting in the life of the application, but you are cool to design them, think about it all and earn a lot of money, for sitting and miss most of the time (for it you need to pay, if you qualitatively We miss), here they are - java, .net. You go to work in some bank, write, go to nine to work in a white shirt, get a good salary and write according to the recommendations of the best Java-Water, .Net sheep and all that ...

If you want to write any applications, some kind of browser, some toys, something else, then C ++ is great. If you want to write siters, then here they are languages \u200b\u200bon your choice (the lecturer shows on Perl, Python, PHP, Ruby), there is no big difference. The only thing - PHP will die earlier than Python, so if you are lazy to learn a new one, then learn Piton. I will not notice a big difference, but you die longer.

What happens to Ruby is also incomprehensible. Well, you can and PHP, if they have already learned, they are so simple that there is not so long.

And finally, there is another area of \u200b\u200bapplication of programming languages \u200b\u200b- this is when they do not use the programmer. Suppose you are a mathematician, a physicist, a chemist, an analyst, anyone, and you need to count something quickly, to analyze any data (biologists, for example, how many stairs live on the Commander Islands). You can sign all this in Excel in Excel or analyze anything. Also, Python is good to approach this, with the text you can work and libraries are full of all sorts of statistical and all. If you want to do any Machine Learning, some data to process, predict, then on Python it is now being done faster. True, it should be noted that the tasks are very different. For example, if you want to trade on the stock exchange instantly in conditions when quotes are changing all the time, then whatever your Machine Learning written on Python, people who are written on something will be more quick, will have time to buy everything before Everything comes you, even if they have the algorithms worse. Therefore, even these tasks of machine learning (some of them) require high productivity (and extremely high), and respectively, other languages.

The only way to understand what you want is to try it all. Now I will say as one of the visions of how you can try everything. How to become a programmer, and happy? So. From pure sheets start. Here you study at school with your mathematics, Russian language and other mandatory and optional subjects, and your knowledge in the field of programming is reflected on the board (the lecturer shows on an empty board) on this moment. And you want to become a happy person, to do a loved one, earn a lot of money and do not deny yourself and rejoice.

One way to achieve this. There are, of course, all sorts of inspirational stories about people who did not go to universities at all, or threw them and became billionaires, owners of companies, and so on. But it should be noted that most people who may not be billionaires, but also live well, after all the university at some point finished.

What is our situation with admission to the university (are you studying at school)? While you study at school, you need to understand what the next step - Enroll and take care of it. To pass the exam or win the Olympics. On the exam, you can use Pascal, C ++ (including Pure SI), Python (I will not further mention them). At the Olympics - the same Pascal, the same C ++, the same Python (we will talk about his problems now) and, most often, there is Java. There is still anything, depending on the Olympics, but not the essence.

What does the distribution schedule look like on the All-Russian Olympiad on computer science? People who participate in the All-Russian, the most steep Olympiad, what do they write on? He looks like this (here it means Pascal, and here about 2000, and here is approximately zero, here C ++, and here 2015).

In 2000, C ++ almost no one wrote. It took 15 years, and almost no one writes on Pascal, despite the fact that Pascal is modern. This is a language that can almost all the same. Just something to everyone became too lazy to learn this, every new trend, and everything continues to write on Borland Pascal, which of course nothing can. On C ++ people write any algorithms (STL) courtes - perfectly, wrote sort () and that's it. On the Pascal, on the usual, on the old one is a problem. They wrote some set (needed) - perfectly, on C ++ they wrote, on Pascal, again, the torment solid. On the new Pascals, you can do this, you can do it, but they cost money actually. Perhaps you did not notice this, but it is.

There is Java yet, but in Java there are a lot of letters. It is for large projects, and for small disposable programs it turns out quite bad, because a lot of extra letters. But also some people write, you can learn to write on it. But there is no one on his exam and the exam will still have to take themselves for the most part.

What is best for the exam? For the exam best (if you do not know anything and in school you are not taught) to learn Python. Some exam tasks are perfectly solved on it. At the Olympics, in general, it turns out that (used) C ++, because Python is very slow, not everything is solved on it.

Thus, you studied some small subset of the language and some algorithms (possibly) and many tasks shaped in order to get a diploma of our Olympics and entered the university to receive higher education.

I will tell you about how we are building a course in the tower, in what language the languages \u200b\u200bgo, as studying on applied mathematics and informatics of the Faculty of Applied Sciences, which we are doing with Yandex. In the first semester - Python (not in full, approximately how you should learn at school) and C ++ (wider, much wider than it is usually taught in schools). Let's say right now so that you are not afraid if you suddenly want to do, say: "What, I already know everything, why am I going to learn somewhere? Better I will go to another place. " For those who already know how to program well, there is an opportunity to immediately go to the study of algorithms, and in rather theoretical training. We are not looking at them now, it (shows on the board) for those who program are medium or in any way.

The first semester studies the foundations of Python, just that people learned to program and that no one really disappoint. Python is small where they teach in schools, mostly people comes with knowledge of Pascal or C ++. Mostly even Pascal, if it is a mass school. Well, so that no one disappoints, everyone is taught a new language (as if in equal conditions are). And C ++ is simply because from C ++ then you can go anywhere.

Then there is a course "Algorithms" and a separate term project. Classic algorithms with implementation. Not that in theory we took something, considered complexity. We took at the lecture, considered the complexity, at the seminar they took, implemented the algorithm. The project is students doing something complete. For example, one of the projects was: to calculate ... Suppose you have a lot of apartments in Moscow and you understand: "Oh, I have a lot of superfluous, I will rent some. And they put out some price, and no one wants something to shoot your apartment - probably too expensive. Or set some price, you immediately removed and you think: "Oh, probably I passed the cheap" - and also upset. That is, it was necessary to calculate how much an apartment is located? You drive data - it is evaluated to you. Such a sittik who consisted of several things: take offering, poured, apply some kind of machine learning algorithm (probably) simple and make a beautiful web face, in which you can choose something, drive something, some meters, Any number of rooms, the number of saunas, the number of jacuzzi in your apartment and roughly evaluate the cost. That is, some kind of complete, not very complex thing. It means here (the lecturer shows a course on algorithms) such a c ++ c ++, with a console introduction. Well, here (the lecturer shows the inscription "Project") something under the guidance of the mentor, possibly with databases, possibly with the parsing of texts and with something else.
Then, the third semester goes - this is a course called "Computer Systems". There is a very little associated assembler for understanding (very little) and then, something similar to clean SI and interaction with operating systems, systemic programming is essentially. And the project to the seminar is also something on all sorts of network interactions, sufficiently low-level: develop some utility, such as RSync (synchronization, perhaps you know. At clean SI, less, write an analogue of Rsync, which you will have the network Sync folders with all files to files and so on).

And finally, the fourth. I do not even know how to call it, it is such a vinaigrette technologies necessary for real development, for example for web development. That is, this is the practical application of databases, again something similar to what was done in the project (the lecturer shows the 2nd course project) but already more in-depth. That is, such more or less concrete things already, practical programming. In parallel with this, every theory goes, well, and here the science is still engaged.

And after two courses people diverge to engage where they are interested, because this thing covers quite widely the basics of programming and people at this point already understand that they do not want to do computer systems In no case (system programming, for example, did not like), but they want to engage in some theoretical algorithms, difficulty consider, invent new things, distributed or something else. Or, on the contrary, they think that they are not very ( the lecturer indicates a first-year line with Python and C ++) went, then ( the lecturer indicates a third-course string, with system programming) - How do not like, count bye and put all sorts of restrictions on reading and record, make streams, trees and something else. And in accordance with this, people choose some kind of direction and learn. That is, in principle, that you do not develop "Utanki Syndrome" - you were the first to see my Pascal and now say "Pascal - Power"; Or more advanced - you saw C ++ and started talking about everyone that C ++ force, and everything else is not very there.

You need to look at it (the lecturer shows the list of courses on the board) is wider - this is one of the ways that was chosen, in particular in the tower (recently appeared, so it is quite modern). There are other ways to meet. In other good universities, there are a bit in a different order and other accents are arranged. But also try people with everyone to introduce what they have.

As a programmer look for work

You are this ( lecturer shows a list of courses) They did everything, learned at the university, and something for two years worked more productively and you need to go to work. How to choose yourself something to work? First, you met everyone, they deepened somewhere and you know that you love. It is necessary to choose what you love naturally. Because if you like, you will invest, you will have motivation and everything will be fine. Because there is a matter of not only in money, the point is that you are interested and nice. Well, and you want to get into cool company, to get a job. Which person I personally would like to see? It comes to me, let's say, a hundred students - I have to take two to work or one. What do they come, I don't understand who they are, what are they, how are they? At best, they will show me a diploma who got at the university, and I will say: "In! This is a cool diploma, and this is not so cool! " And I can make a mistake, by the way. Maybe a person had a lot of free time, and he learned much better.

What would be nice? First, some open source project, which you have written from the beginning to the end. It is desirable if I do some infrastructure so that the data is rapidly considered, something else, then, of course, I would be interested in writing to me something opens. Not a Saytyik somehow did, but something on the topic. Why is it interesting to me? I can look at your code, I can see how often you committed, I can see how you reacted to bugs from users, bugs from developers who are used - everything is written, I do everything and think: "In, here the bug is no longer They closed, here you were impolitely answered the user, there is something else - I do not take. " That is, this is your personal project.

Next, what would be cool? I would like to see how you made command work. That is, you come to me for an interview and say: "We and the guys from the uni washed some kind of apparatus. I did a database there, they did some kind of mobile app there, and we still have a boy there, a designer girl, a boy on tech support. We were five people, and we made a cool project. " Well, I see what is really your project, I say: "What is yours?" I look again the code and understand that you can work in a team with people.

The programmer is not the one who sits one (indie such) in the garage, somewhere with the light off, it does not speak with anyone, becomes a beard and writes. Anyway, there is some interaction with people. With the boss, for example, which perhaps, sometimes swears (chiefs, they are not always kind). And I see that you can work with people and it makes me happy if you have a good team some. Even if not good, it is better than her absence.

What else would I like it personally? If you had shown themselves in large projects. For example, something in the Linux core was bought, if you are engaged in system programming, I corrected some bug. That is, they showed that you know how to read someone else's code and know how to make some changes to it. I look: "Oh, really, you figured out something difficult and some bugs corrected!" And I start to very rejoice from this. Because I have ... Well, I don't know ... That's my programmer quit, because the competitors offered him more salary, and I need to urgently stuck someone to hide his place - you. I see such a thing that you just wrote from scratch, and someone else's code do not know how to read and edit, and upset.

Well, finally, depending on the specific post there are different other things. If you are suitable for an analyst, I would like you to kaggle to have a data analysis tasks. If you are suitable for some algorithmic things, I would like to be in sports programming some algorithms have been done. Finally, if you wondered about the profession, read as an interview pass, "they met that there are some people there express great discontent:" I came, and I ask me what my hobby is. I'm sitting as a owl and I do not answer, because I do not have a hobby, "and think that HRs do it. In fact, they are trying to understand how benevolent you are also adequate. If you are unfriendly and inadequate, whatever you are there a genius and workaholic, a steep specialist with great knowledge, the team will be difficult to work with you, and alone you do not pull the project. In addition, even if you pull, you can imagine what a load for the company. And what will you come tomorrow and say: "Increase me a salary 10 times, otherwise I leave you." Often, companies do not want to get into such a situation. Therefore, education in itself adequacy and goodwill is as important (at least) as the development of some professional skills.

Summing up, what can I say? What languages \u200b\u200bare good, and what bad? Well, inside some group of languages, for example, between Ruby, Python and PHP, what to choose? Of course, the correct answer is Python, but in fact the difference between them in the number of bugs permissible, in the amount of something else - 5%, well, maybe 10%. That is, if you have already a ready-made project on PHP, no one will say in the right mind: "Let's rewrite everything on Python." Will be said: "Let's hire another PHP developers and will continue to write on PHP." Great, this is a good choice. It is clear if you suddenly write to write some kind of project, then it is reasonable to choose Python now. Although it also depends. Maybe you have a bunch of cheap PHP developers in the market, and Python expensive, and you think: "Yes, the technology is more cool, but I will save money on ready-made developers." And everything, excellent, you already come and work there.
How to choose between Java and C ++? Yes, the same thing happens. I think that by the time you will decide what language you start a new big project, you will gain knowledge in your professional field and can make the right choice. Now you have not yet need to do such a choice, and therefore I advise you to do what I like.

The basics, as I said, the most basics of programming (what is a function, what IF's, For's, Massives, something else) can be learned more or less in any language. For example, C ++, since there is a lot of things on it, and the specifics in it (at such a level) least, and the beaks of unnecessary writing the least. Well, and then, when you will learn any complex architectural things, learn and worry hard about this. That is, most importantly - try, look for what you like and when you understand that now for 4 o'clock in the morning, and you are for fun sit and write, because you like it - probably, at this moment it is clear that you found your own .

To solve computing tasks, graphic processors are increasingly used now, but the question is still open: how to write effective programs Under the appropriate configurations?

06/15/2011 Andrei Adinets

To solve computing tasks, graphic processors are increasingly used now, but the question is still open: how to write effective programs for the relevant configurations? Standard solution - a bunch of CUDA or OpenCL - allows you to relatively quickly implement the algorithm, but it is difficult to create a specific configuration with their help. Requires tools for programming high-level graphics processors that can be created, for example, with the help of expandable languages.

Three years ago, graphical processor equipment (Graphical Processing Unit, GPU) were considered only as video cards for a PC, now the attitude towards them changed - there were special GPU server models focused on solving computing tasks, the performance on double accuracy calculations increased, systems Record performance, which occupy top lines in the Top500. How to write effective programs for such machines? Standard response - a bunch of CUDA or OpenCL for GPU and MPI programming at the cluster level. These tools are available, are actively supported by manufacturers of equipment, many programs have already been written for them, but there are also disadvantages.

CUDA and OpenCL - extensions of the SI language, they are not difficult to study, although they are sufficiently low-level tools. With their help, you can relatively quickly implement the GPU algorithm, but the version optimized for a specific application and the configuration is much more complicated. All optimizations will be done manually, which will lead to an increase in the size of the code and deterioration of its readability. And although programs created using OpenCL will be transferred between a wide range of architectures, performance with such a transfer will not be saved. Wanted tools for programming GPU higher levels.

Create such tools can be created by different ways: enter a new programming language; add directives to an existing language, as is done in the PGI Accelerator or CAPS HMPP model; Take advantage of extensible languages. Expandable languages- Programming languages, syntax and semantics of which are not fixed, and can be changed depending on the needs of the programmer. Compared to traditional, expandable languages \u200b\u200bhave a number of benefits: it is easier to add new features; They are open; The study of new programming models on the basis of such languages \u200b\u200bis easier, since it is necessary to study only relatively small in terms of expansion; With the help of such languages \u200b\u200bit is easier to perform a fine configuration and optimization of programs.

Expandable languages

In order for the language to be expandable, it is necessary to be present in it:

  • the expansion mechanism without changing the compiler is equally supported by all compilers, which means, in particular, the presence of a standard interface of interaction with compilers;
  • designs for expansion and manipulation with a code of code, such as macros or quasicitization, to expand the language;
  • powerful means of writing extensions, for example, the expandable language itself and the other language, the power of which suggests that the extension code can do the same as any program in this language.

It turns out that languages \u200b\u200bthat meet these requirements are relatively few: Lisp, Nemerle, Seed7, Xoc and Stratego. At the same time, Xoc, which is intended to extend the SI language, uses a separate ZETA language to write extensions, and Stratego is the language of the subject area to create the source code converters. Nemerle is an extensible language using Wednesday. NET.

All expandable languages \u200b\u200bsupport mechanisms to work with a program of programs, and above all this design of the quasicitization - the object specification representing the program tree, using the most source code.

In the Nemerle language, a design is used for this, for example, it creates a tree consisting of a variable I declaration with an initial value of 0. Quasicitization is similar to the creation of string objects with string constants. In fig. 1 shows an example of quasicitization. Interpolation design allows you to substitute the values \u200b\u200bof the variables in a fixed pattern inside the quasicitization. In Nemerle, it uses $ (...) designs for this if you want to substitute a list, for example. Also in expandable languages \u200b\u200bthere are designs for the analysis of the program tree. In the Nemerle language, the operator Match (...) (...) is used, an analogue of the Switch from the SI language, as the branches of which are used by the quasicitization designs. In this case, the interpolation is treated as an ad new variables, which, if successful comparison, receive values \u200b\u200bof the corresponding subtrees. For example, for the matching operator Match (E) (| \u003d\u003e ...), if e contains a tree, in a variable a will fall, and in the variable b.

Tools for working with a tree of programs are used in language expansion designs. In Nerlele, these are macros - special functionsPerformed at the compilation stage and returning a fragment of a tree of a program that is substituted into the location of their call. At the same time, the macro takes fragments of the program as parameters, and can transform them. In principle, the macro can be caused in the same way as conventional feature; But the more interesting opportunity is to bind macro call to a special syntax. This allows you to enter new syntax constructs in the Nerlele language and thus expand the language.

In fig. 2 shows an example of a macro with a syntactic extension, which allows you to declare a multidimensional cycle with variables and the number of iterations for each measurement, and in Fig. 3 This is an example of a program conversion that makes this macro. Note that the macro that exercises such an extension takes less than 30 rows of the source code and in this case includes several error checks. With a traditional approach, the implementation of such an extension would require a significantly larger number of code and, in addition, would require the study of the internal compiler device.

Historically, the Macro mechanism in Lisp appeared first, the program in which it seems like a regular list and does not require special designs to work with the program tree, so it was in this language that the extensible programming has become the most distribution. Macros in Nemerle are similar in Lisp. In the XOC system, the extension mechanism is implemented through grammar expansion and parsing tree attributes. Any extension necessarily sets two attributes: type of syntax and expression on basic languagein which it is converted.

For expandable languages, the implementation of many standard structures is characterized by macros. In the NEmerle language, all cycles and conditional operatorsIn addition to Match, implemented through macros, and in Lispy macros are standard cycles and features of functions.

How to use languages?

For an expandable programming language, you can write structures that allow the most convenient way to program graphics processors, which was done as part of the NUDA project (NEMERLE UNIFIED Device Architecture), the purpose of which is to create the NEMERLE language extensions for GPU programming. OpenCL is used as an interface of interaction with the GPU and the target language to represent the program.

To begin, it is necessary to implement the execution on the GPU subset code in the Nemerle language. This must be supported by the usual language operators, such as cycles and branches, as well as work with simple data types, structures and arrays. The code for the GPU is submitted to individual functions, or in the nuda kernel. Each kernel is marked by a nukernel macro, which is generated by the code on the OpenCL code and the plug method to call the kernel on the host side. Before generating the code, the disclosure of all macros is carried out, with the exception of cycles and branch macros. If inside the kernel is required to call a function, this function must be marked by the NUCODE macro, which will generate code for this function in OpenCL. The core call is carried out using a Nucall macro; In addition to the kernel parameters, it is also transmitted to the configuration of the stream grid with which it starts.

Most often, the body of the cycle is used as a core for GPU, so I would like to immediately transfer the cycle to the GPU. In Nerlele, this can be implemented - the corresponding macro in NUDA is called NuWork. As required parameters, it takes the size of the stream block and on the basis of the current context and analysis of the cycle body code determines the set of variables that must be transferred to the kernel as parameters. The kernel body is generated from the body of the cycle, calculating the cycle indices through the global flow number, as well as the conditions that allows you to correctly execute the cycle, even if the global grid size is not divided into the size of the flow group. A NUCALL macro calls to the location of the cycle, which calls the generated kernel.

In principle, you can allow the use of NEmerle language arrays in GPU programs, but it leads to high overhead costs - the array is required to copy to the GPU memory each time the kernel is called, and then copy it back. Therefore, special types of arrays are used in GPU programs with lazy synchronization between GPU and CPU. This allows, on the one hand, not to clutch the text of the program by copying data commands, and on the other - to avoid overhead of copying data. For such arrays, as for ordinary arrays in Nerlele, memory management is used using garbage collection. To highlight memory for such arrays, there is a nunew macro, which must be applied to the usual memory allocation operator.

In fig. 4 on the left is a conventional arrays program, and on the right - a similar program, but performing calculations on the GPU. Get GPU programs from ordinary simply simply - only apply macros to cycles and memory allocation operations, and the amount of code is practically not changed. The program written using NUDA takes less than 20 lines of code. Similar programBut in the clean language SI and OpenCl takes more than 100 lines.

In addition to macros, facilitating the work with the GPU, the NUDA extension system also includes annotations for converting cycles. Annotations are essentially special macros. For example, the inline abstract is used to a cycle with a fixed number of iterations and performs its full scan. DMINE abstract performs a deep cycle scan. "Deep scan" means that the creation of several copies of the cycle body and stirring are performed not only for the most convertible cycle, but also for nested cycles, if independent.

Effect

Why should the programmer need to learn a new language and develop new libraries of expandable languages? The main answer is productivity. Having an algorithm from parallel cycles operating with arrays and recorded in the Nemerle language, it is enough to add several annotations to get a program for the GPU. At the same time, the program will be executed on any device with OpenCL support, including graphic processors NVIDIA and AMD, as well as x86 processors. To achieve the same with only OpenCL or CUDA technologies, it will be necessary to spend much more resources that will take place not only to write the source code, but also to debug interaction between the host and GPU.

Another reason is the performance of the created code. On CUDA or OpenCL, the cycles conversion will be done manually, and separately for each architecture. This is a long and wrapped error process, and the resulting code is difficult and inconvenient for accompaniment. With NUDA, this work can be done with the help of annotations. For example, for multiple cores, you can optimize the convolution of images or multiplication of matrices with the inline and dmine annotations. Without increasing the size of the source code, it is possible to achieve an increase in productivity in two or five times. At the same time, if the same transformations were performed manually, it would lead to an increase in the code at times, and sometimes an order of magnitude, not to mention the time spent time on debugging and selecting optimal sweep parameters. For example, a universal annotated program from seven rows in NUDA multiplication of a transposed matrix on a double-accuracy matrix is \u200b\u200bperformed on the NVIDIA TESLA C2050 only 40% slower the right thing at the moment of implementation (Cublas 3.2). A similar program written by hand would occupy 70 lines of code. Naturally, for standard tasks, you can manually write code once to increase productivity, but for specific tasks, the reduction in labor costs and productivity will be very useful. Finally, the increase in productivity also includes the creation of extensions themselves: to create them with the help of expandable languages \u200b\u200bis easier than using traditional tools. The entire NUDA system, despite its functionality, takes only 12 thousand lines of code, not counting tests. This is relatively few, for example, the NEMERLE language compiler (assembly 9025) takes about 130 thousand lines.

Expansioned language is a powerful tool, and its use in parallel calculations is still in the most initial state. There are many interesting tasks in the development of parallel programming languages, and any of them can be solved using a combination of extensions and libraries. You can add to the language asynchronous blocks of code and parallel cycles, you can create comfortable designs For programming cluster Systems, such as distributed arrays. Finally, it is possible using extensions to build a full-fledged parallel programming language, such as chapel or x10.

Andrey Adinets([Email Protected]) - M.N.S. Nivz Moscow State University (Moscow).



The writing of most modern computer programs is carried out when using high-level languages. It is noteworthy that many of them have been developed in the 60s and 70s, but are still relevant. What other facts about high-level languages \u200b\u200bcan we celebrate? What are the most common varieties of relevant solutions?

Essence of high-level programs for writing programs

High-level programming language - tool related to machine-independent category. What does this mean? The fact is that programming languages \u200b\u200bare divided into several categories.

There is a machine code: a set of algorithms that are designed to manage the user directly by hardware elements of the computer. Their entity will be fully machine-dependent: only certain algorithms are suitable for specific types of PCs.

There are languages \u200b\u200bassembler. In fact, they are a superstructure over those designed for low-level control of PC hardware components by means of a machine code. But in many signs, the assembler languages \u200b\u200bare also accepted to relate to machine-dependent. As a rule, they are adapted to a specific variety of PC hardware component. Their main task is to simplify the user management of the computer through appropriate low-level communications.

In turn, the high-level programming language allows the user to interact with the PC, regardless of which particular equipment is installed on the computer. Therefore, it should be attributed to machine-independent. When writing operating systems, the high-level programming language is most often involved. But there is an OS, which is written on the assembler. Low and high levels can be used simultaneously. A person, giving PC high-level teams, must, anyway, to convey them to specific hardware components, and this function can be implemented when using the assembler languages \u200b\u200bsimultaneously with high-level, which is involved in the structure of the operating system.

Translator

The most important elements that are in high-level programming languages \u200b\u200bare translators. Their function can be different. Among the key areas of application of translators - "Translation" of commands generated in the high-level programming language, in the machine code, understandable to a specific hardware component of the PC, for example, the processor. Translators that perform this function are also called compilers. There is another variety of relevant components - interpreters. They are intended, in turn, for the "translation" of high-level teams in those that are understandable to the operating system or any program.

Classification of high-level languages

High-level programming languages \u200b\u200bcan be classified for different bases. A scheme for which they are divided into the following main varieties are common:

Procedurally oriented (operate as a tool when processing information at any stage of calculations);

Problem-oriented (used as a means of solving industry and applied tasks formed by expanding the applications of PCs);

Object-oriented (can be particular cases of languages \u200b\u200bof the first two types, however, adapt to the use of a wide range of developers with different levels preparation, for example, in the form of a solution with a visual interface).

Now consider some historical and modern high-level programming languages, which correspond to this classification.

Procedural oriented languages

Such can be attributed to Fortran. It is considered the first high-level programming language created for widespread use. It is characterized by a simple structure. Procedural-oriented languages \u200b\u200balso belongs to Beysik. It is considered one of the most frequently used programming. An example of another procedural oriented language - si. Initially, it was created for UNIX OS. On its basis, the C ++ language was subsequently created, complemented by object-oriented programming tools. Another language belonging to the category under consideration is Pascal. Often also involved in training programming. The possibilities of this language allow it to be used as a very powerful tool for developing professional species of software.

Problem-oriented languages

These include Lisp, Prologue. The first language was developed in 1962 - a few years after the creation of Fortran. It is considered, in a way as the second in history. Actively involved as a tool for the work of programmers with strings of characters. In practice, Lisp was used in systems classified as expert, as well as those that were intended for analytical calculations. The prologue was widely used in the field of logical programming. In practice, most often involved in the management of algorithms of artificial intelligence in the respective systems.

Object-oriented languages

We now study the examples of high-level programming languages \u200b\u200bthat refer to the category of object-oriented. Among those - Visual Basic, Delphi, Visual Fortran, noted above C ++, as well as Prolog ++. In fact, all of them are based on procedurally oriented languages. However, it is assumed to be a significant addition to visual elements of the management in order to subsequent development of the necessary algorithms by developers accustomed to other tools. Thus, the first high-level programming language - Fortran - may be studied by IT experts through the possibilities of Visual Fortran. A similar method can be quickly mastering a base or prologue.

It is carried out, in turn, when using Delphi programming in the language of the high-level Object Pascal. There are a large number of other software development environments, classified as an object-oriented language. This field of development technologies is actively developing.

Fortran and Lisp - the first and second high-level languages

We will study more, as the first high-level programming language appeared - Fortran, as well as the Lisp, considered the second. In 1954, the developers from IBM, headed by John Bacus, created a language by which programmers were able to significantly alleviate the interaction with the PC, which until the moment was carried out through machine commands or assembler. He was called Fortran and soon became known in the USSR under Russified item. Fortran has become a popular tool for scientific computing.

The main revolutionary element proposed by the IBM specialists, became actually the same compiler, designed to be an alternative to assembler. In the first years of the practice of writing programs when using Fortran, many developers considered the compiler not quite a successful solution, first of all, in terms of labor costs. Many machine codes were indeed prepared easier than when the translator is involved. However, as a rapid increase in computer performance, the programmers began to realize that without using the compiler, an effective software that will fully use the computing power of the PC, to create extremely problematic. So, the beginnings of developers from IBM were further developed. The main syntactic structures of the high-level programming language of Fortran in many cases began to use as basic when creating new solutions.

An example of achieving practical results in the development of concepts laid down in Fortran can be considered the creation of Lisp. This language was developed in 1958, however, he acquired broad fame somewhat later - in the 1960s. Lisp was developed by John McCarthy and published in one of the popular magazines for IT specialists. The main purpose of the language under consideration is to process lists. Lisp became popular in the development environment of artificial intelligence systems. On its basis, languages \u200b\u200bsuch as Planner, Scheme, as well as Common Lisp, were created. Also also provided a significant impact on many modern software development tools. The structure of high-level programming languages, popular today, is largely based on Fortran and Lisp algorithms.

It will be interesting, however, to consider other approaches to the classification of the considered tools of the software development tools.

Universal high-level languages

So, modern experts allocate universal high-level languages. These include, in particular, those that have been developed in the 60s. Key characteristics:

Orientation on a wide range of tasks (first of all related to computational);

A large number of language structures and algorithms;

Significance not only for its time, but also for the modern stage of development of computer equipment;

Support in the relevant languages \u200b\u200bof the imperative methodology.

Universal languages \u200b\u200bare fundamental in the relevant IT development industry. It can be noted that so far they do not have direct analogues in the part of the internal structure. Actually, this largely explains the relevance of the use of relevant languages \u200b\u200bin modern object-oriented interfaces. Also in general in marked languages \u200b\u200b- data type. This factor largely predetermines their versatility. Among the most remarkable properties of languages \u200b\u200bbelonging to the category of universal - continuity. Thus, historically later languages \u200b\u200bare usually based on the concepts of predecessors.

Unique languages

Some IT experts allocate in an independent category "Unique Languages". Among those: APL, Cobol, Forth, SETL, as well as CLU. What is their specificity?

The most important aspect of the APL is the involvement of arrays (vectors and matrices) as a key structural type. The specifics of the COBOL language - in the orientation on the commercial sphere. Thus, it is advisable to use it when solving problems associated with a standardized format of representation of the results. Forth language is characterized by the use of postfix software records, as well as using stylish notation. In the SETL language, the sets of values \u200b\u200bare used as one of the key types of data. The high-level programming language is also clu. Its main feature is to use the concept of working with abstract data types. Many IT specialists see the logical emergence of new solutions based on unique languages \u200b\u200b- such as, for example, Object-Oriented Cobol.

Facilities parallel programming

This category may include a huge number of solutions. In turn, parallel programming languages \u200b\u200bmay have a large number of grounds for classification. For example, the method of organizing processes. This base involves the classification of means of parallel programming based on the presence in them:

Soprograms;

Branches;

Associations;

Parallel brackets;

Algorithms of work with processes.

Another basis for classifying the languages \u200b\u200bof the type under consideration is methods of synchronization of processes. The corresponding solutions may thus include:

Semaphores;

Monitors;

- "Randevu";

Critical sections;

Remote challenge procedures;

Transactions related to category atomic.

The languages \u200b\u200bof the type of type include Modula-2, Bliss, Concurrent Pascal, DP, Argus.

Language Family C.

Above, we considered as an example of a high-level programming language such a solution as C. In fact, it forms a whole family. Languages \u200b\u200bbelonging to it are private structures C. So, its addition to various object-oriented components led to the development of C ++. After substantial filtering of a row of C constructions, Java appeared. It can be noted that Java was created in many ways under the influence of the concepts of the Oberon project, which is managed by Niklaus Wirth, the creator of the Pascal language. Does the high-level JavaScript relate to high-level JavaScript? Of course, yes, despite the narrowness of the application - as a tool for developing web pages. But the high-level programming languages \u200b\u200bdo not include, in particular, HTML, XML and SGML. They are classified as hypertext markup tools.

Pascal Language Family

High-level programming languages \u200b\u200bPascal also form a separate family. On the basis of Pascal was, actually created Oberon, classified as an object-oriented type language. Key feature Oberon - in the ability to ensure the safety of types. Not counting Oberon, the languages \u200b\u200bof the Pascal family can be attributed to modula-2, as well as Component Pascal.

ADA language family

The fundamental in the relevant category of languages \u200b\u200b- ordered by the US Department of Defense ADA. It was created in the late 70s - early 80s. Characterized large quantity functions, opportunities, versatility. The ADA family includes solutions such as Cedar, Modula 3.

SIMULA LANGUAGE FAMILY

The Simula language is distributed in the programming branches associated with imitation modeling. The specificity of the appropriate solutions - in the involvement of a specific nucleus. Its use allows you to apply various extensions adapted to one or another applications. Based on Simula, an object-oriented SMALLTalk language was created, as well as Beta, characterized by the ability to combine within a single abstraction of algorithms, reflecting work with data, procedures, and control. Beta objects can be considered in a different context, for example, as variables, functions or parallel systems.

Title of the report

Modern programming languages \u200b\u200band their use

The author of the project

Project structure

● Programming Language Classification Scheme

● Programming Languages \u200b\u200bClassification

● Programming Languages \u200b\u200bOverview

● Useful resources

Classification Scheme Programming Languages

Classification of programming languages

Procedural programming - There is a reflection of the background of the Nymanovsk architecture of the computer. The program written in procedural language is a sequence of commands that determine the problem solving algorithm. The main idea of \u200b\u200bprocedural programming is the use of memory for data storage. The main command is assigning, which is determined and the computer memory changes. The program makes conversion of memory content by changing it from the source state to the resultant.

There are similar procedure programming languages:

 Fortran language was created in the early 50s of the 20th century for programming scientific and technical tasks;

 Cobol - created in the late 60s of the 20th century to solve problems of processing large amounts of data stored on various data carriers;

 Algol (1960) is a multi-purpose advanced programming language. For the first time, the concepts of the "block structure of the program" and "dynamic memory distribution" were introduced;

 In the mid-60s of the 20th century, a specialized programming language for beginners was created - Basic. It is characterized by simplicity of development and the presence of universal means for solving scientific, technical and economic tasks, as well as tasks, for example, gaming.

All languages \u200b\u200blisted above were focused on different classes of tasks, but they were in one way or another were tied to a specific computer architecture.

 In 1963-1966, a multi-purpose universal language PL-1 was created. This language is well adapted for research and planning computing processes, modeling, solving logical tasks, developing mathematical support systems.

 Pascal Language (Pascal) (1968-1971GG) - Procedural programming language is the most popular for PC, which is currently successfully applied. The Pascal language is based on a common task to private (simpler and less in volume). The basic principles with which Pascal possesses can be: a) structural programming, which is based on the use of subroutines and independent data structures; b) Programming "top-down" when the task is divided into simple, independently solved tasks. Then the solution of the initial problem is completely topped down.

 To the procedure programming languages \u200b\u200binclude the language of hell (1979 d), the language is named after the first programmer of the dooms of the Bairon lavlayers. It features the modularity of structures.

 SI language (beginning of the 70s) also relates to procedural programming languages. Its initial option was planned as a language for implementing the UNIX operating system instead of the assembler. One of the features of the SI language is that the differences between expressions and operators are smoothed, which brings it to the functional programming languages. In addition, there is no concept of procedure in the C language, and the use of subroutines is based on the concept of a function that can combine the capabilities of the procedure. On the one hand, on the set of control structures and data structures, it can be attributed to high-level languages, and on the other - it has a set of means of direct access to the computer functional nodes, which means that it can be used as an operating language.

Object-oriented programming (OOP) - This is a programming method, when using the main elements of programs are objects. In programming languages, the concept of an object is implemented as a set of properties (data structures characteristic of this object), methods of their processing (subroutines for changing their properties) and events for which this object It can react and, which lead, as a rule, to a change in the properties of the object. Combining data and treating them processing procedures in one object is called encapsulation and is one of the most important principles of the OOP.

Another fundamental concept is the class. The class is a template based on which a specific program object can be created, it describes properties and methods that determine the behavior of objects of this class. Each specific object having the structure of this class is called a class instance.

The next most important principles of the OOP are inheritance and polymorphism. Inheritance involves the creation of new classes on the basis of existing and allows the child to have a descendant to have (inherit) all the properties of the parent class.

Polymorphism means that born facilities have information about which methods they should use depending on which the chains are in which they are.

Another major principle of the OOP is modularity - objects enclose the full definition of their characteristics, no definitions of methods and properties should be located outside it, it makes free copying and the introduction of one object to others.

The most advanced programming languages \u200b\u200bare C ++ and Java. Since the mid-90s, many object-oriented languages \u200b\u200bare implemented as visual design systems in which the interface part software Product Created in dialogue, virtually no writing software operators. Object-oriented visual design systems include Visual Basic, Delphi, C ++ Builder, Visual C ++. VBA language (Visual Basic For Application) - Application Language Microsoft Office. (Excel, Word, Power Point, etc.). VBA complies with the main syntax of the language and programming rules of Basic - dialects, allows you to create macros to automate the execution of certain operations and graphic interface User integration between various software products.

Declarative programming languages

These include functional and logical languages Programming. Functional programming is a way of drawing up programs in which the only action is a function call. The functional programming does not use memory as a location for data storage, and, therefore, intermediate variables, assignment and cycles operators are not used. The key concept in functional languages \u200b\u200bis an expression. The program written in the functional language is a sequence of describing functions and expressions. The expression is calculated by the information complex to simple. All expressions are recorded in the form of lists. The first language was Lisp (LISP, List Processing- processing of lists) was created in 1959. This language allows you to process large amounts of textual information. Logical programming is programming in terms of logic. In 1973, the language of artificial intelligence Prolog (PROLOG) was created (Programming in Logic). The Prologue program is based on the sequence of facts and rules, then the approval that Prolog is trying to prove with the help of the rules. The language itself is looking for a solution using the search and comparison methods that are laid in it. Logic programs No high speed differ, since the process of their execution is reduced to the construction of direct and reverse chains of reasoning with a variety of search methods.

Overview of programming languages

Assembler

Computer programming languages \u200b\u200bare divided into 2 main groups:

1) low-level languages;

2) high-level languages.

Low level languages \u200b\u200binclude assembler languages. They received their name on behalf of the Assembler's system program, which converts source programs written in such languages \u200b\u200bdirectly to the codes of machine commands. Parts here are operators, and the assembly result of the sequence of machine commands The assembler language combines the advantages of the language of machine commands and some features of high-level languages. The assembler provides the possibility of applying symbolic names in the source program and eliminates the programmer from tedious labor (inevitable when programming in the language of machine commands) on the distribution of computer memory for commands, variables and constants.

The assembler allows you to flexibly and fully use the technical capabilities of the computer, as well as the language of machine commands. The source translator in the assembler is easier than a translator required for a high-level programming language. At the assembler, you can write as effective in size and time to execute the program, as well as the program in the language of machine commands. This dignity is absent in high-level languages. This language is often used to program real-time system. technological processes and equipment, ensuring the operation of information and measuring complexes. Such systems typically have high requirements for the volume of occupied machine memory. Often the assembler language is complemented by means of forming a macrocomand, each of which is equivalent to a whole group of machine commands. Such a language is called the language of the macroassmbler. The use of the poppy "construction" blocks and brings the language of the assembler to the high level language. Assembler machine-dependent language, i.e. it reflects the characteristics of the architecture of a particular type of computer

Pascal

Pascal programming language was developed by Professor of the Department of Computer Engineering of the Swiss Federal Institute of Technology Nikolas Virgin in 1968 as an alternative to existing and all complicated programming languages, such as PL / 1, Algol, Fortran. The intensive development of Pascal led to the appearance in 1973 its standard in the form of a revised message, and the number of translators from this language in 1979 exceeded 80. In the early 80s, Pascal even more strengthened his position with the advent of MS-Pascal and Turbo translators -Pascal for PEVM. From this time, Pascal becomes one of the most important and widely used programming languages. It is essential that the language has long been beyond the scope of academic and narrow professional interest and is used in most universities of highly developed countries not only as a user tool. The most important feature of Pascal is the embodied idea of \u200b\u200bstructural programming. Another essential feature is the concept of data structure as one of the fundamental concepts.

The main reasons for Pascal's popularity are as follows:

Easy language allows you to quickly master it and create algorithmically complex programs.

Developed tools for presenting data structures provide convenience of both numeric and symbolic and bit information

The presence of special techniques for creating translators from Pascal simplified their development and contributed to widespread language

Optimizing properties of translators from Pascal allow you to create effective programs. This served as one of the reasons to use Pascal as a language programming language.

In the Pascal language, the ideas of structural programming are implemented, which makes the program visual and gives good opportunities for developing and debugging

BELL LABS Employee Denis Ritchci created the C language in 1972 during collaboration with Ken Thompson, as a tool for implementing the UNIX operating system, however, the popularity of this language quickly earned the framework of a particular operating system and specific tasks System programming. Currently, any instrumental and operating system cannot be considered complete if its composition does not include the C language compiler. Ritchee did not invent a si simply from the head - the prototype was the language of Bi developed by Thompson. SI programming language was developed as a tool for practitioners. In accordance with this, its author's main purpose was to create a convenient and useful language in all respects.

SI is a system of a system programmer and allows you to deeply climb into the most subtle mechanisms for processing information on a computer. Although the language requires a programmer of high discipline, it is not strict in formal claims and allows for brief formulations.

C - modern language. It includes those management designs that are recommended by the theory and practice of programming. Its structure encourages the programmer to use downward design, structural programming and step-by-step modules.

C - powerful and flexible language. Most of the UNIX operating system, compilers and interpreters of Fortran languages, Pascal, Lisp, and Baisik are written precisely with its help.

C - convenient language. It is sufficiently structured to maintain a good programming style and at the same time not connected with tight restrictions. In some sense, the SI language is the most universal, because In addition to the set of means inherent in modern high-level programming languages \u200b\u200b(structural, modularity, specific data types), it includes software for programming practically at the assembler level. A large set of operators and means requires a programmer caution, accuracy and good knowledge of language with all IHO advantages and disadvantages.

C ++ has appeared in the early 80s. Created by Bierian Sturastrup with the initial purpose to save himself and their friends from programming on assembler, SI or various other high-level languages.

According to the author of the language, the difference between the ideology of SI and C ++ is approximately as follows: the program on C reflects the "method of thinking" processor, and C ++ is a method of thinking programmer. Responding to the requirements of modern programming, C ++ focuses on the development of new data types of the most fully relevant concepts of the chosen area of \u200b\u200bknowledge and tasks of the application. The class is the key concept of C ++. A class description contains a description of the data required to represent objects of this type and a set of operations for working with similar objects.

Unlike traditional C and Pascal structures, class members are not only data, but also functions. Functions - class members have privileged access to data within the objects of this class and provide an interface between these objects and the rest of the program. With further work, it is absolutely not necessary to remember the internal structure of the class and the mechanism of operation of the built-in features. In this sense, the class is similar to the electric furniture - few people know about his device, but everyone knows how to use it.

C ++ language is a tool object programming, the latest methods of designing and implementing programs, which in the current decade is likely to replace traditional procedural programming. The main goal of the Creator of the Language of Dr. Biern Strastard was equipped with the C ++ constructions, allowing to increase the productivity of programmers and facilitate the process of mastering large software products.

Abstraction, implementation, inheritance and polymorphism are the necessary properties with which the C ++ language has, so that it is not only universal, as well as the C language, but is the object language. Fortran Fortran is a widely distributed language, especially among users who are engaged in numerical modeling. This is explained by several reasons:

The existence of huge funds for applied programs on the fortress accumulated over the years, as well as the presence of huge number programmers who effectively use this language;

The presence of effective morthrane translators on all types of computer, and the version for various machines is quite standardized and the transfer of programs from the machine to the machine is usually not large;

In the initial orientation of Fortran on physical and mathematical and technical applications; In particular, it manifested that for a long time he remained the only language with a built-in integrated type of variables and a large set of built-in functions to work with such variables.

Over the past period, a new methodology and programming philosophy has been formed. Since the beginning of the 70s, Ford has been deservedly criticized. In 1977, a new standard of Fortran-77 was adopted. It took a long time to create a new standard, but now it is already possible to assume that its development is completed and the new standard Fortran-90 began to enter into the practice of Urthran users. Only on IBM PC machines there are several translators for example, Watfor, Lap-Fortran, etc. But the largest distribution on the machines of this type received various versions of the Fortran-77 translator. The MS-FortRan 5.0 translator released in 1990 almost fully complies with the Fortran-90 standard. Most large scientific and technical application programs are written on Fortran because it has tolerability and stability, as well as due to the presence of built-in mathematical and trigonometric functions. An additional, integral part of any application program in Fortran is an extended graphic library, which allows using various graphic data and images.

The language was created mainly in 1975 - 1980 as a result of a grand project undertaken by the US Department of Defense to develop a single programming language for the so-called built-in systems (i.e. control systems of automated complexes operating in real time). First of all, on-site control systems for managing military objects (ships, airplanes, tanks, rockets, shells, etc.) were meant. Therefore, the decisions taken by the authors do not consider universal. They need to be perceived in the context of the features of the selected subject area. The adaplation language arose as a result of an international competition of language projects held in 1978-1979. Participants should have been satisfied pretty tough, designed under the auspices of the US Department of Defense with the requirements. Interestingly, all the languages \u200b\u200bthat have come down to the last rounds of this contest were based on Pascal. In this regard, the hell can be previously characterized as Pascal, developed, taking into account the five basic requirements listed above. At the same time, the authors went mainly along the path of expansion of Pascal with new elements. As a result, it turned out a significantly more complex language.

Kobol.

Cobol is a relatively old language, designed primarily for research in the economic sphere. The language allows you to effectively work with a large number of data, it is saturated with a variety of search capabilities, sorting and distribution. About widescreen cobol programs of English language, They say that they are understandable even to those who do not own cobol, as the texts in this programming language do not need any special comments. Such programs are called self-documenting. Other advantages of cobol usually include its structure. Pretty powerful compilers from this language are designed for personal computers. Some of them are so effective that the program devically debugged on a personal computer is easy to transfer to large computers.

Listing the minuses should not be remembered that only the simplest algebraic calculations can be programmed on the cobol. For engineering calculations, this language is not suitable. Another reason, which to some extent restrains the development of the language, is the presence of a specially created industry committee in the United States, which produces standards, in compliance with the Government Commission. As it always happens in such cases, firms engaged in software development are not hurry to customize their billets to the strict requirements of the Commission, there is no competition of versions, and eventually loses the dissemination of the language

PL / 1 was developed in 1964-1965 by IBM. PL / 1 refers to the number of universal languages, i.e. it allows you to solve problems from different areas: numerical calculations, text processing, economic tasks, etc. By its capabilities, it overlaps such languages \u200b\u200bas Fortran, Algol-60 (created for Numerical calculations), Cobol (for economic tasks), although, due to a number of reasons, these languages \u200b\u200bof the PL / 1 could not be suppressed.

PL / 1 contains all the basic designs characteristic of the so-called high-level languages, as well as a number of specific means, convenient for practical programming. The language resembles a designer with a large number of parts - the user is enough to master only those parts of the tongue that is practically necessary for it. Its operators are rather tanks, which often allows you to get a record of the program more compact than in other languages. A knowledgeable PL / 1 programmer disappears any other language of the same or close class.

At the same time, the PL / 1 has a number of shortcomings that impede the study and use of the language. The main ones are such. Firstly, there are many duplicate means of them difficult to remember, it is not clear that when applying, moreover, it reduces both the broadcast speed and the speed of program execution. Secondly, programs are not entirely machine-independent.

Module

We can assume that the history of the module language begins in 1980, when Niklaus Wirth, one of the outstanding information theory specialists, known for most computer technician specialists, mainly as the Creator of Pascal, published a description of the new programming language called the module. In contrast to Pascal, who was on the intelligence language for learning programming, the module from the very beginning was a language for professional system programmersBy continuing the best traditions of its predecessor and enriching them with new ideas that meet such requirements for programming languages \u200b\u200bas structurality, modularity and ability to expand. Like many other programming languages, the module was subjected to evolution, during which its initial name was redone in the name of Module-2. Simultaneously with the development of the language of the module, new compilers were created for him, however, none of them could compete with the best realization of Pascal and Si languages, for example, developed by Borland. In this transitional module language, the best period was considered to be implemented by Logitech, which in their characteristics losing Turbo Pascal and Turbo Si. Only in 1988, after the appearance of the Top Speed \u200b\u200bsystem on the US market, Module-2 took a worthy place among procedural languages \u200b\u200bintended for system programming. The incustration of the popularity of the Top Speed \u200b\u200bsystem contributed several factors: convenient and, moreover, the operational environment is easily changeable at the request of the users, the fast compiler and the selective editor of the connections. But the most significant turned out that created programs Different in high speed and occupied not much place in memory.

Beysik

Basic - Beginner's All-Purpose Symbolic Instruction Code - "Universal Symbolic Code of Instructions for Beginners"). Direct descendant of Fortran and still the most popular programming language for personal computers. Becisik appeared in 1963 (called the author would be difficult, but the main merit in his appearance undoubtedly belongs to the Americans John Kemen and Thomas Kurtu). Like any benefits, the simplicity of Beysik turned around, especially in earlier versions of structuring difficulties; In addition, Baisik did not allow recursion - an interesting technique that allows you to make effective and at the same time short programs.

A powerful baseball compilers have been developed, which provide not only rich vocabulary and high speed, but also the possibility of structural programming. According to some programmers, the most interesting versions are GWBasic, Turbo-Basic and Quick Basic.

At one time, the appearance of Quick Basic marked the birth of a second generation of programming systems in the Baysik language. It provided the possibility of modular and procedural programming, creating libraries, compilation of ready-made programs, etc., which brought it to the level of such classical programming languages, like SI, Pascal, Fortran, etc. Moreover, due to the lack of the official standard of the Baysik language, its implementation QUICK BASIC has become an actual standard. Unconditional leaders among the various versions of Baysik were Quick Basic 4.5 and PDS 7.1 of Microsoft, which appeared in the late 80s.

Lisp.

Lisp Language was proposed by J. McCarthy in work in 1960 and focused on developing programs for solving problems of non-numerical nature. The English name of this language - Lisp is the abbreviation of the List Processing expression (the processing of lists) and well emphasizes the main area of \u200b\u200bits use. The concept of "list" turned out to be very capacious. In the form of lists it is convenient to represent algebraic expressions, graphs, elements of finite groups, sets, output rules and many other complex objects. Lists are the most flexible form of information presentation in computers memory. It is not surprising that there is a convenient language specifically designed to handle lists, quickly gained popularity.

After the appearance of Lisp, various authors proposed a number of other algorithmic language oriented problems in the field of artificial intelligence, among which the playner can be noted, snobol, reflux, prologue. However, this did not prevent Lisp to remain the most popular language to solve such tasks. During the almost forty-year history of its existence, a number of dialects of this language appeared: Common Lisp, Mac Lisp, Inter Lisp, Standard Lisp, etc. Differences between them do not bear a fundamental nature and are mainly reduced to a slightly different set of built-in functions and some difference in the form of recording programs. Therefore, a programmer who learned to work on one of them can easily master and any other. The great advantage of Lisp is its functional orientation, i.e. programming is conducted using functions. Moreover, the function is understood as a rule, comparing the elements of some class, the corresponding elements of another class. The process of comparison itself does not affect the operation of the program, only its result is important - the value of the function. This allows you to easily write and debug large software complexes. Clarity of programs, a clear distinction between their functions, the absence of caerz side effects when they are executed mandatory requirements Programming such logically complex tasks, which are tasks of artificial intelligence. The programming discipline becomes especially important when not one person works on the program, but a whole group of programmers.

LISP programming language is intended primarily for processing. symbolic information. Therefore, it is natural that in the world of Lisp, the number is played far from a major role. The main types of data in the lispy are called "atom" and "point pair".

Prologue

Logical programming language is intended for the presentation and use of knowledge about a certain subject area. The programs in this language consist of a certain set of relationships, and its implementation is reduced to the conclusion of a new relationship based on the specified. The prologue implements a declarative approach, in which it is enough to describe the task using rules and statements regarding the specified objects. If this description is quite accurate, then the computer can independently find the desired solution.

Object Pal

Object PAL is a powerful programming language. Object PAL is an object-oriented, managed by events, a visual programming language. At the initial level of OBJECT PAL functionality, you can perform data operations, create special menus, as well as manage the data entry session. Events in Object PAL generate commands that simulate the effect of using Paradox in interactive mode. It is possible to automate frequently performed tasks, as well as over the tables, forms and reports of action that were not available in interactive work. Object PAL also provides all means of full-featured programming language in windows Environment. You can use OBJECT PAL to create completed systems that implement a special menu system, help system, as well as all kinds of data checks. In OBJECT PAL, you can save your developments in a dynamically component library, access to which will have several forms. In addition, you can establish communication with other dynamic libraries containing the program written in such languages \u200b\u200bas SI, C ++ or Pascal.

Object PAL can be used as a tool for creating offline programs. You can write the completed Windows application and run it under Paradox.

Object PAL supports the dynamic data exchange mechanism as both the client and the server. In addition, Object PAL supports the mechanism of work with composite documents as a client. In addition to what has been said, it is possible to include multimedia in your application, providing the application performed by sound and animation effects.

Created by BBSE, the implementation of the DBEE language is a successful hybrid object orientation and traditional programming methods. It allowed to create systems using object design and use conventional receptions for processing records. The big achievement of the company B Bohr was that it very well combined object and procedural programming techniques. The first version for Windows gave the user the most powerful object tool in the database software market. It allows you to create new classes of objects that possess the properties of inheritance, encapsulation and polymorphism. It also allows you to program these objects using traditional DBASE commands, ideally suitable for managing simple table databases. All this gives an indisputable advantage - without much difficulty transition to object programming techniques, the transition is so complex, for example, as in Paradox DBMS.

The Java language originated as part of the project to create advanced software (software) for various household appliances. The project implementation was launched in C ++, but soon a number of problems arose, the best means of combating the tool itself - programming language. It became obvious that a platform-independent programming language is needed, which allows you to create programs that did not have to compile separately for each architecture and one could use on various processors under various operating systems. The Java language was required to create interactive products for the Internet. In fact, most of the architectural solutions adopted when creating Java were dictated by the desire to provide syntax similar to C and C ++. Java uses almost identical agreements to declare variables, transmit parameters, operators and to control the stream of code execution. Java adds all good features C ++.

Three key elements united in Java technology

Java provides a wide use of its applets (Applets) - small, reliable, dynamic, non-platform-free active network applications embedded in web page. Java applets can be configured and distributed to consumers with the same ease as any HTML documents.

Java releases the power of object-oriented application development, combining a simple and familiar syntax with a reliable and convenient development environment. This allows a wide circle of programmers to quickly create new programs and new applets.

Java provides a programmer a rich set of object classes for clear abstraction of many system functions used when working with windows, network and for I / O. The key trait of these classes is that they provide the creation of an independent abstraction platform for a wide range of system interfaces.

Programming languages \u200b\u200bfor computer networks

Programming languages \u200b\u200bfor computer networks are interpreted. Interpreters for them are distributed free of charge, and the programs themselves are in the source texts. Such languages \u200b\u200bare called script - languages.

Perl is an interpreted language created by the Lard Wall programmer to handle large texts and files and decrypted as Practical Extraction and Report Language (language for practical data extraction and reporting). Using Perl, for example, you can create a script that opens one or more files, processes information and records the results.

Perl is a language adapted for processing arbitrary text files, extracting the necessary information from them and issuing messages. Perl is also convenient for writing various system programs. This language is easy to use, effective, but it is difficult to say about it that he is elegant and compact. The syntax of PERL expressions is close to C syntax. Recursion may be arbitrary depth. Although Perl is adapted to scan text files, it can also process binary data. Perl allows you to use regular expressions, create objects, insert a piece of code into a PERL to the SI or C ++ software, and also allows access to databases, including Oracle.

With the invention, WORLD WIDE WEB, Perl turned out to be an excellent tool for interacting with Web servers via Common Gateway Interface (CGI) - a common interaction interface. Perl commands can easily get data from an HTML form or other source and perform any action with them.

Language Php. (1995-1997) has access to database access and is used by the creators of dynamic sites around the world.

Language TCL / TK. (The end of the 1980s) consists of powerful commands designed to work with abstract non-type objects and allows you to create programs with a graphical interface.

Language VRML (1994) Created to organize virtual three-dimensional interfaces on the Internet.

Language Xml. Since 1996, it is working on the creation of a universal language of the document structure. It can become a substitute for HTML.

Output

Useful resources

Review Aizili

Where is the report?

Review Ranitka.

Re: Where is the report?
Everything will be: -d

Feedback Shamagulova Elite

Review Mishina Alexander

Great report. I learned a lot about programming languages.

Review Morozova Alexander

Of course I would like to see a report or at least a presentation in any form.

Before you want to study some programming language, you need to know a little about their history and where they apply.

I imagine you short review 25 well-known programming languages. Starting from the most famous to less popular. The article is made for newcomers in the field of programming. You can read about each language and choose the one that you will like more to explore.

Before you start learning programming languages, I recommend that you explore the course of software.

1. JavaScript.

Prototype-oriented scenic programming language. JavaScript was originally created in order to make the Web-pages "alive." In the browser, they are connected directly to HTML and, as soon as the page is loaded - immediately executed.

When the JavaScript language was created, he originally had another name: "LiveScript". But then the Java language was very popular, and marketers decided that a similar name would make a new language more popular.

It was planned that JavaScript would be a kind of "younger brother" Java. However, the story ordered in his own way, JavaScript grew strongly, and now it is a completely independent language, with its specification and Java has nothing to do.

2. java.


Strictly typed object-oriented programming language. Java applications are usually broadcast to a special byte code, so they can work on any computer architecture using a virtual Java machine.

The advantage of this method of execution of programs is the complete independence of the byte code from the operating system and equipment, which allows you to perform Java applications on any device for which there is a corresponding virtual machine. Another important feature of Java technology is a flexible security system, in which the program execution is fully monitored by a virtual machine.

Initially, the language was called Oak ("Oak") was developed by James Gosling for the programming of household electronic devices. Subsequently, he was renamed Java and began to be used to write client applications and server software.

3. PHP.


It is a common interpreted general-purpose language with open source (scripting language). PHP was created specifically for web development and code on it can be implemented directly into HTML code. The syntax of the language originates from C, Java and Perl, and is easy to explore.

The main goal of PHP is to provide web developers with the ability to quickly create dynamically generated Web pages, however, the field of application PHP is not limited to this.

4. Python.

The high-level general purpose programming language focused on improving the productivity of the developer, the readability of the code and the development of web applications. Python kernel syntax is minimalized. The code in Python is organized in functions and classes that can be combined into modules.

5. C #


Object-oriented programming language. Developed in 1998-2001 by a group of engineers under the leadership of Anders Halesberg in Microsoft as a language for developing applications for the Microsoft .NET Framework platform. C # refers to the family of languages \u200b\u200bwith a C-similar syntax, of which its syntax is closest to C ++ and Java.

The language has static typing, supports polymorphism, overloading operators, delegates, attributes, events, properties, generalized types and methods, iterators, anonymous functions with closures support, LINQ, exceptions, comments in XML format.

6. C ++.


Compiled, statically typed general purpose programming language. It is one of the most common languages \u200b\u200bin the world. Google Chrome., Mozilla Firefox, Winamp and ADOBE product line were designed with C ++. In addition, some modern games and operating systems were developed on C ++ due to rapid processing and compilation.

7. Ruby


Simple and readable programming language focused on developing web applications. Designed by Yukihiro Matsumto in 1995. Language has an independent of the operating system by the implementation of multithreading, strict dynamic typiration, garbage collector.

The main purpose Ruby is the creation of simple and at the same time of understandable programs, where the speed of the program is not important, but a small development time, clearer and simplicity of syntax. The language follows the "lowest surprise" principle: the program must behave as the programmer expects.

8. CSS.


Cascading Style Sheets (Cascading Style Tables) Formal Description Language external view A document written using the markup language.
It is mostly used as a description tool, design of the appearance of web pages written using HTML and XHTML markup languages, but can also be applied to any XML documents.

9. C.


Compiled Statically typed general purpose programming language. The C language was designed by Dennis Ritchch in 1972 in Bell Labs. It is the predecessor of such programming languages \u200b\u200bas C ++, Java, C #, JavaScript and Perl. For this reason, the study of this language leads to understanding and other languages. Language C is used to develop low-level applications, as it is considered closest to the hardware.

10. Objective-C


Compiled object-oriented programming language used by Apple Corporation, built on the basis of SMALLK Language and Paradigm. Objective-C language is a suddenness of the SI language, so the C code is fully understood by the Objective-C compiler. Language is used primarily for Mac OS X (COCOA) and GNUSTEP - implementations of an OpenStep object-oriented interface. Also, language is used for iOS (Cocoa Touch).

11. Shell.

It is not so much a language as the command interpreter (command language). Its scripts are used to automate software updates. Contains standard designs for cycles, branching, features of functions. The family of operating systems compatible with UNIX OS, Shell language is used as a standard task management language.

12. R.


Programming language for statistical data processing and work with graphics, as well as an open source computing software as part of the GNU project. R is widely used as statistical data analysis software and has actually become a standard for statistical programs. The command line interface is used in R.

13. Perl.


High-level interpretable dynamic general purpose programming language. The name of the language is an abbreviation that is decrypted as a Practical Extraction and Report Language - "Practical language to extract data and draw up reports." The main feature of the language is its rich opportunities for working with text, including work with regular expressions, built into syntax. At the moment it is used to perform a wide range of tasks, including system administration, web development, network programming, games, bioinformatics, development of graphic user interfaces.

14. Scala


Multipadigmal programming language designed by brief and type-safe for easy and quickly creating component software, combining functional and object-oriented programming. Scala - programs are largely similar to Java programs, and can freely interact with Java code.

15. Go.


Compiled multi-threaded programming language developed by Google. The GO language was developed as a system of system programming to create highly efficient programs operating on modern distributed systems and multi-core processors. It can be considered as an attempt to create a substitution of the SI language. When developing, special attention was paid to ensuring a highly efficient compilation. GO programs are compiled into the object code and do not require a virtual machine to execute.

16. SQL

Language of structured queries. Formal non-concentrated programming language used to create, modify and manage data in an arbitrary relational database, managed by the corresponding database management system. SQL is primarily an information logical language designed to describe, change and extract data stored in relational databases. Each SQL Offer is either a data request from the database, or access to the database, which leads to a change in data in the database.

17. Haskell.


Standardized Clean Functional General Programming Language. It is one of the most common programming languages \u200b\u200bwith deferred computing languages. Distinctive trait Language is a serious attitude towards typing. Haskell Excellent language for learning and for experiments with complex functional data types.

18. SWIFT.


Open multiparadigmal compiled general purpose programming language. Created by Apple primarily for IOS and OS X. SWIFT developers works with Cocoa and Cocoa Touch frameworks and compatible with the basic Apple code, written on Objective-C. SWIFT thought how easily reading and resistant to the programmer's errors, rather than those previously preceded by Objective-c. SWIFT borrowed quite a lot from Objective-C, but it is not determined by the signs, but types of variables that the compiler processes. For a similar principle, many scripting languages \u200b\u200bwork.

19. Matlab.


High-level interpretable programming language, including data structures based on matrices, a wide range of functions, an integrated development environment, object-oriented features and interfaces to programs written in other programming languages. Programs written on Matlab are two types - functions and scripts. Functions have input and output arguments, as well as their own workspace for storing intermediate results of calculations and variables. Scripts also use the overall work space. Both scripts and functions are stored as text files and compiled into the machine code dynamically.

20. Visual Basic


Programming language, as well as an integrated software development environment developed by Microsoft. The language of Visual Basic inherited the spirit, style and syntax of its ancestor - language Basicwho has a lot of dialects. At the same time, Visual Basic combines procedures and elements of object-oriented and component-oriented programming languages.

Visual Basic is also good to a tool Fast RAD development database applications for Microsoft Windows operating systems. Many ready-made components supplied with the medium are designed to help the programmer immediately begin to develop the application's business logic, without distracting his attention to writing the program start code.

21. Delphi.


Imperative, structured, object-oriented programming language with strict static typing variables. The main area of \u200b\u200buse is the writing of the applied software.

Today, along with the support of 32 and 64-bit Windows software, implemented the ability to create applications for Apple Mac OS X, as well as for Google Android (directly executed on the ARM processor).

22. Groovy.


Object-oriented programming language, designed for the Java platform, as an addition to the Java language with Python, Ruby and Smalltalk capabilities. Groovy uses a Java-like syntax with a dynamic compilation in the JVM byte code and operates directly with another Java code and libraries. Language can be used in any java project or as a scripting language.

23. Visual Basic .Net


Object-oriented programming language, which can be viewed as another round of evolution of Visual Basic, implemented on microsoft Platform .NET. VB.NET has no backward compatibility with more early version (Visual Basic 6.0). The development of projects of old versions (* .vbp) is possible only after preliminary conversion to the VB.NET format with a special master (Migration Wizard); However, after conversion, essential manual refinement of texts is required.

24. D.

Multipadigmal compiled programming language created by Walter Bright from Digital Mars. Initially, D was conceived as C ++ reengineering, however, despite the significant effect of C ++, it is not its option. Also, the language experienced concepts from Python programming languages, Ruby, C #, Java, Eiffel.

25. Assembler.


Machine-oriented low-level language with commands, not always appropriate machine commands, which can provide additional features like macrosman; Autocode, advanced high-level programming languages, such as expressions, macros, means of providing software modularity.

Assembler Language - the designation system used to submit to the readable form of programs recorded in the machine code. The assembler language allows the programmer to use the alphabetical mnemonic codes of operations, at its discretion, assign symbolic names with computers with computers and memory, as well as set user-friendly addressing schemes. In addition, it allows you to use different numbering systems to represent numeric constants and makes it possible to mark the strings of the program with labels with symbolic names so that you can contact them.

I did not take all languages. They are not so much in demand from professional programmers. My task is completed, now you can choose a suitable language and conquer it. Good luck to you in your endeavors.



Did you like the article? Share it