Quando comecei na programação, eu focava em construir projetos com base em desafios, tutoriais, eventos etc. Durante esses processos, sempre sugeriam que fizéssemos melhorias nos projetos ou usássemos os conhecimentos recém adquiridos para construir algo novo. Apesar dos conselhos serem recorrentes, eu tinha dificuldades para ter ideias originais que demonstrassem que eu podia ir além do básico. Isso só mudou quando eu finalmente compreendi que todos os projetos precisam ser construídos para resolver um problema: não importa se é para apenas uma pessoa ou para milhares.
No entanto, isso não significa que seguir os passos que mencionei antes, não seja importante. Pelo contrário: ao participar de eventos, seguir tutoriais, fazer projetos básicos, e desafios da internet você pode aprender muito sobre programação e o processo de desenvolvimento como um todo. Cada um desses projetos, vai te ensinar uma lição diferente sobre a programação.
Projetos básicos
Criar projetos simples como calculadora, lista de tarefas, conversor de moedas ou temperatura, geradores de senhas, jogo de adivinhação, cronômetro, entre outros, é uma ótima maneira de entender as principais funcionalidades e interações de qualquer linguagem de programação. Faça primeiro o básico, depois adicione pelo menos uma personalização para destacar seu projeto entre os demais. Pode ser a adição de uma nova funcionalidade, criar um design focado na experiência do usuário, ou utilizar algum recurso diferente que agregue valor ao projeto. A intenção é transformar essas pequenas modificações em uma experiência pessoal que destaque as suas habilidades entre os demais.
Desafios na internet
Plataformas como LeetCode, HackerRank, Exercism e Codewars oferecem uma variedade de desafios que vão desde lógica até a manipulação de dados, ajudando a aprimorar suas habilidades em estruturas de dados e algoritmos. Essas habilidades são essenciais para desenvolver projetos mais complexos e isso vale tanto para desenvolvedores back-end quanto front-end.
Algumas vezes, os dados que você receberá não estarão prontos para uso imediato, e será necessário fazer ajustes para atingir certos objetivos de acordo com as necessidades do projeto. Como, por exemplo, agrupar dados, iterar sobre listas aninhadas com diferentes níveis de profundidade, transformar dados de um formato para outro, ou organizar informações para gerar relatórios em PDF. Esse tipo de exercício ajuda a desenvolver habilidades práticas e enfrentar situações comuns em projetos reais.
Para desafios mais completos e complexos, existem plataformas como o DevChalleges e Frontend Mentor, que oferecem telas prontas e especificações detalhadas com requisitos obrigatórios e opcionais. Essas plataformas criam uma experiência única que simula o escopo e o objetivo de um projeto real. É uma excelente maneira de aprender como funciona o desenvolvimento em um ambiente profissional, onde cada detalhe é projetado para satisfazer as necessidades do cliente.
Tutoriais e cursos
Tutoriais e cursos são bons para aprender a integrar bibliotecas e frameworks em um único projeto antes de construir os seus próprios. Eles ajudam a criar um projeto e, eventualmente, trarão problemas inesperados mesmo que você siga o tutorial ou o curso linha a linha. Esses problemas são valiosos para desenvolver a habilidade de buscar soluções por conta própria, algo essencial no ambiente de trabalho. Quando ficar preso em um problema por muito tempo, busque ajuda nos comentários dos próprios tutoriais e cursos ou recorra a plataformas como o Stack Overflow.
Eventos
Ao participar de eventos, você pode enfrentar desafios semelhantes aos dos tutoriais e dos cursos, mas com o benefício de ter acesso a outras pessoas muito mais rápido. É comum em eventos, ter formas de se comunicar com os organizadores ou com os outros participantes. Alguns ajudam a resolver eventuais problemas e outros mostram diferentes abordagens. Esses eventos são ótimas oportunidades para expandir sua rede de contatos e conhecer pessoas com interesse e habilidades semelhantes.
Aprimorando projetos para se destacar
Agora que você possui conhecimentos para construir diferentes tipos de projeto com auxílio de outras pessoas, seja de forma direta ou indireta, tem a oportunidade de dar um toque pessoal a cada um deles. Personalizar um projeto com coisas novas ou únicas não apenas demonstra sua capacidade de ir além do básico, mas também permite enxergá-los a partir de outras perspectivas, conectar ideias diferentes e criar soluções inovadoras. O importante é sempre buscar uma forma de integrar sua visão pessoal, algo que realmente reflita sua essência e suas habilidades.
Ah, mas como eu faço isso?
Adicione novas funcionalidades: ao adicionar novas funcionalidades você pode aprender muitas coisas novas e, como bônus, tornar seu projeto diferente dos outros. É uma forma de deixar seu projeto mais autêntico e pessoal. Suponha que você esteja trabalhando em uma lista de tarefas.
- No front-end, você poderia adicionar filtros personalizados permitindo que os usuários visualizem dados com base em critérios específicos como status ou prazos.
- No back-end, você poderia implementar um sistema de autenticação permitindo que apenas pessoas autenticadas criem, editem, e gerenciem as tarefas.
- Outra opção seria trabalhar com front-end e back-end integrados, desenvolvendo um sistema de busca no front-end e implementando uma API que retorne os resultados com base nas consultas feitas.
Esses são apenas alguns exemplos que já adicionam uma dose de desafio e complexidade nos projetos, pois vão além do tradicional (CRUD Create, Read, Update, Delete). Além disso, você pode conectar partes de diferentes projetos para criar algo novo ou resolver um problema distinto.
Explore uma ferramenta nova: aproveite o projeto para estudar uma biblioteca nova ou aprofundar o conhecimento em um recurso que você ainda não domina. Por exemplo, ainda pensando na lista de tarefas, se estiver usando Vue, você poderia estudar o Vuex para melhorar o gerenciamento de estados. Utilizar seus projetos para aprender, é uma boa maneira de demonstrar que você busca evoluir como desenvolvedor.
Melhore a interface do usuário: faça ajustes no layout, se for pertinente ao projeto, para melhorar a experiência do usuário. Considere aspectos como acessibilidade e facilidade de uso para atender diferentes tipos de usuário. Ainda que você não tenha a intenção de trabalhar na área de design, entender como criar uma interface amigável pode facilitar seu processo de desenvolvimento, bem como, fazer diferença no impacto e na eficácia do seu trabalho.
Compartilhe sua experiência: documente seu processo de desenvolvimento em um artigo, um blog ou nas redes sociais. Não precisa ser algo muito detalhado; pode ser algo breve que destaque seus principais desafios e as soluções que você encontrou. Compartilhar suas vivências pode ajudar outras pessoas e também fortalecer em sua memória o conhecimento que adquiriu durante o processo. Além disso, isso demonstra sua capacidade de resolução de problemas.
Se você já desenvolveu vários projetos, mas agora deseja criar algo completamente novo do zero, ou mesmo se ainda não tem experiência, a chave para tudo, sempre é resolver o problema de alguém.
Mas como encontrar um problema para resolver?
No nosso dia a dia estamos rodeados de problemas, mas andamos tão ocupados com o turbilhão de informações que recebemos, que muitas vezes, não prestamos muita atenção ao nosso redor. Às vezes, tudo que precisamos, é parar um instante para observar.
Por exemplo, quando eu estava finalizando a faculdade, fazia poucos dias que eu tinha participado do NLW IA, eu estava estudando para uma prova usando o Chat GPT. O processo consistia em inserir informações, pedir pra que ele gerasse perguntas, responder a essas perguntas, e solicitar uma avaliação das respostas.
Nesse período, o Chat GPT ainda não tinha memória dentro da própria conversa e, em alguns momentos, acabava se perdendo. Então, eu precisava repetir o processo. Foi quando eu percebi que seria mais fácil, se eu apenas colocasse as informações uma única vez e ele conseguisse gerar múltiplas perguntas e avaliar diversas respostas. Foi quando eu tive a ideia de automatizar a parte repetitiva do processo.
Olhe ao seu redor e pense: quais tarefas tomariam menos tempo se fossem automatizadas? Quais coisas são repetitivas em sua rotina? Como você pode melhorar a realização de determinadas tarefas? Quais desafios você enfrenta que poderiam ser transformados em oportunidades?
Se, mesmo observando atentamente, você não conseguir encontrar um problema a ser resolvido, tente encontrá-los de outra maneira. Experimente usar técnicas de geração de ideias, como brainstorm e mapas mentais, combinar ideias de diferentes projetos em um novo, ou explorar novas áreas.
Como organizar projetos?
Quando surge uma ideia para um projeto, é comum querer partir logo para prática. No entanto, sem um plano claro, podemos atrapalhar o processo de desenvolvimento. A falta de direcionamento pode resultar na sensação constante de que sempre falta algo, o que aumenta o risco de nunca concluirmos o projeto. Para evitar essas frustrações, precisamos planejar bem cada etapa: definir o objetivo, as funcionalidades essenciais, funcionalidades para deixar de fora – pelo menos em um primeiro momento, tecnologias e ferramentas para serem utilizadas, bem como, definir prazos. Com esse cuidado, teremos uma visão melhor para resolver o problema e aumentamos as chances de concluirmos o projeto de forma eficaz. Agora, vou dar algumas dicas sobre como organizar esse processo, com base na forma com que busco trabalhar em meus projetos pessoais, mas você pode adaptá-las, modificá-las, ou criar seu próprio método de organização.
- Determine seu objetivo pessoal com o projeto.
Definir seu objetivo pessoal com o projeto proporciona uma direção mais clara para todas as decisões que você tomará a seguir, além de ajudar a limitar o escopo. Essa definição faz com que você se concentre no que deseja aprender. No caso do meu projeto com a api de inteligência artificial, meu objetivo como desenvolvedora era criar um projeto do zero usando as minhas próprias ideias, incluindo a documentação. Queria aprimorar essa parte de documentação e explorar as possibilidades oferecidas pela IA. - Determine o objetivo do projeto.
Definir o objetivo do projeto é fundamental porque proporciona uma base sólida para o desenvolvimento. Isso garante que você cumpra sua meta como desenvolvedor e se concentre nas partes essenciais para resolver o problema identificado. Além disso, ter clareza sobre o propósito facilita muito na hora de explicar a ideia para as outras pessoas. No meu projeto, estabeleci como objetivo geral auxiliar estudantes a reter conhecimento, oferecendo uma plataforma de estudo, focada na criação de perguntas e avaliação de respostas dissertativas usando inteligência artificial com base nos tópicos fornecidos pelo próprio estudante. Com isso, eles poderão revisar o conteúdo de forma iterativa e eficaz. - Determine o escopo.
Definir um escopo é fundamental para manter o foco nas metas estabelecidas e evitar desvios desnecessários. Aqui estão algumas perguntas que podem ajudá-lo a delimitar o escopo do seu projeto e exemplos de como as apliquei no meu:
Quais as funcionalidades essenciais?
Identificar as funcionalidades essenciais é importante para garantir que seu projeto resolva as necessidades do usuário. No meu projeto, algumas funcionalidades essenciais, incluem:
- Receber dados do usuário, como tema principal e um resumo sobre o tópico: Esta funcionalidade permite que os estudantes insiram informações relevantes, as quais serão a base para geração de perguntas.
- Gerar uma série de perguntas e respostas padrão com base nos dados fornecidos: Aqui, o sistema utiliza as informações fornecidas pelo usuário para criar as perguntas que ajudarão na revisão do conteúdo.
- Permitir que o usuário visualize os dados fornecidos e as perguntas geradas: É importante que os estudantes tenham clareza sobre quais tópicos estão estudando.
- Permitir que o usuário responda as perguntas: Esta funcionalidade proporciona a revisão iterativa do conteúdo, permitindo que os estudantes testem seu conhecimento.
- Solicitar que o sistema avalie as respostas do usuário: a avaliação é fundamental para que os estudantes tenham clareza sobre as partes do assunto que dominam e as partes que precisam estudar mais.
Essas funcionalidades formam a base para o funcionamento do projeto, mas estou aberta a incluir outras que possam ser relevantes. Além disso, também considerei aspectos não necessariamente ligados às funcionalidades, como testes e acessibilidade para garantir uma melhor experiência para os usuários.
Quais coisas não pretende abranger?
Considerar as funcionalidades que não serão incluídas em um projeto pessoal é uma parte crucial do planejamento. Isso ajuda a manter o foco no objetivo principal e evitar distrações que podem prolongar o desenvolvimento sem necessidade. Isso simplifica o processo e permite que você aprofunde seu conhecimento em habilidades específicas. Faça o principal, e depois que o projeto estiver funcionando, cumprindo seu objetivo, você pode incluir novas funcionalidades.
No meu projeto, decidi não incluir a manipulação de arquivos no estágio inicial. O foco principal era os estudantes elaborarem resumos e não apenas fazerem o upload de arquivos, pois isso poderia desviar o objetivo central do projeto. Além disso, a manipulação de arquivos exigiria a definição de padrões específicos, adicionando uma camada desnecessária de complexidade. Usar a API de inteligência artificial já incluía um nível considerável de complexidade, então, preferi manter o escopo mais enxuto.
Pretende criar um design próprio?
Se sim, tome cuidado para não tornar o design um obstáculo. Se você pretende estudar a parte de criação de designs ótimo, mas também estabeleça limites como você definiu para o resto do projeto para não ficar preso nessa etapa por muito tempo. Por outro lado, se você não pretende estudar essa parte, não se apegue a isso. Existem bibliotecas com componentes estilizados prontos para utilizar como o shadcn/ui. Com essas ferramentas, você pode montar um layout básico e fácil de usar sem se preocupar com a estilização.
No meu caso, eu gosto de estudar a parte de design e criar telas, mas travei um pouco no início do desenvolvimento, pois não havia estabelecido limites claros sobre quanto tempo iria me dedicar nessa parte. Para contornar isso, mudei a estratégia para montar um layout básico usando wireframes e o shadcn/ui, uma abordagem semelhante à utilizada na NLW IA. Assim posso focar no desenvolvimento sem me perder no layout.
Quais ferramentas e tecnologias vai utilizar?
A escolha das ferramentas é tão importante quanto qualquer outra parte do projeto, pois é nesse momento, que você estabelece quais tecnologias você deseja aprender ou evoluir e quais ferramentas irá utilizar. No meu caso, para planejamento, eu decidi usar o Notion. Para o desenvolvimento, optei por utilizar as mesmas tecnologias usadas na NLW IA, pois já estava familiarizada com elas, as quais eram: React com typescript, Node JS, API da OpenAI, e o Prisma. Meu foco principal é aprimorar minhas habilidades com IA.
Estabeleça prazos
Estabeleça prazos para desenvolver cada uma das partes do projeto. Como um projeto pessoal, você pode criar um cronograma mais flexível, mas sempre é bom ter uma ideia clara de quanto tempo você vai trabalhar em diferentes funcionalidades. Isso vai te dar uma boa noção sobre expectativas e realidades.
Documente seu processo
Anote suas dúvidas, seus desafios, e as soluções que você encontrou. Isso ajuda a criar um repositório de problemas comuns, facilitando futuras resoluções. Além disso, essa prática é uma boa maneira de demonstrar sua capacidade de resolução de problemas e acompanhar sua evolução ao longo do tempo.
Faça deploy do seu projeto.
Não é preciso fazer deploy de todos os projetos que construir, mas tente fazer isso, pelo menos para aqueles que você pretende colocar em seu portfólio e usar para demonstrar suas capacidades como desenvolvedor. Você pode usar plataformas como vercel ou até mesmo o próprio Github.
Ainda que você não faça deploy de um ou outro projeto, sempre construa um bom readme contando as coisas que você definiu pro projeto, como tecnologias e funcionalidades, e se possível, inclua prints. Torne a descrição do seu projeto compreensível para qualquer pessoa, incluindo pessoas que não são desenvolvedoras.
Finalizei o projeto. Qual o próximo passo?
Ao finalizar seu projeto, publique-o se for aplicável e compartilhe seu trabalho no LinkedIn e/ou outras redes sociais. Conte as tecnologias que usou, as suas dificuldades que encontrou, como lidou com os problemas, as áreas em que evoluiu. Resumindo, mostre às pessoas o que fez, como fez e porquê fez.
Gostou do conteúdo e quer avançar nos seus estudos em Tecnologia? Cadastre-se agora na plataforma da Trindtech, com cursos e trilhas gratuitos, e faça parte do nosso Banco de Talentos.