Analysieren eines typischen IT-Jobs zwischen den Zeilen

Zum Beispiel habe ich eine sehr typische Stelle genommen. Es muss sofort gesagt werden, dass das Gehalt nicht festgelegt ist: Viele Leute filtern solche Anzeigen heraus - und wahrscheinlich nicht umsonst. Aber es ist sehr aufschlussreich. Der Einfachheit halber habe ich die Sätze nummeriert, um die Anforderungen aufzulisten. Quellen werden jedoch natürlich nicht wörtlich zitiert:

1 - Softwareentwicklung und Überarbeitung vorhandener Software in C ++ (Qt5). 2 - Entwicklung der GUI auf QtWidgets / QML. 3 - Beteiligung am Entwurf der Architektur verschiedener Systeme. 4 - Entwicklungserfahrung in C ++. 5 - Gute Kenntnisse von Qt5. 6 - Erfahrung in der Entwicklung von Multithread-Anwendungen. 7 - OOP verstehen. 8 - Kenntnisse über Linux als erfahrener Benutzer.


Schauen wir uns nun die Punkte an. Oder besser gesagt, wie ich es lese, wenn ich auf solche Vorschläge stoße.



1. Softwareentwicklung und Überarbeitung bestehender Software in C ++ (Qt5)



Zu diesem Zeitpunkt ist alles in Ordnung. Die aktuelle Version der Bibliothek und die Sprache werden einfach angegeben.



2. Entwicklung der GUI auf QtWidgets / QML



Ja, QML ist Teil von Qt, niemand bestreitet. Aber es gibt einen kleinen Punkt: Natürlich ist es möglich, ein Projekt zu schreiben, das gleichzeitig auf zwei Stühlen sitzt, aber beide zu stören, ist ein Zeichen für schlechte Architektur. Vielleicht meinen die Leute nur QML-Entwicklung? Tatsächlich: Das Projekt ist in QML geschrieben, aber Sie benötigen Ihre eigenen Komponenten, und sie werden mit QtWidgets in C ++ geschrieben ... Es ist noch nicht klar, lesen Sie also weiter. Wir werden übrigens später auf die Architektur zurückkommen.



3. Beteiligung an der Gestaltung der Architektur verschiedener Systeme



Welche spezifischen Systeme meinen Sie? Die Fragen stellen sich sofort: Wie viele davon haben Sie? Sind dies mehrere Projekte, an denen eine Person gleichzeitig arbeiten muss, oder wird die klassische Qt-Programmierung mit QML und einigen anderen Ansätzen in ein monströses Projekt gemischt? Gemessen an der Tatsache, dass sich QtWidgets im vorherigen Absatz auf die sogenannte "klassische Entwicklung in Qt" (Formular erstellen - Klasse schreiben) ohne QML bezieht, wird klar, dass der Programmierer gleichzeitig auf zwei Stühlen sitzen muss.



4. Entwicklungserfahrung in C ++



Wofür ist es geschrieben? Damit ein QML-Boxer, der C ++ noch nie in seinem Leben gesehen hat, nicht kommt? Oder reicht die Erfahrung aktueller Entwickler nicht aus, um von QML zurück zu QtWidgets zu wechseln? Vielleicht möchten sie nicht an der Pflege des alten Codes beteiligt sein?



Es scheint mir, dass alles etwas komplizierter ist: Tatsache ist, dass die Standard-QML-Funktionen für eine vollwertige Anwendung normalerweise nicht ausreichen - Sie müssen also Ihre eigenen QML-Plugins erstellen. Für welche C ++ benötigt wird. Mit anderen Worten, das Projekt für Menschen wurde bereits teilweise in QML geschrieben, aber dann stießen sie auf den Mangel an Möglichkeiten - und dann stellte sich heraus, dass die QML-Box entweder nicht ausreichend qualifiziert war oder zweihundert Prozent seiner Zeit nur mit dem Erstellen von Formularen beschäftigt war, aber mit QML -Komponenten in C ++ kann er irgendwie nicht schreiben. Es wird klar, was wir tun werden: Dies ist die Unterstützung des klassischen Codes und die Erstellung neuer QML-Komponenten.



