Trabalhar com desenvolvimento de software, ser um programador, requer muito mais do que conhecer uma linguagem de programação e alguns pacotes, exige diversas habilidades do ser humano. Agilidade, flexibilidade, criatividade e diversas outras. Isso não se consegue da noite para o dia.
O que tenho notado ultimamente em muitos profissionais é a pressa de chegar até o nível mais alto dos cargos. Se tornar um sênior o quanto antes, mesmo tendo apenas dois ou três anos de experiência no mercado de trabalho.
Em parte, isso é culpa das empresas que simplesmente estão desesperadas por programadores e oferecem cargos e salários super altos para pessoas com pouca experiência. Não que ter altos salários seja algo ruim ou que ter um nome bonito para o cargo no Linkedin seja um problema.
A verdadeira questão é a confusão que isso pode causar quando se tem alguém com poucos anos de experiência sendo a referência de uma equipe.
Sim, um programador sênior é uma referência para todos os outros membros de sua equipe. E o bom programador júnior é aquele que sabe que “ser o menos inteligente da mesa” é algo essencial para o seu crescimento.
Não existe uma regra para se definir quem é sênior ou quem é júnior, isso vai depender do plano de carreira de cada empresa.
O que existe é uma regra importantíssima para os programadores em qualquer nível de carreira, iniciantes ou experientes: Jamais pare de aprender!
“Tá, mas como eu vou saber que nível estou?” – Leitores
Como depende de cada empresa, fica complicado saber. Para dar uma ajuda vou mostrar uma listinha…
A lista
Aqui vai uma tradução de uma lista muito interessante que o DHH, criador do Rails e founder/CTO do Basecamp, publicou em uma conversa no twitter esta semana.
Essa lista faz parte do Basecamp Employee Handbook, o manual do funcionário do Basecamp, e clarifica um pouco sobre as competências que cada programador deve ter dentro da empresa para ser júnior, pleno ou sênior.
Lembrando que cada empresa define o que acredita ser o melhor para cada nível. Eu gostei e me identifico muito com o conceito deles. Por isso estou publicando aqui.
Programador(a) júnior
O trabalho é cuidadosamente revisado com substanciais idas e vindas.
Tem domínio dos recursos básicos da linguagem, mas pode ainda não ter familiaridade com algumas estruturas avançadas.
Tem problemas ocasionais para seguir padrões e compreender abordagens dentro das bases de código existentes.
Trabalha principalmente com escopos mais bem definidos e em problemas de rotina.
Costuma ter menos de 2 anos de experiência como programador profissional no domínio específico.
Programador(a) Pleno(a)
O trabalho é revisado com a necessidade ocasional de mudanças na implementação.
Compreende os padrões e abordagens estabelecidos nas bases de código existentes com facilidade.
Trabalha principalmente em funcionalidades ou problemas individuais com escopo claro e bem definido.
Costuma ter pelo menos 2-5 anos de experiência como programador profissional no domínio específico.
Programador(a) Sênior
O trabalho não precisa necessariamente ser revisado, mas a abordagem geral pode ser.
Totalmente capaz de desenvolver sozinho funcionalidades importantes do conceito inicial até a entrega (ao lado de um designer).
Pode fornecer feedbacks importantes sobre o trabalho de programadores plenos e juniores.
Especialização profunda dentro de pelo menos um ambiente de programação.
Proficiência básica em pelo menos um ambiente de programação adicional.
Costuma ter pelo menos 5-8 anos de experiência como programador profissional no domínio específico.
Eles ainda possuem um nível de Lead Programmer e um de Principal Programmer, que poderiam ser definidos como níveis de líder técnico, gerente de equipe e diretor(a) de departamento.
O que me chamou muito a atenção nesta lista é que o conhecimento técnico de uma linguagem faz diferença em cada nível, mas não é a única coisa a ser levada em conta. Lembre-se disso!