Mano, já passei por isso várias vezes, e posso te garantir: todo mundo que programa já teve essa sensação em algum momento. O que você descreveu é aquele dilema clássico entre “quebrar a cabeça sozinho” e “olhar soluções prontas”. O importante é encontrar um equilíbrio.

Olhar um código pronto não significa que você "trapaceou" ou que nunca vai conseguir resolver algo sozinho. O aprendizado na programação vem de entender os padrões e a lógica por trás das soluções, não de reinventar a roda toda vez. Se você analisou a solução, quebrou em partes e realmente entendeu, isso já foi um aprendizado valioso.

Uma coisa que me ajudou muito foi seguir um ciclo de tentativa antes de partir para a solução pronta: 1️⃣ Ler e entender bem o problema (às vezes o desafio não está no código, mas na interpretação); 2️⃣ Anotar diferentes abordagens que vêm à cabeça, mesmo que pareçam ruins; 3️⃣ Testar aos poucos sem medo de errar; 4️⃣ Pesquisar conceitos e estratégias (não só códigos prontos); 5️⃣ Só então, olhar soluções prontas — e quando olhar, sempre tentar reescrevê-las do zero, sem copiar e colar.

Sobre a postura: seu professor mandou bem no conselho. Resolver problemas constantemente (mesmo os fáceis) faz diferença absurda no raciocínio lógico. Com o tempo, você vai perceber que os padrões vão se repetindo e que problemas que antes pareciam impossíveis começam a se tornar intuitivos.

No fim das contas, o que importa é continuar praticando sem se cobrar tanto. Todo dev passa por isso, e é exatamente essa persistência que define a evolução. 🚀🔥