03.09.2024
Home / Mobile OS / What should a programmer know? Programming, or what a programmer needs to know What knowledge is needed for a programmer

What should a programmer know? Programming, or what a programmer needs to know What knowledge is needed for a programmer

What knowledge is needed to become a good programmer? Are there any skills that distinguish a good programmer from a bad one? If you are preparing to choose a profession and want to figure it out, our article is for you.

To figure out what a good programmer needs to know, we need to define what a “good programmer” is. Stereotypes have rewarded the image of a good programmer with poor eyesight, constant participation in programming and mathematics Olympiads, as well as victories in them. Of course, you can raise the bar as much as you like, but we will try to offer more general principles rather than competitive selection. So let's note the things that are inherent in a non-idealized good programmer.

  • Fundamental knowledge.

Nowadays it is not necessary to graduate from a specialized university to become a programmer. Enough, and if you really want to, you can learn to program on your own. Bypassing technical universities, students do not receive the necessary foundation for development in programming. Of course, deep knowledge of mathematics and physics is not the main criteria when hiring, but it opens up great prospects and horizons for a programmer, know this. Fundamental knowledge, such as algorithms, is essential for anyone who wants to become a good programmer.

  • Analytical thinking.

A good programmer most often has an analytical mind and type of thinking. This means that he is logical, consistent, understands and can explain his every step. Such people are able to find the most effective and optimal solution to any problem in a short time. By the way, anyone can learn to think analytically, for example, by solving logical problems and playing special games.

  • The desire to be better, to know more is self-development.

Without constant self-development you cannot become a good programmer. The IT sector is developing tirelessly: new languages, frameworks and other tools are appearing. Regular updating of your knowledge, doubts that you know “how to do it right” will lead you to success in your career and make you a real professional.

  • Love for programming

Every day, going to a job you don’t like to write tedious code... We think this is everyone’s fear: doing something you don’t like. Listen to yourself to see if programming is truly your passion. Let's do only what we like, because then it will work out better.

So, in general terms, we understand who a “good programmer” is. Let's now figure out what a programmer needs to know.

What knowledge does a programmer need?

  • English language.

You will need English in order to write code. Also, many companies work with English-speaking clients with whom you will have regular working communication. In addition, many good books on programming are in English. Therefore, we advise you to practice your skills daily, communicate, read and write in English, and listen to English-language podcasts.

  • Programming languages.
  • Algorithms and data structures.

In programming, everything is based on algorithms and data structures. If you can break down a large task into shelves, then you can easily find a solution to any problem in the arrangement of these shelves. In fact, a programmer uses algorithmic knowledge every day without even noticing it. Whatever problems he solves, he always uses data structures. And in order to have at least a superficial understanding of what data structures are and how they work, you also need to understand what algorithms are. If you don't know either way, how can you be sure you're making the right decision in using a particular algorithm?

We talked about the basic things a programmer should know. We hope you love writing code and will spend a lot of time becoming a good programmer. If you need help with training, we are waiting for you at the Training CenterISsoft.

Regardless of what kind of education he has - a technician or an engineer, in order to succeed in this profession, he needs a set of some special personal qualities. First of all, he must be able to think logically and calculate events many moves ahead. He will also need attentiveness, perseverance and the ability to do not only creative work, but also rather routine work. Sometimes, in order to bring a creative idea to life, he will need to spend more than 90% of his time on its implementation and debugging of the program. Of course, one cannot do without determination and perseverance in this profession, as well as without developed intelligence, the ability to master the exact sciences and the ability to concentrate.

To get a job as a software technician, a person must have a secondary vocational education; it is very good if he also has work experience in this specialty.

What are the job responsibilities of a software engineer?

Of course, what the job of a software technician will consist of largely depends on what area he will work in and what type of activity the company is engaged in. But there are, of course, general requirements and knowledge that will be useful to him in any workplace. First of all, he needs to have a perfect knowledge of computers and the devices used in conjunction with them, as well as devices for collecting, processing and transmitting information, the rules for their maintenance and operation. You will need knowledge of methods and technologies for automated information processing, basic programming languages, and specialized software products used in the work of this enterprise.

