Introdução
Sobre a epifania…
Se eu vi mais longe, foi por estar sobre ombros de gigantes.
– Isaac Newton
Se eu fosse resumir o objetivo deste livro em uma linha ele seria:
Como construir software de qualidade dando atenção especial ao código-fonte..
Aprendizes e iniciantes na área da programação, ou desenvolvimento de software, como preferir, podem usar este livro como referência para o exercício da profissão.
Nesta obra há uma compilação de conhecimentos e habilidades necessárias para te ajudar a fazer boas decisões quando estás programando. O livro todo é sobre programar melhor.
Contudo, é importante dizer que de jeito nenhum se pretende esgotar o tema. Grande parte das ideias presentes aqui não vieram totalmente da minha cabeça. Ao contrário, as ideias são baseadas em grandes obras, as referências na área, escritas por excelentes profissionais, como Martin Fowler, Kent Beck, Joshua Bloch, entre outros.
Abordagem
Tenha em mente que este livro foi escrito a partir de notas de aula usadas no ensino de tópicos avançados de programação, tais como: técnicas, princípios e padrões de projeto de softwares, práticas específicas, etc. Esta origem deu ao livro as seguintes características:
- Dedicado ao ensino: foi projetado para ser didático, “digerível”, simples – mesmo que explique conceitos complexos;
- Focado na prática: foi pensando para o exercício do ofício, para trabalhar mesmo, e por isso é povoado de estudos de caso, exemplos e muitos códigos;
- No nosso idioma e cultura: não foi escrito para ser uma obra erudita e sim para ser simples de ler, acessível às pessoas que falam e/ou entendem português – com um leve sotaque gaúcho;
Códigos dos exemplos
A maior parte dos códigos está disponível na linguagem de programação Java. Ela é a linguagem mais usada na grande maioria dos livros de técnicas, práticas e padrões, isto é, sempre que a linguagem não é o foco do livro. Java também é bastante usada pelas faculdades e escolas técnicas, dado o suporte avançado aos conceitos de programação orientada a objetos e alinhamento com linguagens de modelagem visual, como a UML.
De fato, 97.312% do conteúdo deste livro é implementável em qualquer linguagem de programação, com poucos ajustes. O foco nunca é a linguagem, senão as técnicas! Para complementar, sempre que cabível, existem códigos de exemplo em outras linguagens como: C, PHP, Ruby, etc.
Todos os códigos estão disponíveis online em um repositório no github.com neste endereço: https://github.com/marciojrtorres/tecnicas-praticas-codificacao. Fique à vontade para baixá-los, adaptá-los, testá-los, forká-los, faça a festa com eles, mis códigos son sus códigos, é tudo opensource!
Organização dos capítulos
O livro está organizado tanto para cobrir a escrita de códigos novos como também a reescrita (refatoração) de códigos existentes. Portanto, resulta nos seguintes capítulos:
- Capítulo 000 – O Programador Profissional: oferece uma introdução ao tema central deste livro: códigos.
- Capítulo 001 – Boas Práticas de Codificação: apresenta as melhores práticas usadas pelos profissionais para escrever códigos de alta qualidade técnica.
- Capítulo 010 – Técnicas Avançadas de Codificação: mostra as técnicas aplicadas por programadores experientes para escrever códigos sofisticados e elegantes.
- Capítulo 011 – Melhorando Códigos Existentes: apresenta técnicas e práticas usadas para melhorar uma lógica e códigos que já existem (o famoso código legado).
- Capítulo 100 – Cenas dos Próximos Capítulos: faz uma análise do que foi visto e traz um resumo do que ficou para próximas publicações.
Para quem é este livro
Este é um livro destinado à Educação Profissional. Foi testado em sala de aula e usado nas disciplinas de Aspectos Avançados de Programação, Arquitetura e Projeto de Software e Tópicos Avançados, nos cursos de Análise e Desenvolvimento de Sistemas e Técnico em Informática para Internet, ambos do Instituto Federal de Educação, Ciência e Tecnologia do Rio Grande do Sul (IFRS).
É uma obra útil para estudantes que já passaram pelas disciplinas iniciais de seus cursos (como Lógica ou Introdução à Programação e Programação Orientada a Objetos) e que pretendem escrever códigos profissionalmente, para ingressar e obter êxito no mundo de trabalho.
Também pode atender programadores formados e mesmo aqueles que nunca fizeram um curso, mas que já trabalham na área e buscam um material técnico especializado que vá além do básico, com uma abordagem direta e aplicação prática.
Líderes Técnicos ou Gerentes de Projeto podem usar este livro para treinar suas equipes. Programadores experientes podem achar os tópicos muito básicos, afinal já passaram pelas armadilhas e intempéries que motivam estas práticas, isto é, já são profissionais. Talvez, ainda possam encontrar algumas coisinhas interessantes.
Academicamente, este livro é adequado ao ensino em cursos voltados para a Educação Profissional, Técnica e Tecnológica, tais como: Técnico em Informática, Técnico em Informática para Internet, Tecnologia em Análise e Desenvolvimento de Sistemas, Tecnologia em Sistemas para Internet, além de cursos de formação inicial e continuada na área de desenvolvimento de sistemas.
Ah, e antes de terminar, este livro é para as estudantes, para elas, para as mulheres na tecnologia, as desenvolvedoras, as programadoras. A língua portuguesa não possui, de fato, um gênero neutro. Portanto, saiba que sempre que eu menciono “programador”, na minha cabeça a imagem não é aquele estereótipo hacker da TV, é gente real, jovem, adulta, idosa, homens e mulheres, peles claras e escuras, cabelos curtos, longos, sem cabelo, enfim, é da superclasse abstrata humano que estou falando.
Para quem não é este livro
Não cobre construções básicas de programas. O livro não tem o objetivo de ensinar a programar do zero. Ao contrário, é um livro para ensinar a programar melhor. Se não sabes programar, se não passaste por uma disciplina introdutória à programação, é bem provável que não seja muito útil.
Não é sobre algoritmos e estruturas de dados. Embora algumas técnicas sejam relacionadas à performance, o livro não aborda técnicas de escrita de algoritmos para obter eficiência computacional.
Não é teórico. Não espere deste livro uma abordagem teórica. Ele foi escrito por um praticante para praticantes.
Convenções
A seguir algumas convenções a respeito da abordagem, tipografia e layout.
Acrônimos
Algumas palavras e nomes aparecem abreviados, usando siglas ou acrônimos. Na primeira vez que forem exibidos constará o nome completo e no restante do livro (salvo exceções) é usado o acrônimo. Por exemplo, Programação Orientada a Objetos é abreviada como POO.
Inglês
Este livro tem a proposta de proporcionar material técnico no nosso idioma. Entretanto, na área de desenvolvimento de softwares, o idioma inglês é predominante – nos códigos é inevitável. Por este motivo, termos e nomes amplamente conhecidos em inglês terão uma explicação em português, mas serão apresentados na sua forma original (em inglês). É importante te habituares, pois mesmo que pareça estranho alguém dizer “dropa a tabela” ou upa o código, é o modo como as pessoas falam no ambiente de trabalho – isso é importante em um livro voltado para a educação profissionalizante. Fique tranquilo se não sabes ler textos em inglês, pois as explicações estão no nosso idioma.
Códigos
Trechos de código são exibidos usando fonte de largura fixa.
Em meio ao texto eles aparecem como neste exemplo: “… usamos o método BaseDados.salva(Documento):boolean para …“. As assinaturas de métodos são apresentadas como Classe.metodo(TipoArgumento1, ..., TipoArgumentoN):TipoRetorno (semelhante às notações UML, caso conheças).
Trechos mais extensos de código são apresentados na forma a seguir:
Comentários seguido por reticências // ... significam código omitido. Às vezes o código inteiro é muito longo para ser colocado na listagem, então a parte irrelevante para o exemplo é omitida. Se quiseres ver o código inteiro ou copiá-lo, visite o link entre parênteses no título. Te sugiro, fortemente, que faças experiências com os códigos. Tente digitá-los em vez de copiá-los e os use em um toy project seu (projeto para aprendizado). Com certeza vai te garantir um aprendizado mais efetivo.
Dicas, Avisos e Observações
O livro está populado com dicas. A maioria é relacionada às práticas dos programadores profissionais, o que eles fazem, o que não fazem, com o quê se preocupam, como se alimentam e reproduzem – esta parte é brincadeira :). O formato está a seguir:
Sobre mim
Atualmente sou Professor no IFRS, atuo no curso Técnico em Informática para Internet e no curso superior em Tecnologia em Analise e Desenvolvimento de Sistemas.
Meus alunos perguntam: “professor, tu trabalha ou só dá aula?”
É a vida de quem ensina, ter que ouvir isso. Enfim, eu trabalho em sala de aula, sou um educador, e ainda participo de projetos internos e dou uns pitacos em sistemas alheios (atividade conhecida como consultoria :).
Anterior a isto, tenho uma história longa. Eu passei por vários marcos na linha do tempo da evolução da computação (é, eu sou velho). Para me conheceres melhor vou contar um pouco dessa história a seguir:
Eu nasci a dez mil anos atrás. Comecei programando na linguagem Basic, num CP500 da prológica. Não havia Internet naquela época. Se aprendia lendo revistas técnicas, transcrevendo códigos e fazendo experiências de tentativa-e-erro. Mais tarde comecei a desenvolver em dBase e depois Clipper, ambos sobre a plataforma MS-DOS. Joguei Prince of Persia, Wolfenstein e o primeiro DOOM - tinha que usar o DOS/4GW para liberar a memória estendida (mais que os 640KB usuais). Já montei meu próprio computador – quando ainda tinha que selecionar IRQ através de jumpers ou switches. Vivenciei a ascensão da interface gráfica - que bom, pois não aguentava mais ver caracteres em fósforo verde. Instalei o Windows 95 - trocando malditos 13 disquetes um-a-um. Meu computador tinha um Kit Multimídia da Creative - e uma placa de vídeo Voodoo. Migrei meus sistemas de Clipper para Visual Basic e mais tarde Delphi. Usei a Internet quando só existia HTML e “meia dúzia” de tags - sem CSS ou JavaScript. Acompanhei a ascensão da Internet e da Web. Presenciei o início do Linux, sua evolução e sua importância para a consolidação dos sistemas online - junto com Perl, Apache, MySQL, PHP e outras várias tecnologias e ferramentas pioneiras. Já instalei o Conectiva Linux e então conheci o que é uma linha de comando de verdade. Comecei a programar em Java a partir da versão 1.3 e Java Enteprise (EE) a partir do 1.4. Ainda lembro como sofri para entender o que era Orientação a Objetos - velhos hábitos procedurais são difíceis de perder. Acompanhei a Googlificação e o crescimento do comércio eletrônico - e também o estouro da bolha da Internet.
Não tenho dúvidas que sou um programador que ensina ao mesmo tempo que um professor que programa.