KISS - Keep it simple, stupid!

Desvendando mentiras sobre a XP

postado por lucas em 18/02/2009 12:23:38

A algum tempo estive pensando em escrever um pouco sobre o desenvolvimento de software e, recentemente estive refletindo bastante sobre tudo que ouvi no começo do aprendizado e o que me deparo constantemente. Pensei então em começar a escrever uma série de posts para passar algumas reflexões que fiz.

No primeiro deles gostaria de falar de um dos principais erros que cometi logo no início do meu estudo. Desconfiar que aplicar uma metodologia de desenvolvimento poderia ser fácil. Meu erro foi achar que bastava escrever a receita de um bolo de cenoura junto com o cliente e depois seguir a receita vendo se todos estavam colocando os ingredientes certos.

Não demorou muito pra perceber que o cliente não quer necessariamente um bolo de cenoura, e na grande maioria ele nem sabe se quer realmente um bolo. E o pior, ninguém sabia ao certo, quanto tempo de forno era necessário pra assar aquele bolo que nunca tinhamos feito.

Foi então que, durante um evento conheci a Programação Extrema(XP), não deu outra, me apaixonei, ela respondia perfeitamente muitas de minhas dúvidas, e um amigo que já a estudava a algum tempo me serviu como grande fonte de ensino e expiração.

Antes de começar os estudos já cometi um grande erro que foi confundir metodologias ágeis com codifica-corrige. Este mito não deve ocorrer e é desvendado sem muito precisar ler sobre o que é XP. A XP que determina práticas de planejamento e gerenciamento do software, o que em muito difere do codifica-corrige que não deveria nem mesmo ser considerada uma metodologia.

Outro erro facilmente cometível é deixar o projeto correr julgando que com os cartões sendo feitos toda semana, o projeto vai tomar um rumo. O que o gerente precisa ter em mente é que nem sempre os desenvolvedores sabem o que realmente é necessário fazer com mais urgência, e que o cliente quer muita coisa que muitas vezes não precisa.

Para elucidar este fato existe uma metáfora de que se encaixa perfeitamente, a metáfora do cheff de cozinha, Nela, os desenvolvedores seriam os cozinheiros, que tem suas próprias preferências de temperos e sabem realmente como preparar o prato, o gerente seria o cheff que conversa com clientes e inventa os pratos, e o cliente seria o consumidor. Em um ambiente de criação, o cheff pergunta  ao consumidor o que ele gostaria, e este responde que gosta de jiló e de chocolate e quer comer isso no fim da noite porém, o cheff não vai atender cegamente o que o consumidor deseja, ele indica ao cliente comê-los separadamente primeiro o jiló e depois o chocolate sendo que muitas vezes o cheff mostra pro cliente que jiló não é realmente o que o cliente deseja e sugere algo que seria de muito mais gosto a ele.

O erro de deixar o projeto correr, é muitas vezes cometido por alguns que dizem implemetar XP mas não a implementam na realidade. Todo projeto precisa de um rumo, o que a XP realmente faz é dizer que se planejar é bom, vamos planejar toda semana, e este é um dos fatos que faz diferir de outras metodologias não-ágeis, as quais preferem realizar um enorme estudo de tudo o que deve ser realizado no projeto inteiro antes de começar a colocar a mão em código.

Tags: , , , ,
Topo

Sem comentários

Ótima apresentação sobre Framework Web

postado por João José Pedrini em 10/02/2009 03:22:37
Tags: , , ,
Topo

2 Comentários

13 práticas para se tornar um melhor desenvolvedor CakePHP

postado por João José Pedrini em 21/01/2009 20:43:15

Acredito que estou completando mais de 1 ano e meio de desenvolvimento com CakePHP e neste período quebrei muito a cabeça, entreguei vários projetos e, com certeza, aprendi bastante. Por isso, queria compartilhar com vocês algumas práticas que aprendi que me permitiram chegar ao conhecimento que cheguei. Por enquanto colocarei “somente” 13 práticas e não me aprofundarei em cada tópico, em outros posts explicarei mais cada prática.

