terça-feira, 15 de julho de 2014

Afinal de contas, você é júnior, pleno ou sênior? E por quê?

O texto abaixo foi escrito por André Carlucci. Link para o post original: http://www.andrecarlucci.com/dev/afinal-de-contas-voce-e-junior-pleno-ou-senior-e-por-que/

Quem não gostaria de ser “expert” em um assunto? De saber intuitivamente qual é a resposta?
Nestes anos todos de Way2, devo ter entrevistado centenas de pessoas e sempre gostei de fazer a seguinte pergunta:

Afinal de contas, você se considera júnior, pleno ou sênior? E por quê?

Acho que nunca recebi uma resposta com propriedade e o mais comum é encontrar júniors que acham que são sêniors, plenos que são júniors e diversas variações.
Não me leve a mal, nem eu sei direito como responder a essa pergunta e hoje resolvi compartilhar o que penso no intuito de receber algum feedback sobre o assunto.
Uma coisa que se escuta falar muito no mercado é uma definição temporal do assunto:
  • 0 a 2 anos de trabalho: você é júnior
  • 2 a 4 anos: pleno
  • mais de 4: sênior
Nunca gostei dessa classificação. Me desculpe, mas 4 anos não é nada no mundo da TI. Não dá tempo de se atingir a maturidade do que eu acho que seria um sênior, de apanhar um pouco de projetos, de errar o suficiente para aprender e se tornar um expert. E também, como comparar alguém com 4 e alguém com 10 anos experiência em software? Ambos são sêniors e pronto?
Falar em 10 anos de prática me lembra de Anders Ericsson e sua tese de que você precisa de no mínimo 10.000 horas de prática em uma habilidade para dominá-la de verdade. Essa ideia foi popularizada no livro Outliers , de Malcolm Gladwell (que por sinal, recomendo) e você pode encontrar exemplos sobre ela em muito lugares na rede.
Mas será que só tempo praticando importa? Anders fala muito de repetição, mas na minha opinião não é repetição e sim o “tentar em um nível mais difícil”, errar, modificar sua estratégia e aprender o que nos faz evoluir para um novo patamar. Pra mim, alguém que trabalha o mesmo ano 10 vezes tem 1 ano de experiência e não uma década. Com nosso mercado aquecido e muito mais vagas do que desenvolvedores, é comum a pessoa estacionar no aprendizado e fazer mais do mesmo por muito tempo, sem se preocupar em evoluir ou inovar em qualquer direção. Não gostou? Me demite, tem 200 vagas abertas só nesse bairro.
Na Way2 a gente trabalha com times bem pequenos e eficientes. A cultura do fazer sempre mais e buscar o melhor é a regra e alguém acomodado não se encaixaria em um ambiente assim. Cada pessoa aqui dentro é capaz de escrever sozinho um sistema rápido, testável e desacoplado com suporte pra 200K requisições por segundo usando somente o notepad e uma versão otimizada por ele mesmo do MSBuild. Mentira. Mas os caras correm atrás.
Certo, mas se o tempo não me diz tudo sobre a qualidade do profissional, o que nos diz? Em outras palavras, quais são as características importantes que podemos reconhecer em alguém e como podemos agrupá-las em níveis de maturidade?

O modelo Dreyfus

Em 1980 os irmãos Stuart e Hubert Dreyfus escreveram um paper de 18 páginas a respeito de suas pesquisas na Universidade de Berkeley, na Califórnia (você sabe o país). Eles propuseram um modelo de aquisição de habilidades onde o estudante passa por 5 estágios distintos de proficiência em uma habilidade específica: novato, iniciante avançado, competente, proficiente e especialista.
Este modelo não olha para uma pessoa como um todo estando em um estágio. Na realidade, estamos em diferentes estágios dependendo de qual disciplina estamos falando. Você provavelmente é especialista em leitura ou em caminhar: você apenas o faz, não pensa em cada letra lida ou cada passo dado, é tudo muito natural, faz parte de você. Já não podemos dizer a mesma coisa sobre dirigir, principalmente se a placa do seu carro é de São José (ou qualquer outra cidade perto da sua que queira fazer a piada). Em outras palavras, o modelo Dreyfus é uma classificação por habilidade.
Segue então os 5 níveis, de acordo o paper original mencionado acima:

