Three specialists and three types of programming areas. Programming languages. Concept, classification, types. Relevance of knowledge and understanding of programming languages

A programming language is a formal sign system designed to write computer programs. A programming language defines a set of lexical, syntactic and semantic rules that define the appearance of the program and the actions that the performer (computer) will perform under its control.

A high-level programming language is a programming language designed to be fast and easy to use by the programmer. The main feature of high-level languages ​​is abstraction, that is, the introduction of semantic constructs that briefly describe such data structures and operations on them, the descriptions of which in machine code (or other low-level programming language) are very long and difficult to understand.

Low-level programming language (low-level programming language) is a programming language that is close to programming directly in the machine codes of the real or virtual (for example, Java, Microsoft .NET) processor used. A mnemonic notation is usually used to denote machine instructions. This allows commands to be remembered not as a sequence of binary ones and zeros, but as meaningful abbreviations of words in the human language (usually English).

Low level programming languages

Early computers had to be programmed using binary machine codes. However, programming in this way is a rather time-consuming and complex task. To simplify this task, low-level programming languages ​​began to appear, which made it possible to specify machine commands in a form more understandable to humans. To convert them into binary code, special programs were created - translators.

Fig.1. An example of machine code and its representation in assembler

Translators are divided into:

    compilers - convert program text into machine code, which can be saved and then used without a compiler (an example is executable files with the *. exe extension);

    interpreters - turn part of the program into machine code, execute it and then move on to the next part. In this case, each time the program is executed, an interpreter is used.

An example of a low-level language is assembly language. Low-level languages ​​are focused on a specific type of processor and take into account its features, so in order to port an assembly language program to another hardware platform, it must be almost completely rewritten. There are also certain differences in the syntax of programs for different compilers. True, central processors for computers from AMD and Intel are practically compatible and differ only in some specific commands. But specialized processors for other devices, for example, video cards and phones, contain significant differences.

Advantages

Low-level languages ​​create efficient and compact programs because the developer has access to all the capabilities of the processor.

Flaws

    A programmer working with low-level languages ​​must be highly qualified and have a good understanding of the structure of the microprocessor system for which the program is being created.

    So, if a program is created for a computer, you need to know the device of the computer and, especially, the device and operating features of its processor;

    the resulting program cannot be transferred to a computer or device with a different type of processor;

significant development time for large and complex programs.

Low-level languages ​​are usually used for writing small system programs, device drivers, interface modules with non-standard equipment, programming specialized microprocessors, when the most important requirements are compactness, speed and the ability to directly access hardware resources.

Assembly is a low-level language that is still widely used today.

What coders are most in demand in our country?

  • If you tell an ordinary person that you work as a programmer, then in response you can hear one of the following remarks:
  • “I need to reinstall Windows. I've been waiting all my life for someone who will do this for me. And then we’ll go fix the toaster.”;
  • "ABOUT! Can you help me with my VBA lab!”;
  • “How long will it take you to make a website for my mom’s store?”;

"Yah! A boring and stupid profession. I somehow tried to figure it out with 1C...” If in response you say that you have never made websites or labs in VBA, and you only see Windows in nightmares, then the interlocutor may be sincerely surprised and his face will reflect sincere doubt about your professional suitability. Some developers weaken under this gaze and go to prove that they can do something. Because of such In the mind of the average person, the word “programmer” is synonymous with the concept of “free computer help.”

After all, many people do not know what programmers actually do and judge it by the skills of their relatives/acquaintances. But different representatives of the specialty do completely different things and one cannot speak for everyone.

This article will talk about main specializations of programmers, which are most in demand on the Russian market. For each type, the organizations where it can be found most often and the technologies with which it needs to be able to work will be indicated.

The article will only mention the basic knowledge, which is essential in an adequate team, where the programmer is not forced to tighten the screws, draw a design and post articles on the website.

1. Front-end web developer

If we go to a website and there are buttons that change location and color when you hover over them with the mouse, then this is the work of a front-end developer. He writes all the code in JavaScript, which runs without reloading the page on the client side.

Where does he work?

What is he doing?

Develops user interface dynamics. If the company does not have a layout designer, then it also translates PSD templates into HTML code.

Technologies

  • HTML and UI frameworks (Bootstrap, Foundation, Pure);
  • CSS and preprocessors (SASS/LESS);
  • JavaScript + frameworks/libraries in this language (Jquery, ReactJS, AngularJS, BackboneJS);
  • Utilities for building projects (Grunt, Gulp, Bower).