Dies ist jedoch nicht eine, sondern zwei offene Stellen. Im klassischen Qt-Code gibt es normalerweise ein Meer von schwer zu behebenden Fehlern, und der Programmierer, der auf dem Support sitzt, wird mehr als hundert Prozent seiner Zeit damit verbringen (mit Nacharbeiten zu arbeiten). Sie können auch nicht "von Zeit zu Zeit" neue QML-Komponenten schreiben, sondern müssen dies ständig tun. Wahrscheinlich denken sie, dass eine Person hauptsächlich den alten Code unterstützt und ihn manchmal "schnell und irgendwie" durch QML ersetzt. In diesem Fall stellt sich die Frage, wer sich mit der Architektur all dieser Schande beschäftigt. Denken Sie an Punkt drei: "Wir sind diese Retter." Kurz gesagt, tun Sie, was Sie wollen, es gibt sowieso niemanden, der sich mit Architektur befasst, niemand wird einen Projektarchitekten einstellen, und der Manager ist kein Architekt und kennt dieses Thema nicht, daher wird uns alles angelastet.



5. Gute Kenntnisse von Qt5



Wahr? Nein, ich kann einfach nicht glauben, dass man mit schlechten Kenntnissen irgendwohin gehen kann, um einen Job zu bekommen. Das heißt, es hat sich im Allgemeinen gelohnt, darüber zu schreiben, sonst ist es wahr, dass sie mit schlechten Dingen kommen werden? Vielleicht werden wir an dieser Stelle etwas entziffern? Es stellt sich heraus, dass sie beim Schreiben der Meinung sind, dass ihre derzeitigen Entwickler Qt nicht gut genug kennen (was auch immer das bedeutet), und wenn ja, haben sie bereits versucht, Geld für Programmierer zu sparen.



6. Erfahrung in der Entwicklung von Multithread-Anwendungen



In der Tat entzifferten sie. Die Entwicklung von Multithread-Qt-Anwendungen erfordert wirklich gute Kenntnisse. Aber ich persönlich habe in dieser Anforderung etwas völlig anderes gelesen, nicht das, was wahrscheinlich gemeint war, als sie diesen Satz geschrieben haben. Lassen Sie uns zunächst herausfinden, warum Qt überhaupt Multithreading ist.



Der klassische Teil von Qt ist eine ereignisbasierte Bibliothek . Es wurden jedoch spätere Funktionen hinzugefügt, mit denen Sie Threads ausführen können. Die gesamte Schnittstelle funktioniert jedoch immer noch in einem einzelnen Hauptthread, und bis Sie aus der vorherigen Funktion herausspringen, wird die andere nicht aufgerufen, unabhängig davon, wie Sie sie mit Signalsteckplätzen verbinden.



Multithreading ist normalerweise auf Nicht-Schnittstellenebene erforderlich: In Qt-Anwendungen wird die Client-Server-Trennung häufig auf die eine oder andere Weise verwendet - und wenn der Server architektonisch nicht sehr gut gestaltet ist (z. B. sind seine Aufrufe streng synchron), werden in diesem Fall Threads benötigt, um das Warten zu organisieren auf der Schnittstellenebene. Was bedeutet das für eine Bewerbung?



Erstens ist das Front-End zwischen Client und Server entweder schlecht gestaltet oder fehlt insgesamt. Wir haben so gut wir konnten geschrieben und zumindest ein Teil der Geschäftslogik ist mit dem Client-Code verwechselt, und wir müssen uns teilweise mit der Systemprogrammierung befassen (das beenden, was der Systemprogrammierer auf Serverebene nicht beendet hat). Hier muss ich sagen, dass es in solchen Teams normalerweise einen Systemprogrammierer gibt - aber sehr spezifisch. Er wird zum Interview kommen, um Sie mit Fragen zum TCP / IP-Protokollstapel zu beschuldigen, obwohl er verpflichtet war, das System so zu gestalten, dass überhaupt kein Systemcode in den Fenstern vorhanden war. Übrigens erhält er das maximale Gehalt von allen - und Sie müssen den Rap für seine Unvollkommenheiten mit Multithread-Programmierung übernehmen.



Zweitens: Aufgrund der synchronen Aufrufe ist das Programm bereits so langsam, dass das Management des Unternehmens (nicht zu verwechseln mit Managern) Benutzerfeedback von Investoren erhalten hat . Dieses Feedback war lakonisch, aber äußerst emotional ... Und jetzt müssen Programmierer alles beschleunigen - und das so schnell wie möglich. Wie dies geschah, wird uns höchstwahrscheinlich im nächsten Absatz angedeutet.



