Nos últimos anos o termo full stack developer ganhou destaque na descrição de vagas de emprego, especialmente em startups. Segundo este artigo, traduzido por mim, um full stack developer, é:
- “…um engenheiro que pode dar conta de todo o trabalho, desde bancos de dados, servidores e até da parte cliente da aplicação. Dependendo do projeto, o que os clientes necessitam pode ser uma aplicação mobile, web ou desktop.”
E o artigo segue citando tudo que seria necessário aprender: uma série de linguagens de programação, bancos de dados, back-end, front-end, cache, design, usabilidade, etc.
Se isso é complicado para uma pessoa que é desenvolvedora há vários anos, imagine o desespero que pode causar em alguém que está iniciando a carreira. Recentemente fui convidado a participar de um bate-papo sobre desenvolvimento web no canal do YouTube do Robson Cristian, o Simplificando.
Um dos tópicos que comentamos foi exatamente isso: o que uma pessoa precisa aprender para iniciar ou evoluir na carreira web. No episódio eu dei minha opinião rápida sobre o assunto, que estou aprofundando neste artigo.
O que eu acredito é que no início da nossa carreira é natural sermos full stack porque precisamos ganhar mais experiência antes de escolhermos um caminho.
Antes de continuar minha opinião, vamos ver o que é full cycle developer.
Full cycle developer
O termo ganhou destaque em um artigo na página de tecnologia da Netflix, em meados de 2018.
No artigo o autor conta os problemas que eles estavam enfrentando e os experimentos que realizaram até chegar a este modelo (tradução minha, também):
- “…nós chegamos a um modelo onde um time, equipado com ferramentas de produtividade, é responsável por todo o ciclo de desenvolvimento do software: análise/arquitetura, desenvolvimento, teste, deploy, operação e suporte.”
Ok, ok. Nem todo mundo tem os problemas de performance, escalabilidade ou complexidade que o Netflix tem, mas não é esse o ponto principal. Substitua “time” por “desenvolvedor(a)” e chegamos ao ponto que me fez escrever este artigo.
Ao invés de aprender superficialmente todas as tecnologias envolvidas no desenvolvimento de um software (back-end, front-end, banco de dados, usabilidade, etc), me parece muito mais eficaz uma pessoa que é capaz de iniciar uma tarefa e conseguir ser responsável por ela até o final do seu ciclo. É o que venho experimentando nos últimos oito ou nove anos, enquanto estava à frente da tecnologia da Coderockr e agora na Codenation.
Neste tempo todo sempre trabalhei com especialistas em suas áreas. Seja mobile, front-end ou back-end, mas que eram capazes, com conhecimento e ferramentas, de serem responsáveis por todo o ciclo de desenvolvimento: definir arquitetura/análise de requisitos, desenvolver o software, testar, fazer o deploy e resolver problemas em produção.
Eu acredito que esta é uma forma mais saudável de evoluir em uma carreira em desenvolvimento de software, pois gera profissionais responsáveis, especialistas em suas áreas, capazes de trabalhar em equipe (junto com outros especialistas) e mais completos.