2. Back-end developer

The person on whose shoulders the main burden of developing a web project falls. It’s like he’s building a foundation onto which the front-end developer attaches “decorative elements.”

Where does he work?

In serious companies engaged in the creation of websites and web applications. The separation of frontend and backend is one of the signs that a company has a certain level of development culture.

What is he doing?

Develops the “core” of a website or web application: the code executed on the server and the database architecture.

Technologies

One of the following languages ​​and frameworks/libraries for it:

  • Ruby;
  • Python;
  • Java;
  • JavaScript.
  • MySQl/PostgreSQL/NoSQL databases.

3. Full-stack web developer

A person who can make a website of any complexity from start to finish.

Where does he work?

Most often in startups and small web design studios. In large companies, they are included in the team along with front-end and back-end developers to control and coordinate their work.

What is he doing?

Websites and web applications. Performs the work of a front-end and back-end developer simultaneously.

See lists of the two previous types.

4. Game developer

A very broad concept that includes at least three large categories: desktop game developer, mobile game developer and MMORG developer.

Where does he work?

In game studios.

What is he doing?

Develops games.

What technologies would he like to know?

  • C#/C++/Java;
  • Open GL or DirectX;
  • One of the game engines (Unity, Unreal Engine, Torque and others).

5. Android application developer

Where does he work?

What is he doing?

Develops applications for the Android operating system.

What technologies would he like to know?

  • Java;
  • Android SDK;
  • OpenGL;
  • Android Studio.

6. iOS application developer

Where does he work?

In mobile application studios, startups or large companies that decided to make a mobile application for themselves on their own.

What is he doing?

Develops applications for the iOS operating system.

Technologies

  • Objective-C
  • XCode;
  • OpenGL;
  • Cocoa Touch;
  • CoreData;
  • CoreGraphics.

7. 1C programmer

Many developers do not consider the language built into 1C to be a programming language, and the people who write in it are programmers. They have their reasons for this. However, there are a lot of people who call themselves 1C programmers and there are a lot of vacancies for them.

Where does he work?

In any company actively conducting economic activity. Often not included in the main staff, but comes a couple of times a month or less.

What is he doing?

Writes programs to automate document flow in a company.

Technologies

  • "1C: Trade Management";
  • "1c accounting";
  • "1C: Salaries and Personnel";
  • T-SQL.

8. Software engineer

If you can become one of the 7 previous types by taking courses or through self-education, then only technical universities graduate software engineers. Often these positions are filled by people over forty years of age who received their education during the Soviet era.

Where does he work?

In production or in a scientific institution.

What is he doing?

Develops programs to control a variety of devices: from an oven in a bakery to a robot vacuum cleaner.

Technologies

One of the following languages:

  • Java;
  • Delphi (lived, is alive and will live!);
  • Assembler.

A huge amount of technical knowledge corresponding to the industry in which the person works.

If you look at advertisements for hiring programmers on Russian websites, 90% of them will fit these seven types. In the West, the job market is somewhat more diverse. Anyone interested can go to Odesk and see what kind of work is offered there.

I note with sadness that 14-year-old Pakistanis there demand from 500 rubles per hour for HTML coding.

And you can judge which languages ​​are now the most popular in the world using the Tiobe Index. This rating is based on the number of queries in search engines mentioning different programming languages.

P.S. Finally, a life anecdote on the topic.

If drivers were hired the same way as programmers:
Vacancy: driver.
Requirements: professional skills in driving cars and trucks, trolleybuses, trams, metro and funicular trains, excavators and bulldozers, special tracked vehicles, infantry fighting vehicles and modern light/medium tanks in service with the CIS and NATO countries. Rally and extreme driving skills are required. Experience driving Formula 1 cars is a plus. Knowledge and experience in repairing piston and rotary engines, automatic and manual transmissions, ignition systems, on-board computers, anti-lock braking systems, navigation systems and car audio systems from leading manufacturers. Experience in body and paint work is a plus. Applicants must have Mercedes, BMW, General Motors certificates, as well as certificates of participation in major international competitions no more than two years old.
Salary: determined based on the results of the interview.

At the moment there are many directions in programming. Everyone can find something they like, but to do this you need to know what exactly you will do in your field.

Web application development

This direction is focused on the development of web applications (in other words, websites, but nowadays websites have such rich functionality that they can be called full-fledged applications).

