Como mapas de Karnough podem te transformar em um programador melhor.
Este artigo busca demonstrar a importância da base. Introdução Sou um desenvolvedor com pouco tempo de jornada (cerca de 1 ano), mas desde o começo dos meus estudos me interessei pelos conceitos base da computação, sempre quis saber como as coisas realmente funcionam por baixo dos panos, sem abstrações. Apesar de gostar e me interessar pela base, nunca consegui me debruçar sobre o estudo da mesma, mas isso começou a mudar quando encontrei a UBL, uma faculdade inteira sobre ciências da computação e de código aberto, recebi como um grande presente, enviado dos céus. Logo no começo (cerca de 2 semanas) tive os meus primeiros espantos, pensei que levaria meses para que aquele estudo começa-se a fazer algum efeito, que fosse capaz de mudar a forma programar. Já na matéria de circuitos digitais (primeira matéria), alguns conceitos me chamaram atenção pela sua simplicidade e genialidade, especialmente mapas de Karnough. Então, nada mais natural que buscar uma forma de implementa-lo em um ambiente de desenvolvimento. Mapas de Karnough Nesta sessão quero demonstrar uma possível aplicação para mapas de Karnough em um ambiente de desenvolvimento, para um melhor aproveitamento do corrente artigo é necessário que o leitor já tenha algum contado com o conceito, caso queria saber o que é mapas de Karnough recomendo que veja: Artigo Mapas de Karnough. Para exemplificar melhor, imagine a seguinte situação, você é um desenvolvedor prestando consultoria para uma montadoras de veiculo que precisa fazer um recall. Solicitam que você levante as informações para montar um relatório para saber em quais carros a peça se encontra, você se depara com uma base de dados completamente desorganizada (é raro, mas acontece sempre), sendo necessário uma busca indireta. Você solicita ao time de engenheiros que passem os critérios para uso da peça, você recebe a seguinte lista: foi usada em carros que são vermelhos e não são do ano atual e o nome não começa com a letra 'V'. foi usada em carros que são vermelhos e são do ano atual e o nome não começa com a letra 'V'. foi usada em carros que não são vermelhos nem são do ano atual e podem ou não começar com a letra 'V'. foi usada em carros que são vermelhos e não são do ano atual e o nome começa com a letra 'V'. Você pode estar pensando que é simples resolver o problema, basta isolar cada critério dentro de uma expressão booleana e unir tudo no final com o operador "ou", ficando algo mais ou menos assim: const cars = [...terabytesOfData]; const carsFilter = cars.filter(c => { const A = c.isRed(); const B = c.isCurrentYear(); const C = c.isStartsV(); return (A && !B && !C) || (A && B && !C) || (!A && !B) || (A && !B && C); }); Isso funciona, até você ver que o banco tem terabytes de dados para serem analisados e filtrados, logo o otimização aqui é necessário, mas como faze-la de forma confiável, neste momento que entra em cena o mapa de Karnough. Existem diversas ferramentas online para isso, aqui vamos usar o site Make Hero (a ferramenta se encontra na metade do artigo) Para usa-la basta seguir os seguintes passos: 1 - isole as variáveis booleanas dentro de cada critério, neste caso temos 3 variáveis: A = car.isRed(); B = car.isCurrentYear(); C = car.isStartsV(); 2 - agora preencha a tabela verdade com o resultado de cada critério, (1 para sim e 0 para não), por exemplo, o primeiro critério ficaria A = 1, B = 0, C = 0, agora procure a linha que corresponde a esse critério (linha 5), e maque 1, repita o processo até terminar todos os critérios, ficado assim: 3 - pegue e utilize a expressão resultante, no nosso caso é !B || (A && !C) // before: return (A && !B && !C) || (A && B && !C) || (!A && !B) || (A && !B && C); // after: return !B || (A && !C); 4 - se preferir converta para uma expressão legível para humanos, no nosso caso ficaria assim: a peça foi usada em carros que não são do ano ou que são vermelhos e não começam com a letra 'V'. Pode parecer pouco, mas conseguimos reduzir de 4 critérios para 1, uma economia de 75%, algo decisivo em alguns projetos, e o melhor de tudo, é matematicamente segura. se você leu até aqui, você é um herói da resistência, então por favor eu gostaria de ouvir o seu feedback, caso tenha interesse, segue o meu linkedin: Renan Marquetti