7. OOP verstehen



Oh ... das ist etwas aus der Kategorie "Ich kann in C ++ codieren, aber ich habe keine Ahnung, was OOP ist." So etwas gibt es nicht. Außer vielleicht für Doktoranden, die eine einzelne C-artige Kursarbeit in C ++ geschrieben haben und die sofort nach Alter und Reaktion auf eine freie Stelle identifiziert werden. Daher ist etwas anderes gemeint. Was genau?



Aus eigener Erfahrung kann ich davon ausgehen, dass das Programm notorisch an uns vermasselt wurde. Sicherlich fing alles wie immer an, sehr cool, interessant und unterhaltsam: korrekte Architektur, Abstraktionsebenen und alles, was normalerweise ein kompetentes Projekt begleitet. Aber dann begann der Wettlauf um die Funktionalität, der die Abstraktionsebenen verwischte. Wenn sich herausstellt, dass das Projekt alt ist, haben es die ursprünglichen Entwickler höchstwahrscheinlich auf QtWidgets geschafft, aber sie sind schon lange weg - vor so langer Zeit, dass die sehr jungen Studenten, die anfingen, QML zu formen, es geschafft haben, anstelle von ihnen zu arbeiten (um ihren Vorgesetzten zu versichern, dass es cool war). ... Wer wiederum aufwuchs - und erkannte, dass der nudelartige Code, den sie am Anfang geschrieben hatten, schließlich aus Abstraktionen zu Ravioli wurde (siehe Antipatterns).Und jetzt werden für jedes Fenster ein Dutzend fast leerer Mikroklassen anstelle einer normalen Formklasse aufgerufen, die Daten untereinander jonglieren - und zwar nicht direkt, sondern über eine Art Boost-Injektor (dies war vor einigen Jahren in Mode). Dieses Jonglieren endet mit der Tatsache, dass Sie, nachdem Sie Dutzende zusätzlicher Ebenen durchlaufen haben, auf denselben nudelartigen Code stoßen"TODO: Schreibe alles menschlich um, wenn die Zeit erscheint" irgendwo in einer abgelegenen Ecke des Projekts.



Infolgedessen kann der Code nicht so gut verstanden werden, dass es bereits unmöglich ist, ihn zu entwickeln. Die Programmierer haben vor langer Zeit alles herausgefunden und sie an gastfreundlicheren Orten abgeladen. Das Projektmanagement hat jedoch nichts gelernt und glaubt nun (nach dem Betrachten eines einfachen QML-Skripts), dass das Problem mit Hilfe einer weiteren Silberkugel "schnell" gelöst werden kann. Der folgende Punkt sagt uns, dass dies höchstwahrscheinlich der Fall ist:



8. Kenntnisse über Linux als erfahrener Benutzer



Schließlich wurde klar, wofür das Projekt gedacht war. Man könnte argumentieren, man kann argumentieren (in den Kommentaren), aber die Linux-Entwicklung in unseren schwierigen Zeiten ist überhaupt nicht das Ideal einer freien Software (von der wir wahrscheinlich alle träumen). In neunundneunzig Prozent der Fälle handelt es sich um Sicherheitspersonal mit der Idee, alles und jeden zu überwachen, und als Linux meinen wir Astra, weil Genosse Major dies sagte. Das heißt, dies ist kein IT-Unternehmen, und niemand hat von normalen architektonischen Ansätzen dort gehört, und alle Probleme (aus Erfahrung) werden durch „Beschlagen eines Flohs“ gelöst. Daher die Schlussfolgerung: Das Gehalt wurde aus gutem Grund nicht angegeben. Hier müssen Sie drei Senioren (mit einer angemessenen Anzahl von Mitte und Juni für jeden von ihnen) für eine vollständige Überarbeitung des Codes einstellen und nicht nach einer "Person suchen, die alle Probleme löst". Arbeitgeber können sich dies jedoch nicht leisten,denn dies ist nur in einer normalen Wirtschaft mit einem reifen Investmentmarkt möglich. Aber das ist ein anderes Thema und darüber ein anderes Mal.



All Articles