1 º – Linux

As práticas não estão em ordem de importância, mesmo porque eu não sou um grande fã do Linux. Mas tenho que reconhecer que ele é um grande ambiente de desenvolvimento. Lógico, quando você não sabe mexer com Linux e não está acostumado com linha de comando, tudo será odioso. Mas digo a vocês, mesmo eu sendo um windeiro de carteirinha, minhas habilidades de desenvolvimento melhoraram bastante depois que comecei a usar o Linux. Hoje, não consigo desenvolver uma linha de código no Windows. Recomendo a todos a tentarem ficar um mês programando só no Linux, tenho certeza que não voltarão para o Window. Para aqueles que não sabem utilizar Linux, dou uma dica: tentem pedir para algum amigo linuxzeiro para ser seu tutor, isto economiza muitas horas de procura no Google!

2º – Utilizar VirtualHosts para configurar ambientes de desenvolvimento

VirtualHosts é um recurso do Apache que permite criar vários Hosts em uma única instância do servidor HTTP. A muito tempo quero falar sobre VirtualHost e configuração de ambientes de desenvolvimento para CakePHP, mas sempre deixo pra lá, infelizmente não será neste post que falarei =). Esta prática não muda muito sua rotina de programação, mas pode melhorar em muito sua organização.

3º – Sistema de versionamento, GIT

Bem, sistema de versionamento é crucial para qualquer desenvolvimento com mais de 1 pessoa, mas sinceramente eu recomendaria você versionar mesmo que esteja sozinho. É incrível a capacidade que os SCM (source code management) possui de salvar nossas vidas! Esquecer o que você fez a uma semana atrás, nunca mais! Recentemente conheci o GIT, no começo não entendi muito o conceito dele, mas depois que começamos a utilizar aqui na empresa, vejo o GIT com outros olhos. Este sem dúvida foi um dos meus maiores crescimento como desenvolver nos últimos anos. Com certeza falarei mais sobre ele.

4º – Desenvolvimento orientado a Testes

Já falei sobre TDD em algumas oportunidades aqui no blog e no grupo CakePHP-Tuga, mas nunca será o bastante para falar sobre essa impressionante técnica. Sabe quando você faz um investimento grande que no começo só te trás prejuízo? Aqueles investimentos que você se pergunta se realmente valerá a pena? E no final você recebe muito mais do que tinha previsto? Eu vejo TDD desta forma. TDD é um investimento de longo prazo, que necessita dedicação e comprometimento, mas rende muito mais que simplesmente uma aplicação testada. Eu gosto muito de TDD, ainda não me comprometo nem me dedico o suficiente, mas nas vezes que pratiquei fui muito bem recompensado. Sempre estou tentando falar sobre testes automatizados aqui no blog pois acredito que todos os desenvolvedores deveriam aderir a essa idéia.

5º – Extensões do CakePHP

Utilizar um framework e não aproveitar a organização que ele proporciona é quase uma burrice. No CakePHP temos 5 possibilidades de extensões: Component, Behavior, Helper, DataSource e Plugin, sem contar as classes de Shell. Estas extensões, quando bem utilizadas, permitem você reaproveitar muito seus códigos. Eu costumo falar nas minhas apresentações que Component, Behavior e Helper é o meio que o core team do CakePHP deu aos desenvolvedores para programarmos do jeito “orientado a objeto de ser”. Portanto, utilizem sempre que possível! Recentemente tive um contato maior com Plugins e gostei muito do que eu vi, vou pesquisar mais e tentar falar alguma coisa aqui.

O bom das extensões são as possibilidades de troca de conhecimento. Ser um melhor desenvolvedor também é saber utilizar bons códigos. Além do Bakery, sempre acompanho bastante o movimento dos desenvolvedores CakePHP no GitHub, vocês podem procurar por CakePHP ou mesmo ver alguns dos repositórios e usuários que estou seguindo.

