30
[Off-Topic] Net Negative Producing Programmer
on March 30, 2009
Durante o Encontro de TI que teve esse sábado, tive a chance de trocar idéias com o Guilherme Chapiewski. Caímos no assunto de Net Negative Producing Programmer (NNPP). Eu li sobre esse termo pela primeira vez no artigo do Jay Fields. Depois dele outros bloggers exploraram mais o assunto como o Kris Kemper. Tem também um paper do G. Gordon Schulmeyer explorando em mais detalhes ainda. De qualquer forma, o resumo da ópera é o seguinte:
“Retirar um elemento tecnicamente ruim de uma equipe pode ser mais produtivo do que adicionar um elemento melhor capacitado.”
Ou seja, descobriu que você tem um programador ruim: demita-o, o mais rápido possível! Não há outra solução. Muitos gerentes consideram que programadores ruins ou medíocres, na pior das hipóteses, são apenas mais lentos do que os programadores bons. Mas essa é uma concepção absurdamente errada: um único programador ruim causa prejuízos irreparáveis a um projeto, ou seja, ele não é apenas lento, ele literalmente dá marcha a ré na equipe. O resultado nem sempre é óbvio. A maioria deles é um acumulador de Dívidas Técnicas. Ou seja, a mantenabilidade e extensibilidade são profundamente comprometidas.
Uma coisa é fato: é muito difícil descobrir um programador ruim, principalmente se você, o gerente, não é um programador também. Pior: você precisa ser um bom programador para conseguir descobrir o ruim. Numa equipe razoavelmente balanceada, com programadores pelo menos pouco acima da média e apenas um ou dois elementos ruins, fica mais fácil separar o joio do trigo: a própria equipe vai começar a expurgar a maçã podre de seu meio (se forem espertos). Isso é uma faca de dois gumes, porque agora se você, no papel do programador, acha que seu colega é o ruim, quem garante que os outros não acham que você é quem é o ruim? Se você é um programador, é bom que você garanta o seu. Eu costumo separar “codificadores” de “desenvolvedores”. Ambos são programadores, mas o primeiro grupo é aquele tipo que bate o cartão na entrada, faz apenas o que mandam, vai embora no mesmo horário todo dia e não se preocupa com mais nada. O segundo grupo são os verdadeiros artistas, os que entendem que software é arte e que, como tal, exige dedicação, estudo constante, simplesmente não existe limites de horário comercial. Como eu costumo exemplificar: é a diferença do pintor de paredes para um Da Vinci.
Um gerente precisa ter muita consciência disso: toda equipe de desenvolvimento de software precisa de Líderes Técnicos Sênior. Dica: procure nas comunidades Open Source, você terá melhores chances de encontrar os melhores programadores lá. Não procure em instituições de ensino e, principalmente, desconfie de qualquer programador que mostre primeiro os certificados que tem. Gostei do que o Kris Kemper mencionou no seu blog de como a ThoughtWorks faz para contratar: o candidato passa por uma bateria de testes. Não basta apenas uma ou duas entrevistas: ele precisa passar por vários sêniors da empresa, precisa demonstrar código que será revisado por outros sêniors, ou seja, precisa realmente merecer estar lá. Precisa demonstrar experiência (seguindo Malcolm Gladwell, em Outliers, eu diria que só se deve contratar programadores pertos de atingir as 10 mil horas de experiência, a menos para cargos com tarefas menos importantes), precisa demonstrar desembaraço e excelente capacidade de comunicação, precisa mostrar código, e código bem feito, código que não passaria vergonha na frente de um Martin Fowler.
Agora, eu já vi situações muito ruins, onde uma equipe inteira tem apenas NNPPs. Nesses casos, não há o que fazer: dissolva a equipe inteira. Tome muito cuidado para não cair na tentação do Custo Perdido. Muitos pensam assim: “mas eu já investi tanto tempo e recursos nessa equipe, seria um desperdício jogar tudo isso fora.” Nada disso, ruim é mantê-los criando mais e mais dívida técnica que depois é você quem terá que arcar. Custa mais barato dissolver a equipe, formar uma nova melhor e recomeçar o projeto do zero se for preciso. Você vai parar por 6 meses, mas pelo menos não vai falir daqui 2 anos.
Outra coisa que todo gerente sempre erra: resultado imediato vs. resultado de longo prazo. Isso é uma constante em todas as empresas que já passei: o gerente adora o programador cowboy, aquele sujeito que resolve todos os problemas que ele joga. Todos os cowboys são adeptos do POG, ou a “Programação Orientada a Gambiarra”. Seria engraçado se não fosse trágico: isso não só existe, como é praticamente a norma na maioria das equipes de software. Eu arriscaria dizer que pelo menos 4 em cada 5 programadores faz POG diariamente.
Por isso, se você é Gerente, suspeite de resultados mágicos, comportamentos inesperados do software, erros constantes que são corrigidos instantaneamente. Sabe aquele comportamento? Hoje estourou um problema, você manda um e-mail para a equipe, ela responde na hora seguinte dizendo “agora está tudo ok”. E isso se repete todos os dias. É um sinal fortíssimo de POG. Programadores cowboy são “codificadores” que acham que são “desenvolvedores”, ou seja, um pintor de paredes insano que acha que é Van Gogh. Esse é o tipo mais perigoso porque o pintor de parede sabe das suas limitações e nunca vai dizer que é um pintor de quadros, mas o cowboy não, ele realmente acredita que é o Van Gogh! E o pior, paradoxalmente, os gerentes os adoram porque eles resolvem todos os problemas!
Agora vem a parte chocante: os gerentes adoram os cowboys porque eles resolvem todos os problemas que eles mesmos criaram! Ou seja, ainda não caiu a ficha que o mérito todo atribuído ao cowboy é gerado pelos problemas que ele mesmo criou! Se você é desse tipo de gerente e se agora você entendeu que tem cowboys, demita-os também. Existe até aquele dilema: “mas eu não posso mandar ele embora, só ele sabe como o sistema funciona!” Exatamente, esse é um motivo até ainda mais forte para mandá-lo embora: ele é, literalmente, um grande Single Point of Failure (SPOF). Desenvolvedores de verdade não escondem as coisas, não mascaram resultados, não enrolam o processo. Quer um sintoma? Você tem algum software cujo código-fonte reside apenas na máquina do seu programador? Cuidado: você acabou de encontrar um cowboy.
Outro motivador: quando você troca um programador ruim por outro realmente bom, não está trocando 6 por meia dúzia, está efetivamente trocando 1 por 10, como já dizia o bom e velho Frederick Brooks em The Mythical Man Month. Há 30 anos já sabemos que um bom programador pode ser 10 vezes melhor (não apenas mais rápido, mas um programador que faz código de qualidade, o que torna fácil sua manutenção, sua extensão e inclusive o repasse de conhecimento a outros programadores).
E nos dias de hoje, existem vários sintomas que denunciam cowboys que devem ser demitidos: seu programador torce o nariz quando se menciona Pair Programming ? Ele desdenha Propriedade Coletiva de Código e prefere manter alguns códigos ainda escondidos? Ele acha que teste é algo opcional e que pode fazer depois? Pior, ele defende o uso de práticas ou tecnologias sem saber explicar, tecnicamente, por que está usando? Tudo isso é sintoma. Se seu programador tem pelo menos 1 deles, já é motivo mais do que suficiente para deixar os papéis da demissão preparados e a começar a entrevistar novos candidatos.
Aliás, parece que estou brincando quando falo em “demitir”, mas estou falando sério. Outra coisa que é muito importante para uma empresa é a rotatividade das pessoas. Quando as mesmas pessoas ficam juntas por períodos muito longos de tempo (anos), eles se acostumam uns com os outros e passam a fazer vistas grossas com mais frequência, drasticamente derrubando a qualidade do serviço. Uma meta que deveria ser adotada anualmente é de renovar, uns 10% a 20% do pessoal todo ano! Mantenha os verdadeiros desenvolvedores, mas demita os NNPPs, a menos, claro, que você tenha dinheiro para jogar fora.
Update 30/03: Esqueci de mencionar mais algumas coisas. Respondendo até a algumas coisas nos comentários. Como eu já havia falado na minha apresentação do Matando a Média o mercado como um todo balisa todo mundo por baixo. Por isso um bom programador, mesmo sendo até 10 vezes melhor que um ruim, nunca ganha 10 vezes mais. Às vezes a diferença mal chega a 10%, o que realmente é triste. Claro que quando eu digo “demita”, é sério, mas é uma provocação. Dadas as leis brasileiras que protegem o profissional ruim, isso realmente fica difícil. Portanto, o pragmático seria: demita sempre que puder e, mais importante, contrate com muito esmero. É sempre melhor demorar mais e contratar alguém realmente bom do que assumir que alguém pode ter “potencial” apenas por credencial.
Uma coisa importante: Não estou falando contra os novatos, júniores e recém-formados, não confundam. Existem muitos garotos com muito potencial, especialmente aqueles que sabem que estão em início de carreira e querem aprender, se esforçam para aprender, mudam de rota quando recebem feedback, sabem pelo menos começar a argumentar suas posições. Um cowboy pode ser tanto um recém-formado quanto alguém com 20 anos de carreira, não importa. Os bons júniores devem ser bem cuidados e receber o coaching adequado para que não peguem o caminho dos cowboys.
Outra coisa: “quero ser um bom programador, mas meu chefe me pressiona para entregar tudo antes, inclusive incentiva a fazer POG.” Bom, vamos lá: em aviação existe uma coisa chamada Catch-22. Algumas décadas atrás muitos aviões caíram porque o piloto tomava decisões erradas e o co-piloto, mesmo sabendo disso, precisava ficar calado por causa da hierarquia (alguém de ranking menor não deve contrariar alguém de ranking maior). Em sabendo disso o mundo da aviação evoluiu e agora existe um procedimento chamado PACE (Probing, Alerting, Challenging, and Emergency Warning). Ou seja, se o co-piloto sabe que o piloto está errado, existe um procedimento para ele avaliar a situação, alertar o piloto, se ele não entender desafiá-lo e se ele ainda não entender, o co-piloto deve avisar a torre de comando e tomar o controle da aeronave. Isso diminuiu drasticamente os acidentes aéreos. Um bom programador deve dizer NÃO a um chefe que está empurrando a equipe precipício abaixo. Se a empresa pune esse tipo de iniciativa, então essa empresa não é boa para você. Não estou falando da criancice de bypassar o chefe e fazer fofoca ao chefe do chefe, mas sim de encará-lo homem a homem e discutir o problema realisticamente. Veja um trecho do documento do PACE :
For the actual announcement of change of command on the flight deck, the Co-pilot could use a phrase such as “Captain (Jones), I must take over control of the airplane. (Jerry), take your hands off the controls. NOW!” This use of a personal first name or a nickname can very effective to break the perceptual narrowing of the Captain. A third crew member, if present, can use terminology such as, “Captain (Jones), you must give control of the airplane to (Barry) immediately.”
Update: 31/03 Acho que vale a pena eu explorar um pouco mais o conceito de “Cowboy” já que parece que ele pode ser mal interpretado. Novamente, Cowboy não é o novato ganhando experiência, ou mesmo o sênior aprendendo coisas novas. Esses são os que se deve investir. O problema são os Lemmings, os suicidas, aqueles que são ruins, todos sabem que são ruins, todos avisam que estão indo em direção a um precipício mas o desgraçado colocou na cabeça que ou não pode mudar, ou não quer mudar ou não sabe como mudar e por isso não vai mudar. Esse é o cara que continua indo precipício abaixo e arrasta todos ao redor junto com ele. É exatamente o NNPP: um cara de produtividade negativa, que causa prejuízos. Esse tipo, depois de avisar uma vez, duas vezes, não adianta mais, tem que mandar embora, porque aí é ou ele ou você.