Este artigo busca demonstrar a importância da base.
Introdução
Sou um desenvolvedor com pouco tempo de jornada (cerca de 1 ano), mas desde o começo dos meus estudos me interessei pelos conceitos base da computação, sempre quis saber como as coisas realmente funcionam por baixo dos panos, sem abstrações.
Apesar de gostar e me interessar pela base, nunca consegui me debruçar sobre o estudo da mesma, mas isso começou a mudar quando encontrei a UBL, uma faculdade inteira sobre ciências da computação e de código aberto, recebi como um grande presente, enviado dos céus.
Logo no começo (cerca de 2 semanas) tive os meus primeiros espantos, pensei que levaria meses para que aquele estudo começa-se a fazer algum efeito, que fosse capaz de mudar a forma programar.
Já na matéria de circuitos digitais (primeira matéria), alguns conceitos me chamaram atenção pela sua simplicidade e genialidade, especialmente mapas de Karnough.
Então, nada mais natural que buscar uma forma de implementa-lo em um ambiente de desenvolvimento.
Mapas de Karnough
Nesta sessão quero demonstrar uma possível aplicação para mapas de Karnough em um ambiente de desenvolvimento, para um melhor aproveitamento do corrente artigo é necessário que o leitor já tenha algum contado com o conceito, caso queria saber o que é mapas de Karnough recomendo que veja: Artigo Mapas de Karnough.
Para exemplificar melhor, imagine a seguinte situação, você é um desenvolvedor prestando consultoria para uma montadoras de veiculo que precisa fazer um recall.
Solicitam que você levante as informações para montar um relatório para saber em quais carros a peça se encontra, você se depara com uma base de dados completamente desorganizada (é raro, mas acontece sempre), sendo necessário uma busca indireta.
Você solicita ao time de engenheiros que passem os critérios para uso da peça, você recebe a seguinte lista:
foi usada em carros que são vermelhos e não são do ano atual e o nome não começa com a letra 'V'.
foi usada em carros que são vermelhos e são do ano atual e o nome não começa com a letra 'V'.
foi usada em carros que não são vermelhos nem são do ano atual e podem ou não começar com a letra 'V'.
foi usada em carros que são vermelhos e não são do ano atual e o nome começa com a letra 'V'.
Você pode estar pensando que é simples resolver o problema, basta isolar cada critério dentro de uma expressão booleana e unir tudo no final com o operador "ou", ficando algo mais ou menos assim:
const cars = [...terabytesOfData];
const carsFilter = cars.filter(c => {
const A = c.isRed();
const B = c.isCurrentYear();
const C = c.isStartsV();
return (A && !B && !C) || (A && B && !C) ||
(!A && !B) || (A && !B && C);
});
Isso funciona, até você ver que o banco tem terabytes de dados para serem analisados e filtrados, logo o otimização aqui é necessário, mas como faze-la de forma confiável, neste momento que entra em cena o mapa de Karnough.
Existem diversas ferramentas online para isso, aqui vamos usar o site Make Hero (a ferramenta se encontra na metade do artigo)
Para usa-la basta seguir os seguintes passos:
1 - isole as variáveis booleanas dentro de cada critério, neste caso temos 3 variáveis:
A = car.isRed();
B = car.isCurrentYear();
C = car.isStartsV();
2 - agora preencha a tabela verdade com o resultado de cada critério, (1 para sim e 0 para não), por exemplo, o primeiro critério ficaria A = 1, B = 0, C = 0, agora procure a linha que corresponde a esse critério (linha 5), e maque 1, repita o processo até terminar todos os critérios, ficado assim:
3 - pegue e utilize a expressão resultante, no nosso caso é !B || (A && !C)
// before:
return (A && !B && !C) || (A && B && !C) ||
(!A && !B) || (A && !B && C);
// after:
return !B || (A && !C);
4 - se preferir converta para uma expressão legível para humanos, no nosso caso ficaria assim: a peça foi usada em carros que não são do ano ou que são vermelhos e não começam com a letra 'V'.
Pode parecer pouco, mas conseguimos reduzir de 4 critérios para 1, uma economia de 75%, algo decisivo em alguns projetos, e o melhor de tudo, é matematicamente segura.
se você leu até aqui, você é um herói da resistência, então por favor eu gostaria de ouvir o seu feedback, caso tenha interesse, segue o meu linkedin: Renan Marquetti