6º – Participar da comunidade

Entrar no grupo de discussão, fazer, comentar ou acompanhar blogs, freqüentar o canal do IRC, publicar extensões, traduzir documentação, reportar bugs,  etc! O importante é participar! Eu, ainda, não faço tudo isto mas faço o possível. Acredito que o contato com pessoas é melhor forma de se melhorar, participar da comunidade é a melhor forma de se manter em contato com as pessoas, portanto, participar da comunidade é a melhor forma de crescer. Tenho certeza que você aprenderá todos os dias participar de metade do que estou dizendo. Eu particularmente tenho inveja da comunidade Rails brasileira, a comunidade Rails é tão importante que determina tendências. Eu participei do RailsSummit e vi isso na pele.

7º – IDE

Eu sei que irei entrar num ponto polêmico mas eu sou um defensor das IDE’s. Eu particularmente acredito que tenho muitos ganhos utilizando IDE. Se sua máquina possibilita utilizar, utilize. Aqui no blog já falei sobre o Komodo, que é minha IDE, até existe uma extensão do CakePHP para ele, vale a pena experimentar.

8º Implantação automatizada

Eu ainda não faço meus deploys automaticamente, mas estou estudando muito sobre. Não existe nada mais chato que enviar site para o servidor… SEMPRE esqueço alguma coisa. Automatizar a implantação é a maneira mais prática e rápida de colocar seus sistemas no ar, sem contar que você poderá criar diversas rotinas de segurança que manualmente seria um “pé no saco”. Para aqueles que querem pesquisar um pouco, recomendo ler sobre Capistrano.

9º Linha de Comando

Para quem é linuxzeiro sabe o que eu estou dizendo. É impressionante a capacidade que tem uma única linha de comando. Quando comecei a utilizar o linux odiava ficar abrando o Bash para poder fazer o que eu queria, agora, eu faço quase tudo com linha de comando. O problema agora que estou tão acostumado que aperto F12 até quando quero ir no banheiro =/.

10º Debug

Eu queria não ter que debugar, mas infelizmente nada é como queremos. Então, ter a prática de debugar é primordial. Em framework debugar é ainda mais interessante, pois são poucos os desenvolvedores que se preocupam em saber “de onde” vem a mágica dos framework. Debugando você pode ver cada pulo que suas requisição dão.  Já expliquei aqui como se faz para debugar aplicações CakePHP com Komodo.

11º Cache

Técnicas de cacheamento são importantíssimas hoje em dia, ainda mais com o efeito Digg a solta.  Eu vi o poder dos caches em um dos meus sites com CakePHP, no caso foi necessário cachear a página inicial, sem isso não conseguia responder nem 1 req/s.

12º Ler código

Sempre é bom ler um código, sempre se aprende uma técnica nova, um algoritmo novo, uma função diferente, etc. Recentemente tenho lido bastante o código do CakePHP e tenho aprendido bastante. Lendo código não fico preso à boa vontade dos programadores para documentar uma determinada funcionalidade, sempre estou a frente das novidades. E ler os testes é ainda mais vantajoso, desafio a todos, antes de perguntar como se utiliza uma determinada função do Cake, dar uma olhada nos testes.

13º Desenvolvimento Ágil

A última mas não menos importante: desenvolvimento ágil. Acho que tudo que falei até agora pode ser resumido em desenvolvimento ágil. Acho que depois que descobri o D.A. minha vida mudou, juro! Melhorei muito como programador e estou sempre melhorando. Mudei até mesmo o meu jeito de pensar. Aqui na empresa utilizamos XP em tudo que podemos, na verdade é a filosofia da empresa. Gostaria que mais pessoas entendessem sobre metodologia ágil.

Bem pessoal, acho que é isso, vou tentar escrever melhor sobre cada assunto desse. Espero que vocês utilizem estas práticas, não que esse seja o melhor caminho, mas acho que pode ajudar. Boa sorte aos programadores e aquele abraço!

Tags: , , , , , , ,
Topo

