Num relance
- Tarefas: Desenvolver software desktop com C++ moderno e contribuir para a evolução de um produto crítico.
- Empresa: Empresa de tecnologia inovadora com foco em colaboração e crescimento.
- Benefícios: Salário competitivo, benefícios de saúde e oportunidades de desenvolvimento profissional.
- Outras informações: Ambiente dinâmico com oportunidades de crescimento na carreira.
- Porquê este emprego: Trabalhe em desafios técnicos complexos e faça a diferença em um produto maduro.
- Qualificações: Experiência em C++ moderno e habilidades de resolução de problemas.
O salário previsto situa-se entre 56700 - 69300 € por ano.
Estamos à procura de engenheiros de software C++ experientes para contribuir para a evolução de uma aplicação desktop grande e crítica para os negócios, construída com C++20 e Qt. O produto tem mais de 15 anos de história de desenvolvimento e é suportado por uma base de código substancial e duradoura. Você será responsável por entender os componentes existentes, desenvolver novas capacidades, resolver problemas técnicos complexos e modernizar progressivamente a plataforma, enquanto protege a estabilidade e confiabilidade esperadas pelos seus usuários.
Esta oportunidade é ideal para um engenheiro que gosta de explorar sistemas complexos, tomar decisões técnicas pragmáticas e melhorar software maduro através de refatoração cuidadosa, cobertura de testes mais forte e práticas modernas de engenharia C++. Como engenheiro de software C++, você irá:
- Desenvolver e evoluir software desktop usando C++ moderno.
- Projetar componentes de software, APIs e capacidades de sistema que sejam manuteníveis.
- Compreender e melhorar uma base de código grande e estabelecida.
- Modernizar componentes legados sem introduzir riscos desnecessários.
- Construir testes automatizados confiáveis e melhorar a cobertura de testes.
- Resolver problemas complexos de software em ambientes Linux.
- Participar ativamente de revisões de código e discussões arquitetônicas.
- Melhorar a qualidade do software, manutenibilidade, desempenho e sustentabilidade a longo prazo.
Desenvolvimento de Software C++
- Projetar, desenvolver, testar e manter software usando C++ moderno.
- Construir componentes de software confiáveis e reutilizáveis.
- Aplicar fortes princípios de design C++, incluindo: propriedade de recursos, RAII, correção de const, ponteiros inteligentes e uso da biblioteca padrão.
- Escrever código limpo, manutenível e testável.
- Equilibrar entrega funcional com qualidade de código a longo prazo.
- Contribuir para a evolução da aplicação sem comprometer o comportamento existente.
Desenvolvimento de Aplicações Desktop
- Manter e melhorar componentes existentes voltados para o usuário e de nível de sistema.
- Trabalhar com Qt 5.15 ou posterior, quando aplicável.
- Contribuir para uma comunicação confiável entre a interface, lógica de negócios e componentes do sistema.
- Investigar comportamentos específicos da plataforma e problemas de desempenho da aplicação.
- Suportar a evolução a longo prazo da arquitetura desktop.
Design e Arquitetura de Software
- Projetar APIs, módulos e componentes de aplicação que sejam manuteníveis.
- Contribuir para discussões de design de sistema e arquitetura técnica.
- Avaliar trade-offs técnicos relacionados a: desempenho, manutenibilidade, confiabilidade, complexidade e compatibilidade retroativa.
- Propor melhorias pragmáticas em vez de reescritas desnecessárias.
- Documentar decisões técnicas e arquitetônicas relevantes.
Modernização de Código Legado
- Compreender e modificar com segurança uma base de código com mais de 15 anos de história de desenvolvimento.
- Identificar dívidas técnicas e áreas adequadas para modernização incremental.
- Refatorar componentes legados enquanto preserva a estabilidade do produto.
- Melhorar modularidade, legibilidade e manutenibilidade.
- Aumentar a cobertura de testes automatizados em torno de funcionalidades críticas.
- Reduzir riscos validando comportamentos antes e depois das mudanças.
Testes Automatizados
- Desenvolver e manter testes unitários usando frameworks como: Catch2, Google Test e Boost.Test.
- Usar frameworks de simulação onde apropriado, incluindo: Google Mock.
- Criar testes para novas funcionalidades e comportamentos existentes.
- Suportar a prevenção de regressões através de suítes de testes automatizados confiáveis.
- Melhorar a testabilidade ao refatorar componentes existentes.
- Contribuir para estratégias de teste práticas e sustentáveis.
Multithreading e Concorrência
- Desenvolver e manter componentes de aplicação concorrentes ou multi-threaded.
- Diagnosticar condições de corrida, deadlocks e problemas de sincronização.
- Projetar modelos seguros de compartilhamento de recursos e execução.
- Aplicar princípios modernos de concorrência em C++.
- Considerar segurança de thread ao projetar APIs e componentes compartilhados.
- Otimizar desempenho sem comprometer correção ou manutenibilidade.
Engenharia de Construção
- Usar CMake para configurar, construir e manter projetos de software.
- Melhorar scripts de construção e configurações de dependência.
- Resolver problemas de compilação, vinculação e dependência.
- Garantir que as construções permaneçam reproduzíveis e manuteníveis.
- Contribuir para fluxos de trabalho de desenvolvimento e construção consistentes.
Qualidade de Código e Revisões
- Participar ativamente de revisões de código entre pares.
- Fornecer feedback claro, construtivo e tecnicamente fundamentado.
- Revisar soluções quanto à correção, manutenibilidade, desempenho e cobertura de testes.
- Usar análise estática, sanitizadores e ferramentas de qualidade onde disponíveis.
- Ajudar a criar um ambiente de engenharia colaborativo focado na melhoria contínua.
Colaboração Baseada em Git
- Trabalhar com fluxos de trabalho de desenvolvimento baseados em Git.
- Criar e revisar solicitações de mesclagem ou pull requests.
- Manter commits claros e gerenciáveis.
- Colaborar com outros engenheiros em componentes e branches compartilhados.
- Resolver conflitos de mesclagem e apoiar a integração controlada de código.
- Garantir que as mudanças técnicas permaneçam rastreáveis e devidamente revisadas.
Depuração e Resolução de Problemas
- Investigar defeitos complexos da aplicação e comportamentos inesperados.
- Reproduzir problemas e realizar análise estruturada da causa raiz.
- Usar ferramentas de diagnóstico e depuração adequadas.
- Desenvolver correções sustentáveis em vez de soluções temporárias.
- Assumir a responsabilidade pelos problemas até a resolução.
- Comunicar riscos, descobertas e soluções propostas de forma clara.
O que estamos procurando:
- Forte compreensão dos princípios de design de C++ moderno.
- Experiência com: propriedade de recursos, correção de const, biblioteca padrão, código manutenível e testável.
- Experiência em projetar componentes de software, APIs ou arquitetura de sistema.
- Fortes capacidades de depuração e resolução de problemas.
- Experiência em desenvolver testes automatizados usando: Catch2, Google Test e Boost.Test ou frameworks equivalentes.
- Experiência participando de revisões de código.
- Familiaridade com fluxos de trabalho baseados em Git.
- Experiência em desenvolver e depurar aplicações em Linux.
- Confiança ao usar a linha de comando do Linux.
- Experiência prática com CMake.
- Experiência trabalhando com bases de código grandes, duradouras ou legadas.
- Bons conhecimentos de comunicação escrita e verbal em inglês.
Desenvolvimento Central
- C++ Moderno, C++17, C++20, Biblioteca Padrão, Programação Orientada a Objetos, Gestão de Recursos, Desenvolvimento Desktop, Qt 5.15+, Aplicações Desktop, Interfaces Baseadas em Eventos, Desenvolvimento Multiplataforma.
Ambiente de Construção e Desenvolvimento
- CMake, Linha de Comando do Linux, Git, Solicitações de Mesclagem, Pull Requests.
Testes
- Catch2, Google Test, Boost.Test, Google Mock, Testes Unitários, Testes de Regressão, Automação de Testes.
Qualidade e Desempenho
- Análise Estática, Análise de Desempenho, Refatoração, Design de API, Multithreading, Concorrência, Modernização Legada.
Nice to Have
- Forte experiência profissional com C++17 e C++20.
- Envolvimento anterior na modernização de bases de código C++ estabelecidas.
- Experiência em introduzir testes automatizados em componentes legados.
- Conhecimento de desenvolvimento de aplicações multi-threaded e concorrentes.
- Experiência com Trompeloeil, Google Mock ou frameworks de simulação equivalentes.
- Familiaridade com: análise estática, experiência em melhorar o desempenho da aplicação e uso de recursos.
- Conhecimento de desenvolvimento de software multiplataforma.
Engenharia Pragmática
- Capacidade de compreender decisões de design existentes antes de propor mudanças.
- Foco em melhorias incrementais com valor mensurável.
- Confortável em equilibrar modernização com estabilidade do produto.
- Evita reescritas desnecessárias quando a refatoração segura é mais apropriada.
Propriedade Técnica
- Capacidade de assumir responsabilidade por problemas técnicos desde a investigação até a resolução.
- Abordagem proativa para identificar riscos e oportunidades de melhoria.
- Forte responsabilidade pela qualidade do código e confiabilidade da aplicação.
- Capacidade de explicar conceitos técnicos claramente em inglês.
- Confortável em discutir abordagens técnicas alternativas.
- Fornece feedback construtivo e respeitoso através de revisões de código.
- Aberto a receber feedback e adaptar soluções quando necessário.
Pensamento Analítico
- Fortes capacidades de depuração e análise de causa raiz.
- Capacidade de compreender interações complexas dentro de um sistema maduro.
- Abordagem estruturada para problemas ambíguos ou tecnicamente desafiadores.
Mentalidade de Qualidade
- Forte compromisso com testes automatizados e código manutenível.
- Alta atenção aos detalhes.
- Foco em confiabilidade, estabilidade e melhoria contínua.
- Apreciação pela sustentabilidade do produto a longo prazo.
Trabalhe em uma aplicação desktop tecnicamente desafiadora construída com C++20 e Qt. Ganhe uma profunda exposição a uma base de código substancial com mais de 15 anos de evolução. Resolva desafios complexos de engenharia e depuração. Aplique práticas modernas de C++ a um produto maduro e crítico para os negócios. Melhore a arquitetura, testes, processos de construção e qualidade do código de forma incremental. Colabore em um ambiente que valoriza revisões de código cuidadosas e decisões pragmáticas. Contribua para a evolução a longo prazo de uma plataforma de software estável.
Empregador para C++ developer in Lisbon: Act Digital
A Act Digital é um excelente empregador, oferecendo um ambiente de trabalho dinâmico e colaborativo em Lisboa, onde a inovação e a tecnologia estão no centro das operações. Os colaboradores têm acesso a oportunidades de crescimento profissional, formação contínua e um forte foco na automação e melhoria de processos, o que torna cada dia uma nova oportunidade para aprender e contribuir. Além disso, a cultura de apoio e a ênfase na segurança e fiabilidade dos sistemas bancários garantem que cada membro da equipa se sinta valorizado e parte integrante do sucesso da empresa.