*melhor previnir do que remediar*
A idéia de demitir é muito séria, envolvem outras variáveis, e se você ganhar dinheiro em produtividade por um lado, perde por outro com uma montanha de processos e de advogados sangue-sugas querendo "os deles". Além da má fama no mercado: "Não vou trabalhar alí, eles demitem os funcionários com frequência." (por um lado pode ser até bom, você espanta quem deve ser espantado, OU NÃO)
Agora, quando se trata de cowboys, só posso concordar com tudo o que disse.
Gostei do "spec" do programador cowboy. Bem completo!
1) Um bom programador é dez vezes mais produtivo que um ruim; mas o maior valor-hora do mercado não é dez vezes maior que o pior valor-hora. Consequência: a baixa qualificação é vantajosa para o programador, ou seja, ganha-se muito por pouco esforço. Quem quiser ter bons programadores, vai ter que romper essa lógica e pagar um prêmio a mais. Aí é que tá: haverá gerente disposto a isso?
2) A noção de bom programador é difícil de resolver. Imagine um recém-formado, alguém com menos de um ano de experiência. Seria ele um NNPP? Pra mim, os que tem potencial, mesmo novato, não é um NNPP! Mas o mercado pode não enxergar isso e considerar os "bons" aqueles que tem um maior número de anos corridos como experiência, independente da qualidade. Isso seria trágico se materializasse.
Esses tais "líderes" que citou nem passam perto de um Jack Welch e uma avaliação desse tipo pode ter muitas falhas.
Imagine que, para chegar onde está, um programador precisa primeiro aprender bem a programar. Não significa que ele deve se matar ou ficar fazendo horas e horas a mais num emprego.
Existem sim programadores esforçados e considerá-los cowboys nem sempre é uma avaliação clara de liderança.
Lembre-se que para chegar onde está, um dia você também não programou bem. Uma nova tecnologia, quando aprendemos, também somos assim. Muita gente é assim, avaliar uma pessoa é muito relativo também.
Imagine um cenário onde você com muita experiência avalia outra pessoa com baixa experiência. Logo, você pode achar que ela é ruim. Um líder sabe delegar.
Outra situação é o programador vir de uma equipe ruim, ter aprendido a programar neste meio. Entretanto, com o tempo, se adapta ao meio mais correto, por assim dizer - também acho relativo, paradigmas nascem e morrem.
E tem mais, ninguém está livre da demissão. Insatisfação com o emprego é com qualquer pessoa e com o tempo, qualquer um se acomoda, principalmente se tem seus salários estacionados.
Olhar as coisas por um modo "programador" não é o mesmo que olhar por um modo "gerencial".
Antes de o gerente demitir seu funcionário por que ele é um "cowboy", talvez ele deva analisar antes se o programador não é assim porque o próprio gerente o obriga a ser assim.
Concordo com o amigo acima, imagine alguém recém-formado com 1 ano de experiência ele é um NNPP ? Pode ser uma pessoa que quer espaço no mercado de trabalho e não conhece tanto !!!
Contrate estrelas e pague salário de estrelas, se a empresa seguir essa filosofia concordo, agora contrate estrelas e pague uma merda de salário é triste.
e olha, as pessoas que vocês citam como: sem experiencia, acabou de sair da faculdade mas tem potencial e blablabla
para esses casos, eu considero que é para isso que existem estágiarios, afinal, mesmo que isso não exista de fato na informática, o estágio é um ambiente para se aprender, mas estamos falando aqui de profissionais qualificados.
e outra coisa, como o Akita também citou, cursos são besteiras, programadores bons de verdade são os que realmente gostam e estudam por conta própria, eles não precisam de certificações ou graduações para ensina-los a programar
para os estagiarios é facil ver quem tem potencial e quem não tem, para bons programadores é facil notar quando um estágiario se esforca em aprender e tentar programar melhor, ou quando essa se tornando um NNPP
e concordemos, demitir um estagiário é bem facil que demitir um CLT
quanto a parte que citaram sobre o chefe estar fazendo pressao pra fazer as coisas rapido, nesse caso eu acho que vai o profissionalismo de cada um, se eu considero que a "solução rápida" do meu chefe vai trazer problemas a longo prazo, eu converso com ele e mostro todas as consequencias daquilo (e sempre falo no termo dinheiro, ajuda bastante a convercer), e normalmente ele aceita meus argumentos e damos um jeito de resolver no minimo com um meio termo
Excelente post, um dos melhores que ví em seu blog até agora. Eu acrescentaria, porém, uma coisa: o programador que deixa ser levado por um gerenciamento ruim, ou seja, que compromete seu trabalho por que alguém mandou ele ser mais rápido, deveria ser limado também. A discussão é longa, tem a questão to time-to-market, todos temos contas a pagar e tudo mais.
Porém qualquer um pode cometer um erro, mas "ligar o foda-se" e fazer as coisas de qualquer jeito por que o chefe está cobrando não é sinal de profissionalismo.
Outro ponto importante: a rotatividade não deve ser apenas para a empresa. Se você está a 6, 7 anos na mesma empresa fazendo a mesma coisa do mesmo jeito será que ainda é relevante? Será que, ao ser demitido, conseguirá recolocar-se?
Nossa área exige reciclagem constante. E isso vale tanto pra empresa quanto para o profissional.
@Danilo, é a mesma coisa que disse ao @Leonardo. O problema não é ele "programar mal por acidente", como seria nos casos que você menciona. É, como eu disse, ele realmente "acreditar" que é bom, e não aceitar feedback da equipe interna, das equipes externas, dos líderes. Ou seja, o cara é um Lemming, atira no próprio pé, atira no pé dos outros e tem certeza que está certo. Como você disse, obviamente eu já fiz muito POG também, Todo programador necessariamente já fez, mas o ruim é o cowboy não querer evoluir, não querer treinar, não querer tentar fazer diferente, bater o pé em fazer do jeito errado, ou seja, o cara que efetivamente é um atraso. Por outro lado existem os que realmente não tem talento para a área. É triste, mas existem os casos dos bem intencionados, mas que simplemente por mais que tentem, por mais que se esforcem, eles não nasceram para ser programadores. E aí alguns cometem o erro de colocá-los como analistas ou gerentes, esse é o ponto onde você estragou o cara. Não faça isso.
Quem quer desenvolver os músculos não fica levantado os mesmo pesos, sempre vai aumentado os kilos.
É a mesma coisa. Programação comercial para WEB sucks! Só pelo dinheiro.
Um bom programador não se cria sem ter uma área: compiladores,
computação gráfica, sistemas operacionais, AI, linguagem natural, sistemas distribuídos e etc. Ler papers e tentar implementar
algoritmos sofisticados... mesmo que não consiga!
Hoje sou um programador cowboy suicida assumido, faço código que as pessoas não entendem e quase sem testes. Pra que melhorar? Um dia arrumo um emprego público e não preciso mais me preocupar.
Muito bom mesmo! O que tenho notado é que muitas empresas -principalmente no mercado em que me encontro- estão buscando montar equipes de code-monkeys (ou "cowboys") porque simplesmente eles não batem de frente ou questionam com seus "superiores" quando deveriam.
Nessas empresas, os desenvolvedores que questionam são considerados as maçãs podres e possivelmente estariam contaminando os demais.
Enfim, excelente post! Parabéns!
Finalizando, eu acho que esse trecho do blog tem que ser melhor definido, existe alguns que gostam de devorar código e outros menos !! Não vejo nenhum problema em trabalhar só em horário comercial, desde que neste horario seja feito um bom trabalho.
Acredite que a chave é gostar do que faz, ser curioso e ter um bom relacionamento interpessoal. Ah! e claro.. Não se acomodar jamais!
PS. Show de bola o termos "Programador Cowboy"! Já vou "zuar" uma galera por aqui! ahauahuh
[]'s
LeoLuz
Estava falando semana passada com o pessoal aqui onde trabalho que precisamos contratar os melhores e já comecei a rever o processo de teste prático.
gosto muito do seu blog e te acho um verdadeiro formador de opiniões,por isso temos que ter cuidado com algumas interpretações:
..."Ambos são programadores, mas o primeiro grupo é aquele tipo que bate o cartão na entrada, faz apenas o que mandam, vai embora no mesmo horário todo dia e não se preocupa com mais nada. O segundo grupo são os verdadeiros artistas, os que entendem que software é arte e que, como tal, exige dedicação, estudo constante, simplesmente não existe limites de horário comercial."
Esse trecho pode representar para alguns, que se o cara não fica até depois do horário com frequencia, não é um "cara bom" e deve ser demitido.
Acredito que horas-extras são coisas que devem ser feitas somente em situações extremas, pois se a equipe é composta por bons desenvolvedores e com uma boa gerencia, porque eles vão fazer hora extra? O projeto esta atrasando? Muitos bugs? Os colegas estão faltando muito e atrasam as entregas? Tudo isso deve ser verificado antes de privar bons profissionais de terem uma vida pessoal.
Outro ponto é, que de fato, somos seres humanos e temos uma vida e não um trabalho. Acredito que o Akita tenha este ponto de vista "super radical", pois é de costume dos orientais viver para trabalhar e não trabalhar para viver. Alguns países de primeiro mundo possuem a carga horária bem menor que outros e o nível de qualidade de vida é altíssimo. Como isso não é realidade aqui em nosso país, faço minhas palavras do meu parceiro Cowboy, "No final o que importa é a grana na minha conta".
Só fazendo um off-topic sobre os estagiários.
Há algum tempo temos visto que as empresas se aproveitaram dessa mamata e geralmente contratam estagiários, não para capacitar um iniciante no mercado, e sim, para economizar e aproveitar algum conhecimento do "pobre coitado" e depois que já usufruiu do conhecimento e não acrescentou nada, manda o cara embora e contrata outro, e outro....e nunca um profissional mesmo que sabe o que está fazendo.
Esta mentalidade ainda existe em algumas empresas pequenas e médias.
parabéns, pena que muitos gerentes não confiam em blogs e acham que sabem tudo
abraço
Agora, sabe uma coisa que às vezes também acontece? Há equipes que ao adotarem com uma abordagem "ágil", onde não existe "eu", mas sim, "o time", acabam encobrindo os cowboys ao invés de expurga-los. Porque cada um não garante o seu, mas procura garantir o do time.
O X da abordagem ágil, de não existir "eu", e sim, "time", é excelente, quando não se tem cowboys no time, todo mundo é realmente bom e comprometido, ou quando o time é maduro o suficiente para expurgar o cowboy. Do contrário, é bem perigoso. A sujeira pode ser varrida pra debaixo do tapete.
Já bati uns papos com o Alexandre Magno a respeito e o que ele me disse é que, sim, o time maduro, naturalmente, tem que expurgar o membro que não quer nada com nada, que não produz, que isso e aquilo, ..., enfim, botar o cowboy pra correr. Mas, nem sempre isso acontece, porque ninguém quer delatar o meliante, então, se ele não tiver vergonha na cara - pra falar o bom português -, ele vai ficando e se alimentando da colheita que os outros realmente trabalharam pra produzir.
Algo a acrescentar sobre isso?
Abraço!
Maravilhoso post... só faltou você mencionar que a relação: ("demanda" / "bons desenvolvedores") tende ao infinito..., ou seja, demanda é muito muito grande, enquanto "bons desenvolvedores é muito muito pequeno"!
Como resolver essa indeterminação??? ;)
Abraçoooo,
Luiz.
oque ele quiz dizer com isso, é que desenvolvedores de qualidade são aqueles que realmente gostam do que fazem, acho que um exemplo mais simples poderia ser: o cada vai na empresa, chega de 8 da manha, sai de 6 da noite, chega em casa, e ainda vai gastar umas 2 horas trabalhando num projeto open-source ou estudando algo no área.
esse é a mais pura verdade, falta de dedicação, como foi citado no exemplo dos esportistas, os caras tem vida social como todo mundo, mas eles gastam bastante tempo procurando melhorar, porque se eles pararem por um momento eles sao cortados. é o mesmo com informatica, mas esses "cortes" não existem... esse é o problema, as pessoas em geral são extremamente acomodadas.
se as pessoas lessem ao menos 1 livro tecnico por mes, com certeza a qualidade já subiria muito, mas não, conheco varios q passam 1 ano para ler 1 livro tecnico, oque é triste, pois temos muita gente que faz software totalmente suck...
se fossem aplicadas coisas + rígidas, demissões de verdade por falta de qualidade, com certeza teríamos menos pessoas na área, mas em compensação teriamos muito mais pessoas de qualidade, oque sinceramente é bastante prefirivel
1 - Qual o nível de experiência de um gerente para ter a conclusão que uma pessoa é esforçada mas não possui talento?
2 - Se o "experiente" líder conhece programação, quanto ele estaria avaliando o quanto de tempo levou para ser menos "POG"?
Tudo é extremamente relativo, para mim, ainda não há um método eficaz de avaliar as pessoas. Um cara que se acha bom perante duzias de medianos seria ruim perto de duzias de caras bons.
E ai? Em que cenário o cara seria avaliado? Qual o tempo seria necessário para dizer que um desenvolvedor não se encaixa no meio? Quantos projetos o líder teria que ter passado para saber que ele realmente tem a capacidade de julgar com clareza?
Essas pseudo-educações fazem os cowboys acreditarem que realmente sabem alguma coisa.
Minha opinião é que devemos prestar atenção em nossa equipe, não como um numero ou estatística, mas como um grupo de pessoas tentando alcançar um objetivo, muita compreensão se faz necessário no dia a dia, obviamente a equipe deve ser dinamica e entusiasta para resolver problemas. E os cowboys sim devem ser exterminados.
Somente não concordo com uma renovação de pessoal de 10 a 20% anual, creio que o melhor seja um acompanhamento por parte dos responsáveis no que diz respeito a desempenho técnico e pessoal da equipe, se você tem um grupo de pessoas que trabalha muito bem a anos sem nenhum problema de relacionamento e que se preocupa em renovação, não hà por que renovalos.
Existem algumas metodologias como SCRUM e Extreme Programming que ajudam a melhorar o desenpenho da equipe e ajudam a retirar os POGERS de plantão.
Vale lembrar que desenvolvedores experientes também passaram por um processo de aprendizado que precisou de compreensão por parte de alguem em alguma empresa para crescer.
Já ouviram falar de "a única forma de nunca trabalhar na vida é fazer o que você gosta"? Essa é a diferença. Não estou considerando que estou desperdiçando meu tempo livre. Do contrário, nós fazemos isso porque gostamos. E ainda tem tempo pro happy hour :-) Estamos investindo em nós mesmos.
Sabe quanto leva para se tornar "bom" em qualquer coisa? Não importa o ofício, precisa de 10 mil horas de experiência. Precisa ralar uns bons 10 anos antes de começar a se considerar "bom" em alguma coisa. Eu, por exemplo, estou completando 20 anos desde que fiz meu primeiro código, e me considero um dos piores programadores frente a caras como um Yehuda Katz, um Guido Van Rossum, um Miguel De Icaza, etc. É a busca pela perfeição que motiva o trabalho e não o salário: a compensação vem como consequência, não como objetivo.
Cada um busca dentro de si o profissional que pretende ser. Geralmente esse profissional esta ligado com a vida que a pessoa pretende levar. Alguns exemplos (mesmo generalizando (sem dever)):
Se ela é do tipo baladeira "porra loca". Ela vai se esforçar para não se esforçar muito. Ganhar o máximo com o mínimo.
Se o profissional é do tipo "pé no chão", ele vai sempre querer dar o seu melhor para manter seu emprego/salario e garantir sua vida/futuro.
Se o cara é um workaholic, ele só vai pensar em se manter no trabalho e fazer tudo que deve (nem sempre da melhor forma possivel).
Se o cara é apaixonado pelo que faz, ele não se importa com isso. Simplesmente tudo está como deveria estar, trabalhar/aprender/descansar, tudo acaba sendo divertido. (não que os outros nao possam ter uma porcentagem desse também)
Nenhuma dessas pessoas (ao meu ver) estão erradas. Cada uma tem uma visão de vida, um forma de buscar a "felicidade". Nesse ponto ninguém é igual a ninguém.
Esse ano completo uns 7 anos de programação. Mas que eu realmente conto, é de uns 3 anos para cá (na verdade deveria resetar esse contador toda semana, mas enfim).
Confesso que sou do tipo que bate ponto no horário estipulado de entrada e saída. Mas nunca deixo de fazer hora extra quando preciso. Quando tem algum projeto para ser entregue, alguma bomba de ultima hora, enfim. Sempre estou lá se necessário. Mas não é algo que me deixa feliz.
Concordo com sua visão empreendedora, mas acho que você deveria frizar o fato que, para uma empresa poder fazer isso e cobrar esse tipo de atitude dos seus funcionários, ela deve estar fazendo por merecer também. Ninguém se sente bem em ser o melhor mas ganhar e ser tratado como qualquer um. Mesmo parecendo coisa de estrelinha.
MEIO-OFF TOPIC: Discordo de apenas um comentário: Quando o "wilker " diz que o profissional deveria ler um livro técnico por mês. Eu acho que um bom profissional deveria ler pelo menos 1 livro NÃO-técnico por mês.
Desculpa pelo comentário gigante ^^
Uma questão: em boa parte dos casos, quem lidera equipes de desenvolvimento tem um papel de gerente, e várias vezes não acompanha de perto o código produzido pela equipe. Acaba-se acompanhando métricas, resultados e comportamento, mas dificilmente acompanha-se o código em si. Vi isso acontecer como programador, vejo isso acontecer como gerente, vejo isso com várias outras pessoas/equipes em diferentes empresas e projetos com perfis diferentes. Como o gerente deveria se comportar nestes casos?
Tentar extrair essa informação de qualidade dos programadores dos proprios membros da equipe é uma saída (embora possa estar sujeito a uma certa subjetividade do relacionamento entre os programadores)?
Eu penso que alertar o gerente pode ser um risco, caso a maçã seja muito amigo dele, isso pode gerar conflitos contra você mesmo, mas no outro caso, o gerente pode nunca perceber o cowboy e o time acaba pagando por isso, o que acha?
Excelente post!, abraços!
90% dos comentarios e o proprio post em si, tem algo sim que pode ser aplicado e utilizado no dia-a-dia da Empresa.
Agora só depende de cada uma adequar a realidade da empresa, pois oque se aplica em A com certeza não vai se aplicar em X.
Isso não receita de bolo, no meu ponto de vista é uma base para avaliar os pontos fortes e fracos da sua equipe, e agir dentro da sua realidade, porque se fosse um receita todas as equipes eram perfeitas.
Abração a todos.
"Como eu imaginava, surgiu o "a única forma de eu ser um tal bom programador, seria fazer horas extras e trabalhar no horário que eu deveria estar descansando, fazendo social, me divertindo". Eu tenho uma teoria sobre isso: se você pensa dessa forma, é porque está na profissão errada"
Não foi isso que disse. Por exemplo, passar um sábado estudando GOBA (uma nova linguagem qualquer) é bem diferente de fazer hora-extra todo dia.
Pensei que tinha entendido errado, mas parece que foi isso mesmo que você quis falar.
Vejo caras extremamente técnicos que numa reunião com o cliente são desastrosos, levantando questões técnicas desnecessárias e afins. Caras que são horríveis para fazer um Pair Programming, por causa de sua arrogância e falta de bom senso.
Acho que para um carinha ser um bom profissional (NÃO DISSE PROGRAMADOR) precisa ter experiência de vida, precisa saber conversar, precisa ser esperto, até contar uma piada de vez quando, uma parte enorme de erros num projeto são por má elicitação de requisitos, onde um "programador" excelente não pode impedir.
"Eu não quero sangue da minha equipe, eu quero resultado"
E preciso ter cuidado com a idéia de fazer hora extra. Tem muita gente que fica depois do horário só para parecer comprometido com o projeto. Se você não dá conta do recado no período contratado, de duas uma : Ou você é incompetente ou estão te explorando. Não deixem que te explorem nunca.
E se você tiver filhos, vá pra casa brincar com eles, a menos que suas prioridades passem longe de sua família.
- Sr. 01, você acha que ninguém sabe que você pede arrego no koders.com. Você acha que ninguém sabe que você não faz testes! Pede pra sai! (tapa na cara) Pede pra sai! (tapa na cara e gospe no 02).
- Desisto capitão (já chorando).
- O 01 desistiu. EEEEEEEEEEEEEeeeeeeeeeeeeehhhhhhhhh
Achei bem interessante a sua abordagem sobre a qualidade dos profissionais da nossa área e concordo com tudo que você disse com relação a programadores que gostam de pog e cowboys.
Eu só tenho como resalva a maneira de conduzir o problema. Acredito que o profissional pode ter uma segunda chance, pode acontecer uma conversa franca para expor o problema e as consequências que isso vai gerar. A partir dai, a permanência do mesmo dependerá de como ele vai reagir a realidade exposta.
Acredito muito que as pessoas podem receber um feedback e mudar de atitude, crescer. Falo isso porque participei de algumas equipes com pessoas extremamente deficientes em vários (em alguns casos todos) pontos que você citou. Após algumas explanações do problema e coaching em alguns pontos específicos, essas pessoas evoluiram muito, principalmente na postura, que ao meu ver é o mais importante). Confesso que convencer as pessoas de algumas coisas foi extremamente difícil, mas valeu muito a pena.
Um grande abraço,
Emerson Macedo
http://codificando.com
Não leio 1 por mês, mas 1 livro técnico a cada 3 meses com certeza... amo a programação apesar de as vezes parecer que não vou aprender determinados conceitos ou siglas... mas ao ler o artigo (o que me fez refletir) pude ver que apenas sou ancioso por aprender tudo ao mesmo tempo e por sempre achar que estou abaixo dos demais. Não tenho a paciência de correr atrás de alguma coisa, somente quando realmente precisar... quero primeiro abranger conhecimento de toda uma tecnologia antes de começar um projeto com ela... aí sim, o meu tempo de experiência não me permite isso... Vou consertar esse meu erro, pois se continuar assim, vou acabar querendo abraçar o mundo e vou ficar sem braços...Calma e MUITA BUNDA NA CADEIRA PROGRAMANDO...
Concordo com o Akita sobre a arte da Programação... o Artista não tem horário... o pintor de parede sim... o atissta não corre atrás do dinheiro, sente-se feliz em se somente ele apreciar a arte, não se gaba por uma bela obra, apenas a aprecia e sente feliz em ver os outros também apreciar... Não sei se vocês se sentiram assim... mas quando meu primeiro Programa rodou bonitinhom, fiquei muito feliz com isso, quem usa esse programa até hoje sou eu e nunca mostrei ele pra ninguém... Tudo bem que tem muita POG (quem não fez uma vez atire a primeira pedra). huahauahauahuaauha
Resumindo: Leitura boa o seu tópico, acredito que me ajudou a mudar de direção em minha carreira de programador... um degrau de cada vez...
Falows ;)
Uma boa continuação deste assunto poderia vir a ser um novo post intitulado "Como não ser um cowboy no faroeste do desenvolvimento de TI" ...rs
Ou ainda "Como matar o cowboy que há dentro de você"
Acho que alguns cowboys podem ficar meio decepcionados em saber que a média deverá ser exterminada, porque nem todos conseguirão ter condições favoráveis ou desenvolver brilhantismo sempre quando for necessário ou requerido.
Sempre haverá os momentos de aprendizado e adaptação e a grande maioria é mesmo normal. Brilhantismo e arte estão com a "nata", e a nata sempre representa uma fração pequena da quantidade do leite. Isto em desenvolvimento de TI em em outra qualquer profissão.
Claro que eu acredito que todos devem ao menos se esforçar para conseguirem fazer o seu melhor no trabalho e para as outras pessoas.
[]'s
Ainda me impressiono com pessoas lendo no pé da letra sem pensar que na verdade para determinar se um programador é NNPP ou um cowboy pode ser um processo mais simples do que: "esse cara é um NNPP ou um cowboy e não tem conserto nisso!!!". Como falado, o Gerente de Projeto não tem e ao contrário do que alguns gerente tentam, não DEVEM ter uma visão técnica suficiente para determinar na hora quem é NNPP ou cowboy.
Acho que falta muito no brasil o cargo de líder técnico. Ou que esses líderes técnicos não sabem ainda que achar NNPP e cowboy e tentar tirar-los é responsabilidade dele. Isso é no caso de abordagem clássico de genericamente de projeto.
Compartilho o medo de alguns por ter vivido isso pessoalmente: subir a informação para o gerente de projeto pode prejudicar.O gerente de projeto pode tirar conclusão que você se torna um risco, não perceber que na verdade você apenas que o bem do projeto.
Já vi gerente de projetos reclamar do serviço de estagiários que foram jogados no projeto sem treinamento e sem acompanhamento por um programador sênior.
Ja ouvi reclamação de gerente de projeto falando: está demorando demais para corrigir. E eu de responder: lógico deixou um cowboy fazer o que queria, agora tenho que entender aquele negocio nojento e ainda mexer nos POGs que fez.
E do gerente responder: Mas o cara sempre entregou o que pedi no prazo.
Os poucos cowboy que encontrei geralmente são adulados pelos estagiários e programadores junior. Eles mostrando um POG para eles e eu de escutar dos caras: viu o que o cara fez? da hora!!! (nesse exemplo, o cowboy chegou a colocar um arquivo de 300K binario... pdf!!... na sessão... serializable é overrated...)
Reforçando que o NNPP e o cowboy são pessoas com mente fechadas... que não querem mudar, aprender, crescer...
Mas acho que a maioria de nós estamos responsável pela proliferação de NNPP e de cowboy... E isso é uma característica brasileira: fala muito, mas poucas vezes faz alguma coisa ao respeito...
A maioria que leu gostou? concorda?
Mas vai mudar alguma coisa no seu dia dia? Provavelmente não, porque além de ter medo de encarar o chefe, você quase tem certeza que se encarar, vai ficar sozinho nessa...
É responsabilidade de cada um de nós de acabar com os NNPP e os cowboy da vida...
Para acabar queria falar de arte... Li alguns que descordam que programar é arte...
o Desenvolvedor é um artista sim, no sentido que quando ele faz uma linha de código, ele deve pensar na obra inteira! Como essa pequena linha de código pode influenciar em bem ou mal com o restou da obra, como se encaixa na obra. Ele deve constantemente pensar em idéias novas, caminhos novos para melhorar a obra de arte... e apagar e refazer de novo se achar algo melhor.
Codificar é simples, todo mundo pode fazer...
Porém, algumas pessoas têm responsabilidades depois do trabalho, muitos fazem cursos, faculdade, pós-graduação e até mesmo tem mulher e filhos que merecem atenção.
Criam ARTE como os demais, mas não podem ocupar 100% do seu tempo com isso.
Acredito que a arte só aparece se o artista estiver descansado, com a cabeça tranqüila e principalmente feliz com o seu trabalho e a sua vida.
Excelentes cantores terminaram sua carreira pela metade, por dedicar 100% do tempo com sua profissão, esquecendo completamente da sua vida pessoal, isso fez com que muitos entrassem em depressão, desistindo de cantar para sempre ou até mesmo desistindo da vida.
Já vi muitos Seniors trabalhando as 21:00 da noite criando pogs horríveis por estarem exaustos, mas continuarem trabalhando como loucos, acreditando que estão ajudando, quando na verdade estão criando milhões de erros que vão demorar até 1 semana para serem arrumados por completo.
Portanto, um excelente desenvolvedor deve estar com a cabeça no lugar quando está criando uma obra prima (descansado).
Desenvolvedor: pessoa que faz arte, mas não leva chicotada ou é escravizado em um projeto, essa pessoa pode trabalhar suas 8 horas e a noite fazer um curso ou ler um livro que melhore o seu desempenho na empresa, ou até mesmo cuidar da sua família, o que ajuda muito no estado espiritual do ser humano, dessa forma ele vai criar uma obra prima por estar bem consigo mesmo.
Lembrando que todos os bons desenvolvedores evoluem com criticas, boas ou ruins.
Codificador: é aquela pessoa que não procura melhorar, simplesmente para no tempo e não se preocupa com sua equipe de trabalho e muito menos com o seu conhecimento tecnológico.
Às vezes nem tem um compromisso importante depois do expediente, mas vai embora simplesmente para se livrar daquela vidinha de programação.
Alguns codificadores trabalham 14 horas, porém, estão destruindo a obra prima do desenvolvedor que trabalhou 8 horas daquele mesmo dia, esses ficam muitas horas no trabalho para receberem hora extra e até mesmo por incompetência da administração do seu tempo, todos pensam que ele é muito mais dedicado que o desenvolvedor, simplesmente por ficar na empresa depois do horário.
É preciso tomar muito cuidado, quando julgamos alguém por seu horário de disponibilidade.
Acredito que devemos julgar o funcionário pela obra prima realizada e não pela quantidade de horas que ele gastou para fazê-la.
QUALIDADE X QUANTIDADE
Uma obra prima às vezes leva 1 hora para ser feita, enquanto um quadro qualquer leva um mês.
Observação: Talvez o problema das pessoas não se especializarem ou melhorarem seja a falta de tempo. Ao invés de ler um livro ou fazer um curso, estão sendo exploradas dentro das empresas.
Concordo com o fato de que programadores ruins atrapalham a equipe como um todo, da mesma forma que os programadores "bons" acabam fazendo a diferenciação. Meio como seleção natural.
Da mesma forma que se você tiver um programador muito bom no meio de "n" ruins, esse muito bom estará perdido, pois levará bucha de todos os lados e, aí, a seleção natural vai tirá-lo da sua equipe.
No mais, sobre o POG, eu até brinco no meu blog com isso, colocando exemplos do que acontece no mundo real. E é claro que tem muito programador que adora entuchar de POGs o seu sistema, mas muitas (e eu posso até dizer que a maioria das) vezes vejo desenvolvedores bons, de alto nivel, sendo obrigados a fazer uma gambiarra porque quem está gerenciando o job não quer dar mais tempo para que a solução correta seja feita, seja por questão financeira, ou o cliente estar reclamando e precisando da solução mais rápida. Acho que nesse caso o cenário não é tão "simples" assim!
[]s!
Qual a finalidade de querer uma comunidade formada apenas por essas pessoas ??
Que empresa privada vai manter uma equipe dessa por muito tempo ??
E se o filho de um geek não for um geek e for apenas um "cowboy" ??
Porque os geeks se importam apenas com a tecnologia e nada mais ?
Então um bom programador tem que trabalhar por horas a fio? Desculpe-me, mas isso me parece um pouco de lavagem cerebral de um dono de empresa...
Mesmo não sendo um profissional da área, participei como 10o. Encontro da Locaweb, já me increvi no 11o. e no sábado passado participei do Encontro de TI com objetivo, entre outros, de assistir suas palestras sobre Rubi on Rails.
Nosso webmaster é bastante resistente à estas novas linguagens como o Ruby embora eu venha insistindo pra que ele "desperte" para as novas tendências do mercado. Não é que ele seja um "codificador" como vc chama; mas com certeza não é um "desenvolvedor" no sentido da busca pelo melhor e mais moderno! Gostei muito do seu slide: "Especialista de uma coisa só é um amador em todo o resto" e acho que ele se encaixa perfeitamente neste conceito!
Enquanto ele não "acorda" ( se é que vai acordar! ), gostaria que vc me indique uma pessoa ou uma firma ou várias que possam nos dar um orçamento prá migrar ou desenvolver um site usando estas ferramentas que certamente deixarão o nosso site mais dinâmico e leve, com certeza.
Finalizando e pensando num futuro não distante, gostaria que vc indicasse os caminhos que o meu filho, de 18 anos, deve seguir ( didaticamente ) para aprender a usar o Ruby on Rails? Que cursos ( na ordem de importância ) ele deve fazer antes? O que ler e onde buscar informações para principiantes! Quem sabe eu, com 67 anos, não o acompanho nestes aprendizados?
Se me permite, deixo meu e-mail para qualquer contato fora do seu blog: diretoria@motocollection.com.br
O mercado Ruby on Rails ainda é pequeno no brasil.
Só queria complementar que não é necessariamente a tecnologia que fará seu site mais dinâmico e mais leve.
Como sempre, pode se fazer um site leve e dinâmico em PHP como pode se fazer um site lerdo e muito mal feito em Rails.
Mas como, geralmente, os profissionais que escolham Rails são profissionais que gostam de fazer sites leves, dinâmicos, novadores... O risco é bem menor.
Só cuidado que é obvio que vão aparecer empresas se aproveitando disso mas sem fazer serviço certo.
Alguma coisa está certa sim – maus programadores fazem um projeto andar pra trás –, mas no geral o conceito é anti-humano e a favor do sistema capitalista de defesa das empresas contra a sociedade e as pessoas que vem quebrando a economia de tempos em tempos desde 1929.
[]'s
Cacilhas, La Batalema
O assunto é polêmico e considero difícil ficar indiferente ao tema considerando o fato de ter sentido na pele que programadores ruins podem fazer a um projeto. Meu sangue ferve ao relembrar as madrugadas e fins de semana perdidos causados pela impunidade destes indivíduos. Vamos clarear alguns conceitos:
a) profissão: em termos etimológicos se aproximar da palavra professar que significa exercer ou adotar um sistema de idéias ou crenças declaradas publicamente, ou simplificadamente ter uma fé. O juramento feito por todo formando na celebração da formatura é uma reafirmação pública dos princípios inalienáveis de sua crença e orientação da sua conduta. O nome deste conjunto de princípios se chama ética profissional. Se um indivíduo não é guiado por um código de conduta declarado ele não é um profissional e sim um praticante.
b) cowboy: Akita usa o termo com um significado mais amplo que no livro de Frederick Brooks, que usa o termo para caracterizar o programador solitário, que por escolha ou não concentra o conhecimento de todas as regras de negócio dos aplicativos de uma empresa, ou seja, se ele não resolve um problema, ninguem resolve . Se Brooks escrevesse o seu famoso livro por agora provavelmente usaria o termo ‘Jack Bauer’ ao invés de cowboy.
c) arte: programação não é arte pelo simples motivo que a arte não precisa ter obrigatoriamente um propósito. Uma foca pode pintar um quadro mas não contruir um sistema informatizado. Não deixo de admirar soluções engenhosas e sistemas bem construídos, mas não posso considerar programação uma arte.
d) Receita – Despesa = Lucro ou Quem se importa ?: infelizmente existem muitas empresas que trabalham com desenvolvimento de software que não se importam como o trabalho feito ali, pois no final das contas existe lucro.
Se um médico tem um colega cirurgião e ele descobre que o seu colega abusa do álcool antes de uma cirurgia ele tem por obrigação denunciar a conduta do seu colega. Um advogado pode até rejeitar uma causa, mas uma vez aceita tem que defender o cliente na melhor forma possível, pois é a conduta profissional esperada.
Não temos um código de conduta definido como os profissionais de medicina, engenharia e advocacia logo não se pode julgar ou punir os praticantes do POG ou NNPPs com base em um código de ética, já que o processo de consolidação da profissão em TI ainda vai levar algumas décadas. Maus praticantes raramente são punidos no mercado de TI, eles no máximo trocam de empresa.
Solução aproximada: contratar o melhor possível, estabelecimento de políticas de qualidade de software e vigilância.
Primeiro acho que o debate é muito bom! é Assim que acha um meio-termo...
Meu comentário foi o seguinte (quase, fiz algumas alterações pequenas...), colocando aqui pois precisa ser aprovado ainda no site do Rogrido:
Sinceramente, se eu fosse trabalhar numa empresa que mande um email com o texto do Akita, fizesse pressão nos programadores, criasse um ambiente de competitividade negativa(para saber quem será demitido por ter os piores - ou menos bons- resultados)... Eu pediria a demissão já!!! porque significa que a empresa NUNCA se importou com você! e não é o texto do akita que mudou isso... O texto do Akita só deu para a empresa a desculpa que sempre quiseram ter para abusar mais dos consultores.
Agora, o Akita tem a visão dele, talvez radical para alguns e acho bom que tenha pessoas que não concordam sobre tudo que disse. é sano, esse "dialogo" para achar um meio termo. Para que as pessoas que não interpretam tudo no pé da letra ou mal interpretam (de propósito ou não) o texto dele.
Nunca pode ler um texto sem refletir ao respeito... pega as coisas que quer, deixa as que você não quer... se empresa (composta de gerentes, RH, diretores, líderes, consultores seniôr) não consegue extrair o que é bom tanto para o negocio, para o consultor e para o cliente, de novo... Acho que não vale trabalhar nesta empresa.
Na minha opinião a idéia a lembrar sem entrar em radicalismo é a seguinte:
Analise bem o seu time, fica atento a necessidade, ao trabalho, ao desempenho e ao resultado de cada um. Se perceber que um elemento gera mais problema (retrabalho, codigo ruim, etc...) do que trabalho certo, tira ele do time...
Sempre aconteceu de tirar elemento ruim, não é coisa nova. O texto simplesmente diz que as vezes as empresas não querem demitir o elemento ruim porque acham que traz um pouco valor positivo ao projeto (quando na verdade não é o caso), e que isso sim prejudica: os outros desenvolvedores, o gerente de projeto, a empresa e o CLIENTE.
Acho que não podemos ser radicais, sempre tem que ter cautela em definir se o programador não agrega valor ao time ou não. Demitir é coisa seria, porque pode também causar ambiente ruim no time, especialmente se o cara que você demite (apesar de ser NNPP), é um cara que tudo mundo gosta...
Mas é bom saber que NNPP existe e que pode salvar um projeto de afastar-lo. Mas por favor, se as empresas usam isso para fazer tirania nos projetos, é que o buraco está bem mais embaixo...
@Rodrigo, fico imaginando se todos os que reenviaram o tal e-mail como você diz, efetivamente "leram" o post todo. Aliás, meu post male male tem 72 horas de vida, duvido que tenha sido prejudicial a tal ponto em tão pouco tempo, mas presumindo que seja verdade, essa tal empresa apenas delata que tem má índole e que deve, ela, ser boicotada. De que adianta culpar o mensageiro?
Minha definição de NNPP aqui é sim, bastante meritocrática. E, *repetindo pela N-ésima vez*, não tem absolutamente nada a ver com o "bom programador não ter vida social". Bons profissionais - em qualquer área - não separam trabalho, de estudo, de tempo livre. Não lembro quem disse isso (ouvi isso ontem), mas parafraseando, "eu faço o que gosto de fazer, e deixo os que me avaliam dizer se o que estou fazendo é trabalho ou diversão". Do jeito que vocês falam parece que eu mesmo sou o que? Um robô? Acreditem, tenho períodos apertados, mas no geral tenho vida social plena. Sou casado, saio para happy hours, baladas, família, etc.
Acredito também que 80% do mercado seja composto por "cowboys" e que isso não vá mudar. A grande maioria das empresas seque é da área de tecnologia. Numa indústria, por exemplo, o backoff de TI é considerado como mero custo. Se o programador é um mero codificador de formulários, se o trabalho precisar ser refeito 3 vezes e custar 10 vezes mais, para essa indústria, isso é peanuts.
Minha mensagem é especificamente para empresas que consideram TI como investimento e não como custo. Essa tal empresa que você menciona, obviamente vê TI como mero custo a ser espremido. Em resumo: eu jamais trabalharia nessa empresa, aliás, eles nem precisariam se dar ao trabalho: eu mesmo me demitiria (aliás, eu já fiz isso algumas vezes, sei como é).
Outra coisa, não sei se você está achando que sou um desses "jovens programadores de 20" - já que parece que você não gosta muito deles segundo seu artigo anterior - mas eu tenho a mesma idade que você e 20 anos desde que escrevi minha primeira linha de código.
Sugestão: chill out ;-)
1) Quando a equipe faz rotineiramente hora extra, alguma coisa não está andando bem. Sou muito mais adepto ao que prega o XP, com semanas de 40 horas para que as pessoas possam descansar e voltar revigoradas e portanto produtivas no dia seguinte e também para que possam ter uma vida social normal - afinal precisamos de outras coisas também além do trabalho.
2)POG - Também deve ser vista de uma maneira mais "flexível", principalmente quando haverá a certeza de refactoring. Seguindo também um dos mandamentos de XP, você pode "simplificar" e solucionar um problema da maneira mais simples possível e depois refatorar aquele código, melhorando-o. De que adianta perder um tempo enorme pensando numa solução ótima quando ainda não temos certeza de que é isso que o cliente realmente quer ?
Enfim, acredito que temos que ser mais políticos, levar muito em consideração o lado pessoal, conhecer nossos colegas, pois as vezes algum deles está passando por problemas pessoais (coisa que todo mundo está sujeito a passar) e pode não render de maneira satisfatória, e demití-lo seria no mínimo injusto e não inteligente.
Abraços.
Eu acompanhei tudo que foi escrito imagine se isso não tivesse a repercusão que teve e todos começariam na mesma hora identificar um jeito de derrubar um "cowboy", sem ao menos pensar o porque dele estar ali e ser assim. Não irei escrever os problemas das questões sociais senão essa coisa vai ficar enorme.
Por fim, receio pelo "inocentes" que tenham sempre o senso critico de qualquer coisa que é escrito em blogs e modismo dos estrangeiros(americanos, europeus, japoneses, chineses e etc), pois a realidade deles é diferente da nossa e temos muito a mania idiota de querer seguir tudo, Ctrl+c + Ctrl+v como o PMBOK por exemplo, que eles inventaram ao invés de adaptarmos ou criarmos processos a nossa realidade. Sem falar em alguns termos em inglês que apenas reduz a nossa linguagem
OBS: Akita não perca o juizo, porque ao escrever um artigo desse, você tem que estar preparado para ler as críticas. Esse é o preço que se paga pela informação compartilhada.
PENSE: Depois de lido tudo, eu prefiro chamar um cara de "mau-carácter" ao invés de "cowboy", pelo menos temos a definição no dicionário e trata-se de um termo da lingua portuguesa. Sou contra todos esses termos em inglês que deixa tudo muito VAGO para nós mesmo. Por exemplo a porra do Geek nada mais é do que um cara esforçado e inteligente
Mas tb li seu polêmico artigo e concordo com seu ponto de vista que se aplica a qualquer área de uma empresa!
Então combinado! Aguardo sua resposta por e-mail mas não se esqueça tb de colocar no seu site, os slides de sua palestra no Encontro de TI no Rio, sábado passado, conforme vc prometeu, falou?
Vocês estão confundindo muito sério esse negócio que eu falo de "não existe divisão entre trabalho e não-trabalho". Isso não significa de maneira nenhuma "hora extra". Conheço pessoas no perfil "desenvolvedor" como eu disse antes, que efetivamente fazem 8 horas "no escritório" todo dia e não são "cowboys", por isso uma coisa não tem nada a ver com a outra.
Sobre o que o @Rodrigo disse, me incomoda o fato de alguém ter usado meu artigo para fazer terrorismo e depois os vitimados, em vez de culparem quem fez a mal caratice, vir cobrar de mim que não disse para fazer nada disso. Muito pelo contrário, aliás, eu defini "cowboy" como o cara que mesmo depois da equipe dar feedback, etc, ele não mudar. Também disse claramente que "inexperiente" não é "cowboy" se tem a humildade de refletir sobre o feedback dos outros e tentar mudar. Como eu disse, basta ler o artigo inteiro em vez de apenas pegar trechos que interessam e distorcê-lo. Vou começar a fazer copy e paste do meu próprio texto porque tudo já está lá em cima e eu estou desperdiçando meu latim.
" “codificadores” de “desenvolvedores”. Ambos são programadores, mas o primeiro grupo é aquele tipo que bate o cartão na entrada, faz apenas o que mandam, vai embora no mesmo horário todo dia e não se preocupa com mais nada. "
Akita, do seu ponto de vista se o programador é participativo (não faz só o que mandam), faz um excelente código e realiza o seu trabalho no horário comercial, só fica no trabalho até mais tarde em caso de urgência, este é um codificador ou desenvolvedor ?
Valeu!
Abraços
Lamentável
Acho que faltou uma dica para aqueles que se identificaram como cowboy, por culpa da empresa/gerente, mas que infelizmente por razões sociais e economicas não podem simplesmente chegar segunda e pedir demissão (ie: tem família/filhos pra sustentar). Por mais que você seja obrigado a programar como um cowboy, faça isso com consciencia, estude alternativas, atualize-se, prepare-se para procurar outro emprego, ao invés apenas de agir como um cowboy e ficar esperando a proxima POG solicitada.
Pra finalizar, embora não seja o escopo do tópico, acho muito radical essa sua "perseguição" contra diplomados e certificados, sempre inserida de alguma forma em seus artigos. A pessoa que busca certificações está claramente demonstrando interesse na sua área, em aprender e aperfeiçoar seu código e embora seja possível se certificar apenas decorando, muita gente se certifica para melhorar a sua qualidade como profissional. Claro que existem exceções, mas eu quando tirei minha primeira certificação SCJP me ajudou e muito a compreender conceitos importantes de Java, melhorou meu código e com certeza, me afastou um pouco de ser cowboy.
Cheers
Agora pense sobre isso no setor público... Seria muito boa essa consciência no setor público, mas como implementar essa "separação joio x trigo" na esfera pública onde a "estabilidade" dos cargos gera um comodismo absurdo?
O que me preocupa são estes trechos:
"
E nos dias de hoje, existem vários sintomas que denunciam cowboys que devem ser demitidos: seu programador torce o nariz quando se menciona Pair Programming ? Ele desdenha Propriedade Coletiva de Código e prefere manter alguns códigos ainda escondidos? Ele acha que teste é algo opcional e que pode fazer depois? Pior, ele defende o uso de práticas ou tecnologias sem saber explicar, tecnicamente, por que está usando? Tudo isso é sintoma. Se seu programador tem pelo menos 1 deles, já é motivo mais do que suficiente para deixar os papéis da demissão preparados e a começar a entrevistar novos candidatos.
"
Então 99% dos programadores estão ferrados, a maioria das empresas nunca incentiva o programador a usar teste unitário, programação em par e muito menos propriedade coletiva de código.
Pessoalmente já fui esculachado e humilhado por defender TesUnit e programação em par.
O que me deixou mais preocupado foi:
"
Um bom programador deve dizer NÃO a um chefe que está empurrando a equipe precipício abaixo. Se a empresa pune esse tipo de iniciativa, então essa empresa não é boa para você.
"
Então a maioria das empresas não são boas para trabalhar.
Demita quem contratou e definiu o processo de seleção, e tente dar uma chance
ao programador ruim para se tornar um programador melhor - a menos que isso
não deva acontecer.
"A maioria deles é um acumulador de Dívidas Técnicas. Ou seja, a
manutenabilidade e extensibilidade são profundamente comprometidas."
-Sempre haverá Dívida Técnica (dependendo do arquiteto/designer).
Manutenibilidade e extensibilidade são aspectos de Design e Arquitetura, o
programador não deveria se meter com isso.
"Uma coisa é fato: é muito difícil descobrir um programador ruim,
principalmente se você, o gerente, não é um programador também. Pior: você
precisa ser um bom programador para conseguir descobrir o ruim. Numa equipe
razoavelmente balanceada, com programadores pelo menos pouco acima da média e
apenas um ou dois elementos ruins, fica mais fácil separar o joio do trigo: a
própria equipe vai começar a expurgar a maçã podre de seu meio (se forem
espertos). Isso é uma faca de dois gumes, porque agora se você, no papel do
programador, acha que seu colega é o ruim, quem garante que os outros não
acham que você é quem é o ruim? Se você é um programador, é bom que você
garanta o seu."
-Se você como gerente (ex-programmer ou não) não tem capacidade para
selecionar os membros da tua equipe, você não é um gerente competente pra
isso, então delegue para alguem competente, tal como teu arquiteto ou líder
técnico.
Os membros da equipe devem trabalhar em 'cooperação' e não em 'competição',
assim os desníveis de habilidades serão reduzidos.
"Eu costumo separar “codificadores” de “desenvolvedores”. Ambos são
programadores, mas o primeiro grupo é aquele tipo que bate o cartão na
entrada, faz apenas o que mandam, vai embora no mesmo horário todo dia e não
se preocupa com mais nada. O segundo grupo são os verdadeiros artistas, os que
entendem que software é arte e que, como tal, exige dedicação, estudo
constante, simplesmente não existe limites de horário comercial. Como eu
costumo exemplificar: é a diferença do pintor de paredes para um Da Vinci."
-Codificador: cumpre horário, faz o que 'mandam' (alguem errado: quem manda ou
quem faz?), e não se preocupa com mais nada (talvez o trabalho esteja sob
controle ou já à beira de um abismo por culpa do PM).
-Desenvolvedor: 'verdadeiro artista' (saber que software é arte, não define
ninguem como artista), dedicados (como todo mundo que cumpre horário e faz o
trabalho que tem que ser feito), estudo constante (obrigação do tecnologista),
'simplesmente não existe horário comercial' (todos os profissionais por
contrato e lei, devem cumprir certa quantia de horas de trabalho,
eventualmente -não obrigatoriamente- fazer HE. Projetos porcamente (a maioria)
gerenciados acabam exigindo HE e sobrecarga à equipe).
Pela dito, como avaliar se um sujeito 'codificador' na verdade não é um
'desenvolvedor' metodico o suficiente para se manter no horario e fazer o que
tem ser feito dentro desse horário. E, por outro lado, o 'desenvolvedor' não
seria um 'codificador', porque sendo meio 'chill outed', não gerencia o tempo,
e acaba estourando sempre seus prazos? Critérios arbitrários.
"Um gerente precisa ter muita consciência disso: toda equipe de
desenvolvimento de software precisa de Líderes Técnicos Sênior. Dica: procure
nas comunidades Open Source, você terá melhores chances de encontrar os
melhores programadores lá. Não procure em instituições de ensino e,
principalmente, desconfie de qualquer programador que mostre primeiro os
certificados que tem. Gostei do que o Kris Kemper mencionou no seu blog de
como a ThoughtWorks faz para contratar: o candidato passa por uma bateria de
testes. Não basta apenas uma ou duas entrevistas: ele precisa passar por
vários sêniors da empresa, precisa demonstrar código que será revisado por
outros sêniors, ou seja, precisa realmente merecer estar lá. Precisa
demonstrar experiência (seguindo Malcolm Gladwell, em Outliers, eu diria que
só se deve contratar programadores pertos de atingir as 10 mil horas de
experiência, a menos para cargos com tarefas menos importantes), precisa
demonstrar desembaraço e excelente capacidade de comunicação, precisa mostrar
código, e código bem feito, código que não passaria vergonha na frente de um
Martin Fowler."
-Como avaliar a competência de um programador: Dê a ele um nano projeto e peça
para ele desenvolver a solução in loco. Quando ele terminar a equipe avalia o
trabalho e dá um veredito. Só assim para se ter certeza dos conhecimentos de
alguem. Nada de CV, nem entrevistas, nem testes. O CV pode ser maquiado,
entrevistas podem ser encenadas, e testes são equivalentes a certificação.
-Como um programador 10x melhor que ganha a mesma coisa que um programador 10x
pior, pode peitar um gerente de projeto que na sua arrogante sabedoria dirige
o projeto para o buraco, sem ser considerado como ameaça à sua posição?
Tudo que voce falou sobre Gerentes demitir 'cowboys' deve-se aplicar a tal
gerencia tambem. Os proprios gerentes que não sabem da existencia de tal
'estereótipo' de programador deveriam eles mesmos se demitirem, são 'cowboy
managers', porque são incompetentes, desconhecem os 'detalhes' da área de
gerencia de projeto de software e o pessoal que dá suporte a esse negocio.
Aliás tudo que se aplica a cowboy coders, se aplica tambem a cowboy managers.
Vou mais alem, eu defino gerentes de projeto como você compara codificador a
desenvolvedor.
-Gerente burocrata: faz o que 'mandam' (stakeholders), se preocupa tão somente se cada tarefa está no prazo, e se não estiver vai arrumar um jeito (bem ou mal para a equipe) de fazer HE (em fds muitas vezes não remuneradas) para que as coisas entrem no eixo, sai sempre na mesma hora.
-Gerente de carreira em TI: são os verdadeiros artistas, os que entendem que software é arte e que, como tal, sabe que gerenciar projeto não é gerenciar uma equipe técnica, que isso é trabalho para um arquiteto ou líder tecnico, sabe que simplesmente existe limites de horário, mas é o primeiro a entrar e o último a ir pra casa, sabe balancear as necessidades do time com as necessidades do projeto e stakeholders, isola o time de problemas extra-trabalho.
Como eu costumo exemplificar: é a diferença do 'piloto de teco-teco' com um 'astronauta'.
http://c2.com/cgi/wiki?ProgrammerStereotype
<ironia>
Certo... demitam os portadores de deficiência, eles são menos eficientes.
Demitam as mulheres, elas ficam grávidas e podem atrapalhar o cronograma.
Negros notoriamente possuem cérebros pequenos.
Índios são preguiçosos.
</ironia>
A mente dos matemáticos e intelectuais é engraçada. É a mesma mente analítica que permitiu a eugenia e outros absurdos.
Tratar as relações de trabalho como fórmulas matemática de produtividade impossibilitaria a existência de poetas, músicos e artistas.
E mesmo que o mundo da tecnologia seja uma ciência "quase" exata, qual a graça de um mundo de cascalho, onde a confiança e o respeito não são considerados parâmetros de relevância?
Se o discernimento fosse regra de admissão, quantos dos autores destes artigos se empregariam? O importante não é se a pessoa é ruim naquela tarefa ou não, mas se ela está utilizando todo o seu potencial, e de que maneira podemos aproveitar o seu potencial. O mundo se dobra diante das pessoas e não o contrário.
A elite intelectual é a casta mais burra que eu conheço.
[]s, gandhi
RTFA. Eu estou falando de pessoas perfeitamente normais, com as plenas capacidades intelectuais, que não modificam sua forma de trabalho - se mantém negativos por ignorância e pela falta de vontade em evoluir. Nesse caso, sim, demita.
Eu contrato caras seniores pela experiência sim, mas também contrato júniors pelo potencial. Para que vou manter um cara que não evolui? Pior ainda, que ainda arrasta minha equipe para baixo. Sim, demita tipos assim.
Ninguém nasce sabendo. Todo mundo comete muitos erros. Porém burro é o indivíduo que, entendendo que comete erros, não faz nada para melhorá-los e, pior, ainda acha que está certo. Demita esses tipos.
obs: parabéns pelo blog!
"Escolha um trabalho que você ame e não terás que trabalhar um único dia em sua vida. " Confúcio.
Abraço,
André Faria
htp://www.andrefaria.com