Programming languages ​​included. Old and dead languages. Programming language paradigm

Computer programs are often described as “sets of instructions,” and computer languages ​​are perceived by many only as a vocabulary and syntactic way of providing those instructions.

From this point of view, different programming languages ​​may have different grammars or different vocabularies. Each language may treat semicolons differently or require capital letters in writing, although by and large, the basis of all languages ​​is the same principle.

But the reality of programming is much more complex.

Programming today

It's strange, but most of the truly "global" ideas in computer programming were developed back in the 1950s and 60s. Since then, many new languages ​​have appeared, but none of them implement a truly new approach to logic and computation.

The development of new programming languages ​​over the past few decades has been based on the experience of developers. This means that there is code that is easier to write (the driving force behind Ruby) and easier to read (Python), and makes certain types of logical structures and problem-solving techniques more intuitive.

Some languages ​​have been developed to solve specific problems in programming (such as PHP and SASS) to manage certain types of systems (), or to work in a certain environment or platform (Java and JavaScript). Some languages ​​were designed specifically to help beginners learn to program (BASIC and Scratch are classic examples).

Since theories and practices around language design have evolved into (mostly) widely accepted orthodoxy, much of the new and interesting work The development of programming practice is now centered around systems architecture.

A relatively recent development includes the concept of SOA (Service Oriented Architecture). service-oriented architecture) and MVC (Model-View-Controller), as well as frameworks such as , which allow programmers to easily work within these paradigms.

List of programming languages

A growing list of popular programming languages, markups, and protocols. Links to descriptions of each of them:

ASCII encoding

  • Character encoding is one of the fundamental aspects of computers and the Internet. ASCII is the first widely used character encoding system. It has been supplanted by UTF-8, but ASCII is still the basis for the vast majority of characters on the Internet today. Understanding this is very important for programmers. Read more here (English):

ASP/ASP.NET

  • ASP is an acronym for Active Server Pages. It is the first server-side scripting language for the Microsoft IIS web server. ASP has been replaced by an open source server-side framework - ASP.NET. More details (English):

AutoLISP

  • AutoLISP is a simple, lightweight, interpreted programming language designed specifically for computer-aided software design. Read about it (English):

Awk

  • Awk is an extremely powerful word processing programming language that allows you to extract data from a file or other source and output it in any format you need. It is an old tool, but is still as useful as ever. Find out more (English): .

BASH

  • Bash is the most commonly used interface command line in the Unix world. This is the default text-based interface for both Linux and Mac OS X. Read more:

Common Lisp

  • Lisp is a rather unique programming language, perhaps the oldest language and still in use today. This is especially important in the area artificial intelligence. More details (English):

C

  • If we include here two derivatives of this language, then we can safely say that no language has been more useful and more influential than C. This is especially important for the development of operating systems and other software. Many compilers and interpreters for other languages ​​are written in C. Read more:

C++

  • Originally called “C with classes,” C++ is in many ways simply a more advanced successor to C (though the overall situation is more complex). C++ was designed to add a high level to the C programming paradigm while retaining low level hardware manipulation capabilities. Many of these additions have been added to C over the years, and the languages ​​are more like two dialects of the same language. More details (English):

C#

  • Used as the primary language for .NET programming, similar to C++, it is an extension of the C programming language, but with the important addition of object-oriented capabilities. More details (English):

CSS/CSS3

  • CSS, or Cascading Style Sheets, is also not a programming language, but a page style language - a language that provides style and layout rules to documents and applications. It is the main style language used on the Internet. More details:

Emacs Lisp

  • Emacs has long been known as a popular and powerful text editor. But adding Emacs Lisp to it turns it into an integrated development environment for almost any programming language. More details (English): .

F#

  • F# – programming language general purpose. Designed to be extremely effective. Being originally only Microsoft language, is now an open source language and is used on all platforms. More details (English): .

FORTAN

  • Fortran first appeared in 1957 and is still used today to solve some of the most complex problems modern science and technology. More details (English):

FORTH

  • Work on Forth began in 1968, and the language is typically used on hardware that does not have a traditional operating system. It is also widely used to control machine tools. More details (English):

Haskell

  • Haskell is one of the most popular functional programming languages, in addition to being the prototype for a dozen other languages. It is widely used in business and academic circles and is a great language to start with when learning about functional programming. More details (English):

HTML

  • HTML is not a programming language. This is a markup language - a language for adding semantic and stylistic annotations to content. It is the primary language for web content. Knowledge of it is necessary and mandatory for all web designers and web developers, as well as everyone (writers, editors) who produces Internet content. More details (English): and

IDL

  • IDL, or Interactive Data Language, is a programming language primarily used for data analysis and visualization. It is still widely used in aerospace and astronomy. More details (English):

INTERCAL

  • INTERCAL is a parody computer language developed in the early 1970s. It was created as a joke to show how languages ​​are technically complex and difficult to read. This is a real language that you can download, and with which you can even do something. It is assumed that you must be very familiar with it to do this - but, again, not too well, because INTERCAL itself will not like it either. More details (English):

Java

  • Java is a language high level and is intended for use on Java Virtual Machine. It has very few external dependencies, and was designed to run on any physical machine. Used a lot in network architecture, as well as in embedded devices and other computing applications. More details (English): .

Javascript

  • JavaScript (not actually related to Java) is scripting language, originally designed for use in web browsers. Therefore it has built-in capability to work with Document Object Model (DOM), which displays the content of web pages in memory. It is the main programming language for front-end web development. It is primarily event-driven and, thanks to Node.JS, has recently gained recognition as a server-side language. More details (English): and. And here:

Ksh

  • Korn Shell (ksh) is a command line interface used on Unix. It was an early shell, compatible with standard shell Bourne, but with all the cool interactive features of the C shell. Read more:

Linux Programming

  • Linux programming includes everything from shell scripting to application development to kernel development. More details (English):

Logo

  • Logo is one of the earliest languages ​​for teaching programming, and is still probably the most famous. He is famous for his turtle, which children make move with computer commands. A fun way to teach programming. More details (English):

M.L.

  • ML was originally designed as a meta-programming language: a language for creating other languages. But over time, it became a general-purpose language, widely used in education, mathematics, science, and even finance. More details (English): .

MPI

  • Message Passing Interface is a standard protocol for sending messages between processes or programs. It has been implemented in a number of programming languages, including C, C++, Java and Python. Thanks to MPI it became possible parallel computing. More details (English):

