
What does an "abstract developer" consist of?
This article is the result of my conclusions in the process of self-education by profession - programmer, developer. Two concepts are close in meaning, but nevertheless, the developer is a higher level, this is a person who knows how to make strategic decisions, usually at the initial stage of creating a software product. A programmer acts as a performer, works at a tactical level in solving assigned tasks. The lowest level is the encoder, the person is just writing the source.
Imagine a certain “abstract” developer / programmer who creates a software product. We will consider him not as a living person, but as a certain 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 strive for. Unattainable ideal! But how to form a cloud of knowledge in your head? In what order should this knowledge flow? How to classify this knowledge?
To begin with, the totality of information and knowledge is generally difficult to classify. It’s like human organs - each one is needed for something, each unique in its own way, like car parts - the absence of an important component makes it impossible to operate the entire system. We ask ourselves: “What should a programmer be able to do?” or "What does the developer need 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.
In planning my further training, I directly created several folders with specific names on the disk in the right place for me. In these folders, following my classification, I laid out electronic versions of books for reading, which were either bought or not. Many of the folders are just empty so far, but they are needed to better understand the entire industry, to see the puzzle assembly. To give a concise look to the entire catalog, the folder names consist of one word in English. Below in the text are listed all categories with a description of each:
As we see it turned out 16 points, whether it is a lot or a little yourself. The comments welcome the discussion and healthy criticism of this classification.
UPDATE Decided to add two more categories to his classification of programmer knowledge. So:
Imagine a certain “abstract” developer / programmer who creates a software product. We will consider him not as a living person, but as a certain 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 strive for. Unattainable ideal! But how to form a cloud of knowledge in your head? In what order should this knowledge flow? How to classify this knowledge?
To begin with, the totality of information and knowledge is generally difficult to classify. It’s like human organs - each one is needed for something, each unique in its own way, like car parts - the absence of an important component makes it impossible to operate the entire system. We ask ourselves: “What should a programmer be able to do?” or "What does the developer need 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.
In planning my further training, I directly created several folders with specific names on the disk in the right place for me. In these folders, following my classification, I laid out electronic versions of books for reading, which were either bought or not. Many of the folders are just empty so far, but they are needed to better understand the entire industry, to see the puzzle assembly. To give a concise look to the entire catalog, the folder names consist of one word in English. Below in the text are listed all categories with a description of each:
- Algoritm - algorithms and data structures. Mathematical methods for working with information in general, methods for searching and processing data;
- Bugtrack - error control and tracking systems. Yes, when the program is ready and SUDDENLY bugs appear in it, you need to be able to fix it and create a task to solve the problem. There are both theoretical methods and specific software products that need to be able to use;
- Database - databases. It describes both the theoretical foundations of databases and specific software products and query languages for working with databases;
- Encryption - computer security, encryption. A fairly wide section on software protection methods, encryption of important data. Indeed, information security begins with writing reliable programs;
- Environment - Integrated Development Environment (IDE). Here we consider various development environments in which the program code is actually created. The wealth of opportunities of some of them is so wide that whole books have been written on working with them;
- Format - file formats. You need to understand that in many cases programs work with files on a computer. Different files are stored on the disk in different ways and often you need to know the structure of a particular file format in order to give the program instructions for working with it. Little attention is paid to this category by the authors of books;
- Graphics - graphics. I doubted whether to place this concept in a separate category or not. The question is very significant because visual perception prevails over other senses. This includes techniques for rendering images on a monitor screen;
- Language - programming language. The whole variety of existing languages, regardless of the programming paradigm. For many, a programming language is the starting point in choosing a specialization;
- Library - libraries and frameworks. This includes all the "semi-finished products" that programmers like to use to prepare their dishes. 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. We consider a variety of programming paradigms, often not tied to something specific, but based on a family of programming languages;
- Platform is a hardware platform. Some developers will never need to sink to such a "low" level. In other cases, for example, when developing for microcontrollers, without knowledge of iron - nowhere. In system programming, you also sometimes need to understand how hardware interacts with software;
- Protocol - data transfer protocol. Networks and the Internet are firmly embedded in our lives. Many programs use a variety of mechanisms for transferring data between computers. Some programmers learn to competently use existing mechanisms for remote interaction, others develop their own data transfer protocols;
- Regular - regular expressions. Various "tricks" and tricks in data processing. Original methods in solving certain problems;
- System - an operating system. All you need to know when writing programs for a particular OS. Turning to the API, the program must somehow interact with the environment in which it runs;
- Testing - testing. The final step in the software development cycle. Creating a testing methodology and identifying unacceptable bugs before the official release of the software product will avoid problems in the future;
- Version - version control systems. For many programming, this is not a 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 in which case the version control system will allow you to return everything as it was.
As we see it turned out 16 points, whether it is a lot or a little yourself. The comments welcome the discussion and healthy criticism of this classification.
UPDATE Decided to add two more categories to his classification of programmer knowledge. So:
- Server - server and cloud technologies. This includes the entire area of knowledge regarding servers in the program plan, as well as the skills to use the "clouds" in their work, also means 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, for testing your programs in a virtual machine for different operating systems;