quarta-feira, 26 de outubro de 2011

O que é ser um bom programador?


Como diria meu amigo Faypou, eu sou um nerd de computador puro-sangue, pois sou fã do universo de Jornada nas Estrelas, e foi nessa qualidade que encontrei esta pérola, a qual gostaria de usar para apresentar o nosso blog: o código de honra dos programadores Klingon!


Infelizmente, não dá para traduzir, pois perderia um pouco o sentido, mas lá vai:


The Klingon Programmer's Code of Honour
All Klingons who develop code for the glory of the empire follow this "Code of Honour" for software "code warriors".
  • Specifications are for the weak and timid.
  • State-of-the-art hardware is a prerequisite to do battle with code.
  • One cannot truly appreciate "Dilbert" without reading it in the original Klingon.
  • Indentation is for enemy skulls, not code.
  • Klingons do not "release" software. Klingon software escapes, leaving a bloody trail of design engineers and quality assurance people in its path.
  • Klingon function calls have no parameters. They have arguments! And they always win them.
  • Klingons do not debug. Our software does not coddle the weak.
  • Quality Assurance issues are best solved with a Batleth.
  • A true Klingon warrior does not comment his code.
  • Our users shall know fear and cower before our software! Ship it! Ship it and let them flee like the dogs they are!
  • Klingon software does NOT have BUGS. It has FEATURES, and those features are too sophisticated for a Romulan pig like you to understand.


Se você segue estes princípios, então este blog certamente não lhe convém.

Mas o que é ser um bom programador?


Eu vi essa imagem no Blog Angu e gostei muito... Se você não é Klingon, também não pode ser como o coleguinha da ilustração: um "Rato de esgoto", que fica horas na frente de uma tela e, na maioria das vezes, nada produz. Estas duas imagens representam antíteses do que seria um bom programador, ou seja, um profissional que produz software com qualidade.

Então, qual é? 

Um bom programador é um cara que usa os princípios da Engenharia de Software, além de boas práticas do mercado, para produzir software com qualidade!  E este é o objetivo do blog: discutir e ajudar aos programadores criarem software com qualidade.

E quem sou eu para propor isto?

Eu tenho mais de 30 anos de profissão, o que pode até ser demérito, pois, como disse o grande escritor Pedro Nava: "A experiência é como um carro com os faróis voltados para trás". Porém, eu não parei no tempo, procurando acompanhar as mudanças.

Já criei muitos softwares, seja como empregado, consultor, dono de software house etc. E já trabalhei com quase tudo, de Mainframes IBM até dispositivos Android, trabalhando com vários tipos de plataformas e linguagens diferentes.

Sou professor universitário, tendo lecionado em várias instituições (Unicarioca, Faculdades IBMEC e Instituto Infnet). E, do ponto de vista acadêmico, sou Mestre (IBMEC 2003), além de possuir várias certificações, entre elas:

  • Project Management Professional (pmi.org);
  • Microsoft Certified Systems Engineer (Microsoft);
  • Sun Certified Enterprise Architect (Sun / Oracle);
E, para terminar, tenho vários livros publicados (veja a página "Livros").

Porém, o que me motivou a criar este blog foi a absoluta falta de paciência com os erros recorrentes que venho observando diariamente. Vejo as pessoas cometendo as mesmas falhas, gerando produtos sem qualidade, mesmo quando as soluções são simples. E não são só os "Ughs" (os programadores da "velha guarda"), mas os novos profissionais também!

Então, essa é a minha contribuição para tentar melhorar a qualidade do software produzido no Brasil.

Os "figurinhas fáceis" do mercado

Infelizmente, o mercado de TI está poluído com alguns tipos de pessoas que normalmente só atrapalham os projetos. 

Para ajuda a ilustrar a conversa, e divertir um pouco, eu resolvi classificar os programadores de acordo com seu comportamento:

Ugh: o programador das cavernas


(Dino Boy, (c) Hanna-Barbera)

É o cara "das antigas", reacionário, odeia todas as "novidades" e acha que "quality assurance" é coisa de desocupados. Não precisa ser necessariamente uma pessoa velha. Normalmente, possui uma imagem de "herói" (muitas vezes auto-gerada), ou seja, é o cara que resolve qualquer parada, mesmo que seja na porrada! Para um "Ugh", ser um bom programador é virar noites e entregar 2 meses antes do combinado. Eis algumas pistas fáceis para identificar "Ughs":
  • "Sentam" em cima do conhecimento. Ugh não gosta documento. Ugh não passa nada pra ninguém. Quando demandado pelo chefe, sua resposta padrão é "xá comigo!";
  • Planejamento é para idiotas. Acham que basta ter uma data e mais nada. Normalmente, dão prazos super-estimados, de modo a parecerem "heróis", pois conseguem entregar ANTES da data combinada;
  • Não gostam de reuniões. Quando obrigados, sempre chegam atrasados e não respeitam sequer o Cliente;
  • Nada presta e ninguém é bom o suficiente. Nenhuma técnica ou prática é boa, e todos os outros programadores são uns "babacas" empedernidos;