Estágio 1: Novato


Novatos por definição tem pouca ou nenhuma experiência no assunto em questão. Eles estão extremamente preocupados com o sucesso da tarefa e não sabem bem se tudo vai dar certo ou não.
Novatos não necessariamente estão interessados em aprender e sim em completar a tarefa que lhes foi dada. Eles não conseguem ainda improvisar e podem se confundir facilmente se as coisas saírem dos trilhos.
Por outro lado, eles podem suceder se lhes for dado um lista de regras independentes de contexto e nada fora disto aconteça. Em outras palavras:
“Novatos precisam de regras específicas”
Como lidar com novatos? Simples, tenha regras específicas para eles seguirem. Além disso, tenha sempre uma pessoa mais experiente para que eles possam se consultar, pois quando o contexto destas regras mudar por fatores externos, eles terão problemas em adaptar e improvisar o que eles já sabem para resolver o problema.

Estágio 2: Iniciante Avançado 


O próximo passo de um novato é se tornar iniciante avançado. Uma pessoa neste nível já mostra um pouco de segurança para adaptar as regras um pouco e realizar tarefas sem ajuda de outras pessoas.
Iniciantes avançados querem a solução de forma rápida. Você já passou por isso, é aquela sensação de quando você encontra um novo framework e tudo que faz é escanear rapidamente a documentação a procura da função ou linha de código que resolve o problema. Achou? Control+c, alt+tab, control+v. The end. Provavelmente a maioria dos web developers são iniciantes avançados em jQuery.
“Iniciantes avançados querem informação de forma rápida”
Neste nível o desenvolvedor ainda tem dificuldades com troubleshooting, mas já pode resolver alguns problemas usando o que já aprendeu em situações parecidas no passado. Ele não quer entender a visão geral, apenas resolver aquele problema e se você tentar explicar a teoria de forma mais aprofundada, ele provavelmente vai achar aquilo irrelevante.

Estágio 3: Competente


Neste nível desenvolvedor já consegue criar e trabalhar com modelos conceituais da tarefa a ser desenvolvida. Ele já é capaz de descobrir por que as coisas não estão funcionando e enfrentar problemas completamente novos. Apesar de ainda ter dificuldade em determinar onde focar seus esforços, seu trabalho é baseado em planejamento e experiência.
“Competentes sabem fazer troubleshooting”
Desenvolvedores neste nível são normalmente descritos como pessoas com iniciativa e prontos para ajudar. As vezes eles tomam posições de liderança (formal ou não) de seu time de desenvolvimento. É um ótimo estágio para se ter trabalhando em sua empresa, pois eles tendem a ajudar bastante os novatos e não incomodam muito os experts, apesar de pedirem sua ajuda para tarefas complexas demais.

Estágio 4: Proficiente


