📜 ⬆️ ⬇️

Likbez - how to become a programmer

How often at the beginning of the journey we look at those around us who have long been walking along the path we have just chosen, and admire them or envy what they have achieved. At this moment we dream of the heights that we will achieve in the future and make plans for how we will achieve what we want.

For those who have just entered our most interesting way or are already cheerfully walking through it, the article will give answers to some frequently asked questions and open the missing parts of the map that will make it possible to overcome the first segments of our fascinating way faster and more usefully. Experienced travelers may also be interested in some of the notes that will give an opportunity to look with a fresh look at where they are now and may allow you to see poorly explored parts of your path.

Next, I will try to describe what knowledge, skills and abilities a good programmer has, and what needs to be done to achieve this.

Subject area


The subject area is the most important in the work of the programmer. Perhaps I will surprise you, but there are different types of programmers, there are those whose main job is to create software products, but there are also those who study a certain subject area, and programming is for them only one of many tools. It is the latter that make it clear that the main subject is the main subject.
')
A typical representative of the first type, seeing the code, a representative of the second type can be horrified by the lack of using any patterns, naming variables with one letter or even a different type of bydlokod and consider that the colleague is not a colleague at all, but a werewolf armed with a mouse and keyboard. But the truth is that for some programmers, developing high-quality, easily supported code is not a necessity, because they have other tasks. I may surprise you once again, but for programmers of the first category this is also not the main task. For all programmers, the main task is to solve problems within a particular domain. And the quality of the code, patterns, etc. - this is just a necessity, which often comes first in still weak heads.

What is the subject area in this article? I would divide it into two main parts: natural and derivative. A “natural” subject area will be considered as a kind of system that exists in nature or is scientific knowledge. For example, a commercial organization or physics, as a science. “Derivative” subject area will be considered a kind of system that exists within the software, based on the natural and creates its unique derivative.

Programmers always work as part of a domain derivative. The bottom line is that if we take a certain subject area and look at software products that work with it, we will see that they operate in many respects with similar entities and allow us to perform similar actions, but they can have strong differences.

For a simple example, let's look at browsers. It seems the subject area is identical - display sites. Everything seems to be about the same everywhere: tabs, icons, menus, printing, but there are still huge differences. Some browsers have menu items that others do not have, the second do not display what others can display, and the fourth are generally useful only for downloading another browser. And programmers who create a certain browser know it very well, but they improve and change it often with an eye on everyone else, that is, by studying the natural domain.

Why is it important? It is important to understand the following: in order to modify and improve software products, it is necessary to know the derived domain well, that is, the specific implementation. But also, in order to better create and improve software products, you need to know the natural domain well.

There is one frequently asked question: “Does a programmer need to know higher mathematics?”. Personally, I think that a programmer must know higher mathematics if it is part of the subject area with which the programmer plans to work. For everyone else, this is not necessary, but it is a plus, because, firstly, it is believed that brains “set back”, and secondly, if you know it and you don’t need it, it is much better than vice versa.

Technology


Many novice programmers ask the same popular question: "What programming language to learn?". The essence of the problem is the incorrectness of the question, because a programming language is only a means of expression.

Agree that if you compare programming languages ​​with spoken languages, then you can draw some kind of analogy. For example, as a work of art can be translated from one language to another and without losing its value and meaning, software can also be written in different languages ​​and rewritten from one language to another. Although the second case is not so simple, but now is not about that.

Language is not the main thing. And then what is the main thing? In my opinion, this is technology. Technology in this case is a way to solve a specific task. Here is a vague concept. Let's take a little look at this blur and try to understand why these technologies are more important than the language itself.

Technology "Operating System"

Windows, Linux, MacOS, Android, etc. Why is it important to know the environment in which your software runs? Because in many cases this determines how you can solve a particular problem. Why OS is technology? OS is a technology, because different OS implementations allow solving the same tasks, and in a similar way.

Initially, I, like many young professionals, got acquainted with Windows. In the future, reading on the Internet that Linux is cool, Linux is a completely different world, I did not dare to get to know him, just did not have to. But as time went on, tasks emerged that required the configuration of the VDS on which Debian stood.

And you know what? At first I was shocked. Having connected via putty to a virtual machine, I realized that I did not know what to do with this black window. But a little googling in my brain formed a record: "the console in Linux is something like CMD in Windows." Probably adherents of Linux now spat on the screen, or simply closed the article, but in fact for a person who had experience using CMD, this entry in his head is very important. Just at one moment it becomes clear to you what and how to do and what generally can be done within the framework of this technology (command line).

Well, the command line is the bare minimum; in fact, operating systems generally have very little unique. There are such technologies as “File system”, “Differentiation of access rights”, “Work with devices”, “Interaction with other PCs” and many others. The implementation is different, but the essence is the same. Therefore, let's become only one beginner advice: study at least two operating systems, most likely it will be Windows and one of the many Linux distributions. This will greatly enhance and strengthen your knowledge.

The main conclusion is that the whole environment in which modern programs work and the programs themselves consist of technologies, or more precisely, of various implementations of the same technologies. The more you know the specific implementations of a particular technology, the better you will understand this technology.

Technology "Platform"

In addition to the concept of a platform as a specific OS, often the word platform is used to determine the type of applications: Desktop, Web and Mobile. This is a rather important division, since each of these platforms is characterized by technologies suitable only for it. A programming language, or rather technologies with which it allows to work, is directly connected with the platform.

You can often hear the phrase web-developer or mobile-developer, this determines the platform and technologies with which the programmer is best known. For example, for a web developer, the main technologies will be: HTTP protocol, HTML markup language, CSS style language, language for dynamically changing JavaScript markup, etc.

Technology "Data Storage"

