domingo, 30 de maio de 2010

COZINHAR X PROGRAMAR - parte 2

O Robson França, que estudou PD comigo na ETE, me respondeu a última postagem via Buzz, e achei muito legal, resolvi publicá-la aqui no Blog:

"Pois é MD. Concordo contigo. Mas tem alguns outros tipos de programadores, digo, cozinheiros por aí:

- Os cozinheiros de microondas: são aqueles que mal-e-má fritam um ovo (conhecem o básico de programação como um todo), mas entregam "grandes" pratos. O segredo deles consiste em duas coisas: produtos semi-prontos (bibliotecas de componentes ou de soluções completas fornecidas por fábricas de software) e um forno de microondas (uma IDE ou suite de aplicativos de desenvolvimento, livres ou proprietárias). Se o cliente quiser uma lasanha três queijos e só tiver a de quatro queijos, baubau. Se o cliente quiser uma sopa de ervilhas com bacon, mas usando proteína de soja no lugar do bacon, já era. Se a comida não estiver legal, esse tipo de cozinheiro já sabe em quem por a culpa: o microondas estava com problema ou o fornecedor dos produtos semi-prontos errou em alguma coisa. E nem pense em pedir para que ele conserte, digo, improvise na hora de servir o prato. O pior é que há vários cursos que seguem essa "metodologia"...


- Os cozinheiros ortodoxos: são cozinheiros que seguem a risca as cartilhas e o melhor da "cuisine française" (padrões e regras definidas pelo mercado/academia/etc.). Pizza com katchup é ofensa, assim como Bife à Cavalo ou o uso de mortadella quente em algum prato. Seus produtos são caros (se não forem os mais caros), mas nem sempre eles sustentam como um bom prato de arroz com feijão. Pior: podem demorar mais para serem feitos e, ao contrário da lógica, podem não ser mais saudáveis que os lanches rápidos (fastfood). Dificilmente pensam fora da caixa (como os cozinheiros de microondas). Se há necessidade de melhorar alguma coisa, a proposta deles é sempre a mais custosa e a que não cobre a maioria das lacunas;


- Os cozinheiros de lanches rápidos ou, como gosto de chamar, os "pasteleiros": Pastel é uma gíria onde trabalho para tarefas rápidas, com prazos medidos em minutos, e que atendem questões pontuais de usuários que, na maior parte das vezes, não são cozinheiros, digo, usuários avançados de TI ou profissionais do ramo de TI. Assim como a iguaria das feiras-livres, o pedido leva alguns minutos, mas há toda uma leva de sub-entendimentos: pastel de pizza sempre tem queijo (consulta ao usuário sempre tem algum tipo de identificação), pastel de bauru tem presunto (uma pesquisa deve prever o impossível, mesmo se o impossível não for importante), etc. Esse usuário se serve do pastel, acha gostoso e, às vezes, até pede mais um, mesmo quando está em falta. Pastel demais (principalmente por causa da gordura) pode dar problemas de estômago, colesterol alto, além de engordar é claro. O "pastel de software" tem os mesmos problemas: pode atrasar projetos maiores, demandar suporte ou manutenção adicionais ou ainda demandar uma atenção que poderia ser direcionada para outras refeições, digo, outras aplicações. Em ambientes onde TI é mais uma ferramenta, isso é bastante comum;

- Finalmente, há os cozinheiros conscientes: raros, são aqueles que buscam uma dieta equilibrada, e sempre observam o cliente. Não apenas no processo de cozimento, mas até mesmo antes do processo. Buscam entender o seu dia-a-dia, o que ele gosta, o que ele não gosta, etc. A dieta (filosofia de desenvolvimento) é ajustada (tailoring) e adequada a vida do cliente, para que este sinta o mínimo de impacto e, caso seja necessária alguma alteração no seu cotidiano (comer menos açucar, digo, acessar uma aplicação via página em vez de uma "aplicação" Access), ela vai ocorrer de forma gradual e de forma que ele participe do processo e se sinta parte desse processo. Ser consciente significa que há espaço para pratos refinados tanto quanto há espaço para uma feijoada ou um misto quente de vez em quando. Seguir à risca padrões pode limitar ou forçar o usuário a embarcar em uma jornada mais difícil sem que este saiba (plenamente) os benefícios dessa jornada.

Bom, é isso.

Abraços"

quinta-feira, 27 de maio de 2010

COZINHAR X PROGRAMAR

Trabalhando com desenvolvimento de softwares, percebo que muitas coisas no ramo se parecem com o ato de cozinhar. Isso mesmo: cozinhar, cozer, preparar comida!

Cozinhar, a grosso modo, é uma questão de pegar ingredientes (input), prepará-los (processamento de dados) e servir o prato (output).

Mas essa simples analogia acaba indo mais além, acaba esbarrando em vários pontos que acho falhos em muitos profissionais da área de TI. É lógico que não podemos generalizar, e também nem podemos colocar a culpa somente nos profissionais, se muitos acabam simplesmente seguindo o “modus operandi” dentro das empresas.

