Carreira - Habilidades

Nesta página mostrarei as habilidades que adquiri tanto com experiência profissional quanto estudando por conta mesmo quando não aplicável nas empresas. As minhas experiências profissionais estão em outra página, acessível pelo link no menu ou clicando no botão abaixo:


Computação em nuvem

AWS - Amazon Web Services
  • Neste momento estou com uma oportunidade para implementar a minha primeira solução utilziando cloud pública no Itaú Unibanco. Com a ajuda de um arquiteto de soluções, montamos o desenho da solução utilizando os serviços da AWS e neste momento estamos atuando para criar a infra através do CloudFormation. A solução terá dois componentes sendo um utilizando ECS, SQS e RDS e a outra S3 e CloudFront. Estou aproveitando este momento para utilizar todo o conhecimento adquirido com as certificações Cloud Practitioner e Solutions Architect - Associate enquanto estudo para a certificação Developer - Associate.
  • Por fora fiz este site pessoal que está hospedado na AWS. Este é um conjunto de páginas simples em HTML 5, cujo código-fonte está em uma conta pessoal no GitLab com um trigger configurado para espelhar o código no AWS CloudCommit. Também criei uma esteira via AWS CodePipeline para entregar o código no S3. No S3 configurei 3 buckets: 2 habilitadas com o static website hosting sendo que uma delas representa o domínio do site com os arquivos estáticos e o outro apenas redireciona chamadas ao subdomínio www para o domínio e o último bucket para armazenamento de logs de chamadas das páginas. Utilizei o AWS CloudFront para distribuir o conteúdo do S3 nas Edge Locations do mundo todo aproveitando para incluir o certificado de autenticidade do domínio que também foi provisionado pelo AWS Certificate Manager. Domínio este que comprei dentro do ambiente da AWS com uma das Registrar parceiras e também fiz uso do Route53 para configurar o DNS do site para uso do domínio e sub-domínio para apontar para a distribuição no CloudFront.

    Imagem com um desenho representativo de um fluxo de Continuous Integration e Continuous Delivery Imagem com um desenho que mostra como o site está estruturado em relação à entrega desde a origem do código-fonte até as Edge Locations
Microsoft Azure
  • Foi o primeiro serviço de cloud pública à qual tive contato. Aproveitei que o Itaú Unibanco tem parceria com a Microsoft que incluía nas licenças de cada desenvolvedor um crédito mensal dos serviços da Azure. Hoje eu uso a Azure mais para ter um ambiente de desenvolvimento mais parrudo para eu usar quando precisar ao invés de investir muito em um notebook. Mas está em meu radar começar a ampliar o conhecimento dos serviços da Azure visando termos "multi-cloud" no banco. Por esta razão corri atrás da certificação Azure Fundamentals, muito parecida com a Cloud Practitioner da AWS mais para ter os conceitos dos serviços oferecidos pelo provedor de cloud.
Cloud Privada Itaú
  • O Itaú Unibanco começou a jornada para uso da cloud preferindo criar toda uma estrutura de IaaS e PaaS no ambiente OnPremisses do banco. Acreditava-se que era necessário os engenheiros terem conhecimento do que é computação em nuvem, do que é DevOps (no caso DevSecOps) e outros conceitos antes de partir para o uso de cloud pública. Devido a isto acabei adquirindo bastante conhecimento de esteira de CI e CD uma vez que tínhamos que ter conhecimentos mínimos para resolver problemas nas esteiras da cloud privada. Então acabei ganhando experiência no uso do IaaS e do PaaS no ambiente de cloud privada, o que também me ajudou no uso da cloud pública uma vez que conceitualmente é a mesma coisa.

Ferramentas de colaboração

Jira e Confluence
  • Uma das habilidades que adquiri no banco com o apoio de ferramentas de colaboração como Jira e Confluence, foi a da colaboração não só com a equipe mas com a empresa como um todo. As ferramentas ajudam muito sim, mas os conceitos de colaboração através de metodologias ágeis favoreceram a atual estrutura em squads para o desenvolvimento de projetos. Com o Confluence conseguimos compartilhar conhecimento extrapolando a documentação. E com o Jira além de acompanharmos as cerimônias do Scrum, a utilizamos como ferramenta inclusa na esteira de CD para entregar o software na produção.

Ágil

Scrum, Kanban e DevOps
  • As três certificações que tirei da CertiProf me ajudaram a ter conceitos mais sólidos da metodologia ágil através de frameworks, processos e ferramentas. Não basta a vivência do dia-a-dia no trabalho que ajuda sim, mas ter os conceitos sólidos ajudam a orientar e nortear a forma como conseguimos gerir as entregas e ajudar o time. As cerimônias não são uma frescura ou um mero "tem que passar por isso todo dia", é uma cultura que nos ajuda a organizarmos e colaborarmos para atingir objetivos. Acredito que estes conceitos e as ferramentas que nos apoiam a cultuar estes conceitos trazem resultados melhores do que na época dos projetos Cascata.

Arquitetura distribuída

Computação em nuvem
  • Acredito que para conseguir desenvolver soluções para uso na nuvem, é necessário ter uma boa base sobre o que é computação em nuvem. Venho nos últimos tempos estudando muito sobre AWS e Azure, mas ambos tem um único problema: são vendors e irão lhe mostrar os serviços que possuem para te venderem uma facilidade que você não sabia que poderia ter. Isso não é suficiente para você dar soluções de arquitetura distribuída utilizando a nuvem, é necessário ter conceitos sólidos do que é uma arquitetura voltada para nuvem. É por esta razão que venho estudando livros com os conceitos (vendor neutral) de computação em nuvem, livros como "Cloud Computing: Concepts, Technology & Architecture" do Thomas Erl para ter conceitos sólidos que são aplicáveis à qualquer cloud provider de mercado.