Network programming with internet sockets

Objective-C

  • Another version of C, created in the 1980s to provide a fully object-oriented implementation of C. The language's main use today is on Mac OSX and iOS operating systems. Until recently iOS applications should have been written in Objective-C, but now you can also write in Swift. More details (English):

OCaml

  • OCaml is an object-oriented functional computer language. In the ML tradition, it is used a lot to write other programming languages ​​and frameworks. More details (English): .

Operating system development

  • The Everest of programming jobs is considered to be the development of an operating system. If you want to prove to yourself that you can write anything, then there is nothing better than writing your own operating system kernel and its associated tools. But be careful: this is a journey only for the brave and true programmers! More details (English): .

Perl

  • A very useful tool for almost any programmer. As an interpreted language, it does not need to be compiled, sometimes referred to as the “Swiss Army Knife” of scripting languages. More details (English):

PROLOG

  • Prolog is a logic programming language designed for natural language processing. More details (English):

Pure Data

  • Pure Data is a unique visual programming language. It was created specifically to allow users to create video, audio and graphic works. More details (English): .

Python

  • Python is a high level programming language. An interpreted (non-compiled) language, also known as a “scripting language”. Primarily used as a tool for performing specialized programming tasks such as automation and data analysis tasks. It has a strong set of tools for mathematical and scientific calculations and is often used by researchers. More details (English):

Ruby on Rails

  • Ruby on Rails is a web development framework for the Ruby programming language. It provides MVC (Model View Controller) architecture, a database abstraction layer, and many tools to speed up the process of programming web applications. Very popular for rapid web application development. More details (English):

SAS

  • SAS is a specialized language designed for analyzing statistical data. Widely used in government, academia and business. For people with big amount data, SAS is the obvious choice. More details (English): .

Scala

  • Scala is a relatively new language - more or less the newer and better Java. This excellent language for Java programmers who want to be more efficient, or for people who are just starting to learn programming and want to learn a powerful language that won't limit them in the future. More details (English): .

Scheme

  • Scheme old language, but is still used to teach programming and more complex subjects in computer science. Based mainly on Lisp, and partly on ALGOL. More details (English): .

Scratch

  • The Scratch programming language was created specifically for teaching programming to children aged 8 to 16 years. Scratch is easy, and it allows children to learn the basics of programming logic in a fun way. More details (English):

Simula

  • Simula – historically important language, as it was the first language to introduce the concepts that became the basis for object-oriented programming. More details (English): .

SMIL

  • SMIL (Synchronized Multimedia Integration Language) is a tool for those people who want to create and distribute presentations. Particularly useful if you want to create presentations that need to be updated from time to time. More details (English):

SQL

  • SQL (Structured Query Language) is the language used to communicate with Relational Database Management Systems (RDBMSes). SQL allows the programmer to create data structures, insert and edit data, and query it. More details (English):

Stata

  • Stata is a development environment and programming language for solving serious statistical problems. And although it was created quite a long time ago, it is still widely used. If you are involved in statistical work, Stata is a great tool. More details (English):

Swift

  • Swift is a new programming language developed by Apple for iOS, OS X, watchOS, tvOS and Linux. This is the language of the future for developers of programs and applications for Apple devices. More details (English):

S-PLUS

  • S-PLUS is a commercial version of the powerful S programming language designed for performing statistical analysis. The GNU Project has its own version of S, called R. All necessary resources about S with an emphasis on S-PLUS:

UNIX Programming

  • The breadth of programming on Unix is ​​great. It covers the range from administrative scripts to text-based code to X Window development. More details (English):

XML

  • XML is good structured language for marking, intended for both human and machine reading. More details (English):

Lesson prepared by: Akulov Ivan

Do we really need new programming languages? Of course, on this moment there are quite enough of them. Among the variety of imperative, functional, object-oriented, dynamic, compiled, interpreted, and scripting languages, no developer can understand all the capabilities available today.

And yet the emergence of new languages ​​is a fairly common occurrence. Some are created by students or hobbyists as individual projects, others are products of large software manufacturers. Even small and medium-sized companies are participating in this process, creating languages ​​to suit the needs of their industries. So why do people keep reinventing the wheel over and over again?

The fact is that, despite the power and versatility of currently popular languages, not a single syntax is ideally universal. Moreover, programming itself is constantly evolving. The rise of multi-core processors, cloud programming, mobility, and distributed architectures have created new challenges for developers. Adding support for the latest features, paradigms and patterns to already existing languages, especially the most popular ones, can be overly complex. Sometimes the best solution is to start from scratch.

Thus, here are 10 cutting-edge programming languages, each of which looks at the art of software development from a new angle, solving a specific problem or a specific shortcoming of the languages ​​most popular today. Some of them are already completed projects, while others are only in the early stages of their development. It's likely that some of them will never gain popularity, but any of them could be a revolutionary achievement that will completely change programming - at least until new languages ​​are created.

JavaScript is good to add basic elements interactivity of web pages, but when your web application code consists of thousands of lines, the weaknesses of the language become visible. That's why Google created Dart, a language that the company believes will become the new "native" language for web programming.

Like JavaScript, Dart uses syntaxes and keywords similar to those used in the C language. However, one significant difference is that while JavaScript is based on prototypes, objects in Dart are defined using classes and interfaces. like in C++ or Java. Dart also allows programmers to optionally define variables with static types. The idea is to make Dart a language as familiar, dynamic, and flexible as JavaScript, while allowing developers to write code that is fast, easy to execute, and difficult to make difficult to find mistakes.

Dart isn't widely used today. It's designed to run on either the client or server (a la Node.js), but the only way to run the client version of Dart code is to cross-compile it into JavaScript. However, even after this it will not run in all browsers. But since Dart is released under a free BSD-type license, any seller who agrees to Google terms, is free to use this language in its products. All Google has left to do is convince the entire industry.

F# code is somewhat similar to OCaml code, but has its own interesting syntax. For example, to facilitate scientific calculations numeric types data in F# can be units of measurement. F# also includes constructs to facilitate asynchronous I/O, CPU parallelization, and GPU output.

After long period maturing at Microsoft Research, today F# ships with Visual Studio 2010. Even better, but not typical for a corporation, Microsoft has created an F# compiler and root library available under the Apache open license. You can get started with it for free and even use it on Mac and Linux systems (using Mono runtime).

