In my opinion, one of the most pressing problems of modern literature is a lot of fundamental and a little more professional. I will try to explain it the way I see myself. Although I do not have much knowledge, but at least I will try. I hope knowledgeable people will correct, if you made a mistake.
So, the work of electronics is mediocre data transmission on tires from one control device to another (processors, microprocessors, microcontrollers, etc.). Depending on what data is transmitted, the electronics perform certain tasks. In fact, this is the level of computer architecture and assembler, which would be very good to know at a basic level (Tonenbaum - "Computer Architecture"). These commands are usually combined into a kind of blocks, similar to functions that make some specific goal. Sometimes heaps of functions are created that are combined into function libraries (the same math, iostream, etc.).
Low level driver:
To write a driver, you need to send these same commands to control devices. C ++ language is not very suitable for these tasks, it is easier to use pure C. In the simplest case, some library is connected that allows you to send values to devices and read them. For example, the simplest way to access the dynamics of a PC may look like this (note, windows does not allow direct access to ports!):
#include <conio.h> main( ) { int store; store = inp (97); /* запоминание начального значения с помощью порта 97 */ printf("пopт 97 = %d \n", store); /* проверка результатов*/ outp(97, 79); /* посылает 79 в порт 97; включение громкоговорителя */ outp(97, store); /* восстановление начального значения */ }
True good people usually make third-party third-party libraries that already contain a list of ready-made functions, classes, structures for accessing devices. For example, the code above works fine from the windows.h function library, calling the function beep (). If you want to write drivers, you will have to read about how to access the device from the developer documentation from official websites, what commands the device can execute, what data you need to send for this, if there are special libraries for this from developers and much more.
High level.
People who use C ++, usually work with ready-made sets of libraries or create their own for certain tasks. For example, there is such a thing as WinAPI for creating Windows windows GUI. These are again ready functions, you connect library and work with them. In response, they do some work and give the result. If you look at the minimum window, then in the code you will see the filling of familiar elements: structures, function calls, use of loops, etc. Another thing is that these functions and structures were done by the developers and they perform certain work, you just have to call them. For acquaintance with them there is a documentation.
Higher and higher.
Usually, libraries are made universal and can be reused. For example, on the basis of one you can create another which will perform even more specialized functions. For example, you can create a library with a line drawing function. From it is a library with the function of drawing geometric shapes. From her library with drawing details, etc. This is how functionality is increased. There are, for example, software drawing graphics on the monitor, in windows its winAPI add-on (lines, windows, colors are already ready), but it also has a higher-level MFC or Windows Forms shell, which are more advanced, but based on WinAPI.
As a result: in fact, the job of a programmer is to find out which library can help to cope with the necessary tasks and study it. And having studied apply to their needs. Do you want to use a Windows GUI application - there is a WPF and a Windows Form, or at a lower level take WinApi. Want to use a graphics card for 3D applications - learn DirectX. Want to work with music, again, all libraries like OpenAL are available. Hunting to write drivers, look for information on how you can access devices and through which library. Want to find out why ready-made libraries are used, study computer architecture and the very basics of assembler. In any case, you will use the main learned elements of the C ++ language: structures, functions, classes, pointers, simple data types, etc.
PS While I was writing, I had already begun to doubt the correctness of what was written)) I also advise you to look at this site here: http://www.firststeps.ru/