Desenvolvimento

30 out, 2014

Excelência no Desenvolvimento

Publicidade

Salve, meus caros! Na edição anterior da Revista iMasters (#10 – maio/2014), falei sobre o App Engine. Hoje vamos pular a continuação dessa conversa para analisar algumas outras vertentes sobre desenvolvimento que não ferramentas. Desta vez, vou falar mais sobre minhas inspirações como desenvolvedor e pilares que acredito que fizeram de mim o profissional que sou hoje e que me levam dia a dia e me levarão a diversos objetivos.

O título fala sobre Excelência – mas o que afinal é isso? Em resumo, excelência é superar expectativas. Como isso se aplica à vida profissional? Há uma pequena história que talvez você já conheça, mas eu vou relatar aqui resumidamente:

“Um profissional foi reclamar com o seu chefe sobre a rápida evolução de um novo companheiro de trabalho enquanto ele, que estava há tanto tempo na empresa, não recebia o reconhecimento que acreditava ser merecido. O chefe o interrompeu e pediu que ele fosse à feira que havia ali perto e descobrisse o valor do abacaxi; resmungando, ele foi. Ao retornar da rua, falou com o chefe “o abacaxi custa R$ 4 patrão. E como eu ia dizendo…”. Antes de conseguir continuar a conversa, foi novamente interrompido quando o novo colega de trabalho entrou na sala – o chefe o havia chamado. O chefe fez o mesmo pedido a ele. O novato foi à feira e, quando voltou, trouxe o resultado: “o abacaxi está R$ 4, mas consegui um desconto. Se o senhor quiser para uma salada, outras frutas estão também em promoção – aqui estão os valores com os descontos”- e entregou uma pequena lista para o chefe, que agradeceu e pediu para que retornasse ao seu posto. Então ele virou para o insatisfeito e perguntou: ‘há algo em que eu possa ajudar’?.”

Esse é um exemplo bem simples da diferença entre fazer somente o que é pedido e ir além. Aprendi cedo esse conceito – quando ainda vendia cachorro quente com minha avó, que dizia que não era só o lanche que estávamos entregando – mas algo que as pessoas gostassem de verdade e que devíamos tratar os clientes como gostaríamos de ser recebidos por exemplo nas casas de nossos parentes. Tínhamos clientes fiéis na região que sempre traziam amigos para conhecer. Mais uma vez: não era só o lanche, mas o cuidado e o asseio, além de um bom atendimento, faziam toda a diferença.

Quando comecei a trabalhar com tecnologia, tive oportunidade de aplicar esse conceito novamente. Melhorei algumas rotinas no hospital para o qual eu prestava serviço – o que me garantiu um lugar no CPD de lá. Nesse ponto, minha carreira em desenvolvimento começou de fato a fluir. Ao longo dos anos fui aprendendo, conhecendo novas pessoas, novos mestres e os pilares que apresentarei a seguir são os principais para mim, por isso vou detalhá-los.

Agilidade

Você provavelmente já ouviu falar no guepardo. Ele é o mais veloz animal terrestre, chegando a velocidades de mais de 100Km/h. Mas não é a velocidade que garante o seu alimento. Em uma caçada, ele consegue acompanhar sua presa mesmo quando ela toma outra direção bruscamente.

Quando digo agilidade, não estou falando em ser veloz, mas sim em ser efetivo – como o guepardo. Encontrar o equilíbrio entre velocidade e qualidade é fundamental para o Desenvolvimento de Software. Inclusive, esse é um dos principais conceitos por trás do movimento Ágil, que visa a responder prontamente a mudanças durante o desenvolvimento, o mais rápido possível. Realizar o menor esforço (tempo) para conseguir o melhor resultado (entrega) – e esse resultado idealmente não deve voltar; do contrário, temos retrabalho e perda de tempo.

Para encontrar tal equilíbrio, devemos procurar ferramentas que auxiliam na produtividade, tais como Metodologias de Desenvolvimento (como Scrum, Kanban e XP), softwares que nos ajudem nisso, como IDES, e a aplicação de conceitos de qualidade no nosso dia a dia.

Qualidade

Uma das maiores fabricantes de automóveis do oriente revolucionou a produção de veículos com ideias simples que garantiram a ela a possibilidade de fabricar seus veículos assim que eles eram pedidos (o que ficou conhecido como Just-In-Time, ou JIT), com qualidade e praticamente nenhum desperdício, apenas cuidando da qualidade em cada etapa do processo produtivo. Como podemos aplicar isso ao desenvolvimento?

Para ter qualidade precisamos de métricas, principalmente para sabermos se estamos indo bem ou mal, evoluindo ou regredindo. Vamos a um exemplo clássico com software: testes unitários. Vamos dizer que temos 50 testes em nossa aplicação e que isso representa uma cobertura de 10% de nosso código. Conforme evoluímos a aplicação, o índice de cobertura cai, e então perdemos qualidade. Se aumentamos o número de testes e, consequentemente, sua cobertura, melhoramos a qualidade.

Este é só um exemplo, mas imagine todas as métricas que podemos fazer com software: testes unitários, testes de comportamento, complexidade, métricas de performance, benchmarks. Saber mensurar essas métricas e aprimorá-las continuamente vai garantir um ótimo desempenho em qualquer projeto. Evoluir a qualidade do software significa evoluir também para o nosso próximo pilar.

Conhecimento

Você não pode conceber um software sem conhecer como se faz, certo? Comecei a desenvolver com PHP ainda em 2001 e até hoje (eu diria até eu cansar, o que não é fácil) estudo todos os dias, seja com livros, lendo blogs, vendo textos nas redes sociais, participando de eventos. Scientia Potentia est ou Conhecimento é Poder. Durante todos esses anos, me aprofundei em conhecer o PHP e todo dia tenho aprendido algo novo, novas (e antigas, mas eficientes) maneiras de fazer as coisas acontecer. Em outras palavras, tenho me especializado em PHP.

Mas nem só de linguagem vive o Desenvolvimento – Sistemas Operacionais, Redes Servidores, Bancos de Dados tradicionais e NoSql, Integração Contínua, Ferramentas de Desenvolvimento, Cloud Computing, Programação client-side, Mobile… nem as velhas e boas disciplinas e como Matemática e Português. Apesar de não dedicar a maior parte do tempo a cada um desses temas, tenho um leque de opções sempre que preciso decidir por um ou outro em cada tema, por exemplo, quando escolher o Apache frente ao Nginx, MongoDB frente ao Mysql ou PostgreSql etc.

Ter diversas cartas na manga sempre é bom, principalmente quando você conhece esses assuntos. Saber usá-las adequadamente vai fazer a diferença em qualquer projeto. E outro ponto: você não precisa ser um especialista em tópicos periféricos – o que não te impede de se tornar um também –, mas saber razoavelmente seu funcionamento e como obter mais informação é fundamental na construção de projetos de sucesso. O que nos leva a um dos mais importantes pilares: a criatividade.

Criatividade

Muitos pensadores e filósofos têm as mais diversas opiniões sobre esse tema, mas algo é sempre certo: a criatividade surge quando existe a insatisfação – parece até redundante, mas você não vai além se estiver acomodado com/em seu ambiente, sua zona de conforto.

Tudo o que conhecemos através da tecnologia surgiu de pensamentos fora dos modelos contemporâneos a eles. Indo a 1994, Rasmus Lerdorf queria apenar gerir eficientemente seu “blog” – disso surgiu a linguagem predominante na web. Outro exemplo é o microframework Respect, que surgiu quando era desnecessariamente complicado fazer validações em formulários. Em 1963, começou a produção de um programa de TV que era um tapa buraco na programação inglesa, e que hoje é a série de ficção científica a mais tempo no ar. Um pixel tornou o que era destinado a ser um mero personagem de jogo, na década de 70, a um ícone da cultura nerd.

O que quero dizer aqui é que nada do que conhecemos vai ser reconhecido se não soubermos usar bem cada conhecimento, cada habilidade, para construir nossas aplicações e, porque não, nossos projetos dentro e fora do código. Estimular a criatividade fazendo experimentos com código, processo, ou qualquer projeto que você ainda não imaginou faz, sim, toda a diferença!

Conclusão

Neste artigo falei “por alto” dos pilares que eu priorizei no meu desenvolvimento pessoal. Faço aqui o convite para que você busque os seus pilares. E mais: não busque ser excelente em um deles, mas seja Excelente em seu modo de agir, tente sempre superar as expectativas. Não se atenha somente em testar seu código, melhorar seu processo de desenvolvimento. Em uma adaptação livre de Aristóteles, deixo meus votos a vocês:

“Nós somos aquilo que fazemos repetidamente. Excelência, então, não deveria ser um modo de agir, mas um hábito.”

Sejam sempre Excelentes! Até a próxima!

***

Artigo publicado na Revista iMasters. Você pode assinar a Revista e receber as edições impressas em casa, saiba mais.