IN job responsibilities A programming technician usually includes work to ensure the uninterrupted operation of computer systems and equipment installed at user workstations. He will need to perform preparatory operations related to the operation of local computer networks, monitor how workstations operate, and provide technical assistance.

He may be required to develop simple utilities and work programs to optimize the production process; he must debug and test them. In some cases, he may be entrusted with drawing up simple diagrams technological processes processing of various information flows in the enterprise or individual algorithms for solving those problems that the IT department faces. At many enterprises, software engineers are involved in maintaining databases, filling them, storing them, and processing them. A software engineer at any enterprise must be able to work with large amounts of data, know the rules for archiving and storing them, he must have an idea of

A programmer is one of the most important professions. In most modern fields of activity, computers are used, and a specialist of the corresponding profile is the main one who is responsible for their functions that are practically significant for humans, and in many ways for their performance. What skills should a programmer have to successfully solve his problems? What basic knowledge does a person need to become such a specialist?

  • features of the tasks solved by a person in a given specialization, as well as the necessary skills and knowledge related to them;
  • the specifics of individual software development languages ​​as the main components of a programmer’s toolkit.

Let us consider the essence of the noted aspects in more detail.

What should a programmer know to solve his problems?

A person working as a programmer can deal with a large number of problems. Among them:

  • writing computer programs;
  • development of software concepts;
  • adaptation of programs to different categories of users (in terms of interface and functions);
  • testing and debugging of software.

Let's study the essence of these areas of activity of programmers, as well as what skills they must have to successfully perform the relevant functions.

Language competence

Writing programs is the main competence of a specialist in the profile in question. “Software” is created using special languages, and a person has to master the appropriate level of proficiency in them. This is therefore a key requirement for a programmer's knowledge.

Regarding the first task, software can be developed for the internal needs of a company (for example, for the purpose of organizing work with databases and equipment, managing financial flows) or for an external consumer (as part of a corporate order or by introducing a product to the retail market under a commercial brand).

What programming languages ​​should a programmer know? This largely depends on what kind of software he creates. As part of internal corporate tasks, a programmer most often works with databases, servers, debugging, testing, and writing equipment control algorithms. These competencies will most likely require knowledge of universal, multifunctional languages: C, C++, Java, Ruby. When it comes to working with databases, you can't do without knowing SQL. Knowledge of Python, one of the easiest to learn, but very necessary and in demand languages, will be useful to a specialist.

When it comes to releasing software to order on the external market, the requirements for a programmer's skills are usually broader - since the commercial success of the employing company depends on the functionality and quality of the solutions produced. In addition to the above-mentioned universal languages, a person will need to be proficient in more “narrow-profile” ones - such as, for example, C#, Javascript, PHP, Objective-C.

A little later we will study the features of each of the noted languages ​​in more detail.

Participation in the concept

The programmer's competence may also include solving conceptual problems related to the creation of “software”. A specialist in the profile in question is often involved in discussing a software development project and assessing the prospects for its implementation in practice. For example, a programmer is able to tell colleagues that the proposed product is not entirely optimal for a specific production process and its design requires improvement in such and such an aspect.

While solving problems related to the software concept, the programmer's functions also involve high level his linguistic knowledge. In particular, a specialist must be able to correctly select the optimal language from the point of view of compatibility with the project. For example, Objective-C, which we noted above, is the main one in development. mobile applications for iOS, but as for solutions for Android, one of the most optimal tools for creating them is Java.

The fact that there will always be a language that is better suited for a particular platform than others is one of the main tenets of the profession, and this is what a novice programmer should know before starting a career. Therefore, a good specialist in this profile is definitely a “polyglot” in terms of proficiency in computer languages, and he always has the opportunity to choose the optimal “dialect” for writing software.

When solving problems in the “conceptual” area of ​​activity, the programmer must also have sufficient knowledge of the hardware market: the software that he will create will most likely require adaptation to one or another type of computer or gadget. The specialist will have to ensure higher quality performance of the functions of the “software” he creates in relation to a specific type of equipment than in competitive solutions.

