How to set up smartphones and PCs. Informational portal
  • home
  • Programs
  • Levels of programming languages. High and low level programming languages: which ones you should learn

Levels of programming languages. High and low level programming languages: which ones you should learn

Programming language

Programming language- a formal sign system for recording computer programs. A programming language defines a set of lexical, syntactic and semantic rules that determine the appearance of the program and the actions that the executor (computer) will perform under its control.

  • Function: a programming language is intended for writing computer programs that are used to transmit instructions to a computer for performing a particular computing process and organizing control of individual devices.
  • Task: a programming language differs from natural languages ​​in that it is designed to transfer commands and data from person to computer, while natural languages ​​are used to communicate between people. It is possible to generalize the definition of "programming languages" - it is a way of transmitting commands, orders, clear guidance to action; while human languages ​​also serve to exchange information.
  • Execution: a programming language can use special constructs to define and manipulate data structures and control the computation process.

Standardization of programming languages

A programming language can be represented as a set of specifications that define its syntax and semantics.

International standards have been created for many of the widespread programming languages. Specific organizations regularly update and publish the specifications and formal definitions of the relevant language. Within the framework of such committees, the development and modernization of programming languages ​​continues and issues of expanding or supporting existing and new language constructions are being addressed.

Data types

Modern digital computers are usually binary and data is stored in a binary (binary) code (although implementations in other number systems are also possible). This data usually reflects information from the real world (names, bank accounts, measurements, etc.) representing high-level concepts.

The special system by which the data is organized in the program is type system programming language; the development and study of type systems is known as type theory. Languages ​​can be classified as systems statically typed and languages ​​with dynamic typing.

Statically typed languages ​​can be further subdivided into languages ​​with mandatory declaration where every variable and function declaration has a mandatory type declaration, and languages ​​with inferred types... Sometimes dynamically typed languages ​​are called latent typed.

Data structures

Type systems in high-level languages ​​allow the definition of complex, composite types, so-called data structures. Typically, structural data types are formed as the Cartesian product of base (atomic) types and previously defined composite types.

Basic data structures (lists, queues, hash tables, binary trees, and pairs) are often represented by special syntax in high-level languages. Such data is structured automatically.

Semantics of programming languages

There are several approaches to defining the semantics of programming languages.

The most widespread varieties of the following three are: operational, derivational (axiomatic) and denotational (mathematical).

  • When describing semantics within operating approach, the execution of constructions of a programming language is usually interpreted with the help of some imaginary (abstract) computer.
  • Derivational semantics describes the consequences of executing language constructs using the language of logic and setting pre- and postconditions.
  • Denational semantics operates with concepts typical of mathematics - sets, correspondences, as well as judgments, statements, etc.

The programming paradigm

A programming language is built in accordance with one or another basic computation model and programming paradigm.

Despite the fact that most languages ​​are focused on the imperative computation model specified by the von Neumann computer architecture, there are other approaches. We can mention languages ​​with a stacked computational model (Fort, Factor, PostScript, etc.), as well as functional (Lisp, Haskell,, etc.) and logical programming (Prolog) and the REFAL language, based on the computation model introduced by the Soviet mathematician A A. Markov Jr.

At present, problem-oriented, declarative and visual programming languages ​​are also actively developing.

Ways to implement languages

Programming languages ​​can be implemented as compiled and interpreted.

A program in a compiled language using a compiler (special program) is converted (compiled) into machine code (a set of instructions) for a given type of processor and then assembled into an executable module that can be launched for execution as a separate program. In other words, the compiler translates the source code of a program from a high-level programming language into binary codes of processor instructions.

If the program is written in an interpreted language, then the interpreter directly executes (interprets) the source text without preliminary translation. In this case, the program remains in the original language and cannot be launched without an interpreter. A computer processor, in this regard, can be called an interpreter for machine code.

The division into compiled and interpreted languages ​​is conditional. So, for any traditionally compiled language, such as Pascal, you can write an interpreter. In addition, most modern "pure" interpreters do not directly execute language constructs, but compile them into some high-level intermediate representation (for example, with variable dereferencing and macro expansion).

You can create a compiler for any interpreted language — for example, a natively interpreted Lisp language can be compiled without any restrictions. The code created at runtime can also be dynamically compiled at runtime.

As a rule, compiled programs run faster and do not require additional programs for execution, since they have already been translated into machine language. At the same time, every time the program text changes, it needs to be recompiled, which slows down the development process. In addition, a compiled program can only run on the same type of computers and, as a rule, under the same operating system for which the compiler was designed. A new compilation is required to create an executable file for a different type of machine.

Interpreted languages ​​have some specific additional capabilities (see above), in addition, programs in them can be launched immediately after modification, which makes development easier. An interpreted language program can often be run on different types of machines and operating systems without additional effort.

However, interpreted programs are noticeably slower to execute than compiled programs; moreover, they cannot be executed without an interpreter program.

This approach, in a sense, allows you to use the advantages of both interpreters and compilers. It should be mentioned that there are languages ​​that have both an interpreter and a compiler (Forth).

Symbols used

Modern programming languages ​​are designed to use ASCII, that is, the availability of all graphic ASCII characters is a necessary and sufficient condition for recording any language construct. Managers ASCII characters are used to a limited extent: only carriage return CR, line feed LF and horizontal tab HT (sometimes also vertical tab VT and page feed FF) are allowed.

Early languages, dating back to the 6-bit character era, used a more limited set. For example, the Fortran alphabet contains 49 characters (including space): A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 = + - * / (). , $ ":

A notable exception is the APL language, which uses a lot of special characters.

The use of non-ASCII characters (such as KOI8-R characters or Unicode characters) is implementation dependent: sometimes they are only allowed in comments and character / string constants, and sometimes they are only allowed in identifiers. In the USSR, there were languages ​​where all keywords were written in Russian letters, but such languages ​​did not gain much popularity (with the exception of the Embedded programming language 1C: Enterprise).

The expansion of the character set is constrained by the fact that many software development projects are international. It would be very difficult to work with a code where the names of some variables are written in Russian letters, others in Arabic, and still others in Chinese characters. At the same time, to work with text data, programming languages ​​of the new generation (Delphi 2006,, Java) support Unicode.

Classes of programming languages

see also

Notes (edit)

Literature

  • Hal Abelson, Gerald Jay Sussman. Structure and Interpretation of Computer Programs
  • Robert W. Sebesta. Basic concepts of programming languages ​​= Concepts of Programming Languages ​​/ Per. from English - 5th ed. - M .: Williams, 2001 .-- 672 p. - 5000 copies. - ISBN 5-8459-0192-8 (Russian), ISBN 0-201-75295-6 (English)
  • Wolfenhagen V.E. Constructions of programming languages. Methods of description. - M .: Center YurInfoR, 2001 .-- 276 p. - ISBN 5-89158-079-9
  • Parondzhanov V.D. How to improve the work of the mind. Algorithms without programmers - it's very easy! - M .: Delo, 2001 .-- 360 p. - ISBN 5-7749-0211-0
  • F. Biancuzzi, C. Warden. Pioneers of programming. Conversations with the creators of the most popular programming languages. - SPb. : Symbol-Plus, 2010 .-- 608 p. - ISBN 978-5-93286-170-7

Links

  • The Language List (English) - more than 2500 languages ​​with a short description
  • Computer Languages ​​History (English) - history of programming languages ​​(from 1954 to May 2004) (contains a regularly updated diagram)
  • Examples - programming examples in 162 languages
  • Programming Language Popularity - 2004 study of the popularity of programming languages
  • 10 Programming Languages ​​to Learn (2006)
  • Programming Community Index (eng.) - regularly updated rating of the popularity of programming languages
  • Computer Language Shootout Benchmarks - Comparison of Programming Languages ​​by Efficiency
  • Programming Languages ​​that are Loved (eng.) - comparison of programming languages ​​for "love" and "hate" to them

Wikimedia Foundation. 2010.

Classification of programming languages

At the dawn of the computer era, machine code was the only means of human-computer communication. The great achievement of the creators of programming languages ​​was that they managed to make the computer itself work as a translator from these languages ​​into machine code.

Existing programming languages ​​can be divided into two groups: procedural and non-procedural (see Figure 4.1).