5 Comentários

Cozinhando: da fogueira ao microondas

postado por Fabrício Ferracioli em 18/08/2008 17:59:20

Comecei a programar para web usando PHP, quando o a versão 4 reinava sem nenhuma interferência do versão 5. Na época, ainda não trabalhava com Orientação a Objetos, mas tinha o interesse em aprender. Foi então que decidi aprender logo o PHP 5, pois li que seu suporte a O.O. era muito melhor. Hoje lamento o fato do PHP 4 ser descontinuado somente agora, se fosse naquele tempo não notaria a diferença.

Em conjunto com o PHP tive que aprender uma variedade de coisas para realmente poder desenvolver. HTML, CSS, UML, JavaScript, SQL, arquitetura Cliente-Servidor, HTTP, entre outros. Pois é, eu imaginava que somente com o PHP faria milagres, afinal era muito mais fácil que C, a linguagem que melhor conhecia. Agora vocês perguntam: “C? Mas C para web? Por que não iniciou com outra?” Calma, inicei na programação com desktop, programas de faculdade. Com isso tive uma boa base, mas o que eu realmente queria era Web!

Após algum tempo já conseguia desenvolver aplicações um pouco mais completas. Já possuia conhecimento para desenvolver aplicações orientadas a objeto, utilizando banco de dados, o que pra mim era impressionante. Mas com os projetos sendo finalizados e iniciados, percebi que sempre havia a necessidade de implementar alguns módulos em todos os projetos. Para minimizar o meu trabalho resgatei alguns códigos já desenvolvidos, realizei um refactoring (é impressionante como um código pode melhorar depois de alguns meses após o seu término) e montei algumas classes com esses códigos que sempre utilizava em projetos. Agora sim, a maioria dos requisitos mais comuns podia ser implementada só com algumas chamadas de métodos que eu conhecia, afinal, havia desenvolvido.

Desenvolver suas próprias soluções e poder utilizá-las em diversos sistemas é algo bastante gratificante, pois mostra que o que foi desenvolvido está correto, certo? Nem sempre, a única pessoa que garantia que meu código estava correto era eu mesmo. Não havia mais ninguém que poderia falar bem de meu código. Testes? Na época eu testava, sim. Mas não seguia nenhuma metodologia.

Rodou e deu uma resposta certa? Beleza! Funciona!.

Mesmo nunca tendo grandes problemas com as minhas classes, ainda era necessária uma camada a mais de profissionalismo.
Em algumas “conversas de desenvolvedor” acabei conhecendo através de meus companheiros o framework CakePHP. Fiquei muito animado com as informações que tive quando conheci, tudo parecia fácil e rápido, uma ótima primeira impressão! Logo entrei no site, fiz o download, li algumas especificações, achei coisas mais interessantes do que já havia ouvido falar. Era o momento de começar a desenvolver. Apesar da experiência com PHP e outros conhecimentos relacionados a web, acabei esbarrando no conceito de MVC. Já desenvolvia em camadas há algum tempo, mas da minha maneira; eu fazia meu MVC. Tive um pouco de dificuldade para aprender, era até engraçado: “De onde surgiu essa variável? Essa classe, onde foi declarada?”. Via o pessoal programando com o CakePHP e achava tudo muito incrível. Quando chegava minha vez, era frustante.

Mas, da mesma maneira que acontece com qualquer linguagem, existe uma curva de aprendizado. Como já programava em PHP imaginei que seria muito fácil sair desenvolvendo bem em CakePHP. Depois de compreender como o Framework é estruturado e o funcionamento do MVC, foi tudo voltando a normalidade. Bastam algumas consultas no manual ou na API para resolver as dúvidas. Agora sim, encontrei uma solução confiável! E dessa vez, não sou apenas eu que digo isso, mas toda uma comunidade. Além disso, confirmo a minha impressão inicial, realmente é muito fácil e rápido. Além disso, a estrutura do MVC proporciona uma separação entre dados e lógica que ajuda muito no desenvolvimento, ficando extremamente mais simples de realizar manutenção em código, visto que o problema é mais fácilmente localizado.

