Parsing a typical IT job between the lines

For example, I took one very typical vacancy. It must be said right away that the salary is not indicated: many people filter out such ads - and probably for good reason. But it is very revealing. For convenience, I've numbered the sentences to list the requirements. Sources, of course, will not be, however, quoted verbatim:

1 - Software development and revision of existing software in C ++ (Qt5). 2 - Development of GUI in QtWidgets / QML. 3 - Participation in the design of the architecture of various systems. 4 - Development experience in C ++. 5 - Good knowledge of Qt5. 6 - Experience in developing multi-threaded applications. 7 - Understanding OOP. 8 - Knowledge of Linux as an experienced user.


Now let's take a look at the points. Or rather, how I read it when I come across such proposals.



1. Software development and revision of existing software in C ++ (Qt5)



At this point, everything is just fine. The current version of the library and the language are simply indicated.



2. Development of GUI on QtWidgets / QML



Yes, QML is part of Qt, no one disputes. But there is a small point: of course, it is possible to write a project that sits on two chairs at the same time, but interfering with both is a sign of bad architecture. Maybe people only mean QML development? Well, in fact: the project is written in QML, but you need your own components, and they are written in C ++ using QtWidgets ... It is not clear yet, so read on. By the way, we'll come back to architecture later.



3. Participation in the design of the architecture of various systems



What specific systems do you mean? The questions immediately arise: how many of them do you have? Are these several projects that one person needs to work on at the same time or is classic Qt programming mixed into one monstrous project with QML and some other approaches? Judging by the fact that QtWidgets in the previous paragraph refers to the so-called "classic Qt development" (we make a form - we write a class to it) without any QML, it becomes clear that the programmer will have to sit on two chairs at the same time.



4. Development experience in C ++



What is it written for? So that a QML-boxer who has never seen C ++ in his life would not come? Or is the experience of current developers not enough to switch from QML back to QtWidgets? Maybe they don't want to be involved in maintaining old code?



It seems to me that everything is somewhat more complicated: the fact is that the standard QML capabilities are usually not enough for a full-fledged application - so you have to create your own QML plugins. For which C ++ is needed. In other words, the project for people was already partially written in QML, but then they ran into the very lack of opportunities - and then the QML-box turned out to be either insufficiently skilled, or busy for two hundred percent of his time only with creating forms, but QML -components in C ++, he somehow cannot write. It becomes clear what we will be doing: this is the support of the classic code and the creation of new QML components.



However, this is not one, but two vacancies. In classic Qt code, there is usually a sea of ​​hard-to-fix bugs and the programmer who sits on the support will be busy fixing more than a hundred percent of his time (working with rework). You won't be able to write new QML components "from time to time" either, you have to do it all the time. Probably they think that a person will mainly support the old code, in places “quickly and somehow” replacing them with QML. In this case, the question arises, who is engaged in the architecture of all this disgrace? Remember point three: "we are those rescuers." In short, do what you want, there is no one to deal with architecture anyway, no one is going to hire a project architect, and the manager is not an architect and does not know this topic, so everything will be blamed on us.



5. Good knowledge of Qt5



True? No, I just can't believe that with poor knowledge of something, you can go somewhere to get a job. That is, it was generally worth writing about it, otherwise it’s true, they will come with bad things? Maybe we will decipher something at this point? It turns out that when they write this, they think that their current developers do not know Qt well enough (whatever that means), and if so, then they have already tried to save on programmers.



6. Experience in developing multi-threaded applications



Indeed, they deciphered. Developing multi-threaded applications with Qt requires a really good knowledge of it. But I personally read something completely different in this requirement, not what was probably meant when they wrote this phrase. First, let's figure out why Qt is multithreading at all?



The classic part of Qt is an event- based library . However, later functionality was added to it that allows you to run threads. However, the entire interface still works in a single main thread, and until you jump out of the previous function, the other will not be called, no matter how you connect them with signal slots.



Multithreading is usually required at the non-interface level: in Qt applications, client-server separation is often used in one way or another - and if the server is architecturally not very well designed (for example, its calls are strictly synchronous), then in this case, threads will be needed to organize waiting at the interface level. What does this mean when applied to a vacancy?



First, the front-end between client and server is either poorly designed or absent altogether. We wrote as best we could and at least part of the business logic is mixed up with the client code, and we will have to partially deal with system programming (finishing what the system programmer did not finish at the server level). Here I must say that there is usually a system programmer in such teams - but very specific. It is he who will come to the interview to blame you with questions about the TCP / IP protocol stack, although it was he who was obliged to design the system so that there was no system code in the windows at all. And he, by the way, receives the maximum salary of all - and you will have to take the rap for his imperfections, using multi-threaded programming.



Second: as a result of the synchronous calls, the program is already so slow that the company's management (not to be confused with managers) has received user feedback from investors . This feedback was laconic, but extremely emotional ... And now it requires programmers to speed up everything - and do it as quickly as possible. How this happened will most likely be hinted to us in the next paragraph.



7. Understanding OOP



Oh ... this is something from the category "I can code in C ++, but I have no idea what OOP is." It doesn't work that way. Except perhaps for graduate students who have written a single term course in C ++ in C ++ and who are immediately identified by age and by response to a vacancy. Therefore, something else is meant. What exactly?



From my own experience, I can assume that the program was notoriously screwed up to us. Surely it all started, as usual, very cool, interesting and fun: correct architecture, layers of abstraction and everything that usually accompanies a competent project. But then the race for functionality began, which blurred the layers of abstractions. Most likely, if it turns out that the project is old, its original developers made it on QtWidgets, but they left for a long time - so long ago that the very young students who began to sculpt QML managed to work instead of them (assuring their bosses that it was cool) ... Who, in turn, also grew up - and realized that the noodle-like code that they wrote in the beginning, eventually turned into ravioli from abstractions (see antipatterns).And now, for each window, a dozen almost empty microclasses are called instead of one normal form class, which juggle data among themselves - and not directly, but through some kind of boost injector (this was fashionable several years ago). This juggling ends with the fact that after making your way through dozens of extra layers, you stumble upon the same noodle-like code with"TODO: rewrite everything humanly when time appears" somewhere in a secluded corner of the project.



As a result, the code cannot be understood so much that it is no longer possible to develop it. The programmers figured everything out a long time ago and dumped them in more hospitable places. However, the project management did not learn anything and now (after seeing a simple QML script) believes that the problem can be solved "quickly" with the help of another silver bullet. The following point tells us that this is most likely the case:



8. Knowledge of Linux as an experienced user



Finally, it became clear what the project was for. One might argue, one can argue (in the comments), but Linux development in our difficult times is not at all the ideals of free software (which we all probably dream of). In ninety-nine percent of cases, these are security guards with the idea to monitor everything and everyone, and as Linux we mean Astra, because Comrade Major said so. That is, this is not an IT company and no one has heard of normal architectural approaches there, and all problems (from experience) are solved by means of “shoeing a flea”. Hence the conclusion: the salary was not indicated for good reason. Here you need to hire three seniors (with an appropriate number of middle and June for each of them) for a complete refactoring of the code, and not look for a "person who will solve all the problems." However, employers cannot afford this,because this is only possible in a normal economy with a mature investment market. But this is a different topic and about it some other time.



All Articles