Web programming can be divided into backend (writing server scripts - PHP, Python, Ruby) and frontend (developing a user interface - Javascript, HTML, CSS).

Desktop application development

Software development for various operating systems. All the variety of software that we use in everyday life. If you want to write your own photo processor, audio player or text editor, then this is the place for you.

Server application development

These are various game servers (your favorite Dotka, CS: GO), IM services (Skype server part, ICQ, MSN), banking databases.

Mobile application development

Lots of Java applications. VK, Viber, Yandex.Maps, translators, electronic readers.

Embedded Systems Programming

An interesting branch of programming for various home appliances: vacuum cleaners, refrigerators, washing machines, players, navigators, electronic scales. Scientific developments using specialized languages ​​such as MATLAB are involved here.

System Programming

Writing various drivers for equipment, programming the “kernel” of operating systems. By the way, the creation of compilers and interpreters for programming languages ​​belongs here.

Game development

A gigantic industry. This includes game development for PCs, consoles, and mobile devices.

Olympiad programming and problem solving

Programming in various “impractical” and not common languages ​​(Pascal, Delphi) to solve some original problems that require a non-standard approach, ingenuity and an IQ above 160.

Programming for accounting and financial products

"1C: Enterprise". All accounting in Russia is tied to this product. But it is not enough to know just the language itself; it is important to understand the basics of accounting. The advantage is that there is a lot of work, and you will not be left without bread.

Database programming

Serious direction. If you want to develop databases capable of storing billions of rows of information about all VKontakte or Facebook users without slowing down, this is the place for you.

Science

Science and that's it. Neural networks, modeling the structure of DNA, launching satellites, modeling the Big Bang.

By the way, recently news was published on the NASA website about the search for a programmer in the “ancient” Fortran language, which is already more than 60 years old. A programmer was needed to develop programs to control the robotic probes Voyager 1 and Voyager 2, the software for which was written in Assembly, Fortran and COBOL back in the 1970s. You never know what knowledge might come in handy.

I don’t know how things are in education now, but 10-15 years ago, neither at school nor at university, no one seriously explained that programming has its own types, each of which requires a special type of thinking. Not that this will cripple anyone’s destinies, but the study of software disciplines could go much faster if, at the stage of laying the foundation, we presented a variety of languages ​​and approaches, and did not zombie-teach C++ in its console manifestations.

Many people, faced with the need to write functional code, often regret that the procedural way of thinking is so deeply ingrained in the brain that it is not easy to change from it. Therefore, it is better to start your path to becoming a programmer not by choosing a language, but by choosing a type of programming.

Types of programming

Let’s agree right away: there will be six types. This is a fairly detailed division. Usually 3-4 are allocated, but since we are faced with the task of choosing a path for beginners, it is completely justified.

Procedural programming is also imperative.

It poses the task of creating code in a language that the machine used can understand. The most famous case is the Turing machine; among the well-known programming languages ​​- C/C++, Ada, Pascal, Go. The tasks here are solved systematically: first, an object is declared, then it is defined, and then an action is performed on it:

var
S: String;

S:= ‘Hello!’;

Declarative programming.

In the procedural case, the language optimization vector is directed from the machine level to the user language by using the basic principles of OOP, classes, methods, etc. Here, the task itself is at the forefront, and the method of its execution is secondary. A striking example is the HTML markup language. If you want to place a button, you don't formally need to create an object and assign attributes to it:

Functional programming.

As you know from the mathematics course, the result of executing any function can be presented in the form of tabular data, the only question is the sampling frequency and the range of values. That is, no matter how many times the function is executed, no matter what its place in the problem, the result for the same values ​​will remain the same. In imperative programming, this is not always done, because the values ​​of variables can change during the course of the program, which will make the result dependent on specific conditions.

Functional programming does not have this drawback: here you operate with functions - initial, incremental and resultant - but not with specific values. Popular representatives include Lisp, Clojure, Haskell. Functional programming is considered complex and redundant for most applications. Hence the low demand for specialists, but this also results in high salaries and really interesting work.

Logic programming.

As the name suggests, it operates on simple mathematical logic. Prominent representatives are Planner and Prolog. A fairly limited set of actions can be really useful for creating the simplest artificial intelligence or flexing the brain, but in real life, logic programming is rarely used on its own.

Dynamic programming.

