Dicas
Autor: Blaine | Publicado: 2009-08-14T20:52:00-07:00

Alguns alunos meus e amigos me perguntaram em diferentes momentos o que eu recomendaria como primeiros passos para quem está começando no mundo do desenvolvimento. Então aqui vão algumas dicas:Convenção de CódigoSempre que eu lido com o código, eu fico impressionado com a criatividade de programadores em codificar. Infelizmente, essa criatividade é utilizada de maneira a complicar algo simples, o que virá a dificultar a manutenibilidade do projeto.  Quando se está aprendendo a programar, é comum se desenvolver de maneira desleixada se preocupando apenas com o resultado da execução. Essa prática deve ser evitada o quanto antes e uma das melhores maneiras de se fazer isso é se adotando uma convenção de código.Não se espante ao discordar de algo da convenção. Praticamente todas as pessoas discordam da convenção em um ou mais itens, mas, ainda assim, é importante se aplicar a convenção combinada do começo ao fim do projeto. Num próximo projeto , caso toda a equipe fique de acordo, pode-se aperfeiçoar a convenção para o seu contexto, baseando-se também nas próprias lições aprendidas dos projetos passados.Recomendo se começar com alguma convenção madura como a da Zend ou da Sun.Controle de Versão
Hoje em dia, é praticamente impossível se trabalhar com programação sem se utilizar uma ferramenta de controle de versão. A qualidade das informações que esse tipo de ferramenta traz para o controle das alterações e versões do seu sistema torna-se imprecindivel quando se começa a desenvolver projetos grandes, seja em equipe ou não.
Vantagens:Controlar "o que", "quando", "por quem" e "por que" de cada alteração feita.

Comparar versões do sistema.

Voltar a uma versão do sistema.

Combinar alterações.

Ver o histórico de um arquivo ou pasta.

Interface com várias aplicações que montam diferentes tipos de relatórios a partir dos dados do servidor.

Interface com várias aplicações possibilitando o disparo de testes automáticos, criação / alteração de demandas via mensagens de envio.