Proficientes precisam da visão global. Eles vão atrás da informação como um todo até descobrir como tudo funciona por trás das camadas de abstração. Normalmente se frustam com explicações simples demais.
Proficientes conquistaram a característica mais importante do modelo Dreyfus: eles tem a capacidade de analisar e corrigir performances ruins do passado . Eles refletem a respeito de como desempenharam uma tarefa e aperfeiçoam sua estratégia para uma próxima vez. Até este estágio, esta capacidade simplesmente não está disponível.
Da mesma forma, proficientes aprendem com os erros dos outros. Eles leem case studies, estudam por que projetos não deram certo e melhoram, mesmo não tendo participado diretamente do ocorrido.
Outra característica deste estágio é a capacidade de aplicar "máximo", que São verdades fundamentais que pódem ser aplicadas dadas UM determinado contexto. Por exemplo, UM "Maxim" famoso no mundo do extreme programming é: "Teste tudo que você pode quebrar". Para UM novato, isso é UMA receita. O que eu testo? Gets e Sets? Linhas simples de print? Novatos acabam testando Coisa irrelevantes.
Desenvolvedores proficientes sabem o que pode quebrar. Eles tem a experiência e o julgamento para entender que “maxims” são dependentes de contexto. E entender o contexto é a chave para se tornar um expert . Sua vivência os diz o que provavelmente vai ser a próxima coisa a acontecer e caso isso não aconteça, eles sabem o que precisa ser alterado.
Outro grande exemplo de contexto é o uso dos famosos “design partterns”. É muito comum vermos desenvolvedores em estágios anteriores aprenderem e começarem a usar os design patterns em todo lugar que eles podem. Um proficiente sabe exatamente quando, onde faz sentido e qual o ganho em utilizar cada um deles.
“Proficientes refletem com o passado e se aperfeiçoam.”
Proficientes refletem com o passado e se aperfeiçoam e esta é a característica primordial do desenvolvimento ágil. Chegar neste estágio é uma grande vitória pessoal e um proficiente está muito mais para um especialista júnior do que para um competente avançado.

Estágio 5: Especialista


Especialistas são a fonte principal de sabedoria e informação em qualquer campo. Eles são os responsáveis pelo desenvolvimento de melhores e mais eficientes métodos de se fazer as coisas. Eles são os caras que escrevem livros, artigos e continuam movendo a tecnologia pra frente.
Além de poderem aplicar sua sabedoria ao contexto da situação como ninguém, especialistas usam sua intuição mais do que a razão. Eles fazem isso a um ponto que para o resto de nós parece até mágica: “sei lá, me parece certo”.
“Especialistas usam a intuição.”

Intuição, como assim?

Não estou querendo dizer intuição como um sexto sentido ou algum poder supernatural. Um paralelo na área de medicina poderia ser quando um paciente é apresentado a um médico que diz: “hmm… ele me parece ter Síndrome de Klippel-Trenaunay, por favor, faça estes exames” e no final o paciente estava mesmo com aquela doença. É algo como o famoso “House Moment”.
De alguma forma a lista enorme de experiências, memórias e informações dentro do cérebro do médico combinadas e adaptadas ao contexto atual o fizeram chegar ao diagnóstico. Talvez ele nem mesmo saiba de forma consciente como, mas ele foi capaz de prestar atenção nos detalhes corretos e filtrar o irrelevante de uma forma que somente um expert consegue fazer.
É claro que especialistas não são perfeitos, eles podem errar como qualquer outra pessoa e com frequência vão discutir até mesmo com outro especialista da mesma área. Além disso, não necessariamente um expert é um bom professor. Ensinar é uma disciplina como qualquer outra e não há garantia que ele a possua.
Outra coisa é que é muito fácil degradarmos a performance de um especialista: basta fazê-lo seguir regras rígidas. Pode ser até regras que ele mesmo escreveu, não vai dar certo. A verdade é que temos que dar a este nível de profissional a liberdade que ele precisa: deixe-o produzir.

Chegando lá


A primeira coisa que você tem que se perguntar não é como se tornar um expert, mas sim até onde você quer chegar. Ninguém é e nem tem como ser tão avançado em tudo e a maioria das habilidades já retornam o valor que precisamos em seus primeiros níveis. Tudo depende de seu contexto.
Para as disciplinas que queremos dominar, tenha em mente que não há expertise sem experiência . O que podemos fazer é tirar o melhor dessa experiência para acelerar nosso progresso. Aprender é por si só uma habilidade que deve ser trabalhada e o auto-conhecimento é a peça principal para crescermos. Saber o quanto não sabemos sobre algo é o que vai fazer nos preparar para grandes problemas. E passar por eles.
E lembre-se: o modelo dreyfus é só uma ferramenta, não o meio. Entender em que ponto estamos e saber como lidar com cada membro de seu time de acordo com sua maturidade, restrição e habilidade é a chave para equipes fortes e de grande performance.

Nenhum comentário: