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