O que aprendi no meu primeiro ano na Aurum
No dia 15 de Agosto de 2018 eu completo um ano na Aurum. Neste tempo tive oportunidade de trabalhar em desafios interessantes, com a liberdade de inovar e aprender muitas coisas novas. Por isso resolvi escrever esse post para listar as top 5 tecnologias que aprendi trabalhando na Aurum.
1 — Node.js
Antes de entrar na Aurum eu já tinha ouvido falar de Node.js, porém nunca tinha trabalhado em um projeto utilizando essa tecnologia. Eu sempre gostei bastante de Javascript no front-end, trabalhando com frameworks como Angular e React, porém usar essa linguagem no servidor ainda me trazia algumas dúvidas.
Algo comum por aqui é o desenvolvedor ter liberdade de sugerir novas tecnologias, e quando surgiu a oportunidade de trabalhar em um projeto interno, a equipe sugeriu a utilização do Node.js e foi quando eu abracei esta linguagem como uma das minhas preferidas para back-end. Depois disso criamos mais alguns serviços com Node.js e o que pude observar foi:
Pontos fortes:
- Flexibilidade do Javascript
Quem já programou utilizando Javascript sabe o quão flexível a linguagem é, você tem muitas opções e pode fazer a mesma coisa de diferentes formas. Isso abre um leque de possibilidades para a definição de arquiteturas diferentes e adaptáveis para diversas situações.
- Desempenho
Nos projetos que utilizamos Node.js conseguimos obter uma boa performance com uma utilização de recursos otimizada.
- Velocidade no desenvolvimento
Devido a existência de vários frameworks e bibliotecas, o desenvolvimento com Node.js se torna rápido. Em poucas horas você consegue ter uma aplicação com apis, conexões com bancos de dados (principalmente Mongo DB), entre outras coisas.
Pontos fracos:
- Cuidado com a bagunça
Apesar da flexibilidade do Javascript ser um ponto forte do Node.js, temos que tomar cuidado para que o projeto não vire uma bagunça. A dica é sempre buscar por padrões de projetos e estruturas de organização de pastas e arquivos utilizadas em outros projetos de sucesso.
- Cuidado com o crescimento do projeto
Todos os projetos que criamos com Node.js foram projetos pequenos. Quando o projeto fica muito grande pode ficar difícil de organizar os arquivos, navegar entre as funções (apesar das IDEs ajudarem muito hoje em dia) ou até mesmo encontrar erros.
2 — Google App Engine
O Google App Engine é uma plataforma de computação em nuvem que permite a criação de aplicações escaláveis em diversas linguagens, totalmente abstraídas de infraestrutura. Isso quer dizer que você não precisa se preocupar com hospedagem, deploy, escalonamento ou outros detalhes de infraestrutura, a própria plataforma já faz muitas dessas coisas de forma automática, e você realmente só se preocupa em desenvolver a aplicação e o negócio.
Além disso a plataforma do Google oferece diversos serviços como banco de dados não relacional, serviço de armazenamento de arquivos, filas e agendamento de tarefas, relatórios de erros, entre outras coisas. Neste ano trabalhando com a plataforma pude perceber algumas vantagens e desvantagens:
Vantagens:
- Configuração simples
A maioria dos serviços que utilizamos no App Engine são fáceis de configurar. Com poucas linhas de código já é possível utilizar o banco de dados, criar filas ou agendar um processamento.
- Alta disponibilidade
Em um ano a plataforma só ficou indisponível duas vezes. Nestas duas vezes o retorno foi bem rápido, e não precisamos fazer nenhuma intervenção para os serviços voltarem a funcionar. Antes disso, as outras pessoas que estão aqui a mais tempo disseram que nossa aplicação só tinha ficado indisponível uma vez em 5 anos. Isso dá uma grande segurança para a utilização da plataforma.
Desvantagens:
- Falta de espelhamento
Apesar da alta disponibilidade do serviço, uma coisa que falta para a plataforma é a possibilidade de espelhar toda sua infraestrutura em outros locais, para que quando uma região ficar indisponível seja possível migrar rapidamente.
- Mistérios da documentação
Todos os serviços oferecidos pelo App Engine são documentados, porém existem alguns casos em que a documentação não é tão clara e omite detalhes importantes, que levamos bastante tempo para descobrir.
3 — Firebase
O Firebase é uma plataforma para desenvolvimento de aplicações Web e Mobile, hoje mantida pelo Google, que foi desenvolvida com o intuito de auxiliar no desenvolvimento de features como atualização em tempo real, notificações do tipo push, controle de acesso integrado a diversos provedores e relatórios de erro.
Inicialmente o Firebase foi desenvolvido para ser utilizado para criação de chats nas aplicações. Hoje a plataforma já conta com diversos serviços e também com o armazenamento e análise dos dados produzidos pela aplicação. Vou comentar um pouco dos serviços que hoje utilizamos nos nossos sistemas:
- Push Notification
O Firebase conta com um serviço de Push Notification que é bem simples de implementar e utilizar. É possível enviar as notificações de diversas formas: bibliotecas disponíveis em diversas linguagens, apis ou diretamente pela interface da plataforma. Além disso as mensagens podem ser enviadas para um único dispositivo, grupos de dispositivos ou através de tópicos.
- Banco de dados real-time
A plataforma possui um banco de dados não relacional com atualização em tempo real. Este banco, quando atualizado, notifica através de uma biblioteca todos os dispositivos conectados com uma performance considerável.
- Provedores de autenticação
De uma maneira simples, é possível utilizar vários provedores de autenticação como Gmail, Facebook, Twitter ou Github. Outra possibilidade é cadastrar os usuários manualmente na própria plataforma.
4 — Kotlin
Recentemente começamos a utilizar Kotlin em um de nossos projetos. O grande crescimento da linguagem na comunidade, a aceitação dos desenvolvedores e o fato de ser uma linguagem que roda na JVM (portanto se encaixa na maioria das nossas infraestruturas atuais) foram aspectos que nos chamaram a atenção. Apesar de pouco tempo utilizando a linguagem já deu para perceber algumas vantagens de utilizar:
- Multi-paradigma
Kotlin é uma linguagem bem dinâmica, podemos criar abstrações em forma de classes ou utilizar conceitos derivados de programação funcional. Por possuir diversos paradigmas a linguagem nos permite utilizar o melhor de cada em um mesmo projeto.
- Sintaxe simplificada
Muitas das coisas que fazemos em outras linguagens, como o Java por exemplo, foram simplificadas no Kotlin. Isso faz com que nossos projetos tenham menos linhas de código e fiquem mais fácil de mantê-los.
- Fácil de integrar com Java
A base da maioria dos produtos da Aurum foi desenvolvida em Java. Por ser uma linguagem compatível com a JVM o Kotlin não dá só a possibilidade de usarmos a mesma infraestrutura, como também podemos mesclar as duas linguagens. Com o mínimo de configuração é possível em um mesmo projeto ter classes escritas em Java e Kotlin, e ambos podem ser usadas entre si.
5 — Data science
Neste último mês a Aurum ofereceu para seus colaboradores um curso de Data science com o professor Hitoshi Nagano, da Fundação Getulio Vargas. Apesar de não ter utilizado este conhecimento em nenhum projeto ainda, gostaria de destacar a importância de Data science e Inteligência Artificial nas organizações atuais:
- Decisões orientadas por dados
Nos tempos atuais, com a quantidade de informações que são geradas todos os dias, é imprescindível que as decisões organizacionais sejam baseadas em dados. É o que chamamos de Data Driven. Utilizando esta abordagem as decisões se tornam mais eficazes e as empresas conseguem achar oportunidades baseadas no comportamento de seus clientes.
- Automação de procedimentos
Através dos modelos gerados pelos dados de uma empresa, é possível criar procedimentos automatizados através do uso da inteligência artificial, o que torna a empresa mais econômica e escalável.
Conclusão
Para concluir gostaria de dizer que tem sido um prazer fazer parte deste ótimo time, que me motiva todos os dias a melhorar como profissional e tenho a certeza que os aprendizados não acabam por aqui. Espero em breve escrever outros artigos detalhando melhor algumas dessas tecnologias que citei, falar de outras tecnologias que também utilizamos aqui como Vue.js, React.js, entre outras, e compartilhar o conhecimento que tenho adquirido.