Article image
Luciano Ribeiro
Luciano Ribeiro27/04/2025 23:49
Compartilhe

Da Frustação à Epifania: Por que os Desadios "reais" fora do Código e dentro deles São Essenciais

  • #Java
  • #Dart
  • #Flutter
  • #Segurança, Autenticação, Autorização
  • #Modelagem de Negócios
  • #Banco de dados relacional
  • #Integração
  • #API Rest

Uma Retratação e um Convite para Abraçar a Complexidade Além do Terminal

Olá, colegas da comunidade DIO!

Há algum tempo, compartilhei neste artigo minhas frustrações como iniciante com os obstáculos que surgem antes mesmo de escrevermos a lógica principal do nosso código: configurações de ambiente, permissões, integrações complexas. Naquele momento, a sensação era de que essas barreiras eram desnecessárias e poderiam ser simplificadas para facilitar nossa entrada no mundo do desenvolvimento.

Hoje, escrevo não para contradizer a dificuldade que apontei – ela é real – mas para recontextualizar completamente minha perspectiva sobre o valor desses desafios. E faço isso com a convicção de quem está, neste exato momento, imerso em um projeto pessoal que me levou muito além do que imaginava: modelando um banco de dados relacional complexo com triggers e funções, construindo uma API em java robusta em conformidade com LGPD e GDPR, implementando criptografia para dados sensíveis em repouso e em trânsito, documentando tudo com OpenAPI, gerenciando níveis de acesso e desenvolvendo aplicações front-end (Web, iOS, Android) com Dart e Flutter que consomem essa API em java

A Virada de Chave: Onde a "Dor" se Torna Aprendizado Valioso

A mudança de visão não aconteceu por acaso. Ela nasceu justamente ao decidir sair da zona de conforto dos exercícios com resultados exibidos apenas no terminal da IDE. Foi ao me propor a construir algo "de verdade", com múltiplas camadas, integrações e requisitos do mundo real, que percebi algo fundamental:

Aqueles mesmos desafios "off-code" que antes me pareciam meros empecilhos, são, na verdade, professores implacáveis e essenciais. Cada erro de configuração, cada falha de permissão, cada log de depuração meticulosamente analisado para encontrar a raiz de um problema que persiste por horas (ou dias!), cada tentativa e abordagem diferente para fazer duas tecnologias conversarem... tudo isso é aprendizado. E um aprendizado de altíssimo valor.

Por Que Abraçar a Complexidade (Mesmo Quando Dói)?

  1. Simula o Mundo Real: Empresas não lidam apenas com algoritmos puros. Elas enfrentam problemas de infraestrutura, segurança, integração entre sistemas legados e novos, escalabilidade, conformidade legal (como LGPD/GDPR). Lidar com criptografia, permissões, Docker, versionamento de banco de dados, CI/CD, e APIs de terceiros agora, mesmo em projetos pessoais, é a melhor preparação para os desafios profissionais.
  2. Desenvolve Habilidades Cruciais: A programação vai muito além de escrever código. Ela exige pensamento lógico aguçado para diagnóstico, resiliência para não desistir diante de bugs teimosos, persistência para pesquisar soluções em documentações (muitas vezes em inglês e densas), e criatividade para encontrar abordagens alternativas quando a primeira (ou a quinta) não funciona. Essas habilidades são forjadas no calor da batalha contra esses problemas "reais".
  3. A Gratificação Incomparável da Solução: Posso afirmar com segurança: a sensação de finalmente entender e corrigir um bug complexo, de ver sua API respondendo corretamente após horas de depuração, ou de conseguir integrar um serviço externo depois de muita luta, é imensamente gratificante. É a prova concreta da sua capacidade de resolver problemas, e isso alimenta a motivação como poucas coisas. É o "gostinho de vitória" que vicia e nos impulsiona a aprender mais.

Um Convite à Ação: Saia do Terminal, Vá Para o Mundo!

