Linguagens e Frameworks : Por que você deve dominar apenas um (profundamente)

A Empresa Não Te Dá Opção de Escolha

“Ouvi dizer que Python é tendência, será que podemos usar aqui?”

Será que um desenvolvedor júnior pode dizer isso na empresa? Impossível.

Antes de conseguir o emprego, eu podia escolher a linguagem que quisesse. Usava Python porque era vantajoso (quase um ‘cheat code’) nos testes de lógica e estudava Java porque diziam que tinha mais vagas. Mas a realidade da equipe pequena (startup) onde caí de paraquedas era bem diferente.

A Stack Tecnológica da empresa já estava decidida. O código legado rodava em Java (Spring Boot), as telas eram desenhadas em JavaScript (Vue.js) e, de repente, caiu no meu colo a manutenção de um App Android, me obrigando a mexer com XML e um dialeto de Java diferente.

Eu nunca escolhi nada disso. O ambiente (Framework) simplesmente impôs essas linguagens a mim. No começo, fiquei aterrorizado com aquela enxurrada de sintaxes estranhas. Mas, conforme eu lia e escrevia código desesperadamente para sobreviver, percebi um fato crucial:

“Ué? Isso é exatamente o mesmo conceito de Java que eu estudei antes!”

Se você entende uma linguagem de verdade, abrir a porta das outras é questão de tempo.

A Sintaxe Muda, a Essência é a Mesma (Concept Transfer)

Na época da faculdade, passei rapidamente por C e me aprofundei bastante em Java. Quando chegou a temporada de busca por emprego, ouvi na comunidade que “Python é o rei dos testes técnicos” e abri um livro de Python pela primeira vez.

A sintaxe era estranha no início, mas surpreendentemente me adaptei em poucos dias. Não porque Python fosse fácil, mas porque eu já conhecia a ‘Essência da Programação’ através do Java.

  • List do Python: “Ah, isso é basicamente um ArrayList do Java misturado com funções de Stack e Queue.”
  • Dictionary do Python: “Isso é igualzinho ao HashMap do Java. Armazena pares de Key-Value.”

Eu não estava aprendendo uma nova linguagem do ‘zero’. Eu estava apenas pegando o ‘Mapa do Java’ que já existia na minha cabeça e colando etiquetas com os ‘Nomes em Python’ por cima. Na pedagogia, chamamos isso de Transferência de Aprendizado (Transfer of Learning). Se você cava fundo em uma linguagem, a velocidade para entender a próxima é proporcional a essa profundidade.

UI também é, no fim das contas, uma Árvore (Tree)

Essa experiência brilhou em uma área totalmente diferente.

Na faculdade, mexi com HTML e CSS para fazer uns ‘freelas’ reformulando o site da escola e ganhar um trocado. Na época, nem achei que isso contaria como experiência de dev.

Porém, depois de contratado, surgiu a tarefa aleatória de corrigir a UI do aplicativo Android. O Android usa uma linguagem de marcação chamada XML para construir a interface. Como era meu primeiro contato com mobile, fiquei tenso, mas ao abrir o código, comecei a rir.

<!-- Android XML -->
<LinearLayout orientation="vertical">
    <TextView text="Hello World" />
    <Button text="Click Me" />
</LinearLayout>

<!-- HTML -->
<div style="display: flex; flex-direction: column;">
    <span>Hello World</span>
    <button>Click Me</button>
</div>

Apenas os nomes das tags mudaram. A estrutura de “colocar um elemento filho dentro de um elemento pai e definir a aparência com atributos” era idêntica ao HTML. Como eu já entendia a estrutura da Árvore DOM e o Box Model, dominei o layout Android num piscar de olhos.

Mesmo mudando a plataforma, a essência da ‘Hierarquia’ permanece imutável.

Framework: A Coisa que a Escola Não Ensinou

Na verdade, o que me deixou mais confuso do que a linguagem foi a existência dos Frameworks.

A faculdade só ensinava o ‘físico básico’: sintaxe C, estruturas de dados, algoritmos. Claro, eu já tinha ouvido falar de ‘React’ ou ‘Spring’. Até comprei um livro de React porque ouvi na comunidade que “React é o futuro”.

Mas fechei o livro antes da metade. Eu não conseguia entender por que tinha que programar daquele jeito. “Poxa, não é só criar uma função e chamar? Por que tenho que herdar um Component e colocar dentro de uma função render? Por que o controle não está comigo?”

