Muito tem se falado sobre carreira de desenvolvedores, sobre se tornar um pleno e crescer rapidamente. Vez por outra alguém me pergunta como diferenciar o programador Junior, do Pleno e Senior e sobre o que é necessário para avançar para o próximo passo. Quem diz o nível do dev, ele mesmo? A empresa que trabalha? O mercado?
Estas perguntas estão amarradas em tantos detalhes, tão interligadas entre si, que preferi escrever este post.
Níveis graduais
Existem diversas formas de “rotular” o nível de um dev, e o mais conhecido são os níveis júnior, pleno e sênior. Estes níveis vão sendo conquistados ao longo dos anos conforme o desenvolvedor vai demonstrando conhecimento, entendimento e domínio no assunto.
A ideia é que assim que você se forma, você chega ao mercado como Junior, ou seja, o cara mais novo na área. Saiu da faculdade ou ingressou no mercado de trabalho, então ganha o título Junior. O Junior é aquele cara que vai ainda se exercitar 8 horas por dia durante um bom tempo até ficar realmente bom.
Criei na App Masters o temo “Junior completo“, pra definir o que este cara tem que conquistar, antes de querer ganhar uma medalha de Pleno.
Então queremos saber, como é esse tal Junior completo? Um cara tão bom, mas tão bom, que quem entende (e até quem está começando), acha que ele já é pleno.
O Junior completo
O Junior completo é um cara diferenciado. Já cumpriu entre dois e quatro anos de prática de programação em uma ou mais linguagens e já tem uma bagagem de conhecimento para serguir em frente. Vamos refletir sobre os quatro aspectos que considero mais importante para identificar este dev.
1 – Código e linguagem
O programador Junior completo precisa ter o domínio dos recursos básicos da linguagem. Precisa saber lidar bem com o gerenciador de pacotes e não fazer bagunça no projeto. Se ele trabalha com uma única linguagem, se não domina ela totalmente ainda, não falta tanto.
O algoritmo já pode ter sido um desafio, mas não é agora. Seja programação O.O ou funcional, fazer o que precisa ser feito com código não é mais um problema.
Este dev consegue receber tarefa mais complexas, porque gosta do desafio, e sente que está fazendo cada vez os códigos de forma mais rápida, mais organizada e com menos margem pra erros.
Apesar de conhecer alguns padrões de projetos, ainda não conhece muitos, porque pra se aprender mesmo um design pattern, ele precisa ter passado por aquilo, e ter entendido como o padrão se encaixa como uma luva.
Eventualmente se enrola pra entender a abordagem de um projeto maior em que caiu de paraquedas, mas vai tentando fazer sua parte muito bem, e deixar tudo bem encaixado, seguindo os padrões já repetidos ao longo do projeto. Ele não inventa um código todo diferentão em um projeto que já tem uma grande base de código.
Este dev já domina totalmente o git (SVN, TFS, seja lá o que a empresa usar), e não apaga código dos companheiros, nem zoneia o histórico com arquivos que não fazem parte do projeto.
Mesmo sendo tão bom, ainda acontecem idas e vindas em code reviews, e as vezes precisa reescrever os códigos que achou que estavam perfeitos, porque o pleno ou o sênior do time encontrou algum detalhe oculto.
2 – O projeto
O Junior completo entende o que está fazendo. Além do código que ele já está dominando, ele entende o problema que o sistema se propões a resolver. Não sai fazendo código igual ao um doido. Ele para, pensa, tenta imaginar se irá funcionar como o imaginado, e se ele tiver uma ideia melhor, fala sem problema. Quando ele faz, entende o escopo e garante que irá entregar o que foi pedido, então ele entrega o que é esperado, funcionando.
Pode não ser o programador Junior quem faz o deploy do projeto, mas ele sabe que terá um deploy na quinta-feira e também quer garantir que tudo esteja certo para este dia. Aquelas partes que estão meio “estranhas”, que ele não tem total certeza se funcionarão tão bem no mundo real, ele já conversou com o gerente do projeto, e então se algo falhar não será um grande problema.
Este dev Junior sabe que existem usuários, que são tipo umas pessoas que usam computadores e celulares, e que eventualmente usarão o sistema. Então quando ele escreve uma mensagem de erro, ele tem atenção se está claro o significado, se está escrito em português correto e se aquele usuário mais tosco leigo irá conseguir entender o recado.
3 – Iniciativa a terminativa
Muito além do que começar um código, ele sabe terminar, então não deixa códigos abandonados no meio de uma implementação, lembra de comentar onde é importante e sabe realizar testes para garantir a qualidade do que implentou.
Ele sabe que o projeto é longo e tenta se manter atento ao prazo final, ao que ele precisa fazer para o projeto ser concluído com sucesso. Não é só jogar um monte de código pra dentro do repositório e esperar a próxima issue. É estar atento aos detalhes, e querer que seu trabalho agrege de verdade valor ao produto.
Se surge uma oportunidade interessante, o dev Junior completo não sai correndo igual um cachorro abanando o rabo. Ele tem consciência que a empresa precisa dele e não abandona o barco de um dia pro outro, porque quer sair numa boa, sem deixar nada pendurado. Conversa com a empresa e dá pelo ao menos um mês (que é o prazo “regulamentar” do CLT) pra concluir o que puder e passar para os demais. Tudo isso é terminativa e te faz ser respeitado.
4 – Comunicação e aprendizado
É certamente a soft skill mais importante no meu ponto de vista, e as vezes trava o cara no começo da carreira.
Mas o Junior completo escuta quem tem mais experiência e não fica travado. Não fica querendo discutir atoa.. escuta, reflete e vê o que há para ser aprendido. Se ele não concorda, tenta explicar com calma seu ponto de vista, ou dar um exemplo de como pode ser feito.
O Junior completo não depende de curso online, porque sabe ler documentação, sabe ler exemplos de código e se houver um livro relevante ele poderá ler também. Como se comunica bem com os mais experientes, ele escuta o que é bom aprender e vai lá estudar, assim ele fica cada vez melhor também no time.
Olhar pra frente, e olhar pra trás
Em qualquer nível que esteja, é bom olhar pra trás e ver fundamentos que ainda não aprendeu, porque estes conhecimentos certamente irão fazer falta. Não estou falando que o dev Junior tem que entender o baixo nível e tudo o que tem por debaixo dos panos, mas buscar entender melhor como a linguagem, ou o sistema operacional, ou o sistema de banco dados com o qual trabalha, funcionam.
É fácil usar SQL e entender bem as queries. Pra um Junior, saber joins, agrupar, ordenar e tal é o básico, e já resolve em 99% dos casos. Mas, como os índices são utilizados internamente pelo servidor SQL? Sabendo isso (que é um fundamento) você saberá fazer queries muito mais rápidas e que consomem menos do servidor. Assim, em um sistema com um grande volume de aessos, dará pra atender mais usuários ao mesmo tempo, e aguentar mais tempo sem precisar fazer um upgrade na máquina, logo um fundamento te ajuda a ter visão de pleno, a não se preocupar só com o código.
Os princípios do S.O.L.I.D. (para O.O ou não) são fundamentais e vão te ajudar a ter códigos mais consicos e mas bem escritos. Um livro bom que está diretamente ligado a qualidade de código é o Codigo Limpo (Clean Code de Robert C. Martin), e que pra muitos devs é um divisor de águas.
Então os fundamentos, aqueles débitos lá do passado não devem ser esquecidos, pois eles poderão fazer a ponte para você no futuro.
Falando em futuro, um dev Junior completo quer crescer, então precisará sempre aprender mais. Este é o único caminho. Minha recomendação seria buscar entender as coisas por completo. Se trabalha com React, estudar como o React foi feito, criar seu próprio React do zero, pra entender realmente como o estado e a renderização acontecem. Se for mais do backend, entender o sistema operacional onde o seu código irá rodar, buscar aprender questões de segurança e performance que interferem neste servidor.
Eventualmente com meu time nos deparamos com situações, onde o fundamento falta, seja pra mim ou pro time, e ficamos sem respostas. Dai eu falo “temos que voltar lá e entender isso”, senão a gente fica “na mão do palhaço”, a mercê da situação.
Vem virar pleno
Falando em seguir em frente, deixa eu contar uma história. Certa vez tínhamos um programador Junior muito bom no time, um cara de ouro realmente. Até poucos meses antes de se formar só tinha trabalhado em projetos de iniciação cientifica e não conhecia como era trabalhar numa empresa de verdade, desenvolver produtos e tudo mais.
Ele fez três meses de estágio conosco, se formou, e nós o efetivamos. Cerca de quatro meses depois ele me procurou e falou que tinha recebido uma oferta melhor. Poxa! O cara era bom. Optei por cobrir a oferta e praticamente dupliquei o salário dele de um mês pro outro, e ele decidiu continuar conosco.
Não sou de cobrir ofertas e nunca faço leilão com outras empresa. Quando o dev que trabalha comigo recebe uma proposta de outra empresa, e acha que ela é boa, quando ele fala comigo eu digo “isso é ótimo!”. E é verdade.. ganhar mais, respirar novos ares, conhecer novas pessoas e projetos, faz parte da vida, e de verdade fico feliz quando um dev que trabalha comigo sai para ganhar mais. Sem ressentimentos.
Voltando no caso, passou mais uns dois meses ele me procurou falando que ia aceitar a proposta da empresa, que ficou pensando e iria aceitar. Eles tinham oferecido ainda mais que eu tinha oferecido, mas o “mais importante” segundo ele, ele seria contratado como pleno.
Ou seja, pleno seis meses após se formar.
Eu não tinha como oferecer mais dinheiro, nem queria. Ele realmente queria ir pra tal empresa, que era muito maior que a nossa, com desafios mais difíceis também. Não sinto que ele tenha agido errrado, e ele se foi numa boa, ainda somos amigos, ele até está no grupo do whatsapp da empresa até hoje.
Mas enfim, muitas empresas tem usado o artifício de “vamos te trazer como pleno”, como uma forma a mais de chamar atenção do dev Junior para mudar de empresa, e concordo que é uma “isca” muito forte.
Quem dá o nível de Pleno?
Não é nada super combinado, pode acontecer de várias formas.
Mas normalmente o desenvolvedor está em uma empresa que percebe o seu valor, que vê que é um Junior dedicado. Com o passar do tempo percebe que aquele jovem nerd, agora consegue lidar com muitos mais problemas do que antes, que já sabe onde as coisas podem dar errado, que até já pode ensinar os demais sobre diversas técnicas e tecnologias.
A empresa então é quem dá este nível, ela diz “você é um desenvolvedor Java Pleno”, e pronto. Graduou.
Mas, por exemplo, se este dev pleno vai pra outra empresa, trabalhar com C# por exemplo, que ele não sabe quase nada.. o que acontece? Ele volta a ser Junior? O nível pleno é tirado?
O Pleno não é só um bom programador em uma linguagem. Se você pensa assim ainda não entendeu o que é a evolução do dev. Ele está buscando entender tudo ao redor da linguagem e já domina muito sobre servidores, sistemas operacionais, técnicas de build e deploy, banco de dados e talvez até de gestão de pessoas. Mas, nada impende de um dev Pleno em uma empresa entrar em outra como Junior, se assim ficar acordado.
Ganhar dinheiro, crescer na carreira
Se você quer deixar de ser Junior para ganhar mais, se pra você o dinheiro é o mais importante e ele está acima de tudo, pare agora mesmo de estudar programação e foque só no inglês. Existem cerca de 258 milhões de pessoas falando português, a maioria no Brasil. Já inglês é falado por cerca de 1.348 bilhões de pessoas ao redor do mundo (cinco vezes mais). Não é uma relação direta, mas tem muito mais vagas para pessoas que falam inglês (no mundo todo), do que português (no Brasil, Portugal, Angola e alguns outros menores).
Se for só pelo dinheiro, realmente o inglês (com trabalho remoto) é o caminho porque poderá ganhar em dollar. Você pode conseguir uma vaga de Junior mesmo, e teria assim um bom resultado financeiro, comparado aos que normalmente se tem aqui no Brasil.
Mas se o Brasil é seu foco por enquanto, também não é complicado ganhar algum dinheiro. O jeito que mais vejo acontecer é o dev ir pulando de empresa em empresa, sempre falando que fez mais do que realmente fez, e aproveitando da alta demanda do mercado. Sempre terá uma empresa que irá te pagar mais pra você sair de onde está. Isso não está ligado ao seu conhecimento ou nível, está a ligado a necessidade que a empresa tem de contratar alguém, então te oferecem mais. Desta forma a cada cinco ou seis meses é possível mudar de empresa. Se você busca dinheiro, este é um atalho.
Algumas vezes o dev sente que não irá crescer mais na empresa, sente que está estagnado. Algumas vezes é a empresa que não tem um processo claro de subida, um plano de carreira ou algo assim. Mas na maioria das vezes é o dev que não aprende nada novo, acha que está lá na frente, que já sabe tudo, e na verdade está parado no tempo e não apresenta nada novo. Atrasa nas entregas, não entende os problemas, não aceita críticas, e chega até a fazer código com má vontade. Dai, sente que é a hora de procurar outro emprego, pra ganhar mais, pra ter seu valor reconhecido.
Se você não quer pular de galho em galho, se te parece anti-ética ou meio “enganação” (eu também acho), o que te resta é ser bom de verdade. É ser um dev Junior SINISTRO e ir progredindo naturamente na empresa, mudando de trabalho quando sentir que chegou a hora, e assim ganhar cada vez mais dinheiro e respeito.
Pra encerrar a conversa
O que fiz nestes últimos 20 anos, vou trabalhar com programação. Estou na minha quarta empresa e já trabalhei com dezenas de clientes de diversos segmentos.
Não sou o dono da verdade, na verdade cada vez mais percebo que sei muito pouco. Mas espero que este post tenha te clareado o caminho, tenha te chamado atenção para algum detalhe ou tenha te motivado a seguir em frente, sendo cada vez melhor.
Comente aqui se acha qua faltou algo, ou se quiser falar como acontece com você ou na sua empresa. Todo comentário é bem vindo!
Te desejo sucesso e bons estudos!