Jornada até um Código Bonito: O início
Tags: braziliandevs, cleancode, beginners, discuss
Published: 2023-08-26 01:07:54



## Tabela de Conteúdo
- [1. A Jornada](#1-a-jornada)
- [2. O que define a qualidade de um software?](#2-o-que-define-a-qualidade-de-um-software)
- [3. Principais elementos](#3-principais-elementos)
  - [3.1 Práticas de Clean Code (Código Limpo)](#31-práticas-de-clean-code-código-limpo)
  - [3.2 SOLID](#32-solid)
  - [3.3 Design Patterns (Padrões de projeto)](#33-design-patterns-padrões-de-projeto)
- [4. Conclusão](#4-conclusão)
- [5. Fontes](#5-fontes)
## 1. A Jornada

A busca por elevar a qualidade de um código é uma tarefa complexa, que depende de diversos fatores inerentes à dinâmica da aplicação. Nesse contexto, a qualidade de uma entrega se torna um conhecimento quase empírico no universo do desenvolvimento de software.

Da mesma forma, adentrar a busca por conhecimentos técnicos que orbitam os níveis de qualidade se assemelha a uma odisseia. Assim, embarcar nessa jornada e aprofundar-se nos tópicos é a única forma de se concluir algo significativo.


## 2. O que define a qualidade de um software?

A qualidade de um código é um tópico ambíguo dentro da comunidade tech, uma vez que a subjetividade do tema permite margem para múltiplas interpretações.

Afinal, o que caracteriza um código de qualidade? Pesquisando, é possível encontrar diversos aspectos relacionados à sofisticação de um programa.

Nesse sentido, é evidente que a eficiência de um algoritmo é um fator que eleva seu nível, mas não pode ser o único critério. Grandes projetos são formados por fragmentos de algoritmos e, portanto, precisam ser padronizados e legíveis.

## 3. Principais elementos 

Ao tratar de boas práticas de programação, a vasta quantidade de livros, artigos e vídeos sobre diferentes elementos pode parecer intimidante para quem se interessa pelo assunto. Isso ocorre porque nem todos esses tópicos exigem um conhecimento técnico avançado.

Nesse contexto, é importante destacar alguns conceitos, cujas práticas não necessariamente precisam ser seguidas de forma unilateral. Entre esses, destacam-se:

### 3.1 Práticas de Clean Code (Código Limpo)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hxpwnirj23xzkr2l4uoy.jpg)

Nota-se que dentro do ambiente de computação, o livro 'Clean Code' é disseminado quase que como um bíblia, no qual muitos de seus conceitos já se encontram enraizandos no ensino de programação. 

Essa dinâmica se tornou quase que um paradoxo, como "o que veio primeiro: o ovo ou a galinha" pode ser intepretado de forma análoga ao "o que veio primeiro: o livro ou os conceitos"

### 3.2 SOLID

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/za95nkcanm3pyxpjnh9q.jpg)

No universo da programação orientada a objetos, é imprescindível a adoção de boas práticas para a construção de uma aplicação. A escalabilidade depende da modularização das classes, do uso dos objetos e da organização das dependências do projeto.

Para sintetizar esses conceitos, a sigla S.O.L.I.D consiste em um acrônimo, cujas siglas representam cada um dos seguintes princípios:

* **S - Single Responsibility Principle (Princípio da Responsabilidade Única):** Cada classe deve ter uma única razão para existir, ou seja, deve controlar apenas uma função do sistema.

* **O -  Open/Closed Principle (Princípio Aberto/Fechado):** Todos os fragmentos do sistema deve estar aberto para extensão e fechado para modificação.

* **L - Liskov Substitution Principle (Princípio da Substituição de Liskov):** Uma classe deve ser capaz de substituir a classe base sem afetar seu funcionamento. 

* **I -  Interface Segregation Principle (Princípio da Segregação de Interfaces):** Uma interface deve ser especifica em implementar as funções de uma respectiva classe.

* **D- Dependency Inversion Principle (Princípio da Inversão de Dependência):** Classes devem se comunicar através de abstrações, cujas respectivas interfaces injetam as dependências.


### 3.3 Design Patterns (Padrões de projeto)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ukqh8ydorv8mn7a9mxxf.png)

Padrões de projeto são soluções reutilizaveis para problemas comuns que surgem durante o processo de desenvolvimento. Logo, consistem em modelos de abstrações que podem ser aplicados para solucioanar grande parte dos probelmas em um sistema de maneira eficiente.

Nesse viés, destacam-se as seguintes categorias para determiandos grupos de soluções:

* **Padrão de criação:** Responsabiliza-se pela criação de objetos de maneira eficiente e flexivel.

* **Padrão Estrutural:** Garante a composiçaõ de objetos em estruras mais complexas.

* **Padrão Comportamental:** Concentra-se no comportamento de classes e na responsibalidade dos objetos.


É perceptível que neste artigo não é possível abordar detalhadamente esses tópicos, uma vez que cada um deles merece um estudo aprofundado e, consequentemente, um artigo próprio. Esse fato, no entanto, se aproxima cada vez mais da realidade.
## 4. Conclusão

Logo, chega-se a conclusão que construir uma aplicação consiste em equilibrar entre alta perfomance e uso de boas práticas, de modo que para além de antender a demanda momentânea, o projeto possua fácil manutenção e alta escalabilidade.

Portanto, este artigo representa apenas o primeiro passo em uma jornada cuja duração é difícil de mensurar, mas que já foi iniciada.


## 5. Fontes

MARTIN, Robert Cecil. Código Limpo: Habilidades Práticas do Agile Software. Porto Alegre: Bookman, 2008.

XP INC. Os Princípios do SOLID: SRP - Princípio da Responsabilidade Única. Medium, 2023. Disponível em: https://medium.com/xp-inc/os-princ%C3%ADpios-do-solid-srp-princ%C3%ADpio-da-responsabilidade-%C3%BAnica-7897c55694fe. Acesso em: 25 ago. 2023.

XP INC. Os Princípios do SOLID: OCP - Princípio Aberto/Fechado. Medium, 2023. Disponível em: https://medium.com/xp-inc/os-princ%C3%ADpios-do-solid-ocp-princ%C3%ADpio-aberto-fechado-2dd7272cdd46. Acesso em: 25 ago. 2023.

XP INC. Os Princípios do SOLID: LSP - Princípio da Substituição de Liskov. Medium, 2023. Disponível em: https://medium.com/xp-inc/os-princ%C3%ADpios-do-solid-lsp-princ%C3%ADpio-da-substitui%C3%A7%C3%A3o-de-liskov-35bcff93cd86. Acesso em: 25 ago. 2023.

XP INC. Os Princípios do SOLID: ISP - Princípio de Segregação da Interface. Medium, 2023. Disponível em: https://medium.com/xp-inc/os-princ%C3%ADpios-do-solid-isp-princ%C3%ADpio-de-segrega%C3%A7%C3%A3o-da-interface-1822ebc802fd. Acesso em: 25 ago. 2023.

XP INC. Os Princípios do SOLID: DIP - Princípio de Inversão de Dependência. Medium, 2023. Disponível em: https://medium.com/xp-inc/os-princ%C3%ADpios-do-solid-dip-princ%C3%ADpio-de-invers%C3%A3o-de-depend%C3%AAncia-7e110cfcc3e5. Acesso em: 25 ago. 2023.


REFACTORING GURU. Design Patterns. Disponível em: https://refactoring.guru/design-patterns. Acesso em: 25 ago. 2023.