Naturally, with this kind of integrated system, something magical must happen in the end. The Opa runtime integrates its own web server and database management system, which cannot be replaced by stand-alone alternatives. Be that as it may, this may not be such a big deal given the ability to develop modern data-driven web applications with just a few dozen lines of code. Opa is free and is currently available for 64-bit Linux and Mac OS X platforms, with other ports being developed.

Fantom is distributed free of charge under the Academic Free License 3.0 and is available for Windows and Unix-like platforms (including Mac OS X).

Programming Language Explored #7: Zimbu

Due to its mixed nature, Zimbu's syntax is unique and specific, but at the same time has a lot of functionality. It uses expressions and operators similar to those used in C, but with its own keywords, data types, and block structures. It supports memory management, threads and pipelines.

The only problem is portability. Although Zimbu is a compiled language, its compiler produces ANSI C code, and binary files can only be created on platforms with a built-in C compiler.

Unfortunately, the Zimbu project is under development. The compiler and a few sample programs can be created yourself, but not all actual Zimbu code will compile and run properly. Not all declared functions have yet been developed, and some of those already presented do not work correctly. The language specification may also change over time, adding keywords, types, and syntax as needed. Consequently, the documentation is also still incomplete. However, if you want to give it a try, preliminary utilities are already available under the Apache license.

Researched programming language #8: X10

Parallel processing was once a specialized niche in software development, but with the rise of multi-core processors and distributed computing, parallelism has gained popularity. Unfortunately, current programming languages ​​have not kept up with this trend. That's why IBM Research is creating X10, a language designed specifically for modern parallel architectures that aims to increase developer productivity "tenfold."

Concurrency in X10 is possible thanks to the PGAS (Partitioned Global Address Space) programming model. Code and data are allocated into blocks and distributed across different "spaces", thereby making it easier to scale a program from a single-threaded prototype (one space) to a multi-threaded one running on one or more multi-core processor(multiple spaces) in a high performance cluster.

X10 code is most similar to Java. Essentially, the X10 runtime is available both as built-in executables and as class files for the JVM. The X10 compiler can produce source code in either C++ or Java. There are plans to develop direct compatibility with Java in the future.

In the meantime, the language is developing, although it is already quite developed. The compiler and runtime are available for a variety of platforms, including Linux, Mac OS X, and Windows. As additional utilities are an Eclipse-based interactive development environment (IDE) and a debugger, both licensed under the Eclipse Public License.

Researched programming language #9: haXe

Many languages ​​can be used to write portable code. C compilers are available for almost all CPU architectures, and Java bytecode will run anywhere there is a JVM. But haXe (pronounced hex) is more than just portable. It is a multi-platform language that can be used in a variety of operating environments, ranging from embedded

    Lists of programming languages ​​By category Chronological Genealogical A list of programming languages ​​grouped by category is provided. Some languages ​​fell into more than one category. Contents... Wikipedia

    Lists of programming languages ​​By category Chronological Genealogical A genealogical list of programming languages ​​is provided. Languages ​​are classified according to antecedent languages ​​that had a strong influence on the formation of ... Wikipedia

    Contents 1 By manufacturer or platform 1.1 Flash 1.2 Java 1.3 Microsof ... Wikipedia

    Lists of Programming Languages ​​By Category Chronological Genealogical Chronology of Programming Languages ​​is a chronologically organized list of programming languages. Contents... Wikipedia

    This article should be Wikified. Please format it according to the article formatting rules. Conventions... Wikipedia

    This page is an informational list. Programming languages ​​.NET (CLI-enabled languages ​​or CLI languages) computer programming languages ​​used to create libraries and programs that satisfy the requirements of Comm ... Wikipedia

    Main article: Text editor List of text editors Windows editors and comparison table. Contents 1 Comparison table of famous text editors ... Wikipedia

    The C# programming language is one of the most popular programming languages ​​today. Paint.NET open source processing software raster graphics SharpDevelop open IDE for C# languages, Visual Basic.NET (VB.NET), Boo ... Wikipedia

    This is a list of software developed by the Free Software Foundation as part of the GNU UNIX project, a similar operating system consisting entirely of free software. Most of these packages also... ... Wikipedia

    This article or section needs revision. Please improve the article in accordance with the rules for writing articles... Wikipedia

Books

  • Python for kids. Programming Tutorial by Jason Briggs. About the book This book is a tutorial on one of the most popular programming languages ​​today - Python. Starting with the simplest steps, step by step you will write your...
  • JavaScript for kids. Programming Tutorial, Morgan Nick. About the book This book will allow you to dive into programming and master JavaScipt with ease. You will write several real games - searching for treasures on the map, "Hangman" and "Snake". On every...

Zalina January 13, 2016 at 03:42 pm

Different languages programming and their areas 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 at the Small ShAD. It is attended by high school students who are interested in technology, hence the specificity of the presentation - the lecture will be especially interesting to those who are just starting to program and are thinking about what direction to develop in. For them, Yandex has a course “Introduction to Programming (C++)”, which can be taken on the Stepic.org platform.

Lecturer Mikhail Gustokashin is the curator of academic programs at Yandex, director of the center for student competitions at the Faculty of Computer Science at the Higher School of Economics. Mikhail has trained dozens of winners and prize-winners of the All-Russian Programming Olympiads.

The lecture talks about what programming languages ​​there are, how they differ, how they appeared, and which ones are better and which ones are worse. At 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. The second part will touch on 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, you can learn all this and then get a job.

As always, under the cut - detailed transcript lectures so that you can navigate its contents.

History of programming languages

Let's start from the beginning. In the beginning, computers didn't even have keyboards! That is, everything was very bad - they had neither a keyboard nor a screen, they only had punch cards (these are little things with holes or no holes). Accordingly, either they stuck the pins there, or they shone a light there. If there is a hole (or vice versa, not) - this meant a zero or a one. And programs at that time were written using machine codes - every operation on a computer (addition, subtraction, some more complex operations) had some kind of machine code. People themselves chose this code from a sign, all sorts of addresses in memory, they knocked it all out with their hands and put it into the reader - and it was all counted. Of course, the work of a programmer was probably not particularly interesting then - making 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, which already made life somewhat easier.

