This article is the result of my conclusions in the process of self-education by profession - a programmer, a developer.Two concepts are close in meaning, but still the developer is a higher level, this is a person who can make strategic decisions, usually at the initial stage of creating a software product.A programmer acts as a performer, works at the tactical level in solving the tasks.The lowest level is the coder, the person just writing the source one.
Imagine some kind of "abstract" developer / programmer who creates a software product. We will consider it not as a living person, but as some cloud of knowledge accumulated in his head over the years of work. Our abstract programmer is a professional in almost all areas, this is our ideal to which we should strive. Unattainable ideal! But how to form a knowledge cloud in your head? In what order should this knowledge come? How to classify this knowledge?
Let's start with the fact that the totality of information, knowledge, just do difficult to classify. It is like human organs - each is needed for something, each is unique in its own way, like a car's parts - the absence of an important node makes it impossible to exploit the entire system. Let us ask ourselves: “What should a programmer be able to do?” Or “What a developer needs to know?” After searching for information on these issues on the Internet, I found many similar flocks with “porridge” in the form of tips listing some popular programming languages, frameworks and other fashion trends. When planning my further training, I directly created on the disk in the right place a few folders with specific names. In these folders, following my classification, I laid out the electronic versions of books for reading, which were either purchased or not. Many of the folders are just empty for now, but they are needed to better understand the entire industry, to see the complete puzzle. To give a concise look to the entire catalog, folder names consist of one word in English. The following list lists all categories with a description of each: ')
Algoritm - algorithms and data structures. Mathematical methods of working with information in general, methods of searching and processing data;
Bugtrack - control systems (tracking) of errors and setting tasks. Yes, when the program is already ready and FLASHBACK bugs appear in it, you need to be able to fix it and build a task to solve the problem. There are both theoretical methods and specific software products that you need to be able to use;
Database - database. It describes both the theoretical foundations of databases and specific software products and query languages ​​for working with databases;
Encryption - computer security, encryption. Quite a wide section on how to protect software, encrypt important data. After all, information security begins with writing reliable programs;
Environment - an integrated development environment (IDE). Here we consider various development work environments in which the program code is actually created. The wealth of opportunities of some of them are so wide that entire books are written on working with them;
Format - file formats. You need to understand that programs in many cases work with files on the computer. Different files are stored on the disk in different ways and often you need to know the structure of a specific file format in order to give the program instructions for working with it. This category is divided into little attention by the authors of the books;
Graphics - graphics. I doubted whether to carry this concept into a separate category or not. The question is very weighty as visual perception prevails over other senses. This includes techniques for drawing images on the monitor screen;
Language - programming language. All the diversity of existing languages, regardless of the programming paradigm. For many, a programming language is the starting point for choosing a specialization;
Library - libraries and frameworks. This includes all the “semi-finished products” that programmers love to use to prepare their meals. The usefulness of their use is obvious, and the complexity and diversity increase year after year;
Pattern - design patterns. Description of various approaches and practices in writing programs. Various programming paradigms are considered, often not tied to something specific, but relying on families of programming languages;
Platform - a hardware platform. Some developers will never need to go down to such a "low" level. In other cases, for example, when developing for microcontrollers, without knowledge of iron, it is nowhere. In system programming, it is also sometimes necessary to understand how iron interacts with software;
Protocol - data transfer protocol. Networks and the Internet have become part of our lives. Many programs use a variety of data transfer mechanisms between computers. Some programmers are learning to correctly use existing mechanisms for remote interaction, others are developing their own data transfer protocols;
Regular - regular expressions. Various "tricks" and tricks in data processing. Original methods in solving some problems;
System - the operating system. All you need to know when writing programs for a specific OS. Turning to the API, the program must somehow interact with the environment in which it is running;
Testing - testing. The final stage in the software development cycle. Creating a testing methodology and identifying unacceptable bugs before the official release of the software product will allow to avoid problems in the future;
Version - version control systems. For many, programming is not a work for the final result, but a process, an eternal process. A programmer alone or in a group develops a software product, tries various features, experiments - all this is relatively safe, because if something happens, the version control system will allow you to return everything as it was.
As you can see, it turned out 16 points, decide this a lot or a little. Comments welcome discussion and healthy criticism of this classification.
UPDATE I decided to add two more categories to my classification of programmer’s knowledge. So:
Server - server and cloud technologies. This includes the entire area of ​​knowledge with regards to servers in the program plan, as well as the skills of using the "clouds" in their work, also meaning a new trend - SaaS;
Virtual - virtualization technology. Although there are not so many tools for creating virtual machines, in some cases it is useful to be able to use them, for example, to test your programs for different operating systems in a virtual machine;