Simples
🧠
"A simplicidade é a sofisticação final."
- Leonardo da Vinci.
fácil
&

Guilherme Siquinelli

Arquiteto Front-end @ Santander
Professor Universitário
Guilherme Siquinelli
Co-fundador da comunidade DevParaná
Programador Web desde os 13
Curioso pelo universo que nos circunda
- Albert Einstein
"Faça as coisas o mais simples que puder, porém não as mais simples."

Não confunda
simples
com fácil
Coisas simples
- Tem um papel
- Cumprem uma tarefa
- Tem um objetivo definido
- Abrangem um conceito
simples !== único
Uma interface
Não precisa ter apenas um único método para ser simples.
Não se trata de cardinalidade
Se trata de ser objetiva e poder ser testada
Simples implica
proximidade
Que pode ser entendida
Simplicidade
vs.
Facilidade
Fácil é...
Superestimado
Fique atento ao ouvir frases como esta ou similares
posso fazer isso em 5 minutos...
Pode ser que o resultado saia diferente do esperado

...como quase tudo né?
salvo raras exceções
Software de qualidade
exige esforço
Tememos o novo
por isso escolhemos o caminho mais familiar
não evite algo
por ser desconhecido
o fácil é relativo
o que é fácil pra você pode
ser difícil pra alguém
Muitas vezes dizem que algo é simples
quando querem dizer que é fácil, só por que estão familiarizados
Os atributos de um software
são como ele funciona
- Ter bom desempenho
- Resolver o problema proposto
- Como pode ser alterado com o tempo
As pessoas se concentram muito na facilidade com que podem escrever
ou na facilidade com que podem substituir um desenvolvedor por outro

ou na facilidade com que podem substituir um desenvolvedor por outro
✓ JavaScript
✓ TypeScript
✓ Angular
✓ React
✓ VueJS
considerando apenas a familiaridade das ferramentas usadas
E esquecem da simplicidade ou complexidade do código
que o novo desenvolvedor precisará lidar
"DRY"
Muitas vezes seguimos conceitos ao pé da letra.
Pensamos estar otimizando.
Quando na verdade estamos adicionando complexidade ao entendimento do objetivo a ser entregue.
// Ruim:
function createFile(name, temp) {
if (temp) {
fs.create(`./temp/${name}`);
} else {
fs.create(name);
}
}
// Bom:
function createFile(name) {
fs.create(name);
}
function createTempFile(name) {
createFile(`./temp/${name}`);
}
Evite condicionais
sempre que possível

Por que a simplicidade
é importante no desenvolvimento de software?
Pergunte-se
-
O software faz o que deve fazer?
-
É de qualidade com eficiência?
-
Podemos confiar nisso?
-
Os problemas podem ser corrigidos no caminho?
- Os requisitos podem mudar com o tempo?
Longo prazo
Não queira adicionar features a sua linguagem.
Pode ser que um dia ela adicione...
// Ruim:
Array.prototype.diff = function diff(comparisonArray) {
const hash = new Set(comparisonArray);
return this.filter(elem => !hash.has(elem));
};
// Bom:
class SuperArray extends Array {
diff(comparisonArray) {
const hash = new Set(comparisonArray);
return this.filter(elem => !hash.has(elem));
}
}
...e seu software quebre.
Só podemos esperar que algo se torne confiável se as entendermos
Geralmente isso é uma troca...
Ao evoluir um sistema, ele se torna mais extensível e dinâmico
Pode se tornar mais difícil avaliar se estamos tomando decisões corretas no caminho
O entrelaçamento aumenta a complexidade combinatoriamente
E fica pior quando as coisas estão interligadas, porque não se pode raciocinar sobre elas isoladamente.
não conseguimos pensar em muitas coisas ao mesmo tempo.

Manter
Para sermos capazes de mudar um sistema existente, precisamos entendê-lo para decidir como e onde aplicar as mudanças
Sempre tivemos este bug?
Mas passava em todos testes, linters e type checks...
Escrever testes
não significa que podemos tomar menos cuidado ao escrever software
Complexidade ignorada
atrasa as pessoas em pequenas porções
mas, todo dia

Facilidade
As coisas acontecem rapidamente, mas a complexidade acumulada matará o projeto com o tempo.
Simplicidade
O projeto começa mais devagar porque é preciso pensar bem, consequente-mente , isso leva tempo...
Benefícios da simplicidade
- Facilidade de compreensão
- Facilidade de alteração
- Facilidade de depuração
- Flexibilidade
Podemos tornar as coisas fáceis
Precisamos simplificar a complexidade para que possamos lidar com isso.


Title Text
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi nec metus justo. Aliquam erat volutpat.


export const isValidJSON = (text: string) => {
return /^[\],:{}\s]*$/.test(
text
.replace(/\\["\\\/bfnrtu]/g, '@')
.replace(
/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
']'
)
.replace(/(?:^|:|,)(?:\s*\[)+/g, '')
);
};
export const ifJSON = (value: string) => {
return JSON.parse(value) && !!value ? JSON.parse(value) : value;
};


Coisas complexas
- Estado
- Objetos
- Vars
- Loops imperativos
- ORMs
- Condicionais
- Inconsistências
Coisas simples
- Valores
- Funções puras
- Instâncias
- Filas
- Dados declarativos
- Regras
- Consistências
Completar
Significa traçar juntos
Compor
Significa colocar junto
-
Estado: tudo que toca
-
Objeto: estado, identidade, valor
-
Vars: valor, tempo
- Loops imperativos: o quê / quem
-
Valores: use coleções persistentes
-
Funções: use métodos sem estado
- Dados: use mapas, matrizes, conjuntos, JSON, etc.


É pensar e entender em como isso deve acontecer.
Programar não é digitar em um teclado até acontecer.
Construindo sistemas simples
-
O quê
-
Quem
-
Quando
-
Onde
-
Por quê
- Como
O quê
Como
Quando e onde
Por quê
A informação é simples.
Mantenha simples.
Escolha ferramentas simples.
A simplicidade é uma escolha.
Ferramentas de confiabilidade
Simples != Fácil
Torne a simplicidade mais fácil
"A perfeição é alcançada não quando não há mais nada para adicionar, mas quando não há mais nada que se possa retirar"
- Antoine de Saint-Exupéry

- Albert Einstein
"Faça as coisas o mais simples que puder, porém não as mais simples."
Viva de forma simples e despretensiosa.
Complique menos, não crie expectativas, alegre-se com pouco e a felicidade estará bem a sua frente.
Créditos: Rich Hickey
pela grandiosa referência.
Obrigado
Simples & Fácil
By Guilherme Siquinelli
Simples & Fácil
- 616