Dentre os mais famosos do momento temos o Subversion e o Mercurial.Documentação automática Documentar todos os métodos, classes e pacotes para possibilitar uma melhor manutenção é requisito mínimo para um bom projeto. Quando se documenta utilizando algum padrão de de documentação estilo javadoc, algumas ferramentas, entre elas o doxygen, possibilita a saída de relatórios muito ricos a partir da documentação criada. Um exemplo disto pode ser visto aqui, onde a documentação do projeto foi criada automaticamente a partir dos comentários existentes.Teste Unitário Apesar de ser algo essencial para a criação de softwares de qualidade, os testes unitários ainda são difíceis de serem encontrados em aplicações comerciais. Esses testes automáticos, também conhecidos como teste de fumaça quando aplicados a contextos pequenos, são similares aos casos de teste só que feitos automaticamente desde de contextos pequenos, como pequenos métodos que alteram uma string, até em contextos complexos, onde se pode testar todo um fluxo de funcionalidades, trabalhando em conjunto, num projeto.Ao escrever esses testes automáticos existem ferramentas que podem executa todos eles em seu sistema, informar quais testes falharam, quais classes, métodos e linhas não foram executados, o que lhe informa que ou faltam testes no seu sistema ou existe código excedente.
Essas validações automáticas podem ser feitas a cada atualização do seu controle de versão, o que possibilita se saber de novos erros existentes no sistema assim que eles surgem, tornando seu sistema mais confiável e a manutenção facilitada.As ferramentas mais conhecidas de teste unitário sao o  JUnit e o PHPUnit e um exemplo de saída do PHPUnit pode ser vista aqui.Padrões da Web
Conhecer os padrões da W3C deveria ser o ponto de partida de qualquer programador web. Infelizmente, isso não é nem de longe a regra. Eu, quando dou aula de programação, sempre me dedico a falar sobre o que é um XML, Schema e DTD, ensino os meus alunos a desenvolverem XHTML e falo um pouco sobre as validações da W3C.  Para auxiliar no aperfeiçoamento das suas páginas desenvolvidas eu recomendo mais um plugin do firefox chamado Web Developer além do Relaxed e o Html Validator que infelizmente ainda não funciona no linux.
Para quem está realmente começando, um dos melhores sites em português é o  Tableless.com.br. O w3schools  é outra excelente referencia em relação ao assunto.Prototipagem
Prototipo, WireFrame, Rascunho de Tela, etc. Todos esses nomes são para desenhos das telas que devem guiar os designers na criação do desenho final da tela. Esse rascunho será comparado com o fluxo de teste planejado e deve ser apresentado ao cliente antes de se iniciar a construção real do sistema. É natural que, com o desenvolvimento do sistema, alterações sejam feitas nas telas. Mas, ainda assim, o protótipo auxilia muito a reduzir a quantidade futura de alterações já dando um ponto de partida confiável para o desenvolvimento do sistema.
Algumas empresas fazem protótipo de tela em ferramentas não especializadas como powerpoint ou até mesmo no photoshop ou gimp mas existem muitas ferramentas feitas especialmente com este propósito. Dentre as gratuitas, a que eu mais recomendo é o Pencil Project, um plugin para firefox muito bom para prototipagem.Modelagem de banco
Saber modelar bem um banco de dados e compreender um modelo é essencial para um bom sistema. Ao meu ver, a ferramenta gratuita mais popular é o DBDesigner4, mas, eu não a considero a melhor opção. Algumas outras opções,  ainda gratuitas, que eu recomendo são o JDeveloper e o Power Architect. 
Mas, é essencial estudar como fazer uma boa modelagem de banco de dados, não se restrigindo apenas às ferramentas. É importante estudar como deve ser uma boa modelagem de banco de dados, e existem muitos bons livros gratuitos para leitura como o Data Modeling FundamentalsModelagem de Processos de Negócio - BPM Uma das ( muitas ) maneiras de se modelar um processo antes de implementa-lo é pelo bpm. Uma representação gráfica do negócio a ser implementado utilizando uma notação padrão. Quanto a ferramentas gratuitas para geração de bpms, recomendo o BizAgi apesar de não funciona no linux ( sem wine ou vbox ). Estou testando recentemente algumas aplicações novas, dentre elas o BonitaSoft, mas, ainda estou as estudando.UML Muito se fala de UML e existem muitos livros sobre o assunto, principalmente os livros de Engenharia de Software como o Sommerville. Não querendo entrar na discussão ideológica do assunto, um bom programador precisa conhecer os diagramas UML.

Dentre as ferramentas para criação de diagramas UML gratuitas e que rodam tanto no linux quando no windows, a que, até o momento, tem me mostrado os melhores resultados é o JDeveloper. Ferramenta muito boa para geração dos casos de uso, diagramas de classes, com sincronia codigo x diagrama,  diagrama de negócio ( uma versão do UML do  BPM ), etc. Não é, obviamente, o visual paradigm, mas, dentre as restrições apresentadas, me tem sido muito útil.

O diagrama no JDeveloper que para mim mostrou as maiores limitações foi o de sequencia. Mesmo após se informar que um "LifeTime" é um objeto de uma classe já existente ele não procura pelos métodos, trava as vezes sem nenhum motivo aparente, etc. Mas, como os projetos que eu tenho trabalhado recentemente são todos PHP, eu peguei o rascunho de código Java gerado pelo JDeveloper, converti em classes PHP e usei o CodeToDiagram conseguindo resultados muito legais.

Tenho também analisado outras opções como o Jude e StarUml mas confesso com pouca dedicação pela falta de tempo. Caso alguma dessas ferramentas venha a me encantar, farei um post novo a respeito.
Espero que essa descrição geral possa vir a ajudar a todos. Criticas e sujestões fiquem a vontade. Um grande abraço.