All components are important

Any type of software consists of two basic components: code and interface. The first element is mathematical and logical algorithms written in a special programming language that ensure the functionality of the product. The second is how the software's capabilities will be used by the user, how he will control the functions. A program can be as perfect as it wants from a code point of view, but an inconvenient interface will make it effective. practical application difficult to implement.

It is extremely important that the program controls correspond to the wishes of the target user group. It is difficult to develop a product whose capabilities would be comfortable for everyone to use. There will definitely be a significant percentage of people who are dissatisfied with the interface. The most important thing is that the programmer adapts the solution for “his consumer”. It is important that, first of all, he is satisfied.

Take tests

A computer program may offer a wide range of functionality and be characterized by a user-friendly interface, but if its operation is accompanied by constant failures and errors, then the corresponding advantages will not have any meaning. Therefore, a software developer must have the skills that will allow debugging and the necessary testing of solutions.

There are a large number of types of software for checking the correctness of programs. Popular ones include Device Anywhere, Jira, Android Debug Bridge, iPhone Configuration Utility. The programmer must be able to use them, not counting, of course, knowledge of the languages ​​used to create software for the platforms on which testing is carried out.

Note that in modern companies Programmers typically work in teams. Thus, the listed competencies are most often distributed among individual specialists. For example, identifying failures and problems in software can be carried out by a person in the position of tester. Concept development and interface improvement are also often carried out by individual specialists. But it often happens that all the noted tasks are solved by the same person. This scenario is most common in small companies or startups.

Some IT experts prefer to rank these specializations by skill level. Thus, testers are sometimes, in principle, not considered as programmers due to the fact that they do not often work with “code”. However, the ability to properly check software for errors is, one way or another, an important competency of the developer. Even if he is unable to give the program to someone else for testing, he will have to do the necessary work himself.

The same can be said about the program interface. A specialist with design skills will most likely do a better job of optimizing software management functions than a “general” programmer. But if a person works in a startup and does not have the opportunity to request the help of a specialist expert, then he will have to do everything himself.

What programming languages ​​should a programmer know?

We noted above that the key competency of a programmer is knowledge of specialized languages ​​that are used to create software, and we listed those that are actively used in the modern IT market. To which areas of business and IT development are certain languages ​​best adapted? How can a programmer decide which one to study?

So, among the most popular languages ​​today: C, C++, C#, Java, Javascript, Ruby, PHP, Python, Objective-C, SQL. What is the reason that a modern programmer should know them?

Regarding the C language, it should be noted that it is one of the most versatile and powerful in terms of capabilities. You can create almost any program on it. This language- very difficult to learn, but this makes it especially honorable to know it. The same can be said about C++ and add that it is even more universal and in demand.

In turn, the C# language is not very close to C, but it takes a lot from C++, as well as Java. As for its application, it is indispensable for programmers working with enterprise types of Windows software.

Java language Many IT specialists call it the most universal. It can be used on almost any platform - Windows, Linux, Mac, mobile operating systems, web development. The Java language is relatively difficult to learn, but once mastered, a programmer will be able to solve a wide range of problems.

Javascript is not directly related to Java, despite the similarity in name. It is used mainly in the field of web development. Using Javascript, you can implement flexible configuration of web pages in terms of appearance, controls, animations and other features. Therefore, for those programmers who decide to delve into website creation, learning Javascript is a must. Similarly, web development is the main application area of ​​PHP. It is not difficult to learn and is very functional.

What should a programmer know about Python and Ruby? First of all, despite the ease of study, they are used in a variety of areas. For example, Python is actively used by developers of the largest online corporations - Google, Facebook. The Ruby language is great for small startups, but not only - for example, large projects such as Slideshare and Groupon have experience using it successfully.

The mobile application market is one of the most dynamic and profitable today. If a programmer wants to get comfortable on the iOS platform, then he should learn the Objective-C language - it, as we noted above, was specially created for developing the corresponding type of software. If a person is closer to the Android device market, then he needs to learn Java.