Well, how did he make life easier? Instead of remembering that there was some kind of “magic” code for the command, all sorts of words were used that were similar to “human” English - some add or mov - and then registers or memory areas, variables with which these were needed were listed perform operations. But it’s clear that this, in general, also required quite a lot of mental effort in order to keep in our heads in which register we have what, where what variables are, and what is happening in general. Why did this happen? Because computers were “stupid” and could not understand anything more “smart”. In fact, assembling machine code from assembler also requires time and memory (at that time, of course, there was little of it).

Gradually, it became clear that developing such large complex programs was very difficult. The programmer's productivity in these teams 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 writing programs easier and more convenient. And off we go!

Old and dead languages

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

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

There is also a “funny” language, it was called Algol (the 68th version, which characterizes the year of its creation). This 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 with this we can finish our excursion into antiquity and into relatively unused languages ​​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 noticeable? At first everything was complicated and in order to write you had to be almost an engineer, an electrical engineer, to understand where which contacts are connected and something else for programming. Then you also had to sit with the pieces of paper and count the memory, look after it. And gradually everything became simpler, simpler, simpler and then even simpler for the programmer - to think as little as possible for a person, to do as much as possible automatically. Around 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 in it, at least I saw that in some institutions they teach in QBasic - there’s a blue window where “1989” is written. In general, he is “living with all his might”! It was invented as a language for non-programmers. At that time, a programmer was such a very specialized profession. And here they tell you: “We have a cool Basic language, and any reasonable person can write a program in it - it’s easy.” Again, that BASIC and modern BASIC are a huge difference. All these lines numbered after 10, all sorts of GOTOs and other horrors - they no longer have anything to do with modern BASIC, and even to BASIC of 1989 they have little to do with it.

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 in surprising ways. educational language. In the rest of the world it is less common, but it is also alive and well. There is such a person as Wirth - he is a scientist, a theorist. He participated in the Algol discussion, he did not like what happened, and he came up with his own language - Pascal. And then the Borland company (and before that many other companies - Apple was involved, in particular) took it and ruined everything. He had nice theory, slim - “everything will be fine” - and they took it and stuffed it with what people need for work. Well, it didn’t turn out as beautiful as he wanted.

And finally... C 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 this happen? 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 intended for mathematical calculations, for business calculations, for all that. And everything else was written in Assembly. There were some languages, they are now dead, that is, the C language did not appear immediately from Assembly, but through some intermediate things.

What's the point? 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 slow. And they discovered somewhere in their office that they had some kind of computer that no one was using. But there was a problem - it was of a different architecture, and the game was written in Assembly.

They rewrote it, of course, even added some features to play on it. But this led them to the idea 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 things lie and how to access these pieces of memory. And so the C language appeared, which had a huge influence on everything that followed. All of them (the lecturer points to Algol, Fortran and other languages ​​mentioned) had a great influence, but C - just yes...

Accordingly, it was the main language in Unix, an operating system that was even more popular at that time than it is now. And around the 80s, the situation was something like this (the lecturer shows Basic, C and other mentioned languages). Let's say that all this has already slowly died out in our country (the lecturer erases mentions of Assembly Language, Fortran and Algol)... And in the 80s, computers became smaller, smarter, cheaper, and people wanted all sorts of strange things to make life even better, to live even more fun.

Languages ​​from the 80s

One of the first oddities was that it was a C++ language. The C language has great amount shortcomings (well, just generally huge) - you can do everything on it, including shoot yourself in the foot, shoot yourself in the foot with an invention, in the other foot, shoot yourself with one foot in the other foot, in general - do whatever you want. But at the same time, some architectural things are done there quite difficult - again, as in Assembly, we have to keep track of where we are, what and what memory we have allocated; This memory is always “flowing” somewhere - that is, we allocated it, forgot to delete it, deleted the wrong thing, went beyond the memory limits, in general - we raked in a bunch of problems.

C++ was originally created as a set of additions to the C language that would make development easier. At that time, object-oriented programming became fashionable and people decided that everything could 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 “we are now writing everything in the form of some kind of hierarchy, and everything will be fine, life will get better, everything will be fine and that’s it.” C++, in a sense, implemented this object-based 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 full 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 switch from C to C++.

Besides object approach(in C++) the Standard Template Library (STL) appeared quite quickly. I think that at school, those who were still learning Pascal discovered that, firstly, you don’t have built-in sorting (in the ancient, blue Borland Pascal, now it is already in modern versions) - there is an example (source code) sorting, it can be copied and pasted. But if you want to sort integers here, here you want real numbers, and here 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 types data. This is not very good, and the templates that did not immediately appear in C++ greatly alleviated this problem. That is, you had an abstract program that successfully sorted something that could 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 possible to do very strange and very inefficient things. In particular, these were scripting languages ​​that were not compiled into machine code, but rather interpreted. BASIC was also interpreted at some time, but these scripting languages ​​were intended mainly for text processing - these are, for example, Perl, Python (it was not very famous then), PHP, Ruby - these are the scripting languages ​​that in one or another to a different extent, 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 are now used in many places. What is the idea? If we don't compile, then we can allow a lot more. 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 intended for text processing - in those days there was so much memory in computers that you could stuff some text there and do something useful with this text (for example, count words, do some kind of search). But, in my opinion, it was designed by people who were a little crazy, because there is a joke about it: “Any set of characters written is a valid Perl program.” In my opinion, you can only write on it, you cannot read it. When I look at Perl code and try to understand something, 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 it again. That is, the programs turn out to be short and it’s really easier to rewrite them from scratch than to figure out what’s there and fix it.

Around that time, in the mid-90s, the Internet appeared. At first it was mail, websites with static HTML, but people wanted to add some kind of dynamics there, so that everything would happen dynamically, some forms could be filled out, guest books could be made, 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 “spitted out” to the user in response to his request.

In general, nothing other than Pearl was suitable at that time. Writing a handler in pure C or C++ was a bad idea. And for lack of anything better, at that time (and for quite a long time) Pearl was the popular language for web development. Of course, the scale cannot be compared with what is happening now.

PHP appeared as... by accident. One person stopped doing this quite quickly - he made his own page, he had Guest book some, something else, some things. And he wrote a set of some macros for Perl that were similar to C, because he knew how to use C, simply because it was so convenient for him. And I called it Personal HomePage. He shared it and said: “People, look at what I wrote, everything here is much clearer than in Perl and you can edit it.” And people liked it.