Portanto, meu recado aos colegas, especialmente aos que estão começando ou presos em exercícios mais básicos, é este: ousem ir além. Peguem aquela ideia simples e transformem-na em um projeto real.

  • Precisa de dados? Crie uma API e um banco de dados. Modele-o corretamente.
  • Quer interface? Aprenda um framework front-end (React, Angular, Vue, Flutter, etc.) e consuma sua API.
  • Preocupado com segurança? Pesquise sobre HTTPS, criptografia de senhas (hashing), JWT, OAuth2, e tente implementar!
  • Quer integrar com algo? Use uma API pública (previsão do tempo, cotação de moedas, etc.).
  • Viu um desafio da DIO? Tente implementá-lo de forma mais complexa, com persistência de dados, interface gráfica, ou como um microsserviço.

Não se limite ao que o curso ensinou diretamente. Use o curso como base e force-se a aprender o que falta. Mergulhe nas documentações oficiais (elas são suas melhores amigas!), peça ajuda a colegas, participe de fóruns. A quantidade de conhecimento adquirido ao tentar resolver um problema real, mesmo que leve dias, é exponencialmente maior do que apenas seguir um tutorial passo a passo.

Retratando e Crescendo

Da mesma forma que não tive receio em expor minhas dificuldades no artigo anterior, assumo agora, sem problemas, que minha visão inicial sobre a necessidade de "facilitar" esses desafios estava incompleta. Facilitar demais poderia, sim, tornar o início mais suave, mas não nos tornaria profissionais melhores ou mais preparados. O aprendizado genuíno muitas vezes reside na superação das dificuldades. Ver minha perspectiva mudar assim me mostra que estou, de fato, aprendendo e evoluindo.

Peço desculpas se o artigo anterior deixou uma "pulga atrás da orelha" em alguns, sugerindo que essas dificuldades eram apenas barreiras negativas. Espero que esta nova perspectiva mostre o outro lado da moeda: os erros, os desafios de configuração e a busca incessante por soluções são partes integrantes e valiosíssimas do nosso desenvolvimento.

Não desistam porque é difícil. É difícil mesmo, mas não impossível. Aceitem o desafio, vão além do óbvio, pesquisem, tentem, errem, depurem, aprendam e, finalmente, sintam a incrível satisfação de construir algo real e funcional. É nesse ciclo que nos tornamos os desenvolvedores que o mercado precisa e que nós mesmos admiramos.

Desejo a todos vocês essa mesma jornada de descoberta e a sabedoria de ver valor onde antes talvez só víssemos frustração. Acreditem: vale a pena!

Compartilhe
Comentários (2)
Luciano Ribeiro
Luciano Ribeiro - 01/05/2025 09:01

Obrigado pelo elógio @Dio Community.

