O que eu aprendi revisitando projetos antigos #001
Introdução
Há cerca de duas semanas estava com uma crise muito grande de ansiedade, me sentindo desanimado para fazer qualquer coisa, devido ao encerramento do meu contrado de PJ e não estava conseguindo encontrar energia para fazer praticamente nada.
Minha mulher estava se esforçando ao maximo para eu me sentir melhor e conseguir voltar ao normal, então eu comecei a olhar meus projetos do github na procura de uma perspectiva nova, algo novo para aprender ou que me desse um desafio novo (amo programar por sinal).
Foi então por volta de uns 5 dias que me deparei com esse post (Qual foi a ultima vez que voce fez algum projetinho apenas por diversão) aqui no Tabnews e parece que tudo se organizou na minha mente.
Projeto Benchmark Languages
Na época em que eu ainda estava na faculdade (Sou engenheiro de software com conhecimento em análise de dados e arquitetura em microsserviços) decidi criar esse pequeno projeto para estudar as nuances de várias linguagens de programação e de sobra estudar a performance entre eles.
O objetivo do projeto era (e ainda é) ter um melhor entendimento de quando utilizar determinada linguagem de programação como profissional, por exemplo:
Caso não queiram ler os exemplos, podem pular para a parte de Conclusão.
Exemplo 1 - Análise estatística de Dados de ações:
Caso me permitissem escolher com qual linguagem eu resolveria esse problema, eu escolheria R (Também sei python, se acalmem), devido as seguintes vantagens:
- Familiariade
- Conhecimento em uso profíssional (Paralelismo, Compilação, Big Data e Gráficos)
- Fácil de ler e manipular dados
- Fácil de gerar gráficos
- Grande conjunto de Bibliotecas prontas para diferentes tipos de análises
- Rapido para prototipação (Shiny)
Porém também conheço as desvantagens:
- Linguagem muito mais lenta do que a média
- Poucas bibliotecas para construção de servers REST
- Dificuldade em multiplas requisições REST (Plumber consome requisições em queue síncrona)
- Uso consiente de GC devido á situações de vazamento de memória.
Exemplo 2 - Criação de uma API REST com grande fluxo de acesso:
Caso me permitissem escolher com qual linguagem eu resolveria esse problema, eu escolheria Java, devido as seguintes vantagens:
- Ecossistema robusto
- Utilizada em ambientes de produção em larga escala
- Conhecimento em uso profissional (Microsserviços e Api Gateway)
- Pode ser executada em qualquer lugar devido á JVM
- Bibliotecas confiáveis para geração de servidores (Ex.: Spring e SpringBoot)
Porém também conheço as desvantagens:
- Grande consumo de memória (apesar que pode ser mitigado com a GraalVM e parâmetros da JVM)
- Dificuldade em configurar Gradle / Maven em ambiente de produção (É mais uma dificuldade minha mesmo)
Exemplo 1+2=3 - Tudo junto e misturado:
Agora vem a grande dúvida: Que linguagem utilizar para criar uma API REST para análise estatística de dados de ações em ambiente de grande fluxo de acesso?
Caso me permitissem escolher com qual linguagem eu resolveria esse problema....eu escolheria....Scala.
Apesar de não ser tão ouvida recentemente, Scala é uma linguagem de programação que mistura os paradigmas de Orientação a objetos com o Funcional, possui compatibilidade com várias bibliotecas Java, (por ser um membro da família JVM) é uma linguagem rápida para análise de dados, leitura e escrita de arquivos, facilidade em paralelismo e com um gerador de projeto de fácil compreensão e execussão em ambiente de produção, o Sbt.
Conclusão
O meu projeto pessoal Bechmark Languages segue a seguinte lógica:
- Uma linguagem a ser estudada é selecionada.
- Um Branch então é criado para o problema a ser solucionado.
- Para o problema, se gera um diagrama UML.
- Em seguida se prepara o arquivo de simulação Bench.sh.
- A simulação é executada várias vezes para obter dados.
Identificador: typescript_8_inputclass_1e+06
Tempo de leitura (ms): 1333
Tempo de analise (ms): 214
Max: 488.21
Min: 0
Mean: 79.81197250999965
- Os resultados das linguagens são compilados e analisados.
- Conclusão sobre os possiveis resultados.
Na nova versão as seguintes coisas estão sendo implementadas:
- Adição de novas linguagens.
- Adição de novos problemas a serem estudados (branches).
- Adição de testes automatizados.
- Uso de docker para executar as simulações sem a necessidade de instalar a linguagem.
- Separação das linguagens em seus proprios repositórios (chamados bml-pluggins).
Caso tenham alguma dica do que eu possa fazer acrescentar, ou caso só queiram conversar estou a disposição.
Obrigado pelo tempo de vocês e caso tenham se interessado visitem o repositório principal Bechmark Languages, ou o primeiro bml-pluggin que eu atualizei bml-typescript.