The SQL language is one of the most common for working with databases. It is relatively easy to learn, but its knowledge will always be useful to a specialist planning to build a career in a large corporation.

A career as a programmer attracts many people. This is due not only to a high salary, but also to the opportunity to take part in the implementation of interesting projects that can be significant not only for an individual company or startup, but also for the whole country and the global IT market.

Let's study what necessary knowledge and skills a person planning to become a programmer should have.

What should a novice programmer know?

A common point of view is that only a specialist with a mathematical or technical education can develop competitive software. It is for this reason that subjects of the relevant profile must be taken as exams for IT specialties in universities. It can be noted that mathematics is not a criterion for a programmer’s viability, but a necessary tool. Knowledge within this discipline does not guarantee that a person will be able to create high-quality software, but without it it will be difficult for him to master even the most basic software development languages.

Programming skills can be useful not only for those who want to create programs or websites professionally. Ilya Shchurov, Associate Professor of the Department of Higher Mathematics at the Higher School of Economics and a teacher at the Center for Continuing Education of the Faculty of Computer Science at the National Research University Higher School of Economics, spoke about how the ability to write code can make life easier. T&P publishes his lecture notes.

Ilya Shchurov

Associate Professor of the Department of Higher Mathematics at the Higher School of Economics and Lecturer at the Center for Continuing Education of the Faculty of Computer Science at the National Research University Higher School of Economics

There are many classifications you can come up with, but first of all I would divide programming into two broad categories: programming for someone else, where you write a program that people will use, and programming for yourself. Professional programming is mostly an activity for others, and I wouldn't say it's always enjoyable. Regardless of whether you were paid for the program or you write free software that anyone can use, a huge number of people will complain that something doesn’t work for them, and there will always be more of them than those who praise you. And programming for yourself is a very pleasant activity, and today we will discuss exactly that.

This year's survey of professional programmers found that 81% of them code as a hobby. This means that programming is fun, that it's fun as well as work. You can use ready-made programs, and in 95% of cases you will do this, even if you are a professional programmer. But in any field there are problems that no one has solved before, and the ability to program allows you to solve them much more efficiently. One day I was in a call center and I was asked to join two tables. The person who assigned me this task expected me to start copying cells one by one from the first table to the second. I transferred a couple of records, got tired of it, and wrote a short script that took data from one table and filled out a Google form for me, which is not very difficult. I liked it, but what I liked most was that my colleagues looked at me as if I had some kind of magic.

Writing code is interesting, but on the other hand, it is a challenge. You interact with a computer, and very often this interaction, especially if you master new technology, a new language, looks like this. You write code, you think you wrote it correctly, but the computer tells you that you have a syntax error. Indeed, I forgot the semicolon, corrected it, ran it again. And the computer says: “Close the bracket.” After several such iterations, the program begins to work, and it becomes clear who is boss. The fact is that both the programming skill and the process of learning it have some side effects (including positive ones).

1. Extreme Leadership Experience

Computers are very stupid compared to people, they understand everything literally, and if you have learned to drive a machine, then most likely you can cope with guiding any people.

2. New approach to information

You begin to look differently at information processing, organization of information flows and management. For example, when collecting data sets, you already think about whether they are suitable for subsequent automatic processing. This is very important if you have a large organization or a project with many information flows that you need to work with efficiently. If you have experience with automation, you will quickly understand in what form you need to receive information in order to then deftly process it.

3. Professional communication

If you learn to program at least a little, it will be much easier for you to communicate with programmers. It is useful to understand at least at a basic level how the IT world works and to communicate in this area without intermediaries. People learn languages ​​to better understand another culture, and programming languages ​​learn technology.

4. Responsibility

Why can programming be dangerous? The first reason is “tyzhprogrammer”. If suddenly someone finds out that you know how to program, you will be bombarded with requests: “Reinstall for me.” operating system“Please, you’re a programmer”, “Fix the kettle, you’re a programmer” and so on. This is not the worst problem, there are worse ones. For example, in 2001, during my first year, when the Internet was still slow, I decided that I needed to do something to exchange information with friends faster. I thought: there is mail, and it works. Then I created a separate mailbox for our party and wrote a script. The robot went into this mailbox, took the letters that came there, and forwarded them to everyone who was subscribed to this thing. This is how Google groups work now. If I wanted to write to everyone, I sent the letter to this general mailbox; if someone wanted to answer, he answered it, the letter got to everyone, and something could be discussed.