Você tocou exatamente nos pontos onde superar esses desafios de segurança, e entre eles a criptografia e autenticação devido às suas complexidades, vencê-las me fez enxergar o quanto aprendi tentando superá-los. Esses desafios que você mencionou estão ligados com o atendimento da LGPD (Lei Geral de Proteção de Dados) e GDPR (General Data Protection Regulation). Primeiro tive de estudar essas leis, o que te faz ficar mais rigoroso, e um erro no início foi exatamente excesso de zelo: eu criptografei do app > api com ambos usando uma chave armazenada em serviços externos, o app mandava [os dados] criptografados e a api descriptografava com a mesma chave; e da api > BD, a api usava outra chave também para criptografar tudo novamente e mandar para o BD em repouso; do BD > api, mesmo processo, a api descriptografa e manda os dados para o app. 1º erro = colocar criptografia do app para a api, ou seja, eu estava dando acesso ao app (ao usuário) à chave de descriptografar, o que é uma falha de segurança, nem todos os usuários estão bem-intencionados; segunda dificuldade, colocar níveis de acesso, pois quem pode ver esses dados sensíveis? Quem tem autorização para vê-los? Essa é uma parte que gera muitos erros ou, pelo menos para mim, encontrei vários (ou, melhor dizendo, cometi vários), até encontrar o jeito certo. Implantação de blacklist em cima de coleta de métricas também foi um desafio que superar foi incrível, mas bem difícil, justamente por ser a primeira vez trabalhando com coleta de métricas, inclusive métricas para auditoria sobre a LGPD e a própria segurança da api. Tudo foi um grande aprendizado, que me forçou a estudar mais e mais, sair literalmente da zona de conforto. A segurança do app para a api deve ficar apenas com a criptografia do https com certificados válidos e gerenciados por bons serviços. O https tem um ponto de vulnerabilidade, que é na entrega para a api: ele descriptografa para entregar os dados, e isso acontece fora do servidor da api. Esse é o ponto de vulnerabilidade que aprendi sobre o https. Para sanar ou pelo menos tentar mitigar isto, uso os serviços da Cloudflare, onde tenho certificados SSL/TLS e modos de segurança configuráveis, como a criptografia de ponta a ponta (full restrito), o que já melhora bem, além de proteção contra vários tipos de ataque, como DDoS, bot attacks, etc. Este foi o primeiro erro, e o primeiro aprendizado de valor neste projeto. A criptografia da api para o BD foi relativamente fácil. A maior dúvida foi qual tipo de criptografia usar, dentro de algumas opções. Aqui entrou o conhecimento de amigos especialistas já, que me deram suporte em qual escolher. Acabei ficando com AES/GCM - 256. A autenticação: o maior erro e dificuldade foi a comunicação entre app > api, pois não é só mandar o que o app quer para a api, ou vice-versa. Trabalhando com a camada de DTO e um BD relacional PostgreSQL em nuvem, errei várias vezes, tanto dentro do app > api quanto api > BD, pois entram tipos de dados, ou seja, quais dados a api espera, seus formatos, e depois, entram quais os dados que o BD está esperando e seus formatos. Enfrentei erros que fiquei horas tentando resolver, e no fim era apenas o tamanho do dado que tal coluna no BD suportava não era suficiente. Isso me fez sentir um pouco bobo quando descobri rsrs, pois parece lógico, né? Mas acredite, passa fácil esse tipo de erro rsrs, pois é uma coisa que é básica, mas passei em branco e custei a identificar. Estava tentando colocar um token que passa fácil de 1000 caracteres em uma coluna que suportava apenas 255, rsrs. Na autenticação/autorização também tive muitos erros, pois estou trabalhando com níveis de acesso ligados a tipos de usuários. Deu muito trabalho e erros para mais de metro rsrs. Estou usando o JWT para gerenciamento de tokens. Achei bem complicada essa parte, pois tem de trabalhar com validações, refresh de tokens. Fazer o app e a api conversarem na mesma língua nesta parte foi um desafio enorme, pois, a princípio, tentei fazer a validação da autenticação através deles. Porém, se o usuário deslogasse, quando logasse novamente ele tinha um novo token, e a validação não passava por causa do que está gravado no BD não batia com o novo enviado pelo app. Superar isto foi uma das coisas mais gratificantes que tive; entender que não era a melhor forma de autenticação e encontrar uma [forma] segura foi a cereja do bolo. Agora creio que encontrar esses erros e conseguir manter a segurança, num nível alto, lembrando que tudo isso casando com a regra de negócio e a experiência do usuário (pois a segurança tem de ter um equilíbrio que não afete muito a experiência do usuário ou o desempenho do app, ou a integridade dos dados), enxergar esse contexto e encontrar soluções para eles com certeza foi o maior aprendizado. E hoje, com certeza, tive um crescimento como desenvolvedor enfrentando todo esse cenário e, como disse no artigo, superá-los não tem preço; pelo contrário, te faz querer um desafio maior ainda. Obrigado pela pergunta, que me dá a oportunidade de mostrar quantos erros cometi e como eles me fizeram crescer e aprender. Foi muito legal. Então se desafiem! Os erros são, no fim, uns dos nossos melhores amigos no início da carreira. Não tenham medo de errar, mas sim coragem e persistência para superá-los. Pois é muito bom mesmo.

DIO Community
DIO Community - 30/04/2025 09:54

Incrível o seu artigo, Luciano! A forma como você compartilha sua jornada de superação e a mudança de perspectiva sobre os desafios que surgem durante o desenvolvimento de projetos reais é uma inspiração. A sua reflexão sobre como esses obstáculos realmente ressoa com a experiência de muitos programadores que buscam a verdadeira excelência no desenvolvimento.

Na DIO, acreditamos que a verdadeira aprendizagem ocorre quando nos desafiamos a ir além do óbvio e enfrentamos as complexidades do mundo real. A maneira como você apresenta a importância de abraçar a complexidade é exatamente o tipo de abordagem que forma profissionais completos e preparados para o mercado. Quais foram os maiores desafios que você enfrentou ao lidar com segurança, como a criptografia e autenticação, e como esses problemas foram essenciais para seu crescimento como desenvolvedor?