Quero ser um engenheiro, não um frameworker
Estou na área de desenvolvimento há algum tempo, contando estudos e práticas, mas só recentemente consegui meu primeiro emprego como Desenvolvedor Front-end. Entrei de forma bem informal para auxiliar um time pequeno na criação de uma aplicação que pode ajudar muito a empresa. Quando comecei, tinha conhecimentos básicos em JavaScript, Next.js, algumas bibliotecas e também usava TailwindCSS.
No trabalho, passei a usar TypeScript e comecei a aprender mais estratégias usando Next.js, o que tenho adorado. No entanto, às vezes me sinto vazio, como se não estivesse fazendo algo realmente importante. Acredito que isso se deve às longas tarefas de criação de interfaces. Recentemente, me deparei com um vídeo do Primeagen reagindo a um artigo chamado "Be an Engineer, not a Frameworker", de John Raines.
Aquilo foi um choque para mim, como se fosse uma indireta direta. Percebi que estava na zona de conforto com meu trabalho atual, sem buscar novas experiências como desenvolvedor e potencialmente desperdiçando meu talento.
Então, fica aqui meu questionamento para vocês, desenvolvedores: O que pessoas como eu deveriam se aprofundar para serem considerados engenheiros e não apenas frameworkers, especialmente na área de Front-end?
Tenho 2 linhas de pensamento sobre a questão:
Primeiro, de fato, hoje em dia temos muito mais frameworkers do que engenheiros de software. Isso se dá, ao meu ver, por um fator que os próprios engenheiros de software criaram, que é a busca pela facilidade, boilerplates que sirvam para muitas pessoas, e principalmente, a famosa preguiça. Além disso diria que existe o fator DevExperience que todos nós buscamos nas nossas linguagens. De fato, hoje em dia estamos cada vez mais sendo reduzidos a quais frameworks sabemos. Até porque, JS vanilla, falando de front end, é muito "anti-dev", talvez seja essa a palavra.
Segundo, esses boilerplates existem exatamente para isso! Pense como uma pessoa que tem uma necessidade, criar um site para vender um Saas. Você precisa ser ágil, robusto, escalável. Logo irá para algo que é seguro de usar, que necessita pouca configuração, e que tenha uma vasta comunidade, para que, caso tenha algum problema, encontre uma solução "fácil". Eu concordo com isso em 1000%. Sempre escolho esses atalhos.
No fim fica a pergunta, o que você espera da sua carreira como Dev? No fim do dia, todos estamos resolvendo problemas.
Eu, se fosse você, e quisesse me tornar um engenheiro de fato, não ficaria apenas no JS. Ele dita "apenas" a parte da web. Mesmo tendo abstrações para ser usado em Desktop, Games, até mesmo IA deve ter algo, não foi "feito pra isso" (longe de mim dizer pra que algo foi feito, mas não me parece certo usar JS para IA por exemplo). Aprenderia C++, quem sabe Rust, quem sabe Go... Iria mais a fundo, talvez Assembly? Depende de onde você quer chegar. É dificil dizer, todos somos diferentes
Eu sou "fullstack", mas prefiro dizer que sou backend. Gosto de trabalhar na web, mas também gosto da ideia de desenvolver jogos, tanto que me formei nisso. Pra mim ser engenheiro vai na linha de ir tão profundamente no framework, que posso personaliza-lo do meu jeito. E além disso, ser engenheiro talvez vá até a questão do deployment da aplicação, monitoramento, reability, solução de problemas, e novamente ao desenvolvimento. É um ciclo :)
o conselho que eu te dou é tentar fazer as coisas sem usar um framework!
Tenta fazer qualquer app usando apenas vanilla JS/TS. Imagine como funcionam as principais APIs do React: useState, useEffect, etc.
Se você tivesse que implementar elas, como vc faria?
Ou mesmo exercícios que vc faria em 5min com React. Algo como um todo, ou um board estilo Trello, coisas assim.
Tb tem um ótimo site, mais focado em entrevistas, mas que tb ajuda bastante nisso: GreatFrontEnd.
Eu usei recentemente quando estava me preparando para minha ultima entrevista.
Livros tb são ótimos recursos. Recomendo 2 pra pessoas querendo expandir do front: High Performance Browser Networking e Web Scalability for Startup Engineers.
Não concordo com outras respostas, que estão dizendo que você precisa se aprofundar em algoritmos e fundamentos de ciência da computação. E concordo ainda menos que você deve aprender outras linguagens.
Mesmo se você quiser se especializar em somente UM framework de front-end, para ser um BOM profissional você deveria estudar DevOps, Domain-Driven Design, um pouco de backend (afinal, o front fará as requisições de APIs), Cloud/Infra (afinal, o front estará hospedado aonde?) Clean Code, Clean Architecture, Design Patterns, um pouco de Application Security (por exemplo, você sabe como evitar um ataque de XSS? Desenvolvedor front-end precisa saber disso, não é profissional de SI! SI não olha nem escreve código!), diferentes possibilidades de GitFlow, diferentes formas de estruturar as pastas e arquivos do seu projeto, etc.
Tem muito mais no mundo da programação do que só programar. De fato, conseguir fazer uma tela bonita, uma API de CRUD, ou uma query de SQL, qualquer desenvolvedor deve saber, mesmo que não seja sua função atual. É literalmente o básico (i.e., a base). E possivelmente é por isso que você se sente vazio. Pra se tornar um BOM profissional, motivado, se considerar um "engenheiro, e não um frameworker", você deve ir além e estudar coisas que vão além da parte técnica, de linguagens de programação, etc.
O que um engenheiro faz é como se fosse "meta-programação". Você deve pensar em como outras pessoas continuarão seu trabalho de onde você parou... como deixar seu código mais fácil de entender e modificar... como facilitar o processo inteiro de desenvolvimento, como um todo, de qualquer pessoa que entre no time... como deixar a aplicação mais performática (aquela requisição que demora 5 segundos pra retornar, será que o problema se resolveria se dividisse a chamada em duas?). etc.
Quanto aos algoritmos, e fundamentos de programação... ninguém vai falar que você precisa saber criar seu próprio banco de dados pra ser um bom engenheiro de dados, cientista de dados, ou admin de DB, né? Não faz muito sentido dizer que você precisa aprender a criar seu próprio framework, se seu objetivo é ser um desenvolvedor front-end. E muito menos aprender C++. Se quiser mudar de área, tudo bem. Mas se quiser se especializar em front-end, não vejo sentido em aprender uma linguagem que não é utilizada pra aquele objetivo. Tipo, se você quiser aprender por curiosidade/hobby, vá em frente, vai ser maneiro, e pode até ajudar no seu trabalho sim. Mas não tanto quanto várias outras coisas que você poderia estar estudando que de fato iriam fazer muita diferença no seu dia-a-dia como desenvolvedor.
A exceção são estruturas de dados, pois elas ajudam seu código a ficar mais organizado e performático, então pode valer a pena sim.
Enfim, é sempre uma escolha do que você quer fazer com seu tempo. Lembre-se da Lei de Pareto, e priorize aquilo que você considerar que será mais benéfico pro SEU objetivo.
Cara, a resposta pra isso é simples: estude. Mas não vá atrás desses cursinhos de internet que não te levar a lugar nenhum. Estude computação de verdade.
Estude algoritmos, tecnicas de melhoria de código. Você sabe resolver o problema de ifs aninhados com guard clause? Sabe como escrever funções recursivas e quando utilizá-las?
Estude estruturas de dados. Você sabe o que é um grafo? Que uma árvore é um subcaso de grafo? Sabe pra que usar uma heap?
Estude banco de dados. Você ser frontend é só o cargo que você desempenha no momento, pois um profissional da computação deve sim entender como um banco de dados opera. Sabe em que situações usar chave primária composta? Sabe o que é um índice? Como normalizar uma tabela?
Eu poderia continuar a fio falando de cada subárea dentro da computação mas o importante já disse: vá estudar.
Usar um framework não é para você aprender a programar, mas para você que já sabe como resolver os problemas apresentados, poder ter um conjunto de ferramentas que te auxilie a fazer isso de maneira eficiente.
O que eu de fato recomendo é entrar em uma faculdade de ciência da computação, onde você verá cada uma dessas coisas e mais, mas sei que nem todos tem tempo.
Caso você não de fato consiga e queira seguir autodidata, entre em um site de faculdade e pegue as ementas das matérias. Lá descreve tudo o que é visto no semestre de cada disciplina e a bibliografia utilizada. Procure faculdades renomadas como USP, UFSCar, UNESP, etc.
Aqui seguem as ementas das disciplinas da faculdade que eu fiz: https://drive.google.com/drive/folders/1WFeb58HzCHmoe6BXgAkrSOx_sMHCrjQH.
Bons estudos
Cara, os comentários de @kaiqueramos e @lucasfaria já dizem muito sobre o que você pode fazer para melhorar, então eu queria destacar um ponto que, para mim, é fundamental: leitura.
Atualmente estou terminando Engenharia da Computação e realmente quero entrar na área de low level, mas é algo extremamente pouco falado aqui no BR, muito menos existe conteúdo de qualidade falando sobre. Faço minha faculdade no interior do Nordeste, então vagas para isso se tornam quase inexistentes, pois o foco é SP e não é tão fácil assim trabalho remoto nessa área. Meus amigos foram para web, mesmo com a única cadeira minimamente web do curso ser a de redes, justamente por ser o que o mercado mais tem vaga disponível e com barreira de entrada menor.
Acredito que o Akita faça um conteúdo interessante, e com certeza já aprendi muito com ele, mas, como ele mesmo fala, o canal dele não é para ensinar, é para mostrar como a computação é algo amplo, muito além do que os vendores de curso falam.
Na gringa existem muitas aulas grátis sobre o básico desse tipo de conteúdo, mas não é muito minha praia ficar assistindo vídeo-aula, sinto que fico tão engessado quanto aula presencial, pois é algo muito teórico.
E com isso chegamos na leitura. O que com certeza está me salvando e me possibilitando estudar diariamente sobre o que tanto gosto é a leitura. Até existem alguns livros dessa área traduzidos para PT, mas é um número bem reduzido, além de serem antigos (apesar que, com certeza, um livro, mesmo sendo antigo, agrega valor -- não é atoa que em low level o estudo se foca no básico, pois o atual é extremamente complexo --, um livro atualizado agrega mais ainda). Como você parece saber inglês pelo fato de assistir Primeagen, eu vou deixar aqui minha recomendação de site para baixar livros: Anna's Archive -- aqui você encontra tudo e mais um pouco.
Separe um tempo diário para estudar com livros. Os atuais são muito bem escritos, de uma forma extremamente menos pedante e chata se comparado aos antigos. A título de exemplo, eu estava lendo Sistemas Operacionais Modernos, 4ª ed. - Tanenbaum, e estava um saco, mesmo sendo algo que me interessa, até que descobri o OSTEP, um web-book completamente gratuito da Universidade de Wisconsin-Madison, feito pelos próprios professores para ser usado em suas aulas e atualizado constantemente, acompanhando as mudanças da tecnologia (que, nesse caso, são bem poucas).
Mas eu ainda irei além disso, separe um tempo diário para ler, também, livros além do técnico. De não-ficção, recomendo fortemente Algoritmos de Destruição em Massa - Cathy O'Neil (certamente deve ter a versão em inglês no Anna's, caso não consiga comprar), é algo voltado para como a computação tem poder de afetar a sociedade, então acredito que seja um bom início por ainda se tratar de uma temática familiar. Já de ficção escolha qualquer história que você ache que vai gostar, só tomaria um pouco de cuidado com livros longos nesse começo.
Espero que eu tenha ajudado em algo com minhas palavras, e boa leitura.
Engraçado esse post! pois tive o mesmo sentimento ao ler este artigo aqui
Dando meus dois centavos pra coisa! Eu fui pra linha de estudar como os frameworks fazem as coisas, os decorators do TypeScript, transformar os callbacks em promises no JS, coisas que os frameworks abstraem pra gente. Um dia vai chegar um problema que o framework utilizado pela equipe não vai resolver. E ai entender como ele funciona vem a chave! Pq a ideia vai ser criar uma ferramenta que se assemelha muito com ele pra resolver o problema, reduzindo assim o custo de aprendizado para os outros devs!
Com o tempo você vai desenvolvendo suas próprias bibliotecas ou ajudando no desenvolvimento de algum software open-source ou mesmo acabar tendo que programar em outras linguagens ou fazer os códigos de teste, dar uma devops.
Além do mais, os projetos pessoais são oportunidades para aprender novas coisas. Engenheiro não apenas usa ferramentas, ele constrói ferramentas para outros usarem.
Hoje há muitas pessoas que não sabem diferenciar Javascript, Typescript, React e NextJS. Mas acredito ser o que o mercado pede. No fim, as empresas contratam "frameworkers", e não "engenheiros". Buscam pessoas que saibam utilizar as tecnologias que ela usa.
Mas não significa que você não possa ou não deva buscar conhecimento em outros lugares. Nossa área é absurdamente ampla, tem muito conteúdo legal pra consumir, muito livro pra ler, muito conhecimento pra adquirir.
Acredito que o melhor seja procurar encontrar o meio termo entre as coisas, pelo menos pra mim. O importante é não parar de estudar.
No final tudo depende do que você quer ser. Não siga cegamente o que as pessoas dizem e blá-blá-blá. Você quer focar na área de front? Ok, aprenda os fundamentos totais daquela área até os ossos! Experimente de tudo e um pouco mais até que você vomite eventos e estilização o dia todo!!!!! Você como engenheiro deve saber tudo que acontece por baixo dos panos ao olhar uma funcionalidade, melhor, você deve ser um especialista! Experiência é algo extremamente necessário para isso, por isso eu disse que você tem que experimentar tudo! Saia de empresa a empresa experimentando tudo que ela pode oferecer, até que você se sinta confortável em uma empresa que lhe ofereça desafios como um especialista. E é isso, isso é aplicado em todas as áreas. Ah, também recomendo que aprenda o básico do back-end ou até mesmo devOps, apenas para não ficar totalmente perdido quando surgir o assunto sobre.
A minha experiência de 25 anos de desenvolvimento de software ensinou que a engenharia independe de linguágem, e muito menos de framework. Se quer ser um Engenheiro de Software, se importe com o COMO, como o software será o desenvolvido, quais etapas serão realizada até a sua entrega final, que tenha valor para seu cliente ou dono do produto. A linguagem e framework utilizado depende de muitas coisas como recurso financeiro e pessoal, tamanho de dados e complexidade no desenvolvimento, objetivo do software, etc. Então... tenha conhecimento de várias linguagens e alguns frameworks, estude suas vantagens e desvantagens, entre outras coisas. Sei que estão pensando: "Mas ela informou que é na área de Front-end"... Cara! Este é um assunto que discordo muuuito. Não dá para ser um Engenheiro sem pensar no como será a forma de desenvolvimento, como não pensar no cenário como todo, o Front-end é uma etapa do processo. (ponto final)
Você não se sente uma fraude por não usar binário para codificar? Por que usa um Editor de código e não o bloco de notas? Consulta internet e/ou usa IA? Tudo que gere valor ao cliente de forma célere e com qualidade deve ser adotado. Não é porque consigo fazer tudo "na mão" que sou um melhor profissional que outro que usa framework.