Procedural (or algorithmic) programs are a system of prescriptions for solving a specific problem. The role of the computer is reduced to the mechanical implementation of these instructions.

Procedural languages ​​are divided into low and high level languages.

Different types of processors have different instruction sets. If a programming language is focused on a specific type of processor and takes into account its features, then it is called a low-level programming language.
This means that the language operators are close to machine code and are focused on specific processor instructions.

Rice. 4.1. General classification of programming languages

Low-level (machine-oriented) languages ​​allow you to create programs from machine codes, usually in hexadecimal form. They are difficult to work with, but programs created with their help by a highly skilled programmer take up less memory space and run faster. Using these languages, it is more convenient to develop system programs, drivers (programs for controlling computer devices), and some other types of programs.

The low level language (machine oriented) is Assembler, which simply represents each machine code instruction, not as numbers, but using conventional symbolic notations called
mnemonics.

With the help of low-level languages, very efficient and compact programs are created, since the developer gets access to all the capabilities of the processor.

High-level programming languages much closer and more understandable to a person than to a computer. The peculiarities of specific computer architectures are not taken into account in them, therefore, the programs created at the source code level are easily portable to other platforms for which a translator of this language has been created. It is much easier to develop programs in high-level languages ​​with clear and powerful commands, and there are fewer mistakes when creating programs.

The main advantage of high-level algorithmic languages ​​is the ability to describe programs for solving problems in a form that is most convenient for human perception. But since each family of computers has its own, specific internal (machine) language and can execute only those instructions that are written in this language, special translator programs are used to translate the source programs into the machine language.

All translators work according to one of two principles: interpretation or compilation.

Interpretation implies the operator-by-operator translation and subsequent execution of the translated operator of the original program. In this regard, two drawbacks of the interpretation method can be noted: first, the interpreting program must be in the computer's memory during the entire process of executing the original program, that is, it must occupy a certain amount of memory; secondly, the process of translating the same operator is repeated as many times as this command should be executed in the program, which sharply reduces the performance of the program.

Despite the indicated disadvantages, interpreter translators received sufficient distribution, since they are convenient for the development and debugging of source programs.

At compilation the processes of translation and execution are separated in time: first, the original program is completely translated into machine language (after which the presence of a translator in RAM becomes unnecessary), and then the translated program can be executed many times. Consequently, for the same program, translation by compilation method provides a higher performance of the computing system while reducing the required RAM.

The great difficulty in developing a compiler in comparison with an interpreter from the same language is explained by the fact that compiling a program includes two steps: analysis, i.e., determining the correctness of writing the source program in accordance with the rules for constructing language constructions of the input language, and synthesis - generating an equivalent programs in machine codes. Compilation translation requires multiple "viewing" of the broadcast program, that is, compilers-compilers are multi-pass: during the first pass, they check the correctness of the syntax of the language constructions of individual operators independently of each other; during the next pass, they check the correctness of the syntactic relationships between operators, etc.

The resulting compiled program is called object module, which is an equivalent program in machine codes, but not "tied" to specific addresses of RAM. Therefore, before execution, the object module must be processed by a special program of the operating system (link editor) and converted into loading module.

Along with the above-considered translators-interpreters and translators-compilers, translators are also used in practice interpreters-compilers, which combine the advantages of both principles of translation: at the stage of development and debugging of programs, the translator works in the interpreter mode, and after the debugging process is completed, the source program is re-translated into the object module (that is, by the compilation method). This makes it possible to significantly simplify and speed up the process of composing and debugging programs, and, due to the subsequent receipt of an object module, to ensure more efficient program execution.

Classical procedural programming requires the programmer to describe in detail how to solve a problem, i.e., formulate an algorithm and its special notation. However, the expected properties of the result are usually not specified. The basic concepts of the languages ​​of these groups are operator and data.
In a procedural approach, operators are combined into groups - procedures. Structured programming as a whole does not go beyond the scope of this direction, it only additionally fixes some useful techniques
programming technologies.

A fundamentally different direction in programming is associated with methodologies (sometimes called “paradigms”) of non-procedural programming. These include object-oriented and declarative programming. An object-oriented language creates an environment in the form of many independent objects. Each object behaves like a separate computer, they can be used to solve problems as "black boxes" without delving into the internal mechanisms of their functioning. Of the object programming languages ​​popular among professionals, C ++ should be mentioned first of all; for a wider circle of programmers, environments such as Delphi and Visual Basic are preferred.



When using a declarative language, the programmer indicates the initial information structures, the relationships between them and what properties the result should have. At the same time, the programmer does not build the procedure for obtaining it ("algorithm") (at least, ideally). These languages ​​lack the concept of "operator" ("command"). Declarative languages ​​can be divided into two families - logical (typical representative is Prolog) and functional (Lisp).

Let's characterize the most famous programming languages.

1.Fortran(FORmula TRANslating system - formula translation system); the oldest language actively used to this day in solving problems of mathematical orientation. Is a classic language for computer programming of mathematical and engineering problems

