1 - Desenvolvimento de software e revisão de software existente em C ++ (Qt5). 2 - Desenvolvimento de GUI em QtWidgets / QML. 3 - Participação na conceção da arquitetura de vários sistemas. 4 - Experiência em desenvolvimento em C ++. 5 - Bons conhecimentos de Qt5. 6 - Experiência no desenvolvimento de aplicações multi-threaded. 7 - Compreendendo OOP. 8 - Conhecimento de Linux como usuário experiente.
Agora vamos dar uma olhada nos pontos. Ou melhor, como leio quando me deparo com tais propostas.
1. Desenvolvimento de software e revisão de software existente em C ++ (Qt5)
Neste ponto, está tudo bem. A versão atual da biblioteca e o idioma são simplesmente indicados.
2. Desenvolvimento de GUI em QtWidgets / QML
Sim, QML faz parte do Qt, ninguém contesta. Mas há um pequeno ponto: claro, é possível escrever um projeto que se sente em duas cadeiras ao mesmo tempo, mas interferir em ambas é um sinal de má arquitetura. Talvez pessoas se refiram apenas ao desenvolvimento QML? Bem, na verdade: o projeto é escrito em QML, mas você precisa de seus próprios componentes, e eles são escritos em C ++ usando QtWidgets ... Ainda não está claro, então continue lendo. A propósito, voltaremos à arquitetura mais tarde.
3. Participação na concepção da arquitetura de vários sistemas
Que sistemas específicos você quer dizer? As perguntas surgem imediatamente: quantos deles você tem? Existem vários projetos nos quais uma pessoa precisa trabalhar ao mesmo tempo, ou a programação clássica Qt está misturada em um projeto monstruoso com QML e algumas outras abordagens? A julgar pelo fato de que QtWidgets no parágrafo anterior se refere ao chamado "desenvolvimento Qt clássico" (fazemos um formulário - escrevemos uma classe nele) sem qualquer QML, fica claro que o programador terá que se sentar em duas cadeiras ao mesmo tempo.
4. Experiência de desenvolvimento em C ++
Para que foi escrito? Para que um boxeador de QML que nunca viu C ++ em sua vida não venha? Ou a experiência dos desenvolvedores atuais não é suficiente para voltar do QML ao QtWidgets? Talvez eles não queiram se envolver na manutenção de códigos antigos?
Parece-me que tudo é um pouco mais complicado: o fato é que os recursos QML padrão geralmente não são suficientes para um aplicativo completo - então você precisa criar seus próprios plug-ins QML. Para o qual C ++ é necessário. Em outras palavras, o projeto para pessoas já estava parcialmente escrito em QML, mas então eles se depararam com a própria falta de oportunidades - e então o QML-box revelou-se insuficientemente qualificado ou ocupado por duzentos por cento de seu tempo apenas com a criação de formulários, mas QML -componentes em C ++, ele de alguma forma não consegue escrever. Fica claro o que estaremos fazendo: este é o suporte do código clássico e a criação de novos componentes QML.
Porém, não se trata de uma, mas de duas vagas. No código Qt clássico, geralmente há um mar de bugs difíceis de consertar e o programador que trabalha no suporte estará ocupado consertando mais de cem por cento do seu tempo (trabalhando com retrabalho). Você também não conseguirá escrever novos componentes QML "de vez em quando", você tem que fazer isso o tempo todo. Provavelmente eles pensam que uma pessoa apoiará principalmente o código antigo, em locais “rápida e de alguma forma” substituindo-os por QML. Nesse caso, surge a pergunta: quem está envolvido na arquitetura de toda essa desgraça? Lembre-se do ponto três: "nós somos aqueles que salvam". Resumindo, faça o que quiser, não tem ninguém para lidar com arquitetura mesmo, ninguém vai contratar arquiteto de projeto, e o gerente não é arquiteto e não conhece esse assunto, então tudo será culpa nossa.
5. Bons conhecimentos de Qt5
Verdade? Não, simplesmente não consigo acreditar que, com pouco conhecimento de algo, você possa ir a algum lugar para conseguir um emprego. Ou seja, geralmente valia a pena escrever sobre isso, caso contrário, é verdade, eles virão com coisas ruins? Talvez possamos decifrar algo neste momento? Acontece que quando eles escrevem isso, eles pensam que seus desenvolvedores atuais não conhecem o Qt bem o suficiente (seja lá o que isso signifique), e se sim, eles já tentaram economizar dinheiro com os programadores.
6. Experiência no desenvolvimento de aplicativos multi-threaded
Na verdade, eles decifraram. O desenvolvimento de aplicações multi-threaded com Qt requer um bom conhecimento dele. Mas eu pessoalmente li algo completamente diferente neste requisito, não o que provavelmente significava quando eles escreveram esta frase. Primeiro, vamos descobrir por que o Qt é multithreading?
A parte clássica do Qt é uma biblioteca baseada em eventos . No entanto, uma funcionalidade posterior foi adicionada a ele que permite a execução de threads. Porém, toda a interface ainda funciona em um único thread principal, e até que você salte da função anterior, o outro não será chamado, não importa como você os conecte aos slots de sinal.
O multithreading é geralmente necessário no nível de não interface: em aplicativos Qt, a separação cliente-servidor é freqüentemente usada de uma forma ou de outra - e se o servidor não for arquitetonicamente bem projetado (por exemplo, suas chamadas são estritamente síncronas), neste caso, os threads serão necessários para organizar a espera no nível da interface. O que isso significa quando aplicado a uma vaga?
Primeiro, o front-end entre o cliente e o servidor é mal projetado ou totalmente ausente. Escrevemos da melhor maneira que pudemos e pelo menos parte da lógica de negócios está confundida com o código do cliente, e teremos que lidar parcialmente com a programação do sistema (terminar o que o programador do sistema não terminou no nível do servidor). Aqui, devo dizer que geralmente há um programador de sistema nessas equipes - mas muito específico. É ele quem virá para a entrevista para culpá-lo com perguntas sobre a pilha de protocolos TCP / IP, embora tenha sido ele quem foi obrigado a projetar o sistema de forma que não houvesse nenhum código de sistema nas janelas. E ele, aliás, recebe o salário máximo de todos - e você vai ter que levar a culpa pelas imperfeições dele, usando programação multithread.
Segundo: como resultado das ligações síncronas, o programa já é tão lento que a direção da empresa (não se deve confundir com gestores) tem recebido feedback
7. Compreendendo OOP
Oh ... isso é algo da categoria "Eu posso codificar em C ++, mas não tenho ideia do que é OOP." Não funciona assim. Exceto, talvez, para alunos de pós-graduação que escreveram um curso de período único em C ++ em C ++ e que são imediatamente identificados pela idade e pela resposta a uma vaga. Portanto, significa outra coisa. O que exatamente?
Por experiência própria, posso supor que o programa foi notoriamente prejudicado para nós. Com certeza tudo começou, como sempre, muito legal, interessante e divertido: arquitetura correta, camadas de abstração e tudo o que costuma acompanhar um projeto competente. Mas então começou a corrida pela funcionalidade, que turvou as camadas de abstrações. Provavelmente, se descobrir que o projeto é antigo, seus desenvolvedores originais o fizeram no QtWidgets, mas eles saíram por muito tempo - há tanto tempo que os alunos muito jovens que começaram a esculpir QML conseguiram trabalhar em vez deles (garantindo a seus chefes que era legal) ... Quem, por sua vez, também cresceu - e percebeu que o código tipo macarrão que escreveram no início, acabou se transformando em ravióli de abstrações (ver antipadrões).E agora, para cada janela, uma dúzia de microclasses quase vazias são chamadas em vez de uma classe de forma normal, que manipulam dados entre si - e não diretamente, mas por meio de algum tipo de injetor de reforço (isso estava na moda alguns anos atrás). Esse malabarismo termina com o fato de que, depois de passar por dezenas de camadas extras, você se depara com o mesmo código tipo macarrão com"TODO: reescrever tudo humanamente quando o tempo aparecer" em algum lugar em um canto isolado do projeto.
Como resultado, o código não pode ser compreendido a ponto de não ser mais possível desenvolvê-lo. Os programadores descobriram tudo há muito tempo e os colocaram em lugares mais hospitaleiros. Porém, a gerência do projeto não aprendeu nada e agora (depois de ver um script QML simples) acredita que o problema pode ser resolvido "rapidamente" com a ajuda de outra bala de prata. O seguinte ponto nos diz que este é provavelmente o caso:
8. Conhecimento de Linux como um usuário experiente
Finalmente, ficou claro para que servia o projeto. Pode-se argumentar, pode-se argumentar (nos comentários), mas o desenvolvimento do Linux em nossos tempos difíceis não é de forma alguma os ideais do software livre (com os quais todos provavelmente sonhamos). Em noventa e nove por cento dos casos, são guardas de segurança com a ideia de monitorar tudo e todos, e como Linux queremos dizer Astra, porque o camarada Major disse isso. Ou seja, esta não é uma empresa de TI e ninguém ouviu falar de abordagens arquitetônicas normais lá, e todos os problemas (por experiência) são resolvidos por meio de “atacar uma pulga”. Daí a conclusão: o salário não foi indicado por um bom motivo. Aqui você precisa contratar três seniors (com um número apropriado de middle e June para cada um deles) para uma refatoração completa do código, e não procurar por uma "pessoa que resolverá todos os problemas". No entanto, os empregadores não podem pagar isso,porque isso só é possível em uma economia normal com um mercado de investimento maduro. Mas este é um assunto diferente e sobre isso em outro momento.