Mas mesmo assim, vamos lá com alguns exemplos de coisas que acontecem nas cozinhas por aí:

1) Muitos desenvolvedores só querem saber de desenvolver, de programar, de mexer com a parte técnica, de “escovar bit” (como dizia um professor meu). Não se interessam pelo restante do processo de desenvolvimento. Querem apenas cozinhar: preparar os alimentos, temperá-los, colocar tudo no fogo, montar o prato.

Fazem esse preparo com excelência, sim. Mas não querem saber do restante: de onde veio os alimentos, qual o pedido exato do cliente, quem vai lhe entregar o prato, se ele vão gostar ou não, o custo de tudo envolvido, e por aí vai.


2) Existem aqueles que simplesmente não querem fazer o papel de garçom. Não querem fazer a análise dos requisitos, saber as reais necessidades do usuário, o que ele precisa automatizar, se ele precisa mesmo do software ou não. Ou seja, não querem parar na mesa do lado do cliente e anotar o pedido!

Também não querem sair da cozinha e entregar o prato ao cliente. Não pensam na implantação do que desenvolveu.

E tampouco querem perguntar para o cliente: “gostou do prato?”. Ou seja, não ligam para o feedback, se o que desenvolveu atendeu ou não as necessidades do cliente, ou se apareceram problemas alheios ao software que impeçam o uso do mesmo!

Estão tão preocupados com a parte técnica que esquecem da parte humana.
3) Outros se preocupam apenas com o fogão e os utensílios. Se são os mais modernos do mercado, os mais caros, os mais famosos, os que estão na moda.

Estão mais preocupados com o fogão em si do que com a comida que sai dele. Assim como existem muitos profissionais de TI que se preocupam mais com a ferramenta e a tecnologia em si do que o uso que elas podem trazer. Querem programar na última linguagem do mercado, no sistema mais bacana, na ferramenta mais arrojada -- mas muitas vezes esquecem do que o usuário realmente precisa e se uma ferramenta mais simples não atenderia suas necessidades plenamente.

Só lembrando que fogões a lenha e utensílios rústicos também fazem comidas muito deliciosas -- dependendo do cozinheiro, é claro!

4) Muitos não se “rebaixam” a lavar a louça nem recolher o lixo: argumentam que são pagos apenas para cozinhar.

Assim como muitos desenvolvedores entregam seus sistemas aos usuários e não querem saber de mais nada: o usuário já tem seu software, então basta ele usá-lo! Não querem ajudá-lo com problemas que não estão ligados diretamente ao desenvolvimento do software, que vão desde problemas de infra-estrutura e entrada de dados incorretos até a falta de treinamento ou o mau uso do sistema.

Oras, muitas vezes precisamos pensar como um todo: se desenvolveu um software, o mais importante de tudo é que ele funcione e atenda as necessidades para as quais ele existe-- e isso muitas vezes vai além da parte técnica e envolve bom senso.

5) Outro caso que podemos notar é o das compras: alguns cozinheiros não têm nem noção do produto que foi comprado, em qual lugar foi comprado, seu preço, se foi caro ou barato. Não têm idéia nem do que é ficar escolhendo e comparando produtos, nem sabem o que é pegar uma fila no mercado!

Assim como há desenvolvedores que não tem noção dos custos e aquisições que se envolvem em todo o processo de desenvolvimento dos seus softwares.

Um aparte: é lógico que existem os extremos: alguns cozinheiros fazem questão de ir na feira logo cedo e escolher produto a produto com grande atenção, e ainda se preocuparem com os gastos. Alguns têm o privilégio de poder ir direto na fonte e colher seus produtos. Outros vão mais além e eles mesmos matam o próprio frango no quintal para cozinhá-lo! Assim como existem os desenvolvedores que têm plena noção do que se gastará em todo processo (mesmo porque muitas vezes seus ganhos estão diretamente ligados a essa estimativa).

6) E, para finalizar, e para ser sincero, existem programadores que nem testam direito seus próprios programas! São como cozinheiros que nem provam se a comida que acabou de fazer ficou boa ou não, se ficou com muito ou pouco tempero, se o sabor é o desejado ou não. Medo de queimar a língua ou não gostar?

É lógico que, como eu disse antes, tudo isso depende muito, varia caso a caso, de cozinha para cozinha, de restaurante para restaurante: nas grandes cozinhas, por exemplo, cada um já tem sua função pré-definida -- nem sempre o cozinheiro pode ter contato com o cliente, sem sempre o garçom entra na cozinha, nem sempre o pessoal que prepara a comida é o mesmo que a compra; já nas cozinhas de nossas casas, muitas vezes uma pessoa faz tudo.

Mas de qualquer forma, em maior ou menos grau, acredito que essa analogia cozinha versus desenvolvimento de software existe: basta observar com calma, basta visitar as cozinhas e comprovar!
Leandro M.D.
23 de maio de 2010