Tomar decisões sobre que tecnologias usar em um novo projeto Web não é simples. A indústria de software apresenta opções como nunca antes e é facil ficar perdido dentro de tantas opções de bibliotecas, componentes, frameworks, IDEs e ferramentas de scaffolding.
Observo em base diária o que colegas, parceiros de negócio, clientes e pessoas da comunidade estão usados. E com base nessas observações expresso aqui algumas opiniões fundamentadas para facilitar a sua jornada na escolha de novas tecnologias Web.
- Considere o uso profissional de tecnologias JavaScript
JavaScript? Sei não? Isso é realmente sério?
Sim. Javascript é somente a linguagem mais usada no mundo Web hoje para o desenvolvimento de aplicações. Por exemplo, uma pesquisa com 64 mil desenvolvedores realizada pelo sítio StackOverflow mostrou o JS sendo por 67% dos desenvolvedores.
E veja. Não estou falando apenas de bibliotecas acessórias como jQuery e jQueryUI. Afinal, estas boas bibiotecas já são usadas no Brasil há mais de 10 anos.
Estou falando aqui dos seguintes aspectos:
- substituição de tecnologias de apresentação com o padrão arquitetural MVC (ex. JSF, ASP.NET Razor) pelo padrão arquitetural MVVM (ex. Google Angular 5, Facebook React ou VueJS);
- uso de frameworks de testes de unidade em JavaScript. Bons exemplos incluem o CucumberJS, Jasmine, Karma ou Protractor;
- uso de ferramentas para distribuição eficientes dos pacotes JavaScript com uso de recursos de minificação e embaralhamento do código. Ferramentas particularmente úteis nesse aspecto incluem o WebPack3 e o Parcel.
- uso de linguagens baseadas em JavaScript que aumentam o nível de abstração e possuem compilação estática de código. A linguagem Microsoft TypeScript tem expandido a sua popularidade e se consolidado neste aspecto.
- depuração eficiente de código cliente (logging). Ferramentas com o LogRocket e o Elmah são uma ajuda e tanto neste contexto.
- uso de IDEs leves e modernas. Brilham aqui IDEs como o Visual Studio Code e WebStorm.
Ao adotar um ecossistema JavaScript sólido, você terá em sua mão o que as melhores empresas do mundo estão usando para desenvolvimento Web. Terá também tecnologias mais simples e eficientes e mais capacidade de se adaptar aos próximos anos.
Deixo aqui uma referência para um relatório bem legal chamado The State of Javascript 2017 e alguns gráficos interessantes desta pesquisa.




2. Use APIs REST para expor suas funcionalidades de negócio
Não importa se você desenvolve em PHP, Python, C# ou Java. O que você deve evitar é que a camada Web faça acesso direto a funcionalidades backend sem o uso de APIs.
O código servidor não deve ficar preso ao código HTML (o JSF e o ASP.NET Web Forms são contra-exemplos desta recomendação). O código servidor deve ser escrito com a possibilidade de reuso por aplicaçõees móveis e também aplicativos de internet das coisas, conforme mostrado na figura abaixo.

Ao fazer isso, você trará os seguintes benefícios para a sua empresa:
- Potencializar o uso de código legado. APIs REST podem encapsular códigos em tecnologias antigas como PL-SQL, COBOL, Natural.
- Habilitar competências específicas no seu time. Não é incomum que pessoas que conheçam muito bem Java, C# ou PL-SQL não consigam ter o mesmo nível de excelência em desenvolvimento moderno Web com React ou Angular5. E isso permite que você tenha dois perfis distintos nesta situação, que são os Back-end developers e Front-end developers.
Se você já começou a usa jornada com APIs, use este estilo de forma consistente. Deixo aqui algumas recomendações de tecnologias de suporte para testes e aperfeiçoamento das suas APIs:
- Postman — Testes de unidade de APIs
- Swagger — Documentação Técnica e Testes de Unidade de APIs
- Artigo sobre boas práticas de uso de APIs (do meu blog)
3. Evolua as linguagens do lado servidor
Se você trabalha com Java, não deixe de usar os diversos recursos funcionais do Java 8. Embora os recursos já existem desde 2014, muitos desenvolvedores não estão fazendo uso destes elementos. E considere o uso de recursos recém lançados do Java 9 tais como melhorias na API de Streams, distribuição modular, cache e suporte a JavaScript servidor.
Se você trabalha com C#, é hora de considerar o novo ecossistema de tecnologias do .NET Core e .NET Standard, que está na sua segunda geração já.

