Uma das perguntas que eu mais recebo no meu blog, no meu canal e em outras mídias sociais é a seguinte:

“Vale a pena aprender um framework?”

Hoje, esse será o assunto do post.

A resposta curta é: sim, vale!

A resposta longa é um pouco mais complexa. Essa pergunta vem com outros questionamentos subjetivos que merecem ser tratados com atenção. 

Você já parou para pensar o motivo que um framework existe? Por que as pessoas decidem usar um framework? Em quais casos as pessoas escolhem não usar um framework?

O que é um framework?

Quem nasceu no começo da década de 90, ou antes, com certeza se lembrará das fichas de papel, utilizadas (até hoje, inclusive) nas mais diversas situações. Um exemplo era o talão de notas fiscais. 

No momento que uma empresa efetuava uma venda o vendedor preenchia esta folha com informações sobre a compra, destacava duas vias, entregava uma delas e ficava com a outra para ele.

Um talão de notas fiscais nada mais era que um bloco com várias folhas iguais. Nesta folha você tinha um campo pré-determinado para preencher o número do pedido, outro campo para preencher o nome do cliente, alguns campos para preencher os produtos/serviços que integravam aquela compra, como valor de cada item, quantidade, etc.

Este é um exemplo básico do que é um framework.

A tradução da palavra framework é estrutura. Se olharmos a composição da palavra, temos a junção das palavras frame, que significa moldura, e work que significa trabalho. Trabalho sob uma moldura.

Uma folha de nota fiscal possui uma estrutura pré-definida. Ao preencher a folha, o vendedor está executando um trabalho dentro de uma estrutura, ou seja, uma moldura, que já foi definida anteriormente.

Não se repita!

O mote do Django, o framework mais utilizado construido em Python, é “Don’t repeat yourself”. Trata-se de um princípio de design de software abreviado nas siglas DRY.

O objetivo de um framework é justamente esse: evitar que você repita um trabalho desnecessariamente. Ao executar qualquer trabalho repetidas vezes, é possível notar que padrões começam a surgir. 

Algum dia na história do mundo, ao emitir uma nota fiscal várias vezes, uma pessoa percebeu que era sempre preciso escrever o nome do cliente, o número do pedido, uma lista de itens e características desses ítens, além de outras informações sobre o pedido.

Como um vendedor gera valor? preenchendo notas fiscais ou vendendo? Claro que é vendendo. Ao desenhar uma folha com uma estrutura pré-definida, nós poupamos tempo evitando que o vendedor preencha várias informações que sempre se repetem. 

No desenvolvimento de software não é diferente. Existem vários problemas que são recorrentes nos mais diversos projetos. 

A grande maioria dos projetos precisa de um sistema de autenticação e permissionamento de usuários. A grande maioria dos projetos precisa armazenar informações em um banco de dados. A grande maioria dos projetos precisam gerenciar formulários para que os usuários insiram informações. Esses são somente alguns exemplos.

Ao resolver um problema repetidas vezes, é possível notar que um padrão começa a surgir. Porque não desenvolver uma forma única de resolver estes problemas? Seguindo por este caminho nós investimos tempo apenas uma vez criando uma solução que resolve o problema padrão, e então reutilizamos essa solução várias e várias vezes, poupando nosso tempo.

Por que utilizar um framework?

Como eu sempre falo, o nosso objetivo como desenvolvedor de software é resolver problemas. 

Imagine que você esteja desenvolvendo um sistema para controlar o estoque de uma loja de calçados. Esta loja possui vários funcionários no estoque e é preciso armazenar um controle que indique quem adicionou e quem removeu produtos daquele estoque. Para resolver este problema você precisará ter um sistema de autenticação que o usuário precise informar uma senha para poder utilizar o sistema.

Diante deste cenário, o que você acha mais vantajoso? Investir tempo desenvolvendo um módulo que faça a autenticação do usuário ou utilizar um framework que forneça o sistema de autenticação pronto e otimize tempo para você desenvolver o módulo que controla o estoque, de fato?

Para responder a essa pergunta é muito simples. O que gera mais valor? Desenvolver o módulo de controle de estoque faz muito mais sentido. Lembre-se: Nós vivemos em um mundo com recursos escassos. Tempo é um deles. Um bom programador é aquele que gera mais valor na menor quantidade de tempo possível.

Além do mais, ao utilizar uma solução pronta, você estará utilizando um código que já foi utilizado por milhares de pessoas. Esse código já foi colocado a prova nas mais diversas situações possíveis. Isso significa que problemas comuns provavelmente já foram resolvidos. Falhas de segurança já foram encontradas e consertadas. Trechos de lentidão já foram encontrados e consertados. Várias cabeças pensam melhor que uma.

Vale a pena aprender um framework?

Vale a pena aprender um framework desde que ele resolva o seu problema de forma mais rápida. 

Se você seguir pela linha de desenvolver um software “do zero”, você vai acabar construindo um software que constrói um software. Pra que investir esse tempo, sendo que já existem ótimas soluções no mercado que já fazem isso?

Lembre-se: seu objetivo como programador é resolver problemas. É assim que você gera valor.