Agora, vamos a um pequeno exercício de imaginação que resume tudo isso. Imagine que você precisa fazer um bolo rapidamente. Agora vamos imaginar quatro situações.

Na primeira você só dispõe de uma fogueira. Não há tigelas, colheres, nada, somente a fogueira. Você tem liberdade para utilizar qualquer recurso e transformá-lo em ferramenta. Certamente, nesse contexto, você se tornará alguém muito flexível, pois ganhará capacidade de fazer o bolo com muitos meios diferentes, entretanto, até conseguir montar as ferramentas necessárias para confecção do bolo, muito tempo teria passado e até mesmo a fogueira já poderia ter se apagado. Agora faça uma analogia com a minha experiência em C. Aprendi a programar e a realizar tarefas de diversas maneiras, entretanto, quando fosse necessária agilidade no desenvolvimento, provavelmente perderia muito tempo desenvolvendo uma solução, que ao fim poderia dar errado.

Agora pense que você possui um fogão a lenha, algumas ferramentas rudimentares e uma forma para o bolo. Ainda não será muito ágil seu desenvolvimento, pois somente para acender o fogo você terá que cortar lenha e colocar no fogão. Além disso, ainda será necessário preparar os ingredientes do bolo com ferramentas que nem sempre são adequadas ou que ainda podem melhorar muito. Apesar de ser um pouco mais rápido que a situação anterior, ainda não é uma maneira muito profissional de cozinhar, e está em total desuso nos padrões atuais. Agora ligue esses fatos ao PHP 4. Apesar de ser possível fazer muitas coisas interessantes, é necessário pensar em diversas características que são obsoletas ou podem melhorar.

Agora pense que você possui um fogão industrial! Puxa, melhorou bastante! Além do fogão você tem muitas ferramentas, desde pequenas colheres até batedeiras. Fazer o bolo nesse ponto será muito mais fácil, mesmo que você não saiba como. Procure uma receita e apenas siga os passos. É bem provável que o resultado obtido nesse ponto seja bem interessante, e um pouco menos demorado, dependendo da complexidade da receita. Ao terminar você vê o seu bolo e se orgulha do resultado, ele parece extremamente saboroso. Mas, certamente nem todos vão gostar dele. Algo semelhante pode acontecer com minhas classes em PHP 5. Apesar de ser muito interessante pra mim utilizá-las, não garanto que elas serão efetivas em todos os sistemas, e que poderão ser utilizadas em qualquer sistema sem modificações.

Finalmente, imagine que você possui um microoondas e uma daquelas caixinhas de bolo! Agora vocês pensam:

Mas o bolo de microondas é muito inferior ao bolo feito no fogão ingrediente a ingrediente!

Concordo plenamente com vocês. Minha mãe é confeiteira, sei como demora e dá trabalho, mas também sei como fica gostoso um bolo feito passo a passo! Mas estamos analisando agilidade. O bolo de microondas fica pronto em poucos passos e pouco tempo. Além disso, a probabilidade de dar errado é mínima, basta seguir a receita do verso e não ultrapassar o tempo necessário para que ele fique pronto. Isso é o que possível com o CakePHP. Uma solução robusta, rápida e testada. Apesar de desenvolver suas próprias soluções ser extremamente mais saboroso e gratificante, projetos não estão somente ligados a parte de programação. São necessárias algumas garantias que o CakePHP ajuda a maximizar.

Aos que não conhecem o CakePHP, fica meu incentivo para que garantam sua fatia desse bolo delicioso! Bom apetite!

Carrot Cake Pac Man
Creative Commons License photo credit: Aaron_M

Tags: , , ,
Topo

Sem comentários

Creative Commons License
Sou Ágil: KISS em http://kiss.souagil.com.br está licenciado sobre
Creative Commons Attribution-Share Alike 2.5 Brazil License.

souÁgil