O ASP.NET Core, por exemplo, tem obtido apoio muito forte da comunidade e conta com os primeiros projetos em produção no Brasil.
E, com o .NET Core 2, foi lançado também a biblioteca do .NET Standard que permite que desenvolva ou refatore módulos que poderão operar simultaneamente na nova arquitetura do .NET Core, arquitetura legada do .NET Framework e também o próprio Xamarin para aplicaçativos móveis.
Se você trabalha com linguagens dinâmicas, considere o Python 3. Esta linguagem tem experimentado um crescimento expressivo devido ao mercado de ciência de dados e big data.
4. Simplifique a sua distribuição com aplicações auto-hospedadas e contêineres
Entre 1995 e 2010, o mercado foi domaindo pelos servidores de aplicação clássicos, como por exemplo o Microsoft IIS, Apache Tomcat, JBOSS Application Server e produtos similares de empresas como IBM ou Oracle.
Nos últimos dois anos, temos observados muitas empresas usando soluções mais simples em ambientes de produção com o uso de tecnologias diversas tais como:
- Docker e Spring Boot (para aplicações baseadas em Java)
- Docker e HTTP.sys/Kestrel/.NET Core (para aplicações basada em .NET)
- Docker e Django/Flask (para aplicações baseada em Python)
- Docker e Laravel/Lumen (para aplicações baseadas em PHP)
Dentro das tecnologias de conteineres, começe a adotar o Docker e considere tecnologias de suporte para o gerenciamento de conteineres como por exemplo o Rancher e orquestração de contêineres como o Google Kubernetes.
5. Considere estilos arquiteturais complementares
O uso dos padrões MVC e MVVM ainda é dominante no desenvolvimento Web. Para para problemas alternativos temos vistos estilos arquiteturais complementares tais como:
- Microsserviços, que permitem escrever novos produtos como um conjunto de serviços pequenos e independentes. Tenho um artigo introdutório ao tema aqui (Não Alimente Seus Paquidermes). Tecnologias como o Lumen, Flask, SpringBoot e .NET Core são mais interessantes para este cenário.
- Nanosserviços (ou serverless ou funções como serviços), que são tipos de microsserviços que operam sobre nuvem públicas sem a necessidade de aluguel de máquinas. Você cria e distribui o seu código e é tarifado pelo uso de CPU e memória do seu código em ambiente de produção. O AWS Lambda, Azure Functions e Google Functions são exemplos muito promissores destas tecnologias.
- Segregação de comandos e consultas (CQRS), cujo objetivo é acelerar a performance de aplicações através da segregação do código de consulta dos códigos de comandos de atualização do banco de dados.

- Persistência poliglota, que consiste do uso de diferentes estratégias e tecnologias de persistência de dados para situações específicas em aplicações Web. Por exemplo, armazenar e indexar um conjunto de imagens ou criar um cache pode ser eficientemente resolvido em bancos de dados do tipo chave/valor como por exemplo o Redis. Um exemplo prático é a arquitetura da Stack Overflow, mostrada no esquema abaixo.

Iniciando a transição
Antes de adotar em larga escala novas tecnologias, é sempre importante lembrar de algumas recomendações arquiteturais:
- Faça provas de conceitos para reduzir riscos e testar estas novas tecnologias na sua realidade;
- Faça treinamentos e garanta que cada pessoa do seu time tenha sido devidamente treinado;
- Não deixe que o conhecimento de uma tecnologia fique na mão de um especialista — pessoas vem e vão e você pode ficar em maus lençóis se confiar em apenas uma única pessoa.
- Não adote tecnologias apenas porque elas estão populares. Veja como elas podem resolver os problemas reais de negócio da sua organização. Faça testes e esteja preparado para o pior.