Posts
Dominando o Ofício: Habilidades Essenciais de um Engenheiro de Software Sênior
31 de outubro de 2012 • 4 min de leitura

Quando ouço “Desenvolvedor Sênior” penso em alguém que dominou a programação. Penso em uma pessoa que pode projetar, codificar e testar um sistema. Eles podem falar sobre arquitetura de sistema ou design de componentes. Eles entendem e usam padrões de design. Esta pessoa pode antecipar os gargalos de performance, mas sabe não pré-otimizar. Esta pessoa aproveitará programação assíncrona, filas, cache, logging, segurança e persistência quando apropriado. Quando perguntados, podem dar uma explicação detalhada de sua escolha e os prós e contras. Na maioria dos casos dominaram programação e design orientados a objetos, isso não é absoluto - outras linguagens como javascript, F#, scheme são poderosas e não são orientadas a objetos em sua essência. Eles são hábeis em gerenciamento de riscos e, mais importante de tudo, podem comunicar o mencionado anteriormente aos seus pares.
O que é maestria? Existe uma ideia geralmente aceita de que, para dominar QUALQUER habilidade, são necessárias 10.000 horas de repetição para que o corpo e a mente humanos compreendam e internalizem uma habilidade. Isso é escrito extensivamente no livro de Malcolm GladWell Outliers.
Alguns exemplos em Outliers de Malcolm GladWell são:
Mozart seu primeiro concerto na jovem idade de 21 anos. O que a princípio parece jovem, mas ele vinha compondo música desde os 11 anos de idade.
Os Beatles foram inicialmente rejeitados. Disseram-lhes que não tinham o que era preciso e deveriam considerar uma linha de trabalho diferente. Passaram 3 anos na Alemanha tocando cerca de 1200 vezes em diferentes locais, cada vez sendo de 5 a 8 horas de duração. Eles ressurgiram como os Beatles que conhecemos e amamos hoje.
E por último, Bill Gates aos 20 anos abandonou Harvard para fundar a Microsoft. Para alguns isso pode parecer tolo, mas considerando que aos 20 ele havia passado quase metade de sua jovem vida programando. Em 1975, talvez apenas 50 pessoas no mundo tivessem a experiência que ele tinha. Sua experiência lhe deu a visão para ver o futuro na Microsoft.
Peter Norvig também discute a regra das 10.000 horas em seu ensaio “Teach Yourself Programming in Ten Years”.
No livro Mastery by George Leonard, grandes detalhes são dados sobre como dominar uma habilidade. É preciso praticar a habilidade repetidas vezes. Quanto mais repetição, mais você se torna consciente das diferenças em cada repetição. Apenas com essa percepção você pode se tornar melhor.
Os títulos da indústria de software (Júnior, Nível Médio e Sênior) são enganosos e inconsistentes de organização para organização. Trabalhei com empresas que definiam um Desenvolvedor Sênior como alguém que tinha 5 anos ou mais de experiência. Não há menção à qualidade da experiência, apenas que eles ficaram sentados na frente de um computador por 5 anos. Ao trabalhar com essas pessoas, muitas delas ainda não haviam compreendido programação orientada a objetos, mas eram consideradas Desenvolvedores Sênior.
Deve haver uma maneira melhor e mais objetiva de medir o conjunto de habilidades de um engenheiro de software. John Haugeland criou uma matriz de habilidades de programador de computador. Ela oferece uma maneira comum e objetiva de medir o nível de habilidade de um programador, que de outra forma fica principalmente baseada na intuição.
Ao observar engenheiros de software, vejo 4 níveis de habilidades: Luminar, Sênior, Nível Médio e Júnior.
Luminar (10+ anos) é aquele que dominou uma habilidade e se dedicou a melhorar sua respectiva disciplina. Alguns exemplos incluem: Ted Neward, Uncle Bob Martin, Donald Knuth, Oren Eini, Peter Norvig, Linus Torvalds. Isso pode mudar dependendo do seu conjunto de habilidades.
Sênior (7 a 10+ anos, Nível 3) é aquele que passou as últimas 10.000 horas programando em um gênero específico. Há uma forte compreensão de padrões de design. Eles aproveitam programação assíncrona, filas, cache, logging, segurança e persistência quando apropriado.
É muito possível que um Sênior nunca alcance Luminar. Luminares são frequentemente encontrados palestrando e escrevendo. Eles estão ativamente tentando impactar sua disciplina.
Nível Médio (4 a 6 anos, Nível 2) é aquele que entende programação do dia a dia. Eles trabalham independentemente e criam soluções robustas. No entanto, eles ainda não experimentaram criar ou manter sistemas grandes ou complexos. Em geral, desenvolvedores de Nível Médio são ótimos com desenvolvimento em nível de componente.
Júnior (1 a 3 anos, Nível 1) é aquele que entende o básico de programação. Eles têm um diploma em engenharia de software ou ciência da computação ou são autodidatas. Seu código é continuamente revisado. Orientação é dada em relação a algoritmos, manutenibilidade e estrutura.
Autor: Chuck Conway é especialista em engenharia de software e IA Generativa. Conecte-se com ele nas redes sociais: X (@chuckconway) ou visite-o no YouTube.