Then he gave up this business. In general, as a result, this PHP began to live and became over time much more popular than Perl. But this “birth trauma” of his (conceived as a set of macros for Pearl) played quite a cruel joke on him. The language turned out strange. That is, it developed on its own, no one designed it, no one administered the development process (neither a company nor any person), but there were many groups, each of which sawed what they liked. As a result, the functions are named differently, there’s not even a style, everything is underscored, basically haphazard, the settings are here and there, and how all this will work is not very clear. But you can sit down and write in PHP in two hours, because that’s how it was intended.

Python and Ruby: Ruby is less popular now, Python is somehow better “planed”, 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 one wrote any system programming, no business logic in them at that time and now not much does it.

Compiled languages ​​from the 90s

We will go around the same times, 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 just applications, for operating systems, for toys - in general, for anything. But C++ is actually a terrible language. Why? Because, firstly, it inherited all C problems due to backward compatibility. There you could still kill yourself in a million different ways, the same ones that were in C (naturally, new ways were added in C++). At the same time, if you write everything well and correctly, as was intended by the authors of C++, then, of course, it was no longer possible to kill yourself using the old C code methods, and it seems like there are fewer of them. However, it had a very strange, peculiar object model. Splitting a program into modules, into pieces of some kind, generally came from C (if you know how to write include in C or C++ - in fact, it was intended as a way to simply insert the library text into your program, in the end, when you write a bunch of includes, you have everything - if it’s “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 the same Pascal, Virtovsky, was much more thoughtful in this regard, the later ones. versions have become even better.

In general, C++ has a lot of disadvantages. The programmer had to be highly qualified to write in C++, and such programmers were expensive (and training, and something else, that is, it’s difficult to find programmers on the market, they need to be paid a lot, and in general this is not the point... ). And our computers are counting faster and faster, they are becoming cheaper, people are buying new computers and want more apps, more toys for the phone, in general - more joy.

This is how Java appeared. There is also a rather funny story about how this language got its name. There are programmers there, 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 devices, in particular for a coffee machine. This is how the name came about...
What actually started with her, what was good about her and why did she gain so much popularity? First, they got rid of Sishnoi's legacy, completely. No signs, sorry fewer ways shoot off some part of your body and break everything. Secondly, they introduced much more recent ideas in terms of 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 made everything much cooler.

And finally, third. Our Java programs were compiled not into machine code, but into code for a virtual machine. That is, you had a virtual machine (VM) JVM - Java. Your programs were assembled into some kind of intermediate representation and then, with the help of this machine, they were already executed. What did this give? Firstly, it slowed down, secondly, it ate up memory with terrible force, 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 then had little memory, there was low performance and all this further began to dull and slow down.

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

That is, if in C, in C++, in Python, in anything, we can create some kind of terrible garbage dump out of our project, where we have everything mixed up, assembled for hours, and something else. In Java, you can also create a garbage dump, but for this you need to make some effort. That is, by default, it’s not a “garbage dump”, other problems arise, that something has been inherited and inherited - in general, for one meaningful line, there are ten not very meaningful ones. But, such a moderately qualified programmer can write fairly high-quality code.
We're almost at the end. For us, the next thing that appeared was .Net (dotnet), and in particular we are interested in C# (almost the same thing [the lecturer points to Java], that is, there are differences in details, if you choose between them, look where they pay more money).

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

What is the main thing you need 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 write in C++, and then add dollars at the beginning, something else do little things and it starts working on anything (the lecturer points to the languages ​​to which the arrows from C++ were assigned). That is, they are extremely similar in some ways simple things. If you decide some school tasks, educational tasks, something else (you’re 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, everything is a little different for them. But here (the lecturer points to Java and C#) there is very little difference at all.

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 purposes?

Selecting a language 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 the best choice is C, but actually I have heard (but not seen) that C++ is used for this. But I have little faith in this, because in C you can clearly control - since you gave so many bytes of memory, that means there will be so many. And in C++ (STL) how is a string implemented? Well, somehow it was implemented. And in the end we don’t 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 all sorts of devices are appearing (the Internet of Things is promised to come soon) that run on batteries (and, naturally, there will be millions of them, everything will be covered with this Internet of Things), they should be very cheap and have very little electricity consume. Accordingly, there will be 2 KB of memory, a 5 kHz processor, and it’s clear that you’ll need to screw in some kind of virtual machine or a scripting language won’t work out in the near future - which means you’ll have to write something in C. And even now, for example, computing 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 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 new Facebook(social network). What will you write this on? (People from the audience are talking about HTML and CSS.) HTML and CSS are design, and we want it to be possible to add photos, friends, and leave comments there.

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

Surprisingly, it is written in PHP - and Facebook, and many other large projects. Of course, they had to write some of their own things so that it would still work normally, and not in a “clunky” way, but they did it. In principle, it more or less doesn’t matter what you write in, but I don’t recommend Perl. Here and now, of course, no one writes anything for the web from scratch. Everyone is writing some kind of framework or something else. Online store? We downloaded a framework for an online store - and that’s it, we wrote an online store.

Programming for business

Next you want to write some boring application for a bank. Or, for example, do you have anyone who sells SIM cards? Perhaps you have ever bought a phone or something else and been told: “The system is hanging, we can’t do anything.” What will you use to write such an application? (Shout from the audience about Python) You can’t write this in Python, what are you saying?! There is no need to write anything for business in Python. Why? Because when you write something in Python, it is impossible to detect a significant number of bugs during the writing process. Python is dynamically typed in every possible way, and in general you can hide a bug in such a way that it will pop up in such a situation that you won’t even be able to understand what these crooked users did there, that everything is broken for you. That is, in Python it is better to write small scripts for yourself - you understand what is happening there and what is being done. Well, or something that you don’t mind throwing away: you want to roll out something before your competitors, so what if it breaks every now and then. You wrote in Python and that's it - you captured 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 it’s a serious matter, papers, money, documents, something else, but you can’t screw it up so much that everything breaks, otherwise people will be offended - their money went away and didn’t get anywhere, because in some kind of moment the string turned into a number or vice versa. So, it means that you methodically take it in 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 likelihood of this is somewhat lower.

Programming for the army, aerospace industry

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

Maybe in Java? It seems that everything there is quite reliable and the architecture is good, no wild types, no unnecessary trips beyond memory limits. Let's say the most crucial moment has come, and our Java has 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.

Honestly, I would prefer if this program was written in Pascal. Of course, I don’t really like Pascal, but somehow in such matters it would be very cool.

Using multiple languages ​​for software development

Well, what needs to be said about modern languages. Now many projects do not live in any one language, that is, some of them live in one language, some in another, and some in a third. For example, if you have some kind of web application that processes wild amounts of information, calls to disks (not even to databases, they are so huge that even a database there cannot handle any already written one) are probably written in some kind of then low-level C, to write wildly quickly to disk and all that. Naturally, it’s not worth writing the entire project in C. Maybe there is some kind of intermediate logic written in Java that calls C functions for quick calls. Well, the frontend (what the user looks 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.

When developing some applications, even large ones, sometimes what do people do? They take it and write a prototype in Python (how it will all work), sketch it out, think through some kind of architecture. Writing on it is really very fast - they threw together a prototype, experimented with it and said: “Wow! That’s so cool!” And they completely rewrote it. It would seem that they did the job twice, which made it take twice as long (well, one and a half). But no! It often turns out that this method is not bad, because if you write something right away, 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 ​​did not survive, or live in very limited space. When Wirth saw what bad companies Apple, Borland and all that did to 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 out for him, to the extent that it could have worked out.

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

What is the problem? Why some languages ​​like Python, which no company supported in the beginning, took over the market. PHP, which is also poorly designed, also took over the market (most of it) on its own. And all sorts of billions of dollars were invested (the lecturer points to Ada) and did not go anywhere, nothing happened. What is this connected with? 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 take off. That is, for example, you wanted to write a website on Oberon. What is it, why not? And the hassle begins... You can’t set up your own web server on Oberon to test it lightly, you can’t connect any libraries, because Oberon doesn’t have them. And all this is done through some crutches, the strength goes away, and in general you give up and write your website in pure C instead of Oberon. And those languages ​​that live well are those that know how to use libraries from other languages. 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 it (Python) can interact with them.

Java also has a Java Native Interface. This is essentially C, that is, there (in my opinion, they always want to ban it, but it seems they haven’t banned it yet) these languages ​​can interact with already existing libraries (mainly C). And because of this, they take it and work. The idea I'm trying to convey to you is clear, right? Don't write in languages ​​that don't support the C library. Well, if you want to use something cool. Well, gradually they (the languages) acquire their own 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 the coolest things? You can do something system programming, Yes? It’s great for you to count these bits, you want to launch quadcopters, some kind of cameras, and do something else. Then, probably, C is 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 earn a lot of money for sitting and being bored most of the time (you have to pay for this if you’re good at miss), here they are - Java, .Net. You go to work in some 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 developers, .Net sheep and all that...

If you want to write some applications, some kind of browser, some kind of toys, or something else, then C++ is great. If you want to write websites, then here they are, languages ​​of your choice (the lecturer shows 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 much of a difference, but you'll last longer.

What's happening with Ruby is also unclear. Well, you can do PHP if you’ve already learned it, fortunately it’s so simple that it doesn’t take that long to relearn.

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 put all this into a table in Excel or analyze it with something. Python is also good for this, it can work with text and there are a lot of libraries, statistical and all that. If you want to do some kind of Machine Learning, process some data, make predictions, then this is also done in Python the fastest way now. True, it should be noted that the tasks are very different. For example, if you want to trade on the stock exchange instantly in conditions where quotes change 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 before everything will be counted for you, even if their algorithms are worse. So even these machine learning tasks (some of them) require high performance(and extremely high), and, accordingly, other languages.

The only way to understand 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. Let's start with a clean slate. Here you are studying mathematics, Russian language and other compulsory and optional subjects at school, 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 achieve this. There are, of course, all sorts of inspiring stories about people who did not go to university at all, or dropped out 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 university at some point.

What is the situation with admission to university (are you currently 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 Unified State Exam or win the Olympiad. On the Unified State Exam you can use Pascal, C++ (including pure C), Python (I will not mention them further). At the Olympiad there is the same Pascal, the same C++, the same Python (we will now talk about its problems) and, most often, there is Java. There are other things that happen depending on the Olympics, but that’s not the point.

What does the language distribution graph look like? All-Russian Olympiad in computer science? People who participate in the All-Russian, the coolest Olympics, what do they write in? It looks like this (here it means Pascal, and here it’s about 2000, and here it’s about zero, here it’s C++, and here it’s 2015).

In 2000, almost no one wrote C++. 15 years have passed, and 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 they continue to write everything in Borland Pascal, which of course can’t do anything. In C++, people write some algorithms (STL) to sort - great, they wrote sort() and that’s it. On Pascal, on regular, on the old one - this is a problem. We wrote some kind of set (it was needed) - great, we wrote it in C++, but in Pascal it was again a complete pain. Of course, you can do this with new Pascals, but they generally cost money. You may not have noticed this, but it is true.

There is also Java, but Java has a lot of letters. It is for large projects, but for small one-time programs it turns out very bad, because there are a lot of extra letters. But some people also write, you can learn to write on it. But it’s not on the Unified State Exam and the majority will still have to take the Unified State Exam.

What is best for the Unified State Exam? For the Unified State Exam, it is best (if you don’t know anything and they don’t teach you anything at school) to learn Python. Some exam problems can be solved perfectly 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 many problems in order to receive a diploma from your Olympiad and enter the university to receive a higher education.

I will now talk about how we structure the course at HSE, in what order the languages ​​are taught, how they are studied in applied mathematics and computer science at the Faculty of Applied Sciences, which we do together with Yandex. In the first semester - Python (not in full, approximately as you should learn in school) and C++ (already wider, much wider than it is usually taught in schools). Let me tell you right away so that you don’t be scared, if you suddenly want to enroll, you’ll say: “What, I already know all this, why should I go somewhere to study? I’d rather go somewhere else.” For those who already know how to program well, there is an opportunity to immediately move on to studying algorithms, and in a fairly theoretical preparation. We don’t look at them now, this (points to the board) is for those who are intermediate or not at all programmers.

In the first semester, the basics of Python are taught, just so that people learn how to program and so that no one is too offended. Python is rarely taught in schools; most people come with knowledge of Pascal or C++. Mostly even Pascal, if this is a mass school. Well, so that no one is offended, everyone learns a new language (as if they are in equal conditions). And C++ simply because from C++ you can then go anywhere.

Then comes the course “Algorithms” and a separate course project. Classic algorithms with implementation. It’s not that we took something in theory and calculated the complexity. At the lecture we took it, calculated the complexity, at the seminar we took it and implemented the algorithm. A project is where students make something complete. For example, one of the projects was: count... Let's say you have a lot of apartments in Moscow and you understand: “Oh, I have a lot of extra things, I’ll rent out some. And they set a certain price, and for some reason no one wants to rent an apartment from you - it’s probably too expensive. Or they set some price, they immediately took it from you and you think: “Oh, I probably sold it cheaply” - and you also get upset. That is, it was necessary to calculate how much it costs to rent an apartment? You enter the data - it creates an estimate for you. Such a site, which consisted of several things: take sentences, parse them, apply some kind of (probably) simple machine learning algorithm and make a beautiful web face in which you can select something, enter something, some meters, some number of rooms, number of saunas, number of jacuzzi 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 core C++, with console input-output. Well, here (the lecturer points to the “project” sign) is something under the guidance of a mentor, perhaps with databases, perhaps with text parsing and something else.
Then there is the third semester - this is a course called “Computer Systems”. There's just a little assembly language to understand (very little) and then something similar to pure C and interaction with operating systems, systems programming essentially. And the project for the seminar is also something on the topic of all sorts of network interactions, quite low-level: develop some kind of 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 synchronize folders with all file accesses and so on).

And finally, the fourth. I don’t even know what to call it, it’s such a vinaigrette of technologies necessary for real development, for example, web development. That is, this practical use 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 specific things are already practical programming. In parallel with this comes every theory, and here they also do science.

And after two courses, people go off to do whatever interests them, because this thing covers the basics of programming quite widely and by this time people already understand that they don’t want to do it computer systems in no case (they didn’t like system programming, for example), but they want to work on some theoretical algorithms, calculate difficulties, come up with some new things, distributed or something else. Or, on the contrary, they think that they don’t have much here ( the lecturer points to the line of the first course with Python and C++) went, then ( lecturer points to third course line, with systems programming) - I don’t like it, counting bytes and setting all sorts of restrictions on reading and writing, making streams, threads and something else. And in accordance with this, people choose a direction and study. That is, in principle, so that you do not develop “duckling syndrome” - you were the first to see your Pascal and now say “Pascal is power”; or more advanced - you saw C++ and started talking about everyone that C++ is strong, but everything else is not very good.

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

How to look for a job as a programmer

You are ( the lecturer points to the list of courses) did everything, studied at the university, did something else for two years more productively and you need to go to work. How to choose something for work? Firstly, you have become familiar with everything, gone deeper somewhere and already know what you love. You have to choose what you love, naturally. Because if you love, you put in the effort, you will have motivation and in general everything will be fine. Because it’s not just about money, it’s about making it interesting and enjoyable for you. Well, you want to get into a cool company and get a job. What kind of person would I personally like to see? Let's say a hundred students come to me - should I hire two or one. Why do they come, I don’t understand at all, who they are, what they are, how they are? At best, they will show me the diploma they received at the university, and I will say: “Wow! This is a cool diploma, but this 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? Firstly, some open source project that you wrote from start to finish. Preferably, if I’m making some kind of infrastructure so that data can be quickly read, or something else, then, of course, I would be interested in having something open source written for me. They didn’t make a website, 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 recorded, I look at everything and think: “Wow, this bug hasn’t been there for two years now.” closed, here you responded impolitely to the user, here’s something else - I won’t take it.” That is, this is your personal project.

Next, what else would be cool? I'd 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 made a cool project.” Well, I see that it’s really your project, I say: “What’s yours?” I look at the code again and understand that you know how to work in a team with people.

A programmer is not someone who sits alone (indie) in a garage, somewhere with the lights off, doesn’t talk to anyone, grows a beard and writes. There is still some interaction with people. With a boss, for example, who may sometimes swear at you (bosses, they are like that, are not always kind). And I see that you know how to work with people and it makes me happy if you good team some kind Even if it’s not good, it’s better than not having one.

What else would I personally like? If you showed yourself in large projects. For example, you committed something into the Linux kernel, if you are into systems programming, and fixed some bug. That is, they showed that you know how to read someone else’s code and know how to make some changes to it. I look: “Oh, really, you figured out something complicated and fixed some bugs!” And I begin to be very happy about this. Because I have... well, I don’t know... my programmer quit because his competitors offered him a higher salary, and I urgently need someone to fill his place - with you. I see that 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 getting a job as an analyst, I would like you to solve data analysis problems on Kaggle. If you are applying for some algorithmic things, I would like you to sports programming some algorithms have been done. And finally, if you have thought about the profession, read how interviews are conducted, you have seen that some people express great dissatisfaction: “I came, and they asked me what my hobby was. I sit like an owl and don’t answer because I don’t have a hobby,” and they think that HR’s do this. In fact, they are trying to understand how friendly and adequate 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 be able to complete the project alone. In addition, even if you pull it out, you can imagine what the burden is for the company. What if you come tomorrow and say: “Increase my salary 10 times, otherwise I’ll leave you.” It is clear that companies do not want to find themselves in such a situation. Therefore, cultivating adequacy and goodwill in oneself is as important (at a minimum) as developing some professional skills.

To summarize, what can we say? Which languages ​​are good and which are bad? Well, within a certain group of languages, for example between Ruby, Python and PHP, what should you choose? Of course, the correct answer is Python, but in fact the difference between them is in the number of bugs allowed, in the number 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 would say: “Let's rewrite everything in Python.” They will say: “Let’s hire more PHP developers and continue writing in PHP.” Great, that's a good choice. It’s clear that if you suddenly decide to write some kind of project, then it might be wise to choose Python now. Although, that also depends. Maybe you have a lot of cheap PHP developers on the market, and Python ones are expensive, and you think: “Yes, the technology is cooler, but I’ll save money on ready-made developers.” And everything is great, you already come and work there.
How to choose between Java and C++? Yes, roughly the same thing happens. I think that by the time you decide in which language to start a new big project, you will have gained knowledge in your professional field and will be able to make the right choice. Now you don't have to make that choice yet, and so I advise you to do what you like.

The basics, as I already said, the very, very basics of programming (what is a function, what are if’ics, for’ics, arrays, something else) can be learned in more or less any language. For example, in C++, since there are a lot of similarities to it, and there are the least specifics in it (at this level), and there are the least amount of extra letters to write. Well, then, when you learn some complex architectural things, you will learn and you don’t need to worry too much about it. That is, the main thing is to try, look for what you like, and when you realize that it’s already 4 o’clock in the morning, and you’re sitting and writing for fun, because you like it - probably at that moment it’s clear that you’ve found yours .

The introduction of computers into all spheres of human activity requires specialists of various profiles to master the skills of using computer technology. The level of training of university students is increasing, who from the first year are introduced to the use of computers and simple numerical methods, not to mention the fact that when completing coursework and diploma projects, the use of computer technology is becoming the norm in the vast majority of universities.

Computer technology is now used not only in engineering calculations and economic sciences, but also in such traditionally non-mathematical specialties as medicine, linguistics, and psychology. In this regard, it can be stated that the use of computers has become widespread. A large category of specialists has emerged - computer users who need knowledge on the use of computers in their industry - skills to work with existing software, as well as creating your own software adapted to solve specific task. And here descriptions of programming languages ​​come to the aid of the user.

2. What is a programming language

Programming language- a formal sign system designed to describe algorithms in a form that is convenient for the performer (for example, a computer). A programming language defines a set of lexical, syntactic, and semantic rules used to compose a computer program. It allows the programmer to determine exactly what events the computer will react to, how data will be stored and transmitted, and what actions should be performed on it under various circumstances.

Since the creation of the first programmable machines, humanity has already come up with more than two and a half thousand programming languages. Every year their number is replenished with new ones. Some languages ​​are used only by a small number of their own developers, while others become known to millions of people. Professional programmers sometimes use more than a dozen different programming languages ​​in their work.

Language creators interpret the concept differently programming language. Among the common points recognized by most developers are the following:

· Function: a programming language designed to write computer programs, which are used to transmit instructions to the computer to perform a particular computing process and organize the control of individual devices.

· Task: A programming language differs from natural languages ​​in that it is designed to transmit commands and data from a person to a computer, while natural languages ​​are used only for people to communicate with each other. In principle, we can generalize the definition of “programming languages” - this is a way of transmitting commands, orders, clear guidance for action; whereas 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.

3. Stages of solving a problem on a computer.

VT has found its most effective application when carrying out labor-intensive calculations in scientific research and engineering calculations. When solving a problem on a computer, the main role still belongs to the person. The machine only carries out his tasks according to the developed program. The role of man and machine is easy to understand if the process of solving a problem is divided into the stages listed below.

Formulation of the problem. This stage consists of a meaningful (physical) formulation of the problem and determination of final solutions.

Construction mathematical model. The model must correctly (adequately) describe the basic laws of the physical process. Construction or selection of a mathematical model from existing ones requires a deep understanding of the problem and knowledge of the relevant branches of mathematics.

Development of the World Cup. Since a computer can perform only the simplest operations, it does not “understand” the formulation of the problem, even in a mathematical formulation. To solve it, a numerical method must be found that makes it possible to reduce the problem to some computational algorithm. In each specific case, you must choose suitable solution from already developed standard ones.

Algorithm development. The process of solving a problem (computational process) is written as a sequence of elementary arithmetic and logical operations leading to final result and called an algorithm for solving the problem.

Programming. The algorithm for solving a problem is written in a machine-understandable language in the form of a precisely defined sequence of operations - a program. The process is usually carried out using some intermediate language, and its translation is carried out by the machine itself and its system.

Adjustment of the program. The compiled program contains various kinds of errors, inaccuracies, and clerical errors. Debugging includes monitoring the program, diagnosing (searching for and determining the contents of) errors, and eliminating them. The program is tested by solving control (test) problems to gain confidence in the reliability of the results.

Carrying out calculations. At this stage, initial data for calculations are prepared and calculations are carried out using a well-established program. At the same time, to reduce manual labor in processing results, convenient forms of issuing results in the form of text and graphic information, in a form understandable to humans, can be widely used.

Analysis of results. The calculation results are carefully analyzed, and scientific and technical documentation is drawn up.

4. What are programming languages ​​for?

The process of computer operation consists in executing a program, that is, typing completely certain teams quite in a certain order. The machine form of the command, consisting of zeros and ones, indicates exactly what action should be performed. CPU. This means that in order to give the computer a sequence of actions that it must perform, you need to specify a sequence of binary codes for the corresponding commands. Machine code programs consist of thousands of instructions. Writing such programs is a difficult and tedious task. The programmer must remember the combination of zeros and ones of the binary code of each program, as well as binary codes data addresses used during its execution. It is much easier to write a program in some language that is closer to natural human language, and entrust the work of translating this program into machine codes to a computer. This is how languages ​​designed specifically for writing programs arose - programming languages.

There are many different programming languages ​​available. In fact, you can use any of them to solve most problems. Experienced programmers know which language is best to use to solve each specific problem, since each language has its own capabilities, orientation towards certain types of problems, and its own way of describing concepts and objects used in solving problems.

All the many programming languages ​​can be divided into two groups: low level languages And high level languages.

Low-level languages ​​include assembly languages ​​(from the English toassemble - assemble, assemble). Assembly language uses symbolic commands that are easy to understand and quick to remember. Instead of a sequence of binary codes of commands, their symbolic designations are written, and instead of binary addresses of data used when executing a command, symbolic names of this data chosen by the programmer are written. Assembly language is sometimes called mnemonic code or autocode.

Most programmers use high-level languages ​​to write programs. Like ordinary human language, such a language has its own alphabet - a set of symbols used in the language. These symbols are used to make up the so-called keywords of the language. Each of the keywords performs its own function, just like in our familiar language, words made up of letters of the alphabet of this language, can perform functions different parts speech. Keywords are linked together into sentences according to certain syntactic rules of the language. Each sentence defines a certain sequence of actions that the computer must perform.

A high-level language acts as an intermediary between a person and a computer, allowing a person to communicate with a computer in a way more familiar to humans. Often such language helps to choose the right method for solving a problem.

Before writing a program in a high-level language, the programmer must write algorithm solving a problem, that is, a step-by-step plan of action that needs to be completed to solve this problem. Therefore, languages ​​that require a preliminary compilation of an algorithm are often called algorithmic languages.