Matheus Castiglioni

Memorizar vs Aprender

Diariamente enfrentamos situações das quais não sabemos o que fazer e provavelmente nosso primeiro passo é acessar um famoso site: www.google.com (ou derivados) e realizar algum tipo de pesquisa para dado o nosso problema.

Ao decorrer do post vamos visualizar problemas referente à cenários de desenvolvimento de softwares, mas, os mesmos podem ser aplicados em qualquer situação de problema/solução.

Após a pesquisa ser feita, acabamos clicando nos primeiros sites, vemos alguns trechos de códigos (em um cenário referente a desenvolvimento de software), copiamos, colamos e voala, tudo funcionando e o problema foi resolvido, certo?

Para exemplificar melhor a situação, vamos imaginar o seguinte o cenário:

Temos um site em produção, porém, nos foi solicitado uma nova funcionalidade: Precisamos criar um menu dropdown para nosso site (o exemplo também pode ser para outras áreas).

Memorizando a solução

A primeira coisa que fazemos é pesquisar algo do tipo na Google (ou derivados): “Como criar um menu dropdown“:

Pesquisando como criar um menu dropdown na Google

Como podemos ver, existem várias respostas e ajuda para o nosso problema ou necessidade.

O que geralmente acabamos fazendo é entrando no primeiro site, copiando os códigos, voltando para editor, colando os códigos, modificando os textos e pronto (foi exatamente isso que eu fiz).

Logo, para nosso problema de menu dropdown podemos ter o seguinte conteúdo:

index.html:

<nav>
  <ul class="menu">
    <li><a href="#">Home</a></li>
    <li><a href="#">Sobre</a></li>
    <li><a href="#">O que fazemos?</a>
      <ul>
        <li><a href="#">Web Design</a></li>
        <li><a href="#">SEO</a></li>
        <li><a href="#">Design</a></li>
      </ul>
    </li>
    <li><a href="#">Links</a></li>
    <li><a href="#">Contato</a></li>
  </ul>
</nav>

style.css:

* {
  margin: 0;
  padding: 0;
 }

body {
  font-family: arial, helvetica, sans-serif;
  font-size: 12px;
}

.menu {
  list-style: none;
  border: 1px solid #c0c0c0;
  float: left;
}

.menu li {
  position: relative;
  float: left;
  border-right: 1px solid #c0c0c0;
}

.menu li a {
  color: #333;
  text-decoration: none;
  padding: 5px 10px;
  display: block;
}

.menu li a:hover {
  background: #333;
  color: #fff;
  -moz-box-shadow: 0 3px 10px 0 #CCC;
  -webkit-box-shadow: 0 3px 10px 0 #ccc;
  text-shadow: 0px 0px 5px #fff;
}

.menu li ul {
  position: absolute;
  top: 25px;
  left: 0;
  background-color: #fff;
  display: none;
}

.menu li:hover ul,
.menu li.over ul {
  display: block;
 }


.menu li ul li {
  border: 1px solid #c0c0c0;
  display: block;
  width: 150px;
}

Resultando na seguinte funcionalidade:

Mostrando como ficou o menu dropdown

Mas ai eu te pergunto:

Você realmente resolveu seu problema?

O que você aprendeu com isso?

Nesse exemplo, você aprendeu a realizar uma pesquisa na Google, copiar, colar e modificar código.

Existe uma grande diferença entre memorizar uma solução ou aprender uma solução.

Se você precisar implementar um novo menu dropdown, você vai conseguir implementá-lo do zero (sem consulta)? Provavelmente não, é provável que você visite esses arquivos e códigos (talvez até copiá-los novamente).

Sendo assim, podemos concluir que você memorizou o problema e solução.

Aprendendo a solução

Agora, vamos tentar uma abordagem um pouco diferente, em vez de sairmos pesquisando uma solução na Google (ou derivados), vamos tentar entender como um menu dropdown deveria funcionar no mundo real. Acabei de pensar e consegui pontuar os seguintes itens (talvez você irá pensar em itens diferentes):

  1. Deve haver uma lista de itens.
  2. Dentro dos itens da primeira lista, deve haver uma segunda lista, porém, por padrão ela precisa estar escondida.
  3. Ao parar o mouse em cima (hover) de algum item da primeira lista a segunda lista deve ser mostrada.

Legal, agora sabemos como nossa funcionalidade deve funcionar em nosso mundo real, então o que precisamos fazer é basicamente codificá-la:

index.html:

<nav>
  <ul>
    <li><a>Link 1</a></li>
    <li><a>Link 2</a></li>
    <li><a>Link 3</a>
      <ul>
        <li><a>SubLink 1</a></li>
        <li><a>SubLink 2</a></li>
        <li><a>SubLink 3</a></li>
      </ul>
    </li>
  </ul>
</nav>

style.css:

nav {
  background: #0099ff;
  color: #fdfdfd;
}

ul, li {
  padding: 0;
  margin: 0;
}

ul {
  display: flex;
}

li {
  list-style: none;
  position: relative;
}

li:hover > ul {
  display: block;
}

a {
  font-family: Arial, sans-serif;
  padding: 1rem 2rem;
  display: block;
  white-space: nowrap;
}

a:hover {
  background: #007acc;
  cursor: pointer;
}

ul li ul {
  display: none;
  position: absolute;
  left: 0;
  top: 50px;
  background: #0099ff;
}

Segundo exemplo de menu dropdown

Repare que chegamos no mesmo resultado (menu dropdown), porém, de maneira diferente (tanto no código quanto abordagem).

A diferença está no resultado final, no segundo método, nós fomos capazes de entender a solução antes mesmo de implementá-la. Visualizar e entender problemas em nosso mundo real é bem importante para o desenvolvimento de software, pois, uma vez que o problema foi entendido e a solução foi encontrada fica bem mais um codifica.

No post tivemos um exemplo bem simples, mas, a mesma prática pode ser aplicada para diversos problemas ou situações (sendo referente sobre desenvolvimento de software ou não), o ponto é:

Não tente resolver algo sem saber ou conhecer a solução

Outros cenários, exemplos e situações:

Tente sempre que possível abstrair o problema para nosso mundo real, visualizá-lo, entendê-lo, se necessário realizar testes de mesa (sim, escrever no papel) para depois começar a codar.

Uma vez que você entendeu o problema e tem a solução, é fácil codificá-los.

Conclusão

Nesse post vimos uma pequena e simples diferença entre Memorizar ou Aprender, partimos de um cenário onde saimos pesquisando uma solução sem ao menos saber o que precisamos resolver.

E no segundo exemplo, entendemos o problema, descobrimos uma solução para depois implementá-la.

Ao meu ver a segunda abordagem é bem mais simples, particularmente em situações mais complexas costumo fazer esses tipos de dinâmicas (para mim tem dado certo).

Abraços, até a próxima.

Matheus Castiglioni

Matheus Castiglioni

Apaixonado pelo mundo dos códigos e um eterno estudante, gosto de aprender e saber um pouco de tudo, aquela curiosidade de saber como tudo funciona, tento compartilhar o máximo de conhecimentos adquiridos e ajudar todos aqueles que sou capaz.

comments powered by Disqus