O trabalho produzido por um "Ugh" é, no mínimo, caótico e desnecessário. São aqueles caras que preferem fazer análise de XML na base do substring, de preferência em "Clipper" (ou COBOL, dependendo da versão do Ugh), do que utilizar uma solução mais moderna. E geralmente pensam que documentação é colocar comentário no código.

O programador gênio


(Dexter, (c) Hanna-Barbera)

Também conhecido como "programador-cientista", é uma versão melhorada do "Ugh", pois é tão intransigente como ele, mas gosta fazer experiências. Os "Dexters" Adoram experimentar coisas e enchem seu código de "rebimbocas", sem tomar o cuidado de testá-las. Normalmente, trabalham sozinhos e produzem soluções igualmente caóticas, porém, pecando pelo excesso de novidades e técnicas. Conversar com um "Dexter" é se sentir pequenininho, diante de tão vasto conhecimento, o qual, na verdade, é altamente improdutivo. Normalmente, os "Ughs" acabam matando os Dexters, caso sejam alocados na mesma equipe. Eis alguns mandamentos seguidos por eles:
  • Por que simplificar, se pode complicar? Normalmente, buscam as soluções mais complicadas, mesmo para os problemas mais simples. Eles não gostam de simplificações e acham que todos deveriam entender suas propostas;
  • Código bom é código sofisticado! Para eles, qualidade é medida pela sofisticação das técnicas empregadas em um código. Em um mundo ideal, eles passariam seus dias desenvolvendo compiladores ou sistemas operacionais;
  • Não basta funcionar, tem que ser ótimo! O Bom é inimigo do Ótimo! Como sempre buscam o ótimo, seu produto acaba sem ser bom;
Seu trabalho é igualmente caótico, mal documentado e, muitas vezes, ineficaz. Os "Dexters" simplesmente não conseguem entender que o objetivo do programador é satisfazer os requisitos do Cliente!

O amigo da onça


Este personagem foi criado pelo cartunista Péricles, e costumava sair na antiga revista "O Cruzeiro". É um personagem refinado, sínico e que, na verdade, representa um tipo de programador muito comum no mercado. É aquele cara almofadinha, sofisticado, que só fala os últimos "buzzwords" de tecnologia, passando a impressão de ser um excelente profissional, mas que, na verdade, só quer arrumar trabalho para os outros. Normalmente, o "Amigo da onça" domina as reuniões, impressiona os clientes e os chefes, através de uma excelente articulação verbal (e escrita), porém só arruma trabalho para os colegas. 

Ele consegue fazer parte das atividades mais importantes, porém não "mete a mão na massa", e fica sempre sendo visto como um especialista. Em alguns casos, é aquele que chega no final para dar palpite no trabalho dos outros. Você pode reconhecer um programador "Amigo da onça" pelas características:
  • Sabe impressionar! Ele domina as reuniões e as discussões. Consegue falar meia hora sem dizer nada. De sua boca sai uma profusão de "buzzwords" bem colocadas (lidas do Google), que, na verdade, servem para que ele se esconda do trabalho;
  • Adora complicar a vida dos outros. É um "palpiteiro" de marca maior! Com suas "buzzwords", sempre consegue impressionar as mentes mais fracas, adicionando funcionalidades e colocando requisitos na boca do Cliente. Ele complica a vida dos outros para simplificar a própria!
  • Raramente senta em sua mesa. Ele é um "networker" por excelência, sempre conversando com pessoas dos mais diferentes escalões. Possui sempre bom trânsito em todos os níveis hierárquicos e, por isto mesmo, não tem tempo de criar código-fonte;
  • É político ao extremo! Ele está sempre bem, não importando quem esteja no poder. Seu lema é : "Eu ganhei; Nós empatamos; Vocês perderam";

O novato "sabido"


(King Features Syndicate)

É um tipo de programador que, apesar de ser novo na profissão, acha que sabe tudo. É uma mistura de Amigo da Onça com Dexter, mas, na verdade, não tem experiência para se bancar. Vive repetindo o que os seus professores lhe ensinaram, normalmente sem questionar a aplicabilidade das técnicas que aprendeu. Geralmente, em uma equipe bem equilibrada, vive levando "calabocae, mané", mas, quando o chefe é muito fraco, pode ser que o adote, e isto gera problemas para todos. Suas principais características são: 
  • São abusados! Não respeitam a experiência dos outros e passam por cima de tudo, o que demonstra sua principal fraqueza, que é o excesso de auto-confiança;
  • Não medem os riscos de suas atitudes. Gostam de aplicar as mesmas soluções que aprenderam na Faculdade, indiscriminadamente, mesmo que não sejam as mais adequadas. Quando as coisas dão errado (e certamente dão), gosta de culpar os outros. Se houver um "Ugh" ou um "Dexter" na equipe, eles tentam culpá-los. Normalmente, o "Amigo da onça" é seu grande aliado;
  • Acham que tudo é fácil. Mesmo quando o Cliente está descrevendo uma coisa impossível de fazer, eles não conseguem se conter e soltam um "é mole", que acaba tirando a credibilidade da equipe;

Veja se você consegue identificar estes "tipos" entre os seus colegas!