quarta-feira, 28 de abril de 2010

Fábricas de software

Eu adorei esse texto do Fabio Akita: Fábrica de Software é uma besteira.

Vejam bem, eu não acho que fábricas de software sejam uma besteira. A idéia de se fazer software sob medida para clientes é um excelente modelo de negócios, pois a maioria das empresas não quer investir em um departamento de TI próprio.

O problema, como aponta o Fábio, é a palavra "fábrica." O conceito de linha de produção não se aplica a um trabalho criativo e complexo como o desenvolvimento de software. O modelo de fábrica de software é assim: tem-se um conjunto pequeno de analistas que controla todo o processo criativo e uma horda de micos de realejo que recebem tarefas mastigadas e especificadas detalhadamente e "só" precisam implementá-las. A idéia é reduzir ao máximo os custos, pagando salários altos às poucas cabeças pensantes e baixos aos programadores. Como os salários dos programadores são baixos, as fábricas em geral contratam programadores inexperientes ou aqueles que estão fora do mercado por não conseguirem coisa melhor.

As fábricas em geral usam processos ricos em documentação como o RUP e se orientam pelos modelos de maturidade como CMM e MPS-BR. Elas estão certas em usar esses processos, pois só assim conseguem o grau de controle necessário para garantir que o programador inexperiente vá implementar o que o analista idealizou.

O resultado é que ninguém quer ser programador de fábrica de software, e eu não os culpo. O papel do programador é tal que há poucas oportunidades de crescimento, aperfeiçoamento ou aprendizado. As condições de trabalho são precárias devido ao foco em manter baixos os custos. Os programadores excelentes não querem carregar o piano para os programadores inexperientes, e fogem de lá.

O pior, no entanto, é que o programador é considerado um recurso fungível (essa palavra eu roubei do do excelente livro Slack do Tom DeMarco). O Michaelis define fungível como aquilo que "pode ser substituído por outro da mesma espécie, qualidade e quantidade, como o dinheiro, os cereais, o vinho etc."  Ou seja, se eu tirar uma nota de 20 reais da carteira e te der  em troca de uma nota de 20 reais da sua carteira, não há perda de valor ou qualidade. O dinheiro é um bem fungível - duas notas de mesma denominação tem o mesmo valor.

Ninguém quer ser fungível. É um desrespeito à individualidade de cada um ser tratado como uma peça rapidamente substituível. O pior é que tratar programadores como recursos fungíveis nem funciona, como postula a Lei de Brooks e como já discursaram vários autores, incluindo o Tom DeMarco em Peopleware.

Há alguns anos atrás eu prestei uma consultoria a uma fábrica de software onde o membro mais antigo dentre os 60 programadores estava lá a uma ano e meio, e o tempo médio de permanência de um programador era de 6 meses. Ninguém achava que isso fosse um problema grave, pois havia um fluxo constante de currículos de novos programadores para eles contratarem e substituirem os que saiam. Se na sua empresa se referem a você como "o recurso," corra léguas.

Eu gostei muito da sugestão do Fábio de se trocar o conceito para "atelier de software". Isso me faz pensar em um local onde se misturam artesãos experientes e aprendizes, que trabalham juntos em todas as etapas do processo, dando aos aprendizes a oportunidade de crescerem e se tornarem mestres. Quem sabe isso não dá mais certo?

terça-feira, 27 de abril de 2010

Resultados da pesquisa sobre salários de programadores - parte 3 - experiência

Na última postagem vimos que há uma correlação direta entre escolaridade e salário. Hoje vamos ver que o mesmo não acontece com o tempo de experiência. O gráfico abaixo mostra que os salários estão espalhados por todo o espectro e que ter mais experiência não significa necessariamente ter um salário mais alto.

Por que será? Eu tenho algumas teorias. Primeiro, lembrem-se que a pesquisa era para profissionais que atuam com programação. Acontece que no Brasil é difícil seguir uma carreira longa atuando como programador. Programadores experientes acabam se transformando em "analistas" que não programam, ou então são levados a atuar na área gerencial.

É uma pena. A programação é uma atividade difícil que leva muitos anos para se aprender a fazer bem feito. Quando os programadores estão começando a ficar realmente bons, são obrigados a mudar de carreira pelas "forças de mercado". Eu já entrevistei dezenas de candidatos ao cargo de engenheiro de software e posso afirmar que é raríssimo encontrar um programador no Brasil com mais de 10 anos de experiência de mercado, e quem dirá com 20, 30 ou 40 anos de experiência. Esses profissionais existem em qualquer outra área, mas não na programação.

Olhem o gráfico novamente. A vasta maioria dos pesquisados tem 6 anos ou menos de experiência. É muito pouco para haver uma variação significativa de salário. Dentro dessa faixa de experiência, é mais provável que outras variáveis tenham uma influência muito maior sobre os salários, como a escolaridade, região, tipo de atividade, e assim por diante.

Onde estão os programadores com 20 anos de experiência? Deixem-me fazer uma pesquisa pessoal. No final desse ano completarei 20 anos de formado. Na minha turma formaram-se 25 cientistas da computação. Quantos deles ainda trabalham com programação? Não tenho certeza, pois perdi o contato com muitos deles. De cabeça, só consigo pensar em um: eu. Só que eu não passei esses 20 anos programando, não tenho 20 anos de experiência. Acredito que deva haver pelo menos 2 ou 3 outros na minha turma que ainda programam, mas não mais do que isso. Em outubro haverá minha reunião de turma, e aí saberei ao certo. Prometo contar pra vocês.

E isso tudo quer dizer que então não há esperança para quem quer seguir carreira de programação? Há sim. À medida em que a indústria amadurece, as empresas percebem cada vez mais o valor dos programadores experientes. Na América do Norte já é comum existir planos de carreira puramente técnicos para aqueles que não querem transitar para o ramo gerencial. Aqui também isso é cada vez mais frequente, principalmente em empresas cujo ramo principal de atividade é a informática. Se você gosta de desenvolvimento de software, pode seguir em frente que você só vai ter de parar quando quiser.