Microserviços
  • Há muitas discussões do tamanho que uma solução pode ter para ser considerado um microserviço, seguindo todos os preceitos básicos que um microserviço tem que ter: fazer uma única coisa bem feita. Já ouvi de tudo sobre microserviços dentro do mundo corporativo, até que no mainframe dá para construir microserviços (com todo respeito aos profissionais de Cobol). Então acredito que é necessário também ter conceitos sólidos do que é um microserviço e toda a parafernalha que vem junto para possibilitar existir um microserviço, que tenha uma única responsabilidade, um único domínio e que seja reutilizável. Estou lendo livros como "Service-Oriented Architecture: Analysis and Design for Services and Microservices" do Thomas Erl (olha ele novamente) e "Building Microservices" do Sam Newman. Vale uma menção honrosa a um outro livro que não tem muita relação com microserviços, mas que também é uma base para conseguirmos pensar em reuso não só da aplicação, mas das classes e métodos que a aplicação se utilizará, estou falando do "Design Patterns: Elements of Reusable Object-Oriented Software" do famoso "Gang of Four".
Dados
  • E claro tão importante quanto construir uma arquitetura de solução para aplicações na plataforma distribuída, é saber fazer o uso de dados na plataforma distribuída com as ferramentas que dispomos. Então conhecimento em bancos de dados relacionais (SQL Server, Oracle, MySQL) e não relacionais (Cassandra, DynamoDb) e extrapolando um pouco o que é um contrato de API e o que são eventos, pois trafegamos dados de várias formas para mim é essencial. Posso dizer com muita segurança que tenho conhecimentos sólidos em bancos de dados relacionais não só pela minha certificação em SQL Server, mas pelos mais de 10 anos de experiência trabalhando com SQL Server e modelagem de dados. Nos últimos 3 anos adquiri muito conhecimento para uso de bancos de dados não relacionais com consistência eventual (que até pouco tempo atrás era um "escândalo" ter isso em um banco) e utilização correta de contratos de API (RAML) e eventos (com Kafka em meu caso). Ainda hoje acabo vendo alguns projetos em que os desenhos ficaram "tortos" pelo time não conhecer as diferenças entre banco relacional e não relacional ou quando dizem que estão criando eventos como se fosse uma mensageria (fila MQ), por este motivo acredito ser necessário ter uma base mínima.

Ferramentas de desenvolvimento de software

Visual Studio
  • Trabalho com a "família" Visual Studio há mais de 15 anos, começando com o Visual Basic 6 onde tenho pelo menos 7 anos de experiência desde a época em que não utilizávamos internet para pesquisar, usávamos o Visual Basic 6 Black Book. O tempo foi passando e fui utilizando desde o Visual Studio .NET (framework 1.1) para desenvolvimento no já "falecido" pda da HP que vinha com Windows CE até o mais atual Visual Studio 2019 para fazer aplicações .Net Core, tanto usando C# quanto VB.NET. Não tenho o que reclamar, tanto o VB6 quanto o VB.NET e C# já foram as "linguagens" mais utilizadas no mercado para desenvolvimento de software e isso me fez estudar muito sobre orientação a objetos e ver as mudanças que este novo jeito de programar impactaria. Já fiz de tudo: aplicações desktop, aplicações "mobile" (para pda's), aplicações que iteragiam com instrumentos (paquímetros digitais, etc), aplicações web (front end), robôs e serviços (back end), etc.
Java
  • Também passei por poucas e boas com Java, começando com o quase não utilizado NetBeans que usei tanto na faculdade quanto em projetos antigos no próprio Itaú Unibanco. Fazia deploy no iPlanet web server com Java versão 1.4 se não me engano e depois em outro time com outros projetos, utilizei o Rational Application Developer da IBM (que era um Eclipse customizado) para fazer deploy no WebSphere em aplicações Java 1.5 e 1.6. Agora que está uma maravilha trabalhar com Java, o mercado mudou muito e os profissionais foram se atualizando. Hoje ainda prefiro usar o Eclipse (ao invés do IntelliJ que muitos preferem), mas já uso pelo menos um Java 1.8 fazendo deploy em servidores Linux utilizando Spring Framework para acelerar desenvolvimento. Então de uns 3 anos pra cá aprendi muito do Java: Spring Framework, Config Server, Spring Admin, uso de repositório de dependências do Gradle e do Maven, e foi com Java que subi minhas primeiras aplicações na cloud privada em projetos que utilizavam IaaS (com uso da stack da Netflix) e PaaS (com uso da plataforma da OpenShift).
SQL Server
  • Uma de minhas principais especializações é o Microsoft SQL Server. Engraçado que no começo da minha carreira eu não gostava de programar utilizando qualquer iteração com qualquer banco de dados. Foi à partir da experiência da Easyway do Brasil que comecei a ter gosto pelo assunto para desenvolver queries performáticas. Mas foi somente no Itaú Unibanco devido necessidades em projetos, que tomei vergonha na cara e estudei por conta própria através de um livro que era o guia oficial para certificação em SQL Server que busquei a minha primeira certificação. Hoje tenho mais de 10 anos de experiência em SQL Server para desenvolvimento e análise de performance de queries, e percebo que esta especialização não é comum pois a maioria quer ser DBA e acaba ficando muito longe da "pegada" de desenvolvimento. Já resolvi diversos problemas nestes últimos anos relacionados à conceitos e boas práticas na montagem de queries para melhorar performance e gastar menos. Não é só fazer um Select como muitos dizem por aí, então por estes e outros motivos hoje me considero um profissional especializado em SQL Server com foco em desenvolvimento de software.