
Maturidade profissional em TI: o que separa um Júnior de um Sênior?
Em qualquer carreira, deve haver crescimento profissional. O que isso implica quando falamos de TI, quais são os pontos fortes e o que devemos procurar em um candidato sênior, ou como me tornar um.
Quando falamos de profissionais de tecnologia, a discussão eterna que costuma ocorrer é sobre em que momento se passa de um nível para outro, quantos níveis existem, e o que implica estar em um ou em outro.
Níveis na engenharia. Onde estou?
O principal a esclarecer é que, de forma geral, poderíamos dizer que cada empresa tem sua própria definição do que é um sênior de acordo com sua escala interna. Além disso, muitas vezes elas têm seus próprios níveis; alguns sistemas, por exemplo, gerenciam:
- Engenheiros: L1, L2, L3, L4, L5
- Trainee, Júnior, Nível Médio, Sênior
- Engineer I, Entry Level, Mid Level, Senior Engineer, Staff Engineer, Principal Engineer
- Software Engineer, Senior Engineer, Staff Engineer, Principal Engineer, Distinguished Engineer / Fellow
Alguns soam mais pomposos que outros, mas no final querem representar apenas uma coisa: o nível de maturidade como engenheiro de software, que pode ser medido por sua capacidade de resolver problemas de forma autônoma, poder de análise, pensamento crítico, compreensão das ferramentas de tecnologia, conhecimento de design de sistemas, etc.
A primeira coisa que me interessa esclarecer é que é um processo; não é possível passar de forma acelerada de um nível inicial para um nível Sênior sem ter experimentado e conhecido diferentes problemáticas.
Aqui, sem entrar em polêmica, há muitas discussões em torno daqueles que se desenvolveram como autodidatas e daqueles que cursaram uma carreira profissional em alguma universidade ou instituto. No final, o resultado realmente dependerá de cada um.
Conheci engenheiros formados em universidade que sabiam muito pouco, assim como autodidatas que podiam superar o melhor da turma de qualquer instituição de ensino.

Conhecimentos por nível
Para simplificar a compreensão, de forma geral, é isso que cada um dos níveis representa.
Júnior
- Necessita de supervisão.
- Tem conhecimentos básicos de software e hardware.
- Domina pelo menos uma linguagem de programação.
- Participa no planejamento inicial do projeto.
- Trabalha em funções e ferramentas internas de software.
Nível Médio
- Capaz de realizar tarefas técnicas com menos supervisão.
- Entende claramente o processo de desenvolvimento, incluindo análise, desenvolvimento, implementação, etc.
- Pode configurar um ambiente de desenvolvimento por si mesmo.
- Identifica erros ao fazer análise de código, pode participar de peer reviews.
- Pode implementar testes unitários simples.
Sênior
- Pode supervisionar e liderar um grupo de desenvolvedores.
- É capaz de entender o escopo de um projeto, planejar e estimar o nível de esforço.
- É um mentor para desenvolvedores júnior e de nível médio.
- É responsável pelas revisões de código de seus colegas.
- Melhora a estrutura e a qualidade do código.
O que aprender para avançar na minha carreira?
Embora existam coisas que só a experiência pode nos proporcionar, há outras que possuem um caminho de crescimento profissional bastante claro. Na verdade, é para lá que muitas empresas buscam criar seus níveis de engenharia, para poder saber como orientá-los e como se deve avançar nesse caminho.
Sem complicar muito a explicação, algumas das coisas que você precisa ter para passar para um nível mais alto:
- Design de sistemas
- Análise de complexidade de um algoritmo (Big-O)
- Considerações de Escalabilidade
- Ferramentas de melhoria de desempenho
A primeira coisa que provavelmente alguns dirão é: e que linguagem devo aprender? Ou preciso ser um especialista em uma linguagem de programação para ser sênior?
A resposta é: Você é contratado pela sua capacidade de resolução de problemas, não por uma linguagem específica ou por um diploma na parede.
Com o passar do tempo, você pode, sim, se tornar um “especialista” em uma área ou tecnologia, mas isso não é um pré-requisito para ser “Sênior”. O mais importante, pelo menos pessoalmente, é ter clareza sobre os conceitos básicos e a experiência profissional.
Em uma das empresas onde trabalhei, me disseram: o que buscamos são apenas bons engenheiros; o restante sei que eles poderão aprender (assumindo que o primeiro ponto seja verdadeiro, ou seja, que sejam bons engenheiros). E é verdade, tendo boas bases, o restante vem facilmente.
E por ter boas bases, refiro-me a coisas como:
- Conhecer bem o gerenciamento de estruturas de dados e algoritmos
- Se for para web, conhecer engenharia web em profundidade
- Entender o gerenciamento de SCM (Software Configuration Management) e controle de versões
- Entender padrões de projeto.
- Conhecer os princípios de código limpo e como desenvolver algo que seja mantível ao longo do tempo.
Todos esses conceitos são aplicáveis a qualquer espectro, seja com alguma tecnologia específica ou um papel em uma área em particular, seja front-end ou back-end.
Mas não é uma questão apenas de tempo, de dizer em 3, 5 ou 10 anos serei sênior, mas também de se expor a mais situações onde seja necessário aprender mais e colocar essas coisas em prática.
Na minha história em particular, devo isso a ter sido muito curioso, mas também a ter trabalhado muito tempo em agências de desenvolvimento, o que nos obrigava a conhecer muitos cenários e situações diferentes.
Senioridade vs Especialização
Apenas para finalizar, o que se tende a confundir e que mencionei anteriormente é ser alguém especializado em uma ferramenta, framework, linguagem ou similar.
Por exemplo, se trabalho há 5 anos com React e me especializei em desenvolver aplicações headless, sou um Sênior em React? Em teoria, é muito provável, mas não é garantia, pois dependerá do tipo de experiências que se teve durante esse tempo.
Algumas perguntas que me vêm à cabeça para responder:
- Você conhece a fundo a ferramenta / framework / linguagem?
- É capaz de tomar decisões sobre o design arquitetônico de uma aplicação baseada nessa tecnologia.
- Sabe quais são os problemas comuns e as soluções dentro desse tipo de desenvolvimento?
- Tem claras as vantagens de implementar algo usando essa ferramenta versus qualquer outra, ou simplesmente sem utilizá-la?
Talvez não sejam as perguntas perfeitas, mas se você puder responder a isso sem dificuldade, então sim, você é um sênior especializado nessa ferramenta ou linguagem específica.