软件架构师 - 高级
Arquiteto de Software - Sênior
FCamara 正在寻找一位具备扎实软件开发技术背景的专业人士,尤其在 C# 方面有深入理解,并能够将这些知识应用于设计和实现高质量、可扩展且安全的解决方案。沟通能力、协作能力和解决问题的能力也是该职位成功的关键因素。
架构与设计:
➢ 选择合适的架构模式(微服务、消息队列等)。
➢ 根据需求论证所选模式的合理性。
➢ 考虑简单性与灵活性之间的权衡。
➢ 制定清晰的应对负载增长的策略(可扩展性)。
➢ 实现故障恢复机制(弹性)。
➢ 满足在每日汇总失败时控制发布服务不中断的要求。
➢ 定义组件之间通信的方式(协议、消息格式等)。
➢ 选择合适的集成工具及其职责。
➢ 实现身份验证、授权和加密(安全性)。
➢ 实现防护攻击的机制(WAF 等)。
➢ 分析系统拆分是否合理、易于管理。
➢ 抽象并分离各层的责任。
实现:
➢ 遵循良好的开发实践(Solid、Clean Code 等)。
➢ 编写可读性强、结构清晰且易于维护的代码。
➢ 高效使用 C# 语言。
➢ 实现覆盖率高、质量好且相关的测试。
➢ 满足强制性的技术要求。
➢ 满足业务需求。
文档与展示:
➢ 清晰简洁地记录架构。
➢ 创建表示架构的图表。
➢ 说明架构决策的依据。
➢ 定义数据流。
➢ 编写清晰详细的说明文档,描述应用的工作方式及本地运行方法(Readme)。
➢ 集中管理文档。
➢ 描述系统可能的改进或扩展方向。
➢ 展示长期规划和愿景的能力。
➢ 讨论开发过程中遇到的权衡与挑战。
加分项与良好实践:
➢ 确保代码可在本地运行且无错误。
➢ 使用 Docker 和 Docker Compose 的策略。
➢ 实现自动化流水线(CI/CD)。
➢ 使用 IaC(基础设施即代码)策略。
➢ 进行成本估算。
技能
查看英文原文
A FCamara está em busca de um(a) profissional que possua um forte conhecimento técnico em desenvolvimento de software, especialmente em C#, e que seja capaz de aplicar esse conhecimento para projetar e implementar soluções de alta qualidade, escaláveis e seguras. A capacidade de comunicação, colaboração e resolução de problemas também são essenciais para o sucesso nesta função.
Arquitetura e Design da Solução:
➢ Escolher padrões arquiteturais adequados (micros serviços, filas de mensagens, etc.).
➢ Justificar a escolha dos padrões em relação aos requisitos.
➢ Considerar os trade-offs entre simplicidade e flexibilidade.
➢ Definir estratégias claras para lidar com o aumento da carga (escalabilidade).
➢ Implementar mecanismos de recuperação de falhas (resiliência).
➢ Atender ao requisito de não indisponibilidade do serviço de controle de lançamentos em caso de falha do consolidado diário.
➢ Definir como os componentes se comunicam (protocolos, formatos de mensagem, etc).
➢ Escolher ferramentas de integração adequadas e suas responsabilidades.
➢ Implementar autenticação, autorização e criptografia (segurança).
➢ Implementar mecanismos de proteção contra ataques (WAF, etc).
➢ Analisar a qualidade da divisão do sistema em partes menores e gerenciáveis.
➢ Abstrair e segregar responsabilidades entre as camadas.
Implementação:
➢ Garantir a aderência às boas práticas de desenvolvimento (Solid, Clean Code, etc).
➢ Escrever código legível, organizado e de fácil manutenção.
➢ Utilizar a linguagem C# de forma eficiente.
➢ Implementar testes com boa cobertura, qualidade e relevância.
➢ Cumprir os requisitos técnicos obrigatórios.
➢ Atender aos requisitos de negócio.
Documentação e Apresentação:
➢ Documentar a arquitetura de forma clara e concisa.
➢ Criar diagramas que representam a arquitetura.
➢ Justificar as decisões arquiteturais.
➢ Definir os fluxos de dados.
➢ Escrever instruções claras e detalhadas de como a aplicação funciona e como rodar localmente (Readme).
➢ Centralizar documentações.
➢ Descrever possíveis melhorias ou expansões do sistema.
➢ Demonstrar capacidade de visão e planejamento a longo prazo.
➢ Discutir trade-offs e desafios enfrentados durante o desenvolvimento.
Diferenciais e Boas Práticas:
➢ Garantir que o código seja executado de forma local e sem erros.
➢ Utilizar estratégias de Docker e Docker Compose.
➢ Implementar pipeline automatizada (CI/CD).
➢ Utilizar estratégias de IaC (Infraestrutura como Código).
➢ Realizar estimativas de custos.
Habilidades Comportamentais Desejáveis:
➢ Proatividade ➢ Pensamento analítico
➢ Orientação a resultados
➢ Colaboração
➢ Adaptabilidade
➢ Aprendizado contínuo
Experiência:
➢ Experiência comprovada em design e implementação de arquiteturas de software escaláveis, resilientes e seguras.
➢ Experiência prática em desenvolvimento de software utilizando a linguagem C#.
➢ Experiência com a aplicação de princípios de design de software (SOLID, Clean Code, etc.).
➢ Experiência com a implementação de testes automatizados (unitários, integração, etc.).
➢ Experiência com padrões de arquitetura (microsserviços, filas de mensagens, etc.).
Conhecimentos Técnicos:
➢ Profundo conhecimento da linguagem C# e do ecossistema .NET.
➢ Sólido conhecimento de padrões de design de software (Design Patterns).
➢ Conhecimento de princípios de arquitetura de software (microsserviços, filas de mensagens, etc.).
➢ Conhecimento de práticas de desenvolvimento ágil (Scrum, Kanban).
➢ Conhecimento de segurança da informação (autenticação, autorização, criptografia).
➢ Conhecimento de ferramentas de versionamento de código (Git).
➢ Familiaridade com metodologias de testes (TDD, BDD).
➢ Familiaridade com Docker e Docker Compose.
➢ Conhecimento de CI/CD (Integração Contínua / Entrega Contínua).
➢ Conhecimento de IaC (Infraestrutura como Código).
Habilidades:
➢ Excelente capacidade de comunicação e colaboração para trabalhar em equipe.
➢ Habilidade de análise crítica e resolução de problemas complexos.
➢ Capacidade de traduzir requisitos de negócios em especificações técnicas claras e concisas.
➢ Habilidade de tomar decisões técnicas embasadas em dados e em um profundo entendimento dos trade-offs envolvidos.
➢ Habilidade de documentar soluções de forma clara e organizada.
➢ Capacidade de aprender e se adaptar a novas tecnologias e ferramentas.
Originally posted on Himalayas