But someone’s mailbox is full, and when the mailbox is full, the mail server, in response to any letter, sends a message, which is also a letter. It also ended up in the general mailbox, my script sent it to all addresses, including the one that was full. Mail server generated a new response and so on. As a result, on Sunday morning I was woken up by a call from my friend, who carefully said: “Perhaps there is some problem there, because I have mailbox 6 thousand letters, and their number is growing.” Nothing too bad happened, but it was a problem. Then I realized that the code could easily get out of control and cause trouble, so I had to act carefully.

This is a story like in “The Little Prince”: you are responsible for those you have tamed. People and processes depend on the code you write. That is, as soon as you do something useful for others, the cost of error increases.

How to learn?

There are two opposing points of view on this topic. First: learning programming is very easy; basic commands can be mastered in three days. But there is a high probability that when a person encounters difficulties, he will decide that he was deceived and programming is not for him. Programming is not easy, difficulties arise. One of the reasons for this is that when you program, you learn new technologies every time, which is always a pain.

The opposite opinion is that if you haven't been programming since you were in school, then there's no point in starting. This is also not true. Programming takes effort, but the field is open to entry even if you've never done it before.

It is likely that the problem you are faced with has already been solved and the solution lies somewhere. Sometimes figuring out how it works is harder than writing it again. This is a standard programming problem, but for this we have Stack Overflow, one of the main inventions of mankind in the field of programming. This is a site where developers share experiences and answer each other's questions. Each participant has their own level of reputation, everything is very well designed, so simple questions you can get a response within ten seconds. This helps a lot. In the modern world, you don't just write a program - you simultaneously use a huge number of programs and tools that other people have already created.

A good way to learn to program is to set yourself a problem that you would be interested in doing and then try to solve it. Of course, there are many online courses - read the reviews to choose the right one. A first programming language is difficult because you have to restructure the way you interact with computers and analyze processes. There are no universal answers, everything is very individual. Some people just need to read the documentation, look at the code examples, and everything is clear. In other situations, it is good to have a mentor who can answer basic questions. Here are a few tips that seem important to me.

1. The most best way to understand something - find a working piece of code, start modifying it and study what happens. This should be done after you have understood the basic syntax. Customize the code to suit your needs or just experiment.

2. If you're just learning to program, don't try to write a lot of code right away until you can correctly explain what you want. This is necessary so that the computer executes commands clearly and in small steps. Every time your experiments should end not with you accidentally stumbling upon the right solution, but with an understanding of why and how it works.

3. Don't worry about math. It is advisable to know what a remainder is when a number is divided by another number, but it all depends on the tasks you are faced with. Of course, if you want to cleverly process data, then you need mathematics to the extent required for such processing.

4. Don't be afraid. When you start programming for yourself, you probably won't write the kind of code that professional developers will like. They will say that this is not the way to write it, that it is redundant, that such code will be difficult to maintain, and so on. They'll probably be right. But if you are writing for yourself and if you are just starting out, it is normal that your first attempts are not texts of the level of Leo Tolstoy. If you write a program that will work and solve your problem, then that's good.

There is an opinion that, given the development of artificial intelligence and machine learning, programmers will soon not be needed: computers will learn to program themselves. But it seems to me that this is not so. As long as there are problems and as long as it is necessary to explain how to solve them, programming will exist. Of course, programming is evolving a lot; it has changed a lot over the past 20 years. But because computers have become smarter, there are no fewer developers - on the contrary, there are much more of them. And it seems to me that the same thing will happen further.

How to become a programmer? What do you need to learn? The answer seems simple: go to university and they will teach you there. But if you ask any programmer, he will say that what they teach there, although sometimes it can even be interesting, is almost useless and has very little in common with real work.