Main implementations: databases, files. Main DBMS: MySql, Oracle, SQL Server, PostgreSQL, SQLite, etc. Separately, it should be said about the query language to the database, which is called SQL. In addition to the standard of this language, which, I think, is not fully implemented in any DBMS, there are many dialects, which often depend on the DBMS itself.

Most often databases have tables with columns, column types, indexes, foreign keys, etc. Depending on the database developer, these components can be very different from others. A separate item to mention the built-in database type SQLite. Such databases are stored in a file and they do not need a separate working application (server) through which it is necessary to access the database.

The easiest way to store information is files. We will not linger much on this, because the topic is too extensive. I will mention only the most basic data storage formats in files that programmers most often use. Data storage format implies a certain data storage structure in a file. The main XML and JSON formats in them are convenient to store and transfer data.

Technology "Data Transfer"

Here of course we will talk about the protocols. The most common HTTP / S protocol was mainly used to transfer webpage content, currently widely used in web services. Further, it is worth mentioning the TCP / IP and UDP protocols, which are widely used to transfer information between two PCs.

It is very important to understand that the protocols have levels. For example, IP, TCP and HTTP are protocols of three different levels. The task of some levels is to organize data transfer at the PC-PC level, the task of others is to transfer certain requests and form answers to them. This is best explained in the OSI model and in the picture, and from myself I’ll just add that programmers most often use application level protocols.



Technology "programming language"

As we have already figured out the main component of programming languages ​​is the ability to use various technologies. For example, one language has the ability to use data transfer technology, and the other does not. The next important feature of the language is the programming paradigm implemented in it. One of the most common paradigms at the moment is object-oriented programming.



In addition to the PLO, there are many other paradigms that mainly affect how this or that task will be implemented. That is, the paradigm has a very strong effect on the language, on how the language expresses the solution of the problem using the paradigm. Often languages ​​implement several programming paradigms.

The next important feature of the language is what “platforms” it can work with. There are languages ​​that work on several "platforms", there are only one. For example, in C #, you can create Desktop applications, as well as write Web sites and create applications for Mobile. And for example, PHP is only suitable for creating Web sites.

Of course, as we have already found out, the very possibility of a language to work with several platforms does not make a programmer who knows this programming language a programmer for all "platforms" at once. Since each platform has its own technologies that need to be studied separately. But this makes it easier to move from one "platform" to another.

A higher level of understanding of languages ​​can be achieved by learning languages ​​with similar or different paradigms. A better understanding of the “platform” can be achieved by studying different languages ​​within the same “platform”.

Technology "Basic frameworks and libraries"

Nowadays, when creating programs it is almost impossible to do without frameworks and libraries. They allow you to develop products faster and better. Programmers who work with a specific language and a specific platform are required to know the basic frameworks and libraries.

Frameworks differ from libraries in that the framework acts as the basis of the application, and the library as part of the application.



Libraries most often provide a solution to a specific problem, for example, a library for generating reports or a library for logging. And the frameworks in turn provide the basis for creating applications, for example the .NET Framework.

For example, if you plan to develop applications for Desktop in C #, then you will have to become familiar with the technology of implementing the user interface. Currently, there are two main implementations of it: WinForms and more modern WPF, both of which are part of the .NET Framework.

If you plan to create websites for the Web in C #, then there are two main alternatives, the first is WebForms, and the second is MVC.

If necessary, keep logs in C # often use the log4net library. And when creating websites and using the JavaScript language, the jQuery library is often used. For C ++, the Boost library is often mentioned.

It is important to understand which frameworks and libraries are essential for your target language and “platform”. In order to understand this, you can study vacancies or look at applications with source code for which frameworks and libraries are most commonly used.

Instruments


On the one hand, the basic tools that programmers use are also certain technologies. But on the other hand, they are quite far from the final product and have little effect on it, therefore, they are described separately. But it is necessary to understand that the level of familiarity with the development tools and their number is a rather important component of the developer’s professional competence.

Version Control System tool

Git, Subversion, TFS, and other implementations of version control systems are used so that when developing a software product you can keep a history of changes to the source code. With the help of these systems you can find out who and when from the system users changed the source code file. You can compare two versions of a file, even if there are several hundred versions between them. You can return the version of your file to any version of the entire version history.

Virtual Machine tool

VMware, VirtualBox and other virtual machine management systems allow you to create a virtual PC and install an OS on it. This system is very convenient, since you can have several virtual machines installed on one physical PC. This allows you to have multiple OSes on one PC. Allows you to spoil the OS on a virtual machine and you do not have to reinstall it for a long time. Indeed, virtual machine management systems often have the opportunity to “fix” the state of the virtual machine and return to it at any time convenient for you.

Development Environment Tool

The development environment is the most basic tool that a programmer works with every day. For languages ​​related to the .NET Framework and for C ++ under Windows, this is likely to be Visual Studio. For Java, it will be IDEA, NetBeans, or Eclipse. Also, most development environments support extensions and some of them are very widespread. For example, Resharper is very popular for Visual Studio.

Since the development environment is the main tool, it is recommended to explore its built-in capabilities. It is very important to explore the code navigation tools and hotkeys that perform basic tasks.

Conclusions about technologies and tools

In this section, we learned about the basic technologies and tools that the average programmer needs to know. It should be understood that this article does not describe technologies that directly relate to the development of code and the improvement of its quality. In these technologies, as in all others, the most important thing is understanding what tasks they solve. And to be able to answer the question - what kind of technology, and what its implementation solves this or that problem better.

Otherwise, without an understanding of this essence, you will not be able to create quality products. As the key condition for creating a quality product is the correctly chosen and correctly applied technology.

Source: https://habr.com/ru/post/257683/


All Articles