Fullstack

Em uma discussão recente falávamos sobre o que é ser fullstack, quantas linguagens um dev precisa saber e o que estudar.

Esse post é a minha humilde opinião sobre o tema, ele é beeem parcial, por favor discordem a vontade :)

O que é fullstack

Fazendo uma busca rápida no Google encontrei algumas definições diferentes, mas a mais comum é:

“É o profissional que sabe trabalhar tanto no back end quanto no front end”

Daí alguns sites complementam com:

“… e que consegue criar a modelagem de dados e conhece de infra”

E mais alguns que adicionam:

“… e devem conhecer não apenas da área técnica, mas sim do negócio, validar e até melhorar o design do site e claro acompanhar a execução do projeto e manter tudo em ordem“

fullstack

E em muitos lugares vi finalizando que esse profissional pode ganhar cerca de R$ 4.000,00 ou tendo links de cursos de stacks de programação para se tornar fullstack.

Ou seja, fullstack virou um termo muito bom para contratar uma pessoa com a função de um time inteiro de desenvolvimento e pagando pouco para ela.

(Alguns sites que descrevem o que é fullstack: igti, profissionaisTI e tutano)

O que é fullstack para mim

Eu acredito que o termo fullstack pode ser resumido em:

“Um profissional que consegue trabalhar com uma gama de tecnologias para resolver um problema”

Hoje trabalho com alguns cientistas de dados que além da modelagem e análises (e outras coisas que para mim são mágica ainda), fazem a captura dos dados, seu tratamento, o ETL, a conversa com o cliente, mas não fazem o front end. Então esses profissionais não seriam fullstack? Para mim eles são muito fullstack.

Conheço muitos devs backend que fazem API, processamento em tempo real, trabalham com terabytes de dados, se duvidar até criam protocolos de comunicação próprios mas fazem um HTML que dói a vista e não por que eles são ruins, mas por que não é necessário.

E claro conheço algumas pessoas que fazem o frontend com o backend e entregam sites completos para seus clientes. Os verdadeiros fullstack, segundo a definição.

Todos esses perfis conhecem várias tecnologias e as usam para resolver os problemas dos clientes, o que para mim é a essência do fullstack.

A procura do termo perfeito

Mas será que o termo fullstack não quer dizer realmente um desenvolvedor que consegue fazer o front e o back, muito provavelmente em javascript e usando MERN stack e talvez trabalhe em agência?

Será que não falta um termo para identificar a pessoa que desenvolve bem pra c**** ? Esse desenvolvedor unicórnio/jedi/ninja que todos queremos ser?

Assim poderíamos falar que conhecemos/queremos ser aquele cientista de dados unicórnio/jedi/ninja.

Que queremos trabalhar com aquele backend unicórnio/jedi/ninja.

E que aquela desenvolvedora fullstack unicórnio/jedi/ninja é um exemplo a ser seguido (estou falando de você Paulinha).

Há uma discussão muito boa no github que fala sobre essa diferença.

Nela existe um post, na minha opinião muito assertivo, que fala que você pode ser fullstack na empresa X que usa algumas tecnologias mas na empresa Y que utiliza outras tecnologias você não é mais o fullstack que aquela empresa precisa.

Talvez esse seja o principal ponto: o fullstack que a empresa precisa.

Cada empresa tem uma história, cada empresa tem seu legado e precisa de profissionais muito bons que dêem suporte ao crescimento ou manutenção de seu negócio. Principalmente se ela estiver passando por transformações ou modernizações.

Essa empresa precisará de profissionais unicornio/jedi/ninja para guiar as mudanças para novos pensamentos. Se ela procurar por fullstacks conforme a definição padrão talvez ela ache algum profissional que não esteja pronto ou saiba como fazer essa mudança.

No último ano minha carreira teve várias mudanças e acabei caindo numa empresa de Health Tech e tive que mexer com servidores Windows e SQL Server, bem, nem de perto sou o fullstack que essa empresa imaginava.

Mas a minha visão de outros mercados e conhecimento de outras tecnologias oxigenaram pelo menos um pouco a área e também aprendi um pouco sobre o tal SQL Server (o Windows Server não, a vida é muito curta pra isso). Ajudando a empresa a começar a trilhar o caminho de transformação que ela deseja.

O risco da corrida pelo fullstack

No começo do post falei sobre a discussão sobre o fullstack, um dos tópicos era o que um dev recém formado precisa estudar pra ser fullstack.

Um dev precisa conhecer várias tecnologias, mas mais importante é saber usar essas várias tecnologias.

Você já deve ter visto um código antigo e notado que hoje você reescreveria o código bem melhor. Quem nunca ficou bravo com o seu eu do passado por escrever um código ruim?

A medida que ganhamos experiência, sabemos usar melhor as ferramentas que temos, conhecemos mais sobre o que é programação, independente da linguagem.

Em algum momento a gente vê na prática o problema de um loop infinito, de um update sem where, de um código bugado em produção. E aprendemos com isso.

Esses conhecimentos que formam um verdadeiro profissional fullstack e pra isso é preciso de tempo.

É claro que devemos conhecer várias tecnologias até por que pra quem só saber usar martelo, qualquer problema é prego, mas também não adiantar saber essas tecnologias e não saber direito como e onde usá-las, é como comprar um kit de alicates sem saber onde usar cada um.

A ânsia por ser fullstack pode fazer o profissional aprender muitas tecnologias mas não se aprofundar em nenhuma.

alicates

Quantas vezes já encontrei exemplos de código explicando um novo framework ou lib JS (por sinal, desde que você começou a ler esse post outra lib JS já deve ter nascido) ou como fazer uma API serverless em Go e o código era extremamente raso, com uma estrutura confusa, repetição de código, com lógica estranha e nada disso é culpa da linguagem escolhida, mas sim da prioridade em conhecer as ferramentas novas sem ter a profundidade de como escrever um bom código.

Conclusão

No final da discussão, meu ponto é que o profissional deve focar em ser um excelente desenvolvedor, ser f***, o fullstack vai vir naturalmente durante o percurso. Com os desafios do dia-a-dia a pessoa vai ter contato com outras linguagens, com infra, com banco e principalmente com negócio, amadurecendo e tendo mais valor para o mercado.

Caso apareça uma linguagem ou ferramenta nova que se queira aprender, aprenda-a e descubra como colocar as boas práticas de software, até porque dificilmente alguém vai te contratar só porque você sabe fazer um Hello World em Rust.