Deixe seu código limpo e brilhante Desmistificando Clean Code com Java e Python
JOSÉ YOSHIRIROSobre o livro
Este livro é uma coleção de códigos de exemplos em Java e Python voltados para iniciantes em programação visando explorar os principais conceitos abordados na obra "Clean Code", escrita por Robert Cecil Martin (conhecido como uncle Bob), em 2008.
Esta obra não é uma tradução. Os principais ensinamentos do livro 'Clean Code' são citados aqui com outras palavras, com linguagem e exemplos que espero que sejam mais fáceis de serem aprendidos por iniciantes em desenvolvimento de software.
Sou professor há mais de uma década e perdi as contas de quantas vezes indiquei o Clean Code para meus alunos. Então notei que os mais iniciantes davam um feedback um tanto negativo. Não sobre a obra, mas sobre a leitura. É que era comum me falarem que não conseguiam compreender boa parte dos conceitos devido aos termos técnicos e exemplos de código contidos no livro. Outros não tinham acesso à versão traduzida e não conseguiam ler em inglês. Outros ainda só tinham acesso à versão traduzida e acharam ela confusa (pois os códigos de exemplo são em inglês nela).
Cheguei então à conclusão de que, para iniciantes em programação e/ou pessoas sem proficiência de leitura em inglês, o livro tinha várias barreiras. Por isso decidi escrever esta obra toda em português e com linguagem e exemplos de códigos mais simples para iniciantes. Também resolvi dar exemplos de códigos em duas linguagens de programação muito populares (Java e Python) para poder tornar o conteúdo mais acessível para uma maior quantidade de estudantes iniciantes no mundo do desenvolvimento de software. A versão do Java usada foi a 11 (porém, uma funcionalidade lançada no Java 14 é mencionada). A versão do Python usada foi a 3.8.
Nem todos os conceitos da obra que inspirou este livro estão aqui. Achei melhor não citar aqueles que acredito que não são apropriados para serem ensinados ao público-alvo desta obra (novatos e novatas em programação). Por favor, uncle Bob, não fique chateado comigo ;)
Público-alvo
Esta obra destina-se a estudantes e profissionais iniciantes de desenvolvimento de software. Apesar de a obra conter exemplos de código em Java e Python, estudantes e profissionais de várias outras linguagens podem aprender com ela, contanto que a sintaxe e as convenções de código não sejam muito diferentes às dessas duas linguagens.
Este livro NÃO é uma obra para ensinar a programar; porém, se propõe a ser uma ferramenta de aprofundamento para quem ainda é iniciante nesse mundo do desenvolvimento de software.
Pré-requisitos
Para melhor acompanhar o conteúdo desta obra, basta ter noções básicas de programação (variáveis, funções e estruturas de controle e repetição) e pelo menos uma pequena noção dos conceitos da programação orientada a objetos.
Sobre o autor
José Yoshiriro Ajisaka Ramos, mais conhecido como Yoshi, nasceu em 1981 em Belém (PA). É bacharel em Sistemas de Informação, especialista em Engenharia de Sistemas e mestrando em Administração das Organizações pela USP. Possui certificações internacionais OCUP Fundamental, SCBCD 5, SCWCD 5, SCJP 6 e SOA Suite 11g Certified Implementation Specialist.
Atua profissionalmente com desenvolvimento de software desde 2002, mas programa desde 1994. Atuou na criação e/ou manutenção de sistemas usados em empresas como TJE-PA, BrasilPrev, Rico, Caixa Econômica Federal, DETRAN-PA, BASA, Citibank, American Red Cross (EUA) e OneBlood (EUA). Também colaborou com os projetos open source Struts 2 e Grails. Programar é uma de suas grandes paixões.
É professor desde 2003, atuando como instrutor em vários cursos de programação. Como docente em nível superior, já trabalhou para: UAB/IFPA; Faculdade Ipiranga e FIAP. No início de 2014, passou a compor o corpo docente da faculdade São Paulo Tech School - SPTech. Certamente já teve mais de mil alunos. Publicou vários artigos sobre programação nas revistas Mundo Java e GroovyMag (EUA). É autor de outro livro, o 'Spock framework - Testes automatizados para Java, Android e REST' publicado pela Casa do Código. Palestrou em diversos eventos de tecnologia, como na Virada Tecnológica de São Paulo 2017, nos TDC São Paulo de 2014, 2015, 2017 e 2019, e no FISL de 2015. Ensinar é sua grande paixão.
Profissionais que colaboraram nesta obra
Alguns incríveis profissionais de desenvolvimento de software ajudaram gentilmente na construção desta obra. Eles deram suas valiosas opiniões sobre os princípios de código limpo. Essas opiniões estão distribuídas por todo o livro. Foram eles:
Eduardo Martins Guerra: Doutor e mestre em Engenharia Eletrônica e Computação pelo ITA. Atualmente faz pesquisa na área de engenharia de software na Free University of Bolzen-Bolzano. Foi editor da revista Mundo Java por 7 anos, atuou como professor no ITA e como pesquisador no INPE. Possui mais de 100 artigos técnicos publicados em conferências e revistas nacionais e internacionais.
Camila Fernandez Achutti: Mestra em Ciência da Computação pela USP. Doutoranda pela Escola Politécnica da USP. Trabalha com desenvolvimento de software desde 2011. Tem as seguintes empresas em seu currículo: Mastertech, SOMAS, Insper, FIAP e Google.
Rafael Santana Oliveira: Mestre em Ciência da Computação pela UFPA. Trabalha com desenvolvimento de software desde 2013. Tem as seguintes empresas em seu currículo: Metasix, Itaú e Zettle by PayPal.
Renan Rodrigo Barbosa: Mestre em Ciência da Computação pelo IME-USP. Trabalha com desenvolvimento de software desde 2017. Tem as seguintes empresas em seu currículo: SENAI, UNESP, Mastertech, Red Hat e Canonical.
Rodrigo Vieira Pinto: Mestre em Engenharia de Software pelo IPT-SP e especialista em Engenharia de Software pela PUC-SP. Trabalha com desenvolvimento de software desde 2004. Tem as seguintes empresas em seu currículo: Elo7, PicPay, Tokio Marine, SPTech (antiga Bandtec), VR Benefícios, Caelum, Alura e FIAP.
Prefácio
Por Prof. MSc. Carlos Rafael Gimenes das Neves
Acabaram de se completar 27 anos desde que iniciei no mundo da codificação de maneira não profissional, aos 12 anos de idade. E foi aos 16 anos de idade que, como parte do meu estágio obrigatório por estar fazendo "colegial técnico", atuei profissionalmente pela primeira vez, desenvolvendo sites para a empresa do meu professor, que me convidou para trabalhar logo que teve a oportunidade ao longo do 3º ano do ensino médio.
Desde aquela época, experimentei na prática a ascensão e queda de diversas linguagens de programação, plataformas, ferramentas, frameworks, bibliotecas e o que mais se possa imaginar. Olhar para trás nesse momento é um exercício que por vezes desperta um certo sorriso no rosto, o mesmo sorriso que você dá quando vê seu filho tentando fazer algo pela primeira vez, que você sabe que vai dar errado, mas o deixa tentar mesmo assim, só para que aprenda. Digo isso porque era comum ouvir frases como "se você não souber X, nunca conseguirá coisa alguma na vida". Ora, onde está esse X hoje, quer seja X uma linguagem de programação ou uma ferramenta qualquer?
Alguns desses X que foram concebidos ao longo dos anos 1980, 1990 e até mesmo 2000 ainda estão por aí, firmes e fortes, sustentando empresas e, direta ou indiretamente, auxiliando no nosso dia a dia. Porém, incontáveis X dessa mesma época hoje descansam em paz no cemitério virtual das tecnologias passadas.
Fiz esse retorno ao passado apenas para ajudar a enaltecer um ponto importante: diferente de inúmeras ferramentas tecnológicas esquecidas, algumas coisas permaneceram na minha vida todo esse tempo, e só têm evoluído, graças a Deus: a habilidade de resolver problemas, a criatividade para combinar diferentes soluções, a lógica além de tantos outras soft skills.
Quem me conhece sabe que eu canto aos sete ventos: "não se deve idolatrar a chave de fenda". Ferramentas passam. As pessoas e suas habilidades ficam. Não importa se eu preciso escrever ABC em uma linguagem de programação para ordenar uma lista de maneira crescente, enquanto em outra linguagem eu precise escrever XYZ. Isso não torna uma linguagem melhor ou pior do que a outra. O fato é que eu quero ordenar uma lista! Esse tipo de necessidade — a de expressar uma ideia de modo a resolver um problema — não mudou ao longo dos anos.
Assim como ocorre com linguagens humanas, como Português ou Inglês, as linguagens de programação oferecem ao escritor (programador) uma liberdade quase poética para expressar suas ideias da forma que quiser. Em português existem textos sucintos, prolixos, confusos, limpos... Alguns agradam o leitor no momento da leitura, enquanto outros, por vezes, sequer conseguem transmitir claramente a ideia original de seu escritor. Junto à liberdade poética na hora de se expressar, as linguagens de programação também trazem consigo a característica de permitir a existência de textos (códigos) que agradarão seu leitor, bem como textos que não conseguirão transmitir claramente a ideia original.
O professor Yoshiriro foi muito feliz na escolha do tema deste livro. Quem programa provavelmente já ouviu expressões como "Compilou? Então funciona!", ou já se deparou com incríveis soluções técnicas paliativas temporárias, elaboradas pelas mentes de profissionais apenas ansiando irem para casa em uma sexta-feira no final da tarde. O fato é que nem sempre algo que compila efetivamente funciona. Nem sempre uma solução temporária de uma sexta-feira de tarde desaparece na próxima segunda-feira de manhã. É muito fácil identificar e criticar códigos dessa natureza, mesmo que eles sejam capazes de transmitir alguma ideia ao leitor. Por outro lado, nem todo código "que compila", que funciona corretamente e que não foi produto de uma solução temporária em uma sexta-feira de tarde é capaz de transmitir aos futuros leitores a ideia brilhante contida nele.
O desejo do Yoshi de tirar este assunto da esfera ocupada por profissionais experientes, aliado à forma como ele aborda o tema e expressa suas com clareza e sem mistério, faz desta obra um excelente guia para que pessoas de todos os níveis de proficiência consigam expressar suas ideias e deixar um legado limpo e compreensível para os que precisarão ler suas criações.
Boa leitura, pessoal! E boa sorte na jornada perene em busca por aperfeiçoamento das habilidades de conversão de ideias brilhantes em códigos mais brilhantes ainda!
— Carlos Rafael Gimenes das Neves é mestre em Engenharia pelo ITA-SP. Trabalha com desenvolvimento de software desde 1999 e já trabalhou para as empresas Debis Humaitá (atual T-Systems), Compugraf, Olimpus Automotive, Magna Sistemas, até ter se tornado diretor de tecnologia em sua empresa, a Smooh. É professor desde 2007, tendo previamente ministrado aulas na FMU, FAENAC, BandTec (atual SPTech) e, atualmente, na ESPM.
Comentários sobre o livro
"Um dos pontos que me chamou atenção logo no início da obra é que, diferente de nadar para sobreviver, programar frequentemente envolverá consertar, melhorar ou ampliar o código. É nesse contexto que este livro apresenta as orientações de código limpo como um conjunto de práticas de uma arte marcial que podem ser adotadas conforme o estilo ou necessidade de cada lutador.
Além disso, a obra traz exemplos em Java e em Python, conferindo um diferencial substancial, porque o Python é considerado uma linguagem com sintaxe e compreensão acessíveis, acompanhada de didática facilmente absorvida por pessoas que estão iniciando na área. A obra reúne exemplos cotidianos, pontos de vista de profissionais acerca das práticas, perguntas que estimulam a imersão do leitor nos exemplos citados em uma leitura muito fluida, divertida e com ótimas analogias." — Giovana Miniguiti, bacharel em Gestão Ambiental pela USP. Iniciou a transição de carreira em 2022, quando iniciou no curso de Análise e Desenvolvimento de Sistemas pela SPTech.
"Adorei a abordagem do Yoshi para falar sobre código limpo, porque possui exemplos e uma linguagem superacessíveis não só para iniciantes, mas para os experientes que não tiveram contato com o assunto também. Com certeza tudo seria diferente se eu e outros colegas devs tivéssemos acesso a um conteúdo tão rico e simples como este no início da carreira. Recomendo facilmente este livro para os devs que lidero." — Emanuel de Sousa Oliveira, tecnólogo em Análise e Desenvolvimento de Sistemas pela SPTech. Trabalha com desenvolvimento de software desde 2018 e tem as seguintes empresas no currículo: TIVIT, Hands, KaBuM! e Grupo Data.
"A obra do professor Yoshi é muito oportuna e importante, pois é um material essencial para os novos desenvolvedores de software e, ao mesmo tempo, um excelente material de referência e reflexão para desenvolvedores mais experientes na produção e manutenção de programas que guardam os conceitos de código limpo. Sua obra trata os principais pontos para que se produza um código limpo. Foi escrita em uma linguagem simples, com exemplos objetivos e divertidos, facilitando sua leitura e compreensão, mas sem diminuir a profundidade dos assuntos tratados. Os códigos não limpos consomem muito mais tempo para a árdua fase de manutenção de software.
Na minha opinião, esse conceito deveria ser adotado por todos os desenvolvedores e suas equipes." — Cláudio Frizzarini (Frizza), mestre em Sistemas de Informação pela USP e especialista em Gestão Estratégica pela FGV. Trabalha com desenvolvimento de software desde 1982 e tem as seguintes empresas no currículo: Prodesp, Agroceres, Universidade São Judas Tadeu, Copersucar e SPTech.
Sumário
- 1 O que é Código Limpo
- 1.1 O importante é que funcione?
- 1.2 As orientações de Código Limpo são usadas no mundo real?
- 1.3 O código deve ser 100% limpo?
- 2 Bons nomes
- 2.1 Use nomes que deixem claro o objetivo da entidade
- 2.2 O nome não deve causar confusão sobre o que a entidade é
- 2.3 Cuidado com caracteres parecidos — 0, O, 1, l
- 2.4 Evite nomes parecidos
- 2.5 Ações semelhantes, nomes semelhantes
- 2.6 Mesma palavra, mesmo propósito
- 2.7 Se travou a língua ou causou constrangimento, mude o nome
- 2.8 Evite caracteres especiais
- 2.9 Não precisa dizer o que a entidade é no nome
- 2.10 Evite mapeamentos mentais
- 2.11 Nomes de classes
- 2.12 Nomes de métodos (ou funções)
- 2.13 Não seja engraçadinho
- 2.14 Use termos técnicos de programação a seu favor
- 2.15 Não adicione termos desnecessários e repetitivos
- 3 Funções
- 3.1 Funções devem resolver um problema bem específico
- 3.2 Nossa, quantos parâmetros você tem!
- 3.3 Evite flags
- 3.4 Listas como argumentos
- 3.5 Surpresa! Eu odeio surpresas!
- 3.6 Faça algo OU conte-me algo
- 3.7 DRY — Don't Repeat Yourself (Não repita a si mesmo)
- 4 Comentários de código
- 4.1 O que são comentários de código
- 4.2 Comentários ajudam a explicar o código?
- 4.3 Um código limpo não pode ter nenhum comentário?
- 4.4 Sou dev iniciante, por isso comento todo o meu código. E agora?
- 4.5 Comentários com palavras-chave (TODO, FIXME)
- 4.6 Comentários para documentar o código
- 4.7 Sem comentários!
- 5 Formatação de código
- 5.1 Indentação
- 5.2 Agrupamento de código em linhas
- 5.3 Olha que linha grande! Cuidado!
- 6 Objetos
- 6.1 Abstração de dados
- 6.2 Princípio do menor conhecimento (lei de Demeter)
- 6.3 DTO (Data Transfer Objects) — e seus "primos" VO e POJO/POPO
- 7 Tratamento de erros
- 7.1 Diga que houve um erro... E diga qual foi
- 7.2 Não retorne nulo! Lance uma exceção!
- 7.3 Crie suas próprias exceções
- 7.4 Em projetos Java, use exceções não checadas
- 8 Testes de unidade (ou unitários)
- 8.1 Por que criar testes de unidade (ou testes unitários)?
- 8.2 Qual a tradução mais correta? Testes "de unidade" ou "unitários"?
- 8.3 Como criar testes de unidade
- 8.4 Estudo de caso — Calculadora de vale-transporte (VT)
- 8.5 Boas práticas em testes de unidade
- 8.6 Cobertura de testes
- 9 Classes
- 9.1 Organização de uma classe por tipo de elemento
- 9.2 Encapsulamento
- 9.3 Olha que classe grande! Cuidado com a baixa coesão!
- 9.4 SOLID (resumo)
- 9.5 Princípio da Responsabilidade Única
- 9.6 Princípio aberto-fechado
- 9.7 Princípio da Substituição de Liskov
- 9.8 Princípio da Segregação de Interface
- 9.9 Princípio da Inversão de Dependência
- 10 Apêndice A — Convenções de código
- 10.1 Padrões de escrita de nomes
- 10.2 Convenções da linguagem Java
- 10.3 Convenções da linguagem Python
- 11 Apêndice B — Ferramentas
- 12 Referências
Dados do produto
- Número de páginas:
- 213
- ISBN:
- 978-85-5519-337-8
- Data publicação:
- 05/2023