2.BASIC(Beginner's All-purpose Symbolic Instruction Code - a universal symbolic instruction code for beginners); despite many shortcomings and an abundance of poorly compatible versions - the most popular in terms of the number of users. Widely used when writing simple programs.

3.ALGOL(ALGOrithmic Language - algorithmic language); played a large role in theory, but is now almost never used for practical programming.

4.PL / 1(PL / 1 Programming Language is the first programming language); multipurpose language; almost never used now.

5.Pascal(Pascal - named after the scientist Blaise Pascal); extremely popular both when learning programming and among professionals. Created in the early 70s by the Swiss scientist Niklaus Wirth. Pascal was originally developed as an educational language, and, indeed, now it is one of the main languages ​​for teaching programming in schools and universities. However, its qualities in the aggregate turned out to be so high that professional programmers also willingly use it. Philippe Kahn, a Frenchman who developed the Turbo-Pascal system, achieved no less impressive, including financial, success. The essence of his idea was to combine the sequential stages of program processing - compilation, editing links, debugging and diagnosing errors - in a single interface. Versions of Turbo-Pascal have flooded almost all educational institutions, programming centers and private firms. Based on the Pascal language, several more powerful languages ​​have been created (Modula, Ada, Delphi).

6.Cobol(COmmon Business Oriented Language - general business oriented language); largely fell out of use. Was conceived as the primary language for mass data processing in the fields of management
and business.

7.ADA; is the winning language (May 1979) in the Pentagon's Universal Language Competition since 1975. The developers are a group of scientists led by Jean Ihbia. The winning tongue was dubbed ADA, after Augusta Ada Lovelace. ADA language is the direct heir of the language
Pascal. This language is intended for the creation and long-term (long-term) maintenance of large software systems, allows for the possibility of parallel processing, real-time process control and much more, which is difficult or impossible to achieve by means of simpler languages.

8.Si(C - "si"); widely used in system software development. Has left a big imprint on modern programming (first version - 1972), is very popular among developers of software systems (including operating systems). C combines the features of both a high-level language and a machine-oriented language, allowing the programmer to access all machine resources, which languages ​​such as Basic and Pascal do not.

9.C ++(C ++); an object-oriented extension of the C language, created by Bjarne Stroustrup in 1980. Many powerful new features that have dramatically improved programmer productivity are superimposed on a certain low-level inherited from the C language.

10.Delphi(Delphi); language of object-oriented "visual" programming; extremely popular at the moment. The Delphi language created on the basis of the Pascal language by the Borland specialists, possessing the power and flexibility of the C and C ++ languages, surpasses them in the convenience and simplicity of the interface when developing applications that ensure interaction with databases and support various kinds of work within corporate networks and the Internet ...

11.Java(Java); platform independent object-oriented programming language, extremely efficient for creating interactive web pages. This language was created by Sun in the early 90s based on C ++. It is designed to simplify the development of applications based on C ++ by excluding all low-level features from it.

12.Lisp(Lisp) is a functional programming language. It is focused on the data structure in the form of a list and allows you to organize efficient processing of large amounts of text information.

13.Prologue(PROgramming in LOGic - logical programming). The main purpose of the language is the development of intelligent programs and systems. Prolog is a programming language created specifically for working with knowledge bases based on facts and rules (one of the elements of artificial intelligence systems). The language implements a backtracking mechanism for performing a reverse chain of reasoning, in which it is assumed that some conclusions or conclusions are true, and then these assumptions are tested in a knowledge base containing facts and rules of inference.
If the guess is not confirmed, a return is performed and a new guess is advanced. The language is based on a mathematical model of the theory of predicate calculus.

Programming languages ​​for the Internet:

1. HTML. A well-known language for paperwork. It is very simple and contains basic commands for formatting text, adding pictures, setting fonts and colors, organizing links and tables.

2. PERL. It was conceived as a tool for efficiently processing large text files, generating text reports and managing tasks.
Perl is much more powerful than languages ​​like C. It introduces many commonly used functions for working with strings, arrays, managing processors, working with system information.

3. Tcl / Tk. This language is focused on automating routine processes and consists of powerful commands. It is independent from the system and at the same time allows you to create programs with a graphical interface.

4. VRML. Created for organizing virtual 3D interfaces on the Internet. It allows you to describe in text form various three-dimensional scenes, lighting and shadows, textures.

The choice of a programming language depends on many factors: purpose, ease of writing source programs, efficiency of the resulting object programs, etc. The variety of problems solved by a computer determines the variety of programming languages.

Control questions

1. What are programming systems and what class of programs do they belong to?

2. What is included in the programming systems?

3. In what programming language were the first programs created?

4. What languages ​​are procedural languages ​​subdivided into?

5. Describe low-level languages.

6. Which language is a low-level language?

7. Advantages of low-level languages.

8. Describe high-level languages.

9. Advantages of high-level languages.

10. Give examples of high-level languages.

11. What are translators for?

12. What is the difference between a compiler and an interpreter?

13. Deficiencies in interpretation (as a kind of translator).

14. What is the process of compiling a program?

15. What actions are performed during compilation?

16. What is the difference between a load module and an object module?

17. What is the difference between procedural programming and non-procedural programming?

18. What types of programming are non-procedural
programming?

19. Feature of declarative languages.

20. Describe briefly the programming languages: Fortran, BASIC, Pascal, Cobol.

21. Describe briefly the programming languages: Ada, C, C ++, Delphi, Java.

22. Give examples of object-oriented languages.

23. What class of languages ​​does the Lisp language belong to?

24. What class of languages ​​does the Prolog language belong to?

Zalina January 13, 2016 at 15:42

Various programming languages ​​and their fields of application. Lecture in Yandex

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

We decided to devote our first post this year to a very basic topic, a lecture on which was given in the Small SHAD. High school students who are interested in technology are engaged in it, hence the specificity of the presentation - the lecture will be especially interesting for those who are just starting to program and are thinking about the direction in which to develop. For them, Yandex has a course "Introduction to Programming (C ++)", which can be taken on the Stepic.org platform.

Lecturer Mikhail Gustokashin - Curator of Academic Programs at Yandex, Director of the Center for Student Olympiads, Faculty of Computer Science, HSE. Mikhail has trained dozens of winners and prize-winners of the All-Russian Programming Olympiads.

Within the framework of the lecture, it is told about what programming languages ​​are, how they differ, how they appeared and which ones are better and which ones are worse. In the beginning, we will talk a little about the history of languages ​​- how they appeared, how people began to program, how everything developed, what is happening now. In the second part, it will be touched upon what tasks which language is suitable for, how to “choose your favorite language and enjoy life”. The lecturer will also talk a little about how, in his opinion, to learn all this and then get a job.

As always, under the cut is a detailed transcript of the lecture so that you can navigate its content.

History of programming languages

Let's start from the beginning. In the beginning, computers didn't even have a keyboard! That is, everything was very bad - they did not have a keyboard or a screen, they had punched cards (these are such things with holes or no holes). Accordingly, either the pins were thrust there, or they shone there with light. If there is a hole (or vice versa), it meant zero or one. And programs at that time were written using machine codes - each operation in a computer (addition, subtraction, some more complex operations) had some kind of machine code. People themselves chose this code from the plate, all sorts of addresses in memory, they knocked it all out with their hands and shoved it into the reader - and it was all counted. Of course, the work of a programmer was probably not very interesting then - to make holes - and with the development of science and technology, of course, they began to come up with all sorts of more "interesting" things. For example, assembler (Assembler), which already made life a little easier.

Well, how did he make life easier? Instead of remembering that there is some kind of "magic" code for the command, all sorts of words similar to "human" English were used - some add or mov - well, and then registers or memory areas, variables with which these are needed to perform operations. But it is clear that this, in general, also required a sufficiently large amount of mental effort to keep in mind in what register we have what lies, where what variables and what happens in general. Why did this happen? Because computers were "stupid" and could not understand anything more "smart". In fact, compiling machine code from assembler also takes time, memory (at that time, of course, there was not enough of it).

Gradually, it became clear that it is very difficult to develop such large complex programs. The programmer's productivity in these commands was extremely low - that is, he wrote several lines a day (meaningful), and each line did not do anything special - some simple arithmetic operations. And people wanted to make languages ​​much more similar to human language, to English in particular, to make it easier and more convenient to write programs. And off we go!

Old and dead languages

Fortran became one of the first languages. By the way, he was also knocked out on punched cards - there were special punched cards for knocking out Fortran programs. But if you take this Fortran now - in my opinion, it is even somewhere between 50-60. appeared - and try to write something on it, it will be very unpleasant for you, I guarantee you! Modern Fortran is still alive today, but it is quite different from what it used to be.

Other languages ​​- now I’ll write one thing that you’ve probably heard about, then only at any events where they tell about the history of programming - this is COBOL. It was a language for writing business applications. What are business applications? Any transactions in banks, something else, all this was written in Kobol. It is, of course, not very popular with us. I think you will hardly find a programmer on Kobol, in Moscow. And somewhere not in Moscow - with even greater difficulty. But, surprisingly, even 10 years ago, more than half of all the code written by mankind was written in Cobol. And until now, a significant part of all banking transactions are carried out using programs written in it (COBOL), and still people write something on it.

There is also a "funny" language, it was called Algol (the 68th version, which characterizes the year of its creation). It is an algorithmic language. In general, they were able to do something there, but now we are not very interested in what they can do. And this is where our excursion into antiquity and into relatively unused languages ​​can end and move on to what is still alive (and actively living).

Old but living languages

Algol was invented in Europe, and Fortran was used mainly in the States - there are no big differences. What trend is visible? At first, everything was difficult and to write you had to be almost an engineer, electrical engineer, understand where which contacts are closed and something else for programming. Then, too, it was necessary to sit with the leaves and count the memory, look after it. And gradually everything became simpler, simpler, simpler and then even easier for the programmer - to think as little as possible for a person, to do as much as possible automatically. At about the end of this period (the lecturer points to Algol and Kobol), languages ​​begin to appear that, in a sense, have "survived" to this day.

BASIC. Perhaps some people still write something on it, at least I saw that in some institutions they teach on QBasic - such a blue window where it says "1989". In general, he lives "with might and main"! It was invented as a language for non-programmers. At that time, the programmer was such a very specialized profession. And here they say to you: “Here we have a cool Basic language, and any reasonable person will take and write a program in it - easily”. Again, that BASIC and modern BASIC is a huge difference. All these lines numbered every 10, all sorts of GOTO and other horror - they have nothing to do with modern BASIC and even have little to do with BASIC of 89.

Another funny story is the Pascal language, widely known in university circles, mainly in Russia and in the countries of the former Soviet Union. It has been and continues to be used surprisingly as a teaching language. In the rest of the world, it is less common, but it is also alive and well. There is such a person Wirth - here he is a scientist, a theoretician. He participated in the discussion of Algol, he did not like what happened, and he came up with his own language - Pascal. And then the Borland firm (and before that many other firms - Apple was engaged, in particular) took and ruined everything. He had a beautiful theory, slender - "everything will be fine" - and they took and stuffed there what people need for work. Well, it didn't work out as nicely as he wanted.

And finally,. Xi was invented by engineers. If Pascal was invented by a scientist, then C was invented by Kernighan and Ritchie, they worked as engineers at Bell. How did it come about? At that time, it was impossible to write anything systemic in these languages ​​(the lecturer points to Fortran, COBOL, Algol). What is "systemic"? For example, an operating system, some drivers, something else. These languages ​​were for math, for business, for all that stuff. And everything else was written in Assembler. There were some languages, they are now dead, that is, the C language did not appear immediately from Assembler, but through some intermediate things.

What is the essence? Kernighan and Ritchie loved to play the Asteroids toy - a spaceship flies, and there are asteroids, he shoots at them, and they fall apart. They had a server on which they played, but there were a lot of people there, and the toy was slowing down. And they found out somewhere in their office that they had some kind of computer that no one uses. But there was a problem - it was of a different architecture, and the game was written in Assembler.

They rewrote it, of course, they even cut in some features in order to play on it. But this led them to think that rewriting for a new architecture every time is not very smart. And they decided to write a high-level language that would be suitable for system programming, that is, in which it would be possible to manage memory, in which it would be possible to understand where something is and how to access these pieces of memory. And so the C language appeared, which had a huge impact on everything later. All of them (the lecturer points to Algol, Fortran and other mentioned languages) had a great influence, but C - yes ...

Accordingly, it was the main language in Unix - an operating system that was even more popular at the time than it is now. And by about the 80s, the situation was something like this (the lecturer shows in Basic, C and other languages ​​mentioned). Let's say that all of this has already died on the sly (the lecturer erases references to Assembler, Fortran and Algol) ... And in the 80s, computers became smaller, smarter, cheaper, and people wanted all sorts of oddities, in order to live even better, to live even more fun.

Languages ​​native to the 80s

One of the first oddities was the C ++ language. The C language has a huge number of shortcomings (well, just a huge one in general) - you can do anything on it, including shooting yourself in the leg, shooting yourself in the leg with a fiction, in the other leg, shooting with one foot in the other leg, in general - that you want to do. But at the same time, some architectural things are done there rather difficult - again, as in Assembler, we have to keep track of where we are, what and what memory we have allocated; it is there all the time this memory "flows" somewhere - that is, we have selected, forgot to delete, deleted the wrong thing, got out of memory, in general - we got a bunch of problems.

C ++ was originally created as a set of additions to the C language that would facilitate development. At that time, object-oriented programming became fashionable and people decided that everything can be described in the form of a hierarchy, that is, you have a ball (abstract), you inherit from it a soccer ball, a volleyball, another abstract ball. It was fashionable then that "now we write everything in the form of some kind of hierarchy, and everything will be fine, life will improve, everything will be fine and everything." In a sense, C ++ implemented this object approach - it was not the first object-oriented programming language, 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 the C language, a program written in C was successfully compiled as C ++ in 99% of cases and even worked the same way. This was intended to make it easy to migrate from C to C ++.

In addition to the object approach (in C ++), the Standard Template Library (STL) quickly emerged. I think that at school, those who still taught Pascal discovered that, firstly, you did not have built-in sorting there (in the ancient blue Borland Pascal, now it is already in modern versions) - there is an example (source) sort, you can copy and paste it. But if you want to sort integers here, here you want real numbers, and here are strings that can be compared with each other, you had to write three different sorts that do exactly the same thing, they just have different data types. This is not very good, and templates that did not immediately appear in C ++ made this problem much easier. That is, you had an abstract program that successfully sorted something that can be compared with each other.

Scripting languages ​​from the 90s

But time did not stand still, in the 80s a lot of interesting things happened. But somewhere around the turn of the 80s and 90s, computers became so good that it was already possible to do very strange and very ineffective things. In particular, these were scripting languages ​​that were not compiled into machine code, but interpreted. BASIC was also interpreted at some time, but these scripting languages ​​were intended mainly for text processing - for example, Perl, Python (it was not very famous then), PHP, Ruby - these are the scripting languages ​​that are in one or to a different degree they still live (they all managed to appear before 2000, even much earlier).

Let's go over them a little, because these are specific things and now they are used in many places. What is the idea? If we don't compile, then a lot more can be allowed. For example, a program can look at its code and somehow use it; she knows what is happening in her and due to this she can do a lot of interesting things.

Perl was designed for word processing - in those days there was already so much memory in computers that it was possible to stuff some text into it and do something useful with this text (for example, count words, search for some kind). But, in my opinion, it was designed by people who were a little out of their minds, because there is such a joke about him: "Any set of characters written is a correct program in Pearl." In my opinion, you can only write on it, you cannot read it. When I look at the code in Perl and try to figure something out, I don’t 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. That is, the programs are short and really easier to rewrite than to figure out what is there and fix it.

Around this time, in the mid-90s, the Internet appeared. At first, it was mail, sites with static HTML, but people wanted to add some kind of dynamics there so that everything would happen dynamically for us, some forms could be filled out, guest books to do, and something else. Accordingly, this required some kind of interaction, they came up with a protocol, how it interacts, and, most importantly, the generation of these static (conditionally) pages that will be "spit out" to the user in response to his request.

In general, nothing but Pearl did not fit at that time. It was a bad idea to write in pure C or C ++ the handler. And for lack of a better language at the time (and long enough), Pearl was a popular language for web development. Of course, the scale is not comparable to what is happening now.

PHP came about as ... by accident. One person quickly stopped doing this - he made his own page of some kind, he had some kind of guestbook, something else, some things. And he wrote a set of macros of some kind for Pearl, which looked like C, because he knew how to use C, just because he was so comfortable. And I called it Personal HomePage. Shared and said: "People, look what piece I wrote, everything is much clearer here than on Pearl and you can edit it." And people liked it.

Then he dropped the case. In general, as a result, this PHP began to live and over time became much more popular than Perl. But this "birth trauma" of his (the idea is like a set of macros for Pearl) played a rather cruel joke with him. The language turned out to be strange. That is, it developed by itself, no one designed it, no one administered the development process (neither the company nor any person), but there were many groups, each of which sawed what they liked. As a result, the functions there are called differently, there is not even a style, everything is through underscores, in general, the settings are here and there, and how it will all work is not very clear. But you can sit down and write in PHP in two hours, because that's how he intended it.

Python and Ruby: Ruby is less popular now, Python is somehow better "cut", let's talk about it later. It is clear that in those days these were (the lecturer points to Perl, Python, Ruby, PHP) highly specialized languages ​​for highly specialized purposes. In general, no system programming, no business logic was written in them at that time, and now it does not do much of it.

Compiled languages ​​from the 90s

We will go about the same time, but in the other direction. At that time, we used C ++ for almost everything that needed to be written not for the web, not for text processing, but for simple applications, for operating systems, for toys - in general, for anything. But C ++ is actually a creepy language. Why? Because, firstly, it inherited all the C problems due to backward compatibility. There one could still be killed in a million different ways, the same ones that were in C (of course, new ways were added in C ++). At the same time, if you write everything well and correctly, as conceived by the authors of C ++, then, of course, it was impossible to kill yourself with the old methods, and it seems that there were fewer of them. However, it had a very strange object model peculiar. Dividing the program into modules, into pieces of some kind came from C (if you can write include in C or C ++ - in fact, it was conceived as just inserting the text of the library into your program, in the end, when you write a bunch of inclusions, you have everything - if it is “primitive”, as it was at the very beginning - everything is inserted into one file and then it all takes a terribly long time to compile, because it goes around several times. the versions are even better.

In general, C ++ has a lot of disadvantages. The qualifications of a programmer had to be high in order to write in C ++, and such programmers were expensive (both training and something else, that is, it is difficult to find programmers on the market, they need to pay a lot, well, in general, this is not the case ... ). And our computers are counting faster and faster, they are getting cheaper, people buy themselves new computers and want more applications, more toys for the phone, in general - more joy.

This is how Java (Java) appeared. There, too, a rather funny story is connected, how the name appeared in this language. There are programmers, they drink coffee all the time and at that time it was fashionable to drink coffee, which grew on the island of Java. The language was conceived as a language for built-in appliances, in particular for a coffee machine. This is how the name came about ...
What started with her, what was good about her, and why did she gain so much popularity? First, they got rid of Sishny's legacy completely. No pointers, far fewer ways to shoot off any part of your body and break everything. Second, they introduced much more recent ideas in terms of the object model - that is, C ++ appeared much earlier than Java and used a more archaic, "wild" object model. Well, here (the lecturer points to Java) it was already more thought out then, and in theory people thought, and in practice they applied and did everything much cooler.

And finally, the third. Our Java programs were assembled not into machine code, but into code for a virtual machine. That is, you had a JVM virtual machine (VM) - Javovsky. Your programs were collected in some kind of intermediate presentation and then, with the help of this machine, they were already executed. What did it do? Firstly, it slowed down, and secondly, it ate memory with terrible force, and thirdly it was portable anywhere (theoretically) - even to a coffee maker, even to a coffee grinder, even to a computer, even to a mobile phone. On the one hand, this is good, that is, you just wrote an implementation of a virtual machine, then you run your Java programs everywhere. But, on the other hand, it’s bad that the same phone had little memory at that time, there was low performance, and all this additionally began to dull and slow down.

But even this is not the main reason why the language was invented in general. The Java language was invented to reduce the requirements for the qualifications of programmers. That is, poorer programmers can write good programs in Java, because Java does not allow writing bad programs - there is no means there to write bad programs. You can only write well programs there. Well, in the understanding of the creators of the language.

That is, if in C, in C ++, in Python, on anything, we can dissolve some kind of creepy garbage from our project, where we have everything mixed up, collected for hours and there something else. In Java, you can also dissolve the trash can, but for this you already need to make some effort. That is, by default, it does not turn out to be a "trash heap", other problems arise, that something has been inherited or inherited there - in general, for one meaningful line, there are ten not very meaningful ones. On the other hand, maybe such a medium-skilled programmer can write a fairly high-quality code.
We are almost at the end. With us, the next thing that has appeared is .Net (will reach), well, and in particular we are interested in C # (almost the same [the lecturer points to Java], that is, there are differences in details, if you choose between them - see where pay more money).

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

What is the main thing to pay attention to? (The lecturer draws arrows from C ++ to Java, .Net, C #, JavaScript and PHP). To write a simple program in one of these languages, and in many others - if you know C ++, you generally don't need to know anything else - you take and write in C ++, and then add dollars at the beginning, something else do the little things and it starts to work for you on anything (the lecturer points to the languages ​​to which the arrows from C ++ were assigned). That is, they are extremely similar in some simple things. If you solve some school problems, educational tasks, something else (you are not designing a large project - you have one file that reads numbers, displays numbers in the console, does something else), then there is almost no difference between these languages. It is clear that JavaScript and PHP are specialized, they have everything a little differently. And here (the lecturer points to Java and C #) there is very little difference in general.

Since then, all sorts of other interesting things have appeared, but it is not clear whether they will live or die successfully. What are they using now, for what tasks?

Language selection depending on the task

Let's say you are faced with the task of writing a driver for a video card. What language will you use today? (Shout from the audience: Java!) Why ... Java is great, but why not Ruby or PHP? (The lecturer speaks sarcastically.)

Low-level programming

If you are writing something low-level, then C is the best choice, but actually I heard something (but did not see) that C ++ is used for this. But I hardly believe in this, because in C you can clearly control - since you have given so many bytes of memory, then so and so will be. And in C ++ (STL), how is a string implemented? Well, somehow implemented. And in the end we do not know how and what is happening there, maybe we will run out of memory on our video card or something else will happen. Therefore, C still lives and does not die, such system programming tasks still exist - write an operating system, write drivers, write something else - C is great for this. In addition, now there are all sorts of devices (the Internet of Things promises that it is about to come) that live on batteries (and, naturally, there will be millions of them, everything will be hung with this Internet of Things), they should be very cheap and very little electricity consume. Accordingly, there will be 2 KB of memory, a 5 kHz processor, well, of course, it will not work to screw in some kind of virtual machine or scripting language in the near future, which means that you will have to write something in C. And even now, for example, calculations on a video card (OpenCL or some other technology) - they don't come up with a new language to write programs for them - they do C there with some big restrictions. Just because people already know how, why learn something new? Formally, this is probably also, in a sense, C.

Web programming

Let's say you want to write a new Facebook (social network). What will you write this on? (From the audience they are talking about HTML and CSS.) HTML, CSS is design, and we want to be able to add photos, friends, leave comments there.

For the scripting part - that is, what's going to happen on the client side - it's JavaScript. And sometimes JavaScript is generated in another language and sent (it so happens that the script is generated ... because sometimes it is easier to handle some changes in logic this way).

Surprisingly, it's written in PHP - and Facebook and many other big projects. Of course, I had to write some of my own things so that it still worked fine, and not like the "tyap-blooper" was done, but they did it. Basically, it doesn't really matter what you write in, but I don't recommend Perl. Here and now, of course, no one writes anything from scratch for the web. Everyone is writing some kind of framework or something. Online shopping? We downloaded a framework for an online store - well, that's it, we wrote an online store.

Business programming

Next, you want to write some boring bank application. Or, for example, do you have someone who sells sim cards? Perhaps you have ever bought a phone or something else and they said to you: "The system is hanging, we cannot do anything." What will you write such an application on? (A cry from the audience about Python) You can't write such a thing in Python, what are you ?! It's not worth writing anything for business in Python. Why? Because when you write something in Python, you cannot find a significant number of bugs in the process of writing. Python is dynamically typed in every possible way, and in general there you can hide a bug so that it pops up in such a situation that you cannot even understand what these crooked users have done there, that everything is broken for you. That is, it is better to write small scripts for yourself in Python - 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 your competitors, so what if it will break every other time. You wrote in Python and that's it - you took over the market. And if you write something for a long time, for example, some kind of banking application (so that it approves loans, something else) - you write it in Java. Because there is a serious matter, pieces of paper, money, documents, something else, but you cannot mess up in it so much that everything will break down, otherwise people will be offended - their money has gone and has not reached anywhere, the moment the string turned into a number or vice versa. So, it means that you methodically take Java and write, write ... Well, or on.Net, such situations, in principle, also happen. There, of course, you can also run into problems, but still the probability of this is somewhat lower.

Programming for the army, aerospace

Now imagine that they decided to send you to the moon in a rocket. What would you rather use to write the code that controls the rocket motors? Let's get a look. This, probably (the lecturer shows in Perl, Python, PHP, Ruby), is not worth it - it slows down, something else is happening, well, in general, I would not agree to fly on such a rocket. In C ++? To be honest, I wouldn't trust me either, because there are too many ways to kill yourself in C ++. When you're out there somewhere in space, it's not very good.

Maybe in Java? It seems that everything is pretty reliable there and the architecture is good, no wild types, no excess memory. Let's say the most crucial moment has come, and our Java decided to collect garbage for us. We need to land, slow down, and she's like, "No, garbage is going." In general, not very good either.

To be honest, I would rather have this program written in Pascal. I, of course, do not really like Pascal, but somehow in such matters, it would be very cool.

Using several languages ​​at once for software development

Well, what should be said in general about modern languages. Nowadays, many projects do not live in any one language, that is, some of them live in one language, some in another, and some other in a third. For example, if you have some kind of web application that processes wild amounts of information, access to disks (not even to databases, they are so huge that even a database does not support some already written one) are probably written in some then low-level C to write wildly fast to disk and all that. Naturally, writing the entire project in C is not worth it. Maybe there is some kind of intermediate logic written in Java that calls Cis functions for quick calls. Well, the frontend (what the user is looking at), of course, is already written in something, in some scripts, in something that is directly executed by the browser (JavaScript). And all this lives together and interacts successfully.

In the development of some applications, even large ones, sometimes people do what? They take and write a prototype in Python (how everything will work), sketch, think over some kind of architecture. Writing on it is really very fast - they threw in a prototype, experimented with it and said: “Wo! That's so cool! " And completely rewritten. It would seem that they did the job twice, it took twice as long (well, one and a half). But no! It often turns out that this method is not bad, because if you write right away in something, for example, in Java, and then decide: "No, let's refactor, change the architecture completely and all that," - then you will spend 10 times more time ... Such things also exist and live.

Conditions for the success of any programming language

Now let's talk about why some good-looking languages ​​didn't survive, or live in a very limited space. When Wirth saw what the bad companies Apple, Borland and all that did with his Pascal, he came up with an even better language - Oberon. It was just wildly minimalistic - that is, there were very few commands (Strings? Why do we need strings? We'll make an array of characters!). Well, something didn't work for him, to the extent that it could.

One more thing. The US military asked them to develop a cool language too, in which everything works and everything can be written. The result is a rather monstrous language called Ada, in which, however, they still write something, but again - for the military only.

What is the problem? Why did some languages ​​like Python, which no company supported it in the beginning, have taken over the market. PHP, which is also poorly designed, also took over and captured the market (most of it) by itself. And all sorts of billions of dollars were invested (the lecturer points to Ada) and did not go anywhere, nothing happened. What is the reason for this? This is due to the fact that there is no infrastructure around these languages. That is, the language may be excellent, but as long as there is no documentation, as long as there is no community that can answer questions (on Stack Overflow) and, finally, most importantly, as long as there are not a large number of libraries, the language does not fire. That is, you, for example, wanted to write a website on Oberon. Why not? And the confusion begins ... You cannot raise your web server on Oberon in order to test lightly, you cannot connect any libraries, because they are not on Oberon. And all this is done through some kind of crutches, the forces go away, and in general you spit and write your site in pure C instead of Oberon. And those languages ​​that are able to use libraries from other languages ​​live well. The same Python in those places where it slows down. Well, in general, all sorts of standard things like sorting and something else are written in C, and he (Python) knows how to interact with them.

Java also has a Java Native Interface. This is essentially C, that is, there (in my opinion, they want to ban all the time, but it seems they have not yet banned) these languages ​​can interact with already existing libraries (mainly Sishny ones). And due to this they take and work. The idea that I'm trying to convey to you is clear, right? Do not write in languages ​​that do not know how to connect the C library. Well, if you want to enjoy something cool. Well, and gradually they (languages) are overgrown with their own kind of infrastructure. And they live somehow well.

Programming language and career guidance

Now let's talk about how to understand what you want in life. What are cool things? You can do some kind of systems programming, right? It's cool to count these bikes there, you want to launch quadcopters, some cameras, and something else to do. Then C is probably your choice.

If you want to write, maybe not the most interesting applications in life, but it's cool for you to design them, think about it all and make a lot of money for sitting and bored most of the time (you have to pay for this if you are of high quality miss), here they are - Java, .Net. You go to work in a bank, write, go to work at nine in a white shirt, get a good salary and write according to the recommendations of the best Java-sources, .Net-sheep and all that ...

If you want to write any applications, some browser, some toys, something else, then C ++ is great. If you want to write websites, here they are, the languages ​​of your choice (the lecturer shows in Perl, Python, PHP, Ruby), there is not much difference. The only thing is that PHP will die before Python, so if you are lazy to learn new things, then learn Python. You won't notice a big difference, but you will last longer.

What's going on with Ruby is also unclear. Well, you can also PHP, if you have already learned it, since they are so simple that it does not take so long to relearn there.

And, finally, there is another area of ​​application of programming languages ​​- this is when a non-programmer uses them. Let's say you are a mathematician, physicist, chemist, analyst, anyone, and you need to quickly calculate something, analyze some data (for biologists, for example, how many Arctic foxes live on the Commander Islands). You can drive all this into a table in Excel or analyze it with something. Python is also a good fit for this, it knows how to work with text and libraries are full of all sorts, statistical and all that. If you want to do some kind of Machine Learning, process some data, predict, then this is also done the fastest in Python now. However, it should be noted that the tasks are very different. For example, if you want to trade on the exchange instantly in conditions when quotes are changing all the time, then no matter how cool Machine Learning you write in Python, people who have it written in something faster will have time to buy everything earlier, while you will be counted, even if their algorithms are worse. Therefore, even these machine learning tasks (some of them) require high performance (and extremely high), and, accordingly, other languages.

The only way to know what you want is to try everything. Now I will say it as one of the visions of how you can try everything. How to become a programmer, and a happy one? So. We start from scratch. Here you are studying at school your mathematics, Russian language and other compulsory and optional subjects, and your knowledge in the field of programming is reflected on the board (the lecturer points to an empty board) at the moment. And you want to become a happy person, do what you love, earn a lot of money and not deny yourself anything and be happy.

One way to do this. There are, of course, all sorts of inspiring stories about people who did not go to university at all, or left them and became billionaires, company owners, and so on. But it should be noted that most people who may not have become billionaires, but also live well, still graduated from the university at some point.

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

What does the graph of the distribution of languages ​​look like at the All-Russian Olympiad in Informatics? People who participate in the All-Russian, the coolest Olympiad, what do they write on? It looks like this (here it means Pascal, and here it is about 2000, and here it is about zero, here is C ++, and here it is 2015).

In 2000, almost no one wrote in C ++. Fifteen years later, almost no one writes in Pascal, despite the fact that Pascal is modern. This is a language that can do almost everything the same. It's just that everyone has become too lazy to learn this, every new trend, and everyone continues to write in Borland Pascal, which of course can not do anything. In C ++ people write some sorting algorithms (STL) - great, they wrote sort () and that's it. On Pascal, on regular, on old - this is a problem. They wrote some set (needed) - great, they wrote it in C ++, in Pascal again the torment is continuous. On the new Pascals, of course, you can do this, but they actually cost money. You may not have noticed it, but it is.

There is also Java, but Java has a lot of letters. It is for large projects, but for small disposable programs it turns out to be quite bad, because there are a lot of unnecessary letters. But also some people write, you can learn to write on it. But on the Unified State Exam, it is not and the Unified State Exam will still have to be passed for the most part.

What is best for the exam? For the exam, it is best (if you don’t know anything and they don’t teach you anything at school) to learn Python. Some tasks of the exam are perfectly solved on it. At the Olympiad, in general, it turns out that C ++ is (used), because Python is very slow, not everything is solved there.

Thus, you have studied some small subset of the language and some algorithms (possibly) and solved a lot of problems in order to get a diploma of your Olympiad and go to university in order to get higher education.

Now I will tell you about how we at HSE are building the course, in what order the languages ​​are, how they are taught in applied mathematics and computer science at the Faculty of Applied Sciences, which Yandex and I are doing. In the first semester - Python (not in full, about how you should learn in school) and C ++ (wider, much wider than it is usually taught in schools). Let me tell you right away so that you do not get scared, if you suddenly want to enter, say: “Why, I already know all this, why am I going to study somewhere? I'd rather go somewhere else. " For those who already know how to program well, there is an opportunity to go directly to the study of algorithms, and in a fairly theoretical training. We are not looking at them now, this (points to the board) is for those who program medium or not at all.

In the first semester, they study the basics of Python, just so that people learn to program and so that no one is particularly offended. Python is rarely taught in schools, mostly people come with knowledge of Pascal or C ++. Basically even Pascal, if it is a mass school. Well, so that no one was offended, everyone learns a new language (as if they are on equal terms). And C ++ simply because you can then go anywhere from C ++.

Then comes the course "Algorithms" and a separate course project. Classic algorithms with implementation. Not that in theory we took something, calculated the complexity. At the lecture, we took it, calculated the complexity, at the seminar - took it, implemented the algorithm. A project is about students doing something finished. For example, one of the projects was: to count ... Let's say you have a lot of apartments in Moscow and you understand: “Oh, I have a lot of unnecessary things, I will rent out some. And they set a price, and no one wants to rent an apartment from you - probably too expensive. Or they put up some kind of price, they immediately took it off and you think: “Oh, I probably passed it out cheaply,” and you get upset too. That is, it was necessary to calculate how much it cost to rent an apartment? You drive in data - it builds an estimate for you. Such a site, which consisted of several things: take suggestions, parse, apply some kind of machine learning algorithm (probably) unpretentious and make a beautiful web face in which you can choose something, drive something in, some meters, any number of rooms, the number of saunas, the number of jacuzzis in your apartment and roughly estimate the cost. That is, some kind of finished, not very complicated thing. Here it means (the lecturer points to the course on algorithms) such a vigorous C ++, with console I / O. Well, here (the lecturer points to the inscription "project") is something under the guidance of a mentor, possibly with databases, perhaps with parsing of texts and with something else.
Then comes the third semester - a course called "Computer Systems". There is quite a bit of assembler for understanding (very little) and then, something similar to pure C and interaction with operating systems, system programming in essence. And a project for a seminar is also something on the topic of all network interactions, quite low-level: develop some utility, for example rsync (synchronization, perhaps you know. In pure C, more or less, write an analogue of rsync, which you will have over the network sync folders with all file accesses, and so on).

And finally, the fourth. I don't even know what to call it, this is such a vinaigrette of technologies necessary for real development, for example, for web development. That is, this is a practical application of databases, again something similar to what was done in the project (the lecturer points to the 2nd year project), but more in-depth. That is, such more or less concrete things are already practical programming. In parallel with this, there is any theory, well, here they are also engaged in science.

And after two courses, people disperse to do what they are interested in, because this thing covers quite widely such programming basics and people by this point already understand that they do not want to deal with computer systems in any way (they, for example, did not like system programming ), but they want to deal with some theoretical algorithms, the difficulty of calculating, coming up with some new things, distributed or something else. Or, on the contrary, they think that they have not very much here ( lecturer points to the first course line with Python and C ++) go, then ( lecturer points to a third course line, with system programming) - as you don't like, count bytes and set all sorts of restrictions on read-write, do streams, threads and something else. And in accordance with this, people choose some direction and learn. That is, in principle, so that you do not develop "duckling syndrome" - you first saw your Pascal and now say "Pascal is power"; or more advanced - you saw C ++ and started saying about everyone that C ++ is powerful, and everything else is not very good.

Here we need to look at this (the lecturer points to the list of courses on the blackboard) more broadly - this is one of the methods that was chosen, in particular at HSE (it has recently appeared, so it is quite modern). There are other ways to get to know each other. In other good universities in a slightly different order and other accents are placed. But they also try to acquaint people with everything that they have.

How a programmer looks for a job

You are this ( the lecturer points to the list of courses) did everything, studied at the university, studied something more productively for another two years and you need to go to work. How do you choose something to work with? First, you got to know everything, went deep somewhere and already know what you love. You have to choose what you love naturally. Because if you love, you will invest energy, you will have motivation and in general everything will be fine. Because it’s not only about money, it’s about making it interesting and pleasant for you. Well, and you want to get into a cool company, get a job. What kind of person would I personally like to see? For example, a hundred students come to me - I have to take two or one to work. Why do they come, I don’t understand at all who they are, what are they, how are they? In the best case, they will show me the diploma they received at the university, and I will say: “Wo! This is a cool diploma, but it is not so cool! " And I could be wrong, by the way. Maybe the person had a lot of free time and learned much better.

What would be great? First, some open source project that you have written from start to finish. It is desirable, if I am doing some kind of infrastructure so that the data can be read quickly, or something else, then, of course, I would be interested to have something open source written to me. Not a website made, but something on the topic. Why am I interested in this? 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 use it - everything is written down, I look at everything and think: “Wow, this bug hasn't been here for two years. closed, here you answered the user impolitely, then I don’t take something else ”. That is, this is your personal project.

Next, what else would be cool? I would like to see how you did the teamwork. That is, you come to me for an interview and say: “The guys from the university and I have made some good application. I was making a database there, they were making some kind of mobile application there, and we also had a guy working there, a girl-designer, a boy on technical support. There were five of us and we did a great project. " Well, I see what is really your project, I say: "What is yours?" I look at the code again and understand that you know how to work in a team with people.

A programmer is not the one who sits alone (an indie like that) in the garage, somewhere with the lights off, does not talk to anyone, gets a beard and writes. All the same, there is some kind of interaction with people. With a boss, for example, who may sometimes swear at you (bosses, they are so, not always kind). And I see that you know how to work with people and it makes me happy if you have a good team of some kind. Even if not good, it's better than not having it.

What else would I personally like? If you showed yourself in big projects. For example, we committed something to the Linux kernel, if you are doing system programming, we fixed some bug. That is, they showed that you can read someone else's code and are able to make some changes to it. I look: "Oh, indeed, you figured out something complicated and fixed some bugs!" And I am starting to be very happy about it. Because I have… well, I don’t know… my programmer quit because competitors offered him a higher salary, and I urgently need to shut someone up - you. I look like you only wrote from scratch, but you don't know how to read and edit someone else's code, and I get upset.

And finally, depending on the specific position, there are various other things. If you are a job analyst, I would like you to solve data analysis tasks on Kaggle. If you get a job on some algorithmic things, I would like you to do some algorithms in sports programming. And finally, if you have thought about the profession, read how interviews are held, you have met that some people there express great dissatisfaction: “I came, and they ask me what my hobby is. I sit like an owl and do not answer, because I have no hobby, ”- and they think that HR’s do this. In fact, they are trying to figure out how friendly and appropriate you are. If you are unfriendly and inadequate, then no matter how genius and workaholic you are, a tough specialist with great knowledge, it will be difficult for the team to work with you, and you will not pull out the project alone. In addition, even if you stretch, you can imagine what a load for the company. And that you will come tomorrow and say: "Increase my salary 10 times, otherwise I will leave you." Understandably, companies don't want to get into this situation. Therefore, the upbringing of adequacy and goodwill in oneself is just as important (at least) as the development of some kind of professional skills.

To summarize, what can you say? Which languages ​​are good and which are bad? Well, within a group of languages, for example between Ruby, Python and PHP, which one to choose? Of course, the correct answer is Python, but in fact the difference between them is in the number of bugs allowed, in the amount of something else - 5%, well, maybe 10%. That is, if you already have a ready-made project written in PHP, then no one in their right mind will say: "Let's rewrite everything in Python." They will say: "Let's hire more PHP developers and continue to write in PHP." Great, that's not a bad choice. It is clear that if you suddenly start writing a project, then it may be wise to choose Python now. Although, it also depends. Maybe you have a bunch of cheap PHP developers on the market, but Python ones are expensive, and you think: "Yes, the technology is cooler, but I will save money on ready-made developers." And that's all, great, you already come and work there.
How do I choose between Java and C ++? Yes, the same thing happens. I think that by the time you decide in which language to start a new big project, you will gain knowledge in your professional field and will be able to make the right choice. Right now, you don't have to make that choice yet, and so I advise you to do what you like.

Basics, as I already said, the very, very basics of programming (what is a function, what are if's, for's, arrays, something else) can be learned more or less in any language. For example, in C ++, because it looks like a lot of things, and the specifics in it (at this level) are the least, and the letters are the least to write unnecessary. Well, then, when you learn some complex architectural things, learn and worry too much about this. That is, the main thing is - try, look for what you like, and when you realize that it is already 4 o'clock in the morning, and you sit and write for fun, because you like it, it is probably at this moment that you have found your ...

Any person who decides to master the basics of the process of creating computer programs, asks the question, which are the most popular programming languages ​​today, and which ones are best to learn. And if the first question is very easy to answer, then the second has to be answered by the student himself, based on his plans and needs.

Let's take a quick look at the most popular programming languages ​​so that you can choose the one that attracts you and start learning it.

programming?

Before disassembling the main programming languages ​​and describing them, it is necessary to disassemble the concept itself.

A programming language is a formal sign system that is used to write computer programs. Like any other language, it has its own lexical, semantic and syntactic rules.

Distinguish languages ​​of low and high levels of programming. Today they use mainly the second one.

High and Low Level Programming Languages

The low-level programming language has a structure close to the structure. In this case, the commands are denoted not using zeros and ones, but using mnemonic notations. The most famous low-level programming language is assembly language.

Working with any of the languages ​​requires high qualifications, and understanding, in addition, takes a lot of time to write programs. At the same time, using low ones, you can create small, but at the same time effective programs. Novice programmers are not recommended to start their acquaintance with them.

High-level programming languages ​​are characterized by the presence of semantic constructs for describing operations. Their study takes a lot of time, and their application in practice requires care and understanding of the basic structures and rules of syntax and vocabulary. But at the same time, proficiency in high-level languages ​​allows you to create large, colorful, multifunctional projects in record time.

The high level includes Pascal, Java, C, C ++, C #, Delphi and many others. They are used to write software and applications.

Most popular programming languages

What are the most popular programming languages ​​today?

In recent years, the most popular and demanded are Java, C, C ++, Python, C #, which are among the top programming languages. They form the basis of modern programs and are used when writing any large project. More than 70% of programmers work with these languages. It is predicted that in the next 10 years they will still be in the same demand as today.

Ruby, PHP, JavaScript are considered no less popular. Most experts focus on them as well.

In general, regardless of popularity, any specialist, more or less respecting himself, must know at least several languages ​​of different levels. This is due to the fact that most large projects are developed in different languages. For example, some modules are written using C, others are developed in Java, and still others in Delphi.

C, C ++ and C #

Let's start with the C family.

The C language is compiled and developed in the 70s. On its basis, such languages ​​as C ++ and C #, Java were later created.

C ++ is a powerful language designed for creating both low-level utilities and drivers and very impressive applications and software complexes.

C # is a modern object-oriented language based on the C and C ++ languages. Has a safe type system. One of its distinguishing features is that it is also very similar to another popular programming language - Java.

One of the disadvantages of the language is that it allows you to create applications only for the Windows operating system, and besides, it is very cumbersome, which means that programs written in it take up a lot of space.

It can be noted that in many ways C, C ++ and C # are programming languages ​​for beginners. Having mastered them, you can be sure that learning a new language will take a minimum of time.

You can get acquainted with them and write your first applications in a special Borland environment or Visual Studio.

JavaScript

JavaScript is a language with object-oriented capabilities. Developed in 1996 and today one of the most popular. The language is used mainly for scripting on the Internet and works in major browsers such as Internet Explorer, Firefox, Opera. It is also closely related to HTML and CSS, so you need to master the basics of these languages ​​before you start learning it.

It is worth noting that despite the similarity in name, JavaScript and Java are two completely different languages.

This language is suitable for those who are focused on creating browsers and scripts, applications and add-ons to them. If you plan to create your own sites, you also need to get to know him better.

Java

Considering the most popular programming languages, one cannot but mention Java. It is an objective-oriented programming language that has been in use since 1995. It is very lightweight and works on any Java machine of any architecture. It is used for developing applications for Android and iOS.

Python

Python - whose main task is to increase developer productivity, make the code more readable. It has a small list of syntactic constructs and a very impressive standard library of functions. The development of the language began in the 90s and continues to this day. It is used for the development of various projects, extensions and integration of previously developed applications.

The basics of the Python language can be learned both as a starting point for programming and as a second complementary language.

Ruby

Ruby is a high-level programming language that contains parts of Perl, Smalltalk, Eiffel, Ada, and Lisp. Used since 1995. The main advantages of the language are its simplicity and flexibility. Suitable for both writing small applications and developing serious programs.

PHP language

PHP is a fairly popular scripting language designed for building web applications. Quite often it is also included in the list of "Programming Languages ​​for Beginners" and recommended for learning.

It can help you create high-quality web applications in a very tight time frame. The language has a simple and understandable structure, which allows you to learn it in a matter of days.

Conclusion

We have reviewed the most popular programming languages, the study of which will help you in the future to successfully create your projects and earn money as a programmer. There is no consensus about which language to study, but at the same time, experts note that it is desirable to know several programming languages, as this will further expand the field of activity and facilitate work on various team projects.

Programming is a whole science that allows you to create computer programs. It includes a huge number of different operations and algorithms that form a single programming language. So what is it and what are the different programming languages? The article provides answers, and also provides an overview list of programming languages.

The history of the emergence and change of program languages ​​should be studied along with the history of the development of computer technology, because these concepts are directly related. Without programming languages, it would be impossible to create any program for the operation of a computer, which means that the creation of computers would become a meaningless exercise.

The first machine language was invented in 1941 by Konrad Zuse, who is the inventor of the analytical engine. A little later, in 1943, Howard Aiken created the Mark 1 machine, capable of reading instructions at the machine code level.

In the 1950s, there was an active demand for software development, and machine language could not handle large amounts of code, so a new way of communicating with computers was created. Assembler is the first mnemonic language to replace machine instructions. Over the years, the list of programming languages ​​only grows, because the field of application of computer technologies is becoming wider.

Classification of programming languages

At the moment, there are more than 300 programming languages. Each of them has its own characteristics and is suitable for one specific task. All programming languages ​​can be roughly divided into several groups:

  • Aspect-oriented (the main idea is the separation of functionality to increase the efficiency of software modules).
  • Structural (based on the idea of ​​creating a hierarchical structure of individual program blocks).
  • Logical (based on the theory of the apparatus of mathematical logic and the rules of resolution).
  • Object-oriented (in such programming, it is no longer algorithms that are used, but objects that belong to a certain class).
  • Multi-paradigm (combine several paradigms, and the programmer himself decides which language to use in a particular case).
  • Functional (the main elements are functions that change the value depending on the results of calculations of the initial data).

Programming for beginners

Many people ask the question, what is programming? Basically, it is a way of communicating with a computer. Thanks to programming languages, we can set specific tasks for various devices by creating special applications or programs. When studying this science at the initial stage, the most important thing is to choose suitable (interesting for you) programming languages. The starter list is below:

  • Basic was invented in 1964, belongs to the family of high-level languages ​​and is used to write application programs.
  • Python ("Python") is fairly easy to learn thanks to its simple, readable syntax, but the advantage is that it can be used to create both regular desktop programs and web applications.
  • Pascal ("Pascal") - one of the oldest languages ​​(1969), created for teaching students. Its modern modification is strongly typed and structured, but Pascal is quite a logical language that is understandable at an intuitive level.

This is not a complete list of programming languages ​​for beginners. There are a huge number of syntaxes that are available for understanding, and will certainly be in demand in the coming years. Everyone has the right to independently choose the direction that will be interesting for him.

Beginners have the opportunity to speed up the learning of programming and its fundamentals thanks to special tools. The main assistant is the integrated development environment for programs and applications Visual Basic ("Visual Basic" is also a programming language that inherited the style of the Basic language of the 1970s).

Programming language levels

All formalized languages ​​intended for creating, describing programs and algorithms for solving problems on computers are divided into two main categories: low-level programming languages ​​(the list is given below) and high-level ones. Let's talk about each of them separately.

Low-level languages ​​are designed to create machine instructions for processors. Their main advantage is that they use mnemonic notation, that is, instead of a sequence of zeros and ones (from the binary number system), the computer remembers a meaningful abbreviated word from the English language. The most famous low-level languages ​​are "Assembler" (there are several subspecies of this language, each of which has much in common, but differs only in a set of additional directives and macros), CIL (available in the .Net platform) and JAVA Bytecode.

High-level programming languages: a list

High-level languages ​​are designed for the convenience and efficiency of applications; they are the exact opposite of low-level languages. Their distinctive feature is the presence of semantic structures that succinctly and concisely describe the structures and algorithms of the programs. In low-level languages, their description in machine code would be too long and incomprehensible. High-level languages ​​are platform independent. Instead, compilers perform the function of a translator: they translate the text of the program into elementary machine instructions.

The following list of programming languages: C ("C"), C # ("C-sharp"), "Fortran", "Pascal", Java ("Java") - are among the most used high-level syntaxes. It has the following properties: these languages ​​work with complex structures, support string data types and operations with information I / O files, and also have the advantage of being much easier to work with due to readability and clear syntax.

Most used programming languages

Basically, you can write a program in any language. The question is, will it work efficiently and smoothly? That is why the most appropriate programming languages ​​should be chosen for solving various problems. The list by popularity can be characterized as follows:

  • OOP languages: Java, C ++, Python, PHP, VisualBasic and JavaScript;
  • a group of structural languages: Basic, Fortran and Pascal;
  • multi-paradigm: C #, Delphi, Curry and Scala.

Scope of programs and applications

The choice of the language in which this or that program is written largely depends on the area of ​​its application. So, for example, to work with the "hardware" of the computer itself (writing drivers and supporting programs), the best option would be C ("C") or C ++, which are included in the main programming languages ​​(see the list above). And for the development of mobile applications, including games, you should choose Java or C # ("C-Sharp").

If you have not yet decided in which direction to work, we recommend that you start learning from the C or C ++ languages. They have a very clear syntax, a clear structural division into classes and functions. Plus, knowing C or C ++, you can easily learn any other programming language.

Top related articles