Analyse d'un travail informatique typique entre les lignes

Par exemple, j'ai pris un poste vacant très typique. Il faut dire tout de suite que le salaire n'est pas indiqué: de nombreuses personnes filtrent ces publicités - et probablement pour une bonne raison. Mais c'est très révélateur. Pour plus de commodité, j'ai numéroté les phrases pour énumérer les exigences. Les sources, bien sûr, ne seront cependant pas citées textuellement:

1 - Développement logiciel et révision de logiciels existants en C ++ (Qt5). 2 - Développement de l'interface graphique sur QtWidgets / QML. 3 - Participation à la conception de l'architecture de différents systèmes. 4 - Expérience de développement en C ++. 5 - Bonne connaissance de Qt5. 6 - Expérience dans le développement d'applications multithreads. 7 - Comprendre la POO. 8 - Connaissance de Linux en tant qu'utilisateur expérimenté.


Voyons maintenant les points. Ou plutôt, comment je le lis quand je tombe sur de telles propositions.



1. Développement de logiciels et révision de logiciels existants en C ++ (Qt5)



À ce stade, tout va bien. La version actuelle de la bibliothèque et la langue sont simplement indiquées.



2. Développement de GUI sur QtWidgets / QML



Oui, QML fait partie de Qt, personne ne conteste. Mais il y a un petit point: bien sûr, il est possible d'écrire un projet qui repose sur deux chaises en même temps, mais interférer avec les deux est un signe de mauvaise architecture. Peut-être que les gens ne parlent que du développement QML? Eh bien, en fait: le projet est écrit en QML, mais vous avez besoin de vos propres composants, et ils sont écrits en C ++ en utilisant QtWidgets ... Ce n'est pas encore clair, alors lisez la suite. Au fait, nous reviendrons sur l'architecture plus tard.



3. Participation à la conception de l'architecture de divers systèmes



De quels systèmes spécifiques parlez-vous? Les questions se posent immédiatement: combien en avez-vous? S'agit-il de plusieurs projets sur lesquels une personne doit travailler en même temps, ou la programmation Qt classique est-elle mélangée dans un projet monstrueux avec QML et d'autres approches? A en juger par le fait que QtWidgets dans le paragraphe précédent se réfère au soi-disant "développement Qt classique" (nous créons un formulaire - nous y écrivons une classe) sans QML, il devient clair que le programmeur devra s'asseoir sur deux chaises en même temps.



4. Expérience de développement en C ++



Pourquoi est-il écrit? Pour qu'un boxeur QML qui n'a jamais vu C ++ de sa vie ne vienne pas? Ou l'expérience des développeurs actuels n'est-elle pas suffisante pour passer de QML à QtWidgets? Peut-être qu'ils ne veulent pas être impliqués dans la maintenance de l'ancien code?



Il me semble que tout est un peu plus compliqué: le fait est que les capacités QML standard ne sont généralement pas suffisantes pour une application à part entière - vous devez donc créer vos propres plugins QML. Pour lequel C ++ est nécessaire. En d'autres termes, le projet pour les personnes était déjà partiellement écrit en QML, mais ensuite ils se sont heurtés à un manque d'opportunités - et puis la boîte QML s'est avérée soit insuffisamment qualifiée, soit occupée pendant deux cent pour cent de son temps uniquement à créer des formulaires, mais QML -composants en C ++, il ne peut pas en quelque sorte écrire. Ce que nous allons faire devient clair: c'est le support du code classique et la création de nouveaux composants QML.



Cependant, il ne s’agit pas d’un, mais de deux postes vacants. Dans le code Qt classique, il y a généralement une mer de bogues difficiles à corriger et le programmeur qui siège sur le support sera occupé à corriger plus de cent pour cent de son temps (travailler avec des retouches). Vous ne pourrez pas non plus écrire de nouveaux composants QML "de temps en temps", vous devez le faire tout le temps. Ils pensent probablement qu'une personne supportera principalement l'ancien code, parfois "rapidement et d'une manière ou d'une autre" en les remplaçant par QML. Dans ce cas, la question se pose, qui est engagé dans l'architecture de toute cette disgrâce? Souvenez-vous du troisième point: «nous sommes ces sauveteurs». Bref, faites ce que vous voulez, il n'y a personne pour s'occuper de l'architecture de toute façon, personne ne va embaucher un architecte de projet, et le gestionnaire n'est pas un architecte et ne connaît pas ce sujet, donc tout nous sera blâmé.



5. Bonne connaissance de Qt5



Vrai? Non, je ne peux pas croire qu'avec une mauvaise connaissance de quelque chose, vous puissiez aller quelque part pour trouver un emploi. Autrement dit, cela valait généralement la peine d’écrire à ce sujet, sinon c’est vrai, ils viendront avec de mauvaises choses? Peut-être allons-nous déchiffrer quelque chose à ce stade? Il s'avère que lorsqu'ils écrivent ceci, ils pensent que leurs développeurs actuels ne connaissent pas assez bien Qt (quoi que cela signifie), et si c'est le cas, ils ont déjà essayé d'économiser de l'argent sur les programmeurs.



6. Expérience dans le développement d'applications multithreads



En effet, ils ont déchiffré. Développer des applications Qt multi-threads nécessite une très bonne connaissance de celui-ci. Mais j'ai personnellement lu quelque chose de complètement différent dans cette exigence, pas ce que signifiait probablement quand ils ont écrit cette phrase. Tout d'abord, voyons pourquoi Qt est du tout multithreading?