Programming is something like literacy

Our profession is one of the most difficult, but the funniest thing is that it itself is quite simple. It is even calmly studied at school. To write a simple program in Pascal, a student only needs to know about ten operators (there are only fifteen of them) and several input/output, mathematical and string functions.

These operators are like the letters of the alphabet, and the input/output functions Read () and Write () are like the first words, “mom” and “dad,” with which a child begins to comprehend the world.

Nevertheless, just as there are ordinary people who can read and occasionally write something, and there are professional writers who master the pen, today there are computer users and there are programmers. And, in my opinion, it is much more difficult to be a programmer than a writer. We always have tight deadlines, we have to take into account the requirements of capricious users and overcome the limited capabilities of slow computers, we need to make the interface as simple and convenient as possible, document everything well so that users do not get lost, and try to complete everything without errors, and also think in advance about how the program will evolve in the future, and make sure that new functionality can be easily added and that it is understandable and predictable. At the same time, the program itself must be written in the same style, so that other programmers can then figure it out after you and continue working.

For writers, everything is much, much simpler. On the contrary, they even welcome it when the author has his own style, and the plot is confusing and unpredictable.

The only thing we can compare with programmers is the creators of TV series, who, in essence, also write a program, only for actors. Screenwriters, like us, work as a team, they also have deadlines, releases, they also need to think through the intricacies of the plot in their heads and even lay down the possibility of changing the plot in the future, adding new characters or resurrecting the old ones.

But there is one significant difference: the writers can no longer rewrite the plot of the filmed episode. At best, if the viewer misunderstood something, they will clarify it in the next episode.

We, programmers, have to constantly return to the old code and change something in it. Imagine a thick novel that you've been writing for ten years and you have to rewrite each chapter over and over again, turning it into a thriller. Now imagine that you have moved to another project and now you have to do the same with a text that you have never seen before, and it was written by several authors, each of them has their own style, and besides, they have all already left the project.

Therefore, learning to program is relatively easy, but to do it professionally, you need to do titanic work. Writers start with small short stories, gradually master all the stylistic devices, enrich their speech, and read a lot themselves. In the same way, programmers have to program a lot and hone their skills. And damn, it's very difficult! And constantly - for years, decades - you have to improve. It is a long marathon, full of both thorns and joy. Neither monetary nor any other motivation will help you - only your own interest in the matter.

I met guys who memorized programming, even read some books in this area and started looking for work, but at the same time they did not write a single program of their own. Can you imagine a writer who, having barely mastered literacy and not having written a single story, already wants to get a job in the editorial office? He doesn’t even know whether he will like this activity and whether he will be able to achieve success, but he is already counting his salary! Nevertheless, many such would-be programmers still find work. They perform it poorly, but there is always a range of tasks where high quality is not so important.

Gradually, programmers developed their own professional vocabulary. They call the process of writing a program coding, and people who have somehow mastered only this are pejoratively called coders. They can write something for you to make it work, but then it will be extremely difficult and unpleasant to improve and improve such a program; usually it is easier to rewrite it. The coders themselves call themselves developers, and over time, having gained experience, many begin to call themselves software engineers.

Ok, if programming is “like literacy,” then what else do you need to know and be able to do to become a “writer”?

Gradually, from a variety of disciplines, technologies and skills, general and repetitive ones crystallized, which in practice turned out to be the most useful for programmers. Unfortunately, this is also not constant. For example, thirty years ago, most programmers required knowledge of electronics, signal processing, and machine code of processor instructions (assembler).

Today you can quite successfully cope with work without this knowledge, and I was even shocked when I once met a Senior developer who only vaguely understood how a processor works. But over these thirty years the Internet appeared, and programs became huge in size and very complex. And many other skills and knowledge have been added, which are simply indispensable today: flexible development processes, object-oriented and functional programming paradigms, building scalable, high-load and fault-tolerant systems, and you also need to be able to read and work with old code, use version control systems . You cannot do without such a mandatory skill as the ability to search on the Internet, which simply did not exist before.