This is the case when, in order to solve a complex complex problem, it is necessary to break it down into several simpler ones, minimizing the number of execution cycles. Ideally, each simple task should be performed once, but in practice this is quite rare. Dynamic programming is rather a concept applicable to all languages, so there are no representatives of this direction. But it will require a special way of thinking from you in the same way.

Graphical programming is also visual.

It encourages the developer to work with graphic images rather than text. This can be expressed in different ways - there are special languages, like Scratch or BluePrint, there are languages ​​of diagrams or diagrams (LD or FBD), there are simply sections of programming related to interaction with forms and graphics. In the latter case, it can be any language; visualization is carried out by development tools (Borland Delphi/C++, Visual Studio, Adobe Dreamweaver, etc.). Such graphical programming in its pure form is extremely rare; without understanding the language and structure of the code, it is impossible to create something serious.

Rest

Programming is divided into many types, and beginners don’t even know about some of them: synchronous/asynchronous/event-based, sequential/parallel, different in the tasks they solve and the involvement of AI and statistics.

Choosing a starting programming paradigm does not mean choosing only one path. On the contrary, without being tied to specific languages, professions and software environments, starting with “your” way of thinking, you will initially set yourself up for a correct understanding of the essence. A successful, happy and rich IT specialist is not the one who gets into the right stream, but the one for whom any stream is an opportunity to realize his potential.

If we take the syntax of the formation of its constructions as a sign of classification, we can conditionally divide it into the following types:

    procedural,

    functional,

    logical,

    object-oriented.

3.1. Procedural (algorithmic) language

A procedural programming language allows the programmer to define each step in the process of solving a problem. The peculiarity of such programming languages ​​is that tasks are divided into steps and solved step by step. Using a procedural language, the programmer defines language constructs to carry out a sequence of algorithmic steps.

Procedural languages ​​are characterized by the following features:

    the need for explicit memory management, in particular, the description of variables;

    low suitability for symbolic calculations;

    lack of a strict mathematical basis;

    high efficiency of implementation on traditional computers.

One of the most important classification features of a procedural language is its level. The level of a programming language is determined by the semantic capacity of its constructions and the degree of its orientation towards the programmer. The more human-oriented a language is, the higher its level.

Procedural languages ​​include: Assembly language, C, Basic, Pascal.

3.2 Functional (applicative) language

The first such language was LISP.

The role of the main construction in functional (applicative) languages ​​is played by expression. Expressions include scalar constants, structured objects, functions, function bodies, and function calls.

The applicative programming language includes the following elements:

    classes of constants that functions can manipulate;

    a set of basic functions that a programmer can use without prior declaration or description;

    rules for constructing new functions from basic ones;

    rules for forming expressions based on function calls.

The listed properties characterize applicative languages ​​as very high-level programming languages.

3.3 Logical (relational) language

The PROLOG language was created by the French scientist A. Colmeroe in 1973. Currently, other languages ​​are known, but the most developed and widespread logic programming language is Prolog. Logic programming languages ​​are widely used in artificial intelligence systems.

Logic programming languages ​​are characterized by:

    high level;

    strict focus on symbolic calculations;

    the possibility of inverse calculations, that is, variables in procedures are not divided into input and output;

    possible logical incompleteness, since it is often impossible to express certain logical relationships in a program, and it is also impossible to obtain all correct conclusions from the program.

The constructs of the language do not correspond to mathematical formulas, but define relationships between objects and quantities; they state what result is desired by the user, without indicating how to do it.

Logical and functional languages ​​are declarative languages. These languages ​​do not have the concept of “operator” (“command”).

3.4 Object-oriented language

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.

Object-oriented programming languages ​​have recently become very popular among programmers, as they make it possible to use the advantages of the object-oriented approach not only at the stages of design and construction of software systems, but also at the stages of their implementation, testing and maintenance.

Modern object-oriented (OO) languages ​​use the following methods: inheritance, encapsulation, polymorphism.

In some object-oriented languages, all class methods are virtual.

Many modern languages ​​are specifically designed to facilitate object-oriented programming. However, it should be noted that you can apply OOP techniques to a non-object-oriented language and vice versa; using an object-oriented language does not mean that the code automatically becomes object-oriented.

Some languages ​​(sometimes called “purely object” - Java or Ruby) are entirely built around object tools - in them any data is an object, any code is a method of some class, and it is impossible to write a program that does not use objects. Other languages ​​(“hybrid”) include an OOP subsystem in an initially procedural language. They allow you to program without accessing object facilities. Classic examples are C++ and Delphi (Object Pascal).