Naquela época, eu não sabia a diferença crucial entre Biblioteca (Library) e Framework.

  • O que aprendi na escola (Estilo Library): Eu escrevo o código e chamo as ferramentas (funções) quando preciso. (Construir a casa do meu jeito, martelando onde eu quiser).
  • O que uso na empresa (Estilo Framework): A ferramenta (Framework) me chama. Eu só preencho os espaços vazios com código. (Montar uma casa pré-fabricada seguindo o manual).

Se na escola aprendi a martelar livremente, o Framework na prática era como uma fábrica gigante que dizia: “Nós fazemos a martelada, você só coloca o prego neste buraco aqui” e me obrigava a seguir isso. Por não conhecer esse conceito de Inversão de Controle (Inversion of Control), o livro parecia estar escrito em grego.

Se Você Conhece a Linguagem, o Framework se Revela

Mas, ao ser jogado na selva e forçado a usar Frameworks, encarei uma verdade irônica.

Por mais que o Spring Boot faça suas mágicas complexas, por dentro ele é feito de código Java.

Aquelas anotações mágicas como @Autowired nada mais são do que aplicações da técnica de Reflection do Java. O sistema reativo do Vue.js é apenas o uso inteligente de Objects e observadores do JavaScript.

“Se a base (Linguagem) é sólida, você enxerga como o Framework (Aplicação) funciona.”

No início, mergulhei no Spring MVC sem saber nada, mas como eu entendia Java, percebi rápido: “Ah, o framework está executando meu código por mim. Eu só preciso entregar o objeto seguindo essa regra”.

Se eu tivesse uma base mais sólida de JavaScript na época que desisti do livro de React, teria entendido por que o React foi desenhado daquela forma.

[Dica] Receita para Estudantes com Paralisia de Escolha

“Qual linguagem devo estudar?”

Essa é a pergunta campeã nos fóruns. Não é que você precise usar apenas uma linguagem para sempre. Mas, paradoxalmente, para ser bom em várias, no começo você precisa focar em apenas uma.

Se você é um estudante travado sem saber a direção, feche os livros e abra um Site de Vagas (LinkedIn, etc.) agora.

  1. Procure a Descrição da Vaga (JD) da empresa onde quer trabalhar ou que acha interessante.
  2. Escolha uma Stack Tecnológica (Linguagem + Framework) que está escrita lá.
  3. Estude essa Stack profundamente.

“Mas essa empresa usa Spring e aquela usa Node.js, e agora?”

Não importa. Se você dominar uma de verdade, serve. Como disse antes, a essência da programação se transfere. Quem domina Spring, se adapta rápido se a empresa mandar usar Node.js depois de contratado. Mas quem só “beliscou” um pouco de cada, vai se perder em qualquer Framework que aparecer pela frente.

Pare de sofrer e cave fundo em uma tecnologia que o mercado (as vagas) pede. Esse é o caminho mais rápido.

[Code Verification] Linguagens Diferentes, Memória Única

Vamos confirmar com código que, apesar das linguagens diferentes, o que acontece dentro do computador é igual. O ArrayList do Java e a list do Python têm sintaxes diferentes, mas a lógica de aumentar a memória (Dynamic Array) é a mesma.

Java:

// Java: Quando enche, aumenta o tamanho em 1.5x e muda de endereço.
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
// Internamente: Cria Array -> Adiciona dado -> Se faltar espaço, cria Array maior e copia.

Python:

# Python: Quando enche, aumenta aprox. 1.125x + algo e muda de endereço.
my_list = []
my_list.append(1)
# Lógica interna é quase idêntica ao Java (Usa realocação de array do C)

Não importa a linguagem, o método de trabalho do Centro de Logística Digital (Computador) não muda. As regras de uso do Operário (CPU) e do Armazém (Memória) são universais.

Conclusão: Troque o Medo pela Curiosidade

Vivendo como desenvolvedor, o momento de usar uma linguagem ou framework que você não quer vai chegar. Quando isso acontecer, você vai fugir dizendo “Sou dev Java, odeio Python”?

Linguagem não é religião, é Ferramenta. E Framework é a Oficina onde usamos essa ferramenta.

Quem tem a experiência de ter cavado fundo em uma linguagem (Língua Materna), aprende a usar novas ferramentas rapidamente.

Então, não se assuste se for obrigado a usar uma Stack desconhecida na empresa amanhã. A casca é diferente, mas o recheio é o mesmo que você já conhece.

Agora que eliminamos o medo das linguagens, no próximo post vamos entrar no mundo real onde o código vive: as profundezas da Memória (RAM). Quando você souber onde seu código fica cravado na RAM e como ele roda, a barreira das linguagens ficará ainda menor.

Deixe um comentário