La partie classique de Qt est une bibliothèque basée sur les événements . Cependant, une fonctionnalité ultérieure a été ajoutée pour vous permettre d'exécuter des threads. Cependant, toute l'interface fonctionne toujours dans un seul thread principal, et tant que vous ne sortez pas de la fonction précédente, l'autre ne sera pas appelée, quelle que soit la façon dont vous les connectez aux emplacements de signal.



Le multithreading est généralement requis au niveau non-interface: dans les applications Qt, la séparation client-serveur est souvent utilisée d'une manière ou d'une autre - et si le serveur n'est pas très bien conçu sur le plan architectural (par exemple, ses appels sont strictement synchrones), alors dans ce cas, des threads seront nécessaires pour organiser l'attente au niveau de l'interface. Qu'est-ce que cela signifie lorsqu'il est appliqué à un poste vacant?



Premièrement, l'interface entre le client et le serveur est soit mal conçue, soit complètement absente. Nous avons écrit du mieux que nous pouvions et au moins une partie de la logique métier est mélangée avec le code client, et nous devrons nous occuper en partie de la programmation système (terminer ce que le programmeur système n'a pas terminé au niveau du serveur). Ici, je dois dire qu'il y a généralement un programmeur système dans de telles équipes - mais très spécifique. C'est lui qui viendra à l'entrevue pour vous blâmer avec des questions sur la pile de protocoles TCP / IP, même si c'est lui qui a été obligé de concevoir le système de sorte qu'il n'y ait pas du tout de code système dans les fenêtres. Et lui, d'ailleurs, reçoit le salaire maximum de tous - et vous devrez prendre le rap pour ses imperfections, en utilisant une programmation multi-thread.



Deuxièmement: du fait des appels synchrones, le programme est déjà si lent que la direction de l'entreprise (à ne pas confondre avec les dirigeants) a reçu des retours d'utilisateurs de la part des investisseurs . Ce retour était laconique, mais extrêmement émotionnel ... Et maintenant, il faut que les programmeurs accélèrent les choses - et le fassent le plus rapidement possible. La manière dont cela s'est produit nous sera probablement suggérée dans le paragraphe suivant.



7. Comprendre la POO



Oh ... c'est quelque chose de la catégorie "Je peux coder en C ++, mais je n'ai aucune idée de ce qu'est la POO." Cela ne fonctionne pas de cette façon. Sauf peut-être pour les étudiants diplômés qui ont écrit un cours de session unique en C ++ en C ++ et qui sont immédiatement identifiés par leur âge et par réponse à un poste vacant. Par conséquent, quelque chose d'autre est signifié. Quoi exactement?



D'après ma propre expérience, je peux supposer que le programme nous a été notoirement foutu. Tout a sûrement commencé, comme d'habitude, très cool, intéressant et amusant: une architecture correcte, des couches d'abstraction et tout ce qui accompagne généralement un projet compétent. Mais alors la course à la fonctionnalité a commencé, ce qui a brouillé les couches d'abstractions. Très probablement, s'il s'avère que le projet est ancien, ses développeurs d'origine l'ont fait sur QtWidgets, mais ils sont partis depuis longtemps - il y a si longtemps que les très jeunes étudiants qui ont commencé à sculpter QML ont réussi à travailler à leur place (assurant à leurs patrons que c'était cool) ... Qui, à son tour, a également grandi - et s'est rendu compte que le code de type nouilles qu'ils avaient écrit au début, s'est finalement transformé en raviolis à partir d'abstractions (voir antipatterns).Et maintenant, pour chaque fenêtre, une douzaine de microclasses presque vides sont appelées au lieu d'une classe de forme normale, qui jongle avec les données entre elles - et pas directement, mais via une sorte d'injecteur de suralimentation (c'était à la mode il y a plusieurs années). Cette jonglerie se termine par le fait qu'après avoir parcouru des dizaines de couches supplémentaires, vous tombez sur le même code de nouilles avec"TODO: réécrire tout humainement quand le temps apparaît" quelque part dans un coin isolé du projet.



En conséquence, le code ne peut pas être tellement compris qu'il n'est plus possible de le développer. Les programmeurs ont tout compris il y a longtemps et les ont jetés dans des endroits plus hospitaliers. Cependant, la direction du projet n'a rien appris et maintenant (après avoir vu un simple script QML) estime que le problème peut être résolu "rapidement" à l'aide d'une autre solution miracle. Le point suivant nous indique que c'est très probablement le cas:



8. Connaissance de Linux en tant qu'utilisateur expérimenté



Enfin, il est devenu clair à quoi servait le projet. On pourrait argumenter, on peut argumenter (dans les commentaires), mais le développement de Linux dans nos moments difficiles n'est pas du tout l'idéal du logiciel libre (dont nous rêvons tous probablement). Dans quatre-vingt-dix-neuf pour cent des cas, ce sont des gardes de sécurité avec l'idée de surveiller tout et tout le monde, et comme Linux, nous entendons Astra, parce que le camarade Major l'a dit. Autrement dit, ce n'est pas une entreprise informatique et personne n'a entendu parler des approches architecturales normales là-bas, et tous les problèmes (par expérience) sont résolus au moyen de «ferrer une puce». D'où la conclusion: le salaire n'a pas été indiqué pour une raison. Ici, vous devez embaucher trois seniors (avec un nombre approprié de mi et juin pour chacun d'eux) pour une refactorisation complète du code, et non pas chercher une «personne qui résoudra tous les problèmes». Cependant, les employeurs ne peuvent pas se le permettre,car cela n'est possible que dans une économie normale avec un marché d'investissement mature. Mais c'est un sujet différent et à ce sujet une autre fois.



All Articles