Full stack developer

Artigo de opinião altamente influenciado pela minha experiência e por: The hard truth about the full stack developer. Myths and lies. e The Rise of The Unicorns AKA “Full-Stack Developers”.

Participei faz tempo de um treinamento em React e React Native lá na firma, foi muito proveitoso e interessante já que não me considero um desenvolvedor frontend. Em certo dia (naqueles tempos livres) houve um debate sobre full stack developer, surgiu a necessidade de expressar aqui o que penso disso, eis o artigo.

O mercado (esse ser onipresente, de forma alguma composto por pessoas /s) tem necessidade de dar nomes às coisas que vende, daí surgem as buzzwords: DevOps, Container, Cloud, Fog, BYOD, Agile, Big Data, Machine Learning, Full Stack, Open Source. Percebam que toda buzzword tem um certo apelo técnico e um viés de marketing que a acompanha, mas apesar de determinada tecnologia ou técnica ser real (e útil) não a salva de se tornar uma buzzword eventualmente.

Foi exatamente isso o que aconteceu no caso do full stack. Trabalho com tecnologia da informação há dezenove anos, sou programador há vinte e um, já vi bastante do mercado e posso dizer que sou da geração que nasceu com a internet (discada). Meu primeiro site foi feito em C e viu a luz da web com o CGI (Common Gateway Interface). No navegador já existia Javascript, mas não era necessário utiliza-lo para criar um site ou mesmo um pequeno sistema com uma interface exibida no navegador. Ninguém nessa época era full stack, eram apenas programadores mesmo, lidando com HTML, HTTP, [linguagem da sua escolha], Banco de Dados (e às vezes Javascript). Era tudo mais simples, menos camadas, menos ferramentas, processo de build simplificado (era compilar na tua máquina) e entregar. O sistema do backend gerava HTML no stdout (como se fosse a tela) e o servidor HTTP enviava ao navegador do cliente, que reproduzia em tela. Simples.

Ainda assim, vejam só, havia uma equipe de infraestrutura para cuidar do servidor HTTP, havia uma equipe de DBAs para cuidar do banco de dados, havia uma equipe especializada na linguagem do servidor para criar o sistema e, às vezes, até um designer pra auxiliar no layout do HTML. O desenvolvedor pequeno ou aquele que desejasse “sair programando” ganhou, eventualmente, a opção da stack LAMP (Linux + Apache + MySQL + PHP), tudo free software e distribuído (até no Windows) em um setup simples de configurar, para mim, esse é o ponto-chave para o desenvolvedor nesse metiê web (o que é ótimo e péssimo ao mesmo tempo). Até esse momento, era necessário conhecer o ambiente de servidor para se ter algo minimamente funcional para desenvolver, a partir de então isso não era mais requisito, já que bastava o famoso fluxo next, next, finish para configurar um banco de dados, um servidor HTTP e o interpretador de uma linguagem simples, mas eficaz e criar o sistema web que se desejasse.

Nesse ponto as coisas eram tão loucas, que o MySQL era rápido, mas não possuía alguns recursos de constraint já estabelecidos há anos em outros bancos (incluindo o concorrente free software Postgres). O que valeu nesse setup, sejamos honestos, foi solução free software fácil de instalar e componentes simples de utilizar. Não à toa o MySQL, por exemplo, ainda é visto por vezes com olhos retorcidos pelos DBAs ou pelo pessoal de Infra, muito mais pelo seu passado do que por seu presente, o mesmo pode ser dito a respeito do PHP. O ponto é que agora os desenvolvedores estavam mais cientes de todos os componentes de seus sistemas.

Com a introdução do Ajax (que foi revolucionário na época), os sistemas web puderam ser feitos de forma mais compartimentada, a tela poderia ser renderizada em partes, o backend poderia ser também dividido em problemas menores. Aliado a utilitários da plataforma .NET como o code behind, o Ajax possibilitou a construção de aplicações web cada vez mais complexas, iniciando o processo de cisão do frontend e backend. Acredito que até aqui eu chamaria os desenvolvedores web de fullstack reais.

Mas, dados o alto acoplamento entre o que é exibido no navegador e o que é feito no servidor, além da complexidade das aplicações resultantes, incompatibilidade entre motores JavaScript dos navegadores, entre outras questões, ficava cada vez mais necessária a maturação do JavaScript como linguagem e ecossistema de desenvolvimento, então vimos sua acelerada evolução e as maravilhas que o HTML5 traria ao mundo das aplicações web. Em todo lugar se falava de HTML5, da onipresença do JavaScript, nessa época também surgia o NodeJS, prometendo livrar o JavaScript das temíveis garras dos navegadores.

O NodeJS como plataforma de fato revolucionou o mundo do JavaScript, expandiu enormemente as possibilidades do que se poderia fazer com essa linguagem criada em apenas dez dias. A caixa de pandora estava aberta. As aplicações web nunca mais foram as mesmas, diversos frameworks foram criados para resolver o mesmo problema: criar uma aplicação web frontend. Hoje é tão ou mais complexo criar uma aplicação frontend do que criar sua contrapartida backend (para alguns, eu incluso). São muitas formas e frameworks, são desafios de UX, interface, padrões de comunicação (WS, SSE, GraphQL, Rest). Há tanta gente que se diz fullstack e tanta complexidade envolvida no desenvolvimento do backend e do frontend que fica difícil acreditar que uma só pessoa consiga ser versada em tudo.

Assim, para mim, é fácil fazer um paralelo entre um fullstack dos dias atuais com alguém que mantém toda a infraestrutura envolvida (por exemplo: servidores Linux, cluster Docker Swarm, monitoria com Prometheus e Grafana), todo o banco de dados envolvido (SQL e noSQL, por exemplo: Postgres e Solr), todo o mecanismo de testes de entrega (por exemplo: GitLab CI), toda a infraestrutura de centralização de logs (por exemplo: Graylog), além de desenvolver backend e frontend de aplicações (por exemplo: python/FastAPI + javascript/React), além de criar e manter soluções de ingestão de dados que utilizem ferramentas do ecossistema Hadoop (por exemplo: Kafka, Sqoop, Airflow, HDFS, (py)Spark, Hive, Impala). Alguém acredita que uma só pessoa faça tudo isso? Se acreditas em gnomos, cogitas que essa pessoa faça tudo isso bem? Para mim o mesmo raciocínio se aplica aos fullstack. É possível? Sim. Fará tudo bem? Não! Ficará louco? Sim!

Quando procurar um fullstack não pensa em unicórnio, pensa em um ornitorrinco.