All this goes beyond the scope of programming itself and, in an amicable way, needs its own, separate term. Personally, for greater clarity, I call it “programming” - it’s like Software Engineering, but a broader term that covers what is important to us: development processes; the ability to program your brain to, for example, “get into the flow”; the ability to work in a team or write a resume - in general, everything we do.

Programming Basics

I was very lucky because almost as soon as I became interested in programming, I read an amazing book - “Perfect Code”. It struck me in that it was not a book about some programming language or technology, like everything else I had come across before, but a book about Programming itself as such. This is probably the first book that tried to fill the gaps left by reading algorithm textbooks, technical manuals and documentation.

And she immediately starts with metaphors which help to more accurately convey the essence of our work. You have already learned about the Literary Metaphor, when programming is compared to writing, but there is also a popular metaphor that compares programming to building houses, or even creating airplanes.

It is no coincidence that she won the survey “If you could go back in time when you were still a novice developer, what book on programming would you advise yourself to read?”

Then other good books about programming appeared:

And many other worthy ones, but in general they cover deeper certain areas.

In fact, this whole alchemy of programming actually consists of such things that we work with all the time and need to be understood:

  • Fundamentals of computer technology: basics of Boolean algebra, binary and sixteen-row number systems.
  • Computer device: processor, RAM, stack, hard drive, graphics card, bus, peripherals (i.e. keyboard, mouse).
  • Processor assembler and C - you also need to know them at least a little.
  • Actually basic literacy: syntax, how to declare a variable, a function, how to write a conditional if statement, operator precedence, how to organize a loop, how to receive input from the user and how to output it. Structured programming - how to write without goto, using loops and recursion. It's really easy; fifteen operators are learned quickly. Almost all programming languages ​​used today are inherited from C (C++, Java, C#, PHP, JavaScript), so there is no need to relearn them. Therefore, by the way, it is not particularly important which of these languages ​​you start learning with.
  • Algorithmization: linear brute force search, binary search, bubble sort, quick sort, etc. Estimation of the complexity of algorithms.
  • Data structures: strings, queue, stack, singly and doubly linked list, arrays, etc.
  • Decomposition, abstraction and program design: object-oriented programming, SOLID, design patterns, UML diagrams.
  • Fundamentals of functional programming: how to write without destructive assignment and loops, working with collections in a functional style.
  • Knowledge of the platform, libraries, technologies: Java Core, working with files, working with the Network, working with arrays, strings and collections, working with memory and garbage collection. There are thick books about all this from the creators of the technology themselves (for example, “Effective Java”).
  • Network standards and protocols: TCP, UDP, HTTP, HTML, XML, JSON, MIME, RFC.
  • Ability to write clean code: how to name variables and classes correctly, how to format code, how to write comments correctly (more precisely, how not to write them :-)). Understanding comes after reading the book Clean Code.
  • Ability to work with code: refactoring (Fowler's book), IDE hotkeys for refactoring, ability to read and maintain old code.
  • Engineering practices: unit tests, extreme programming (XP), continuous integration, version control systems (Git, SVN).
  • Project management and process organization: Waterfall, Agile, SCRUM, Kanban, bug trackers, time estimation for a task.
  • Soft skills: the ability to communicate with the customer and get along in a team, overcome lack of motivation, choose priorities.
  • Databases: SQL, relational, document- and graph-oriented databases, ACID, CAP theorem, query optimization.
  • Operating systems: Linux, installing and configuring programs on it, command line.
  • Scaling and high loads, monitoring, logging, fault tolerance.
  • Cryptography, protection against attacks.
  • Usability, requirements gathering.
  • Knowledge of English, ability to write documentation clearly and concisely.
  • The ability to correctly formulate questions and independently find answers to them.
  • The ability to learn and constantly improve yourself.
  • The ability to teach others, explain clearly and even speak to the public at conferences...
  • and at the same time not go crazy.

As you can see, this list can be continued, but you must understand the main thing: programming itself is just a little bit. Almost all other skills are simply impossible to learn. You can only come to them through extensive experience and constant reading of the right books that will help you rethink it.