Eu criei minhas próprias funções da libc do "zero"!
Olá, pessoal do TabNews! Hoje gostaria de compartilhar como foi a minha experiência desenvolvendo uma biblioteca em C do zero, sem ter nenhuma experiência prévia com programação, durante 16 dias!
Me chamo Sophia (aka ciproterona), tenho 18 anos e recentemente me tornei Cadete na 42 São Paulo. Para quem não conhece, a 42 é uma escola de engenharia de software disruptiva e sem professores: o aprendizado é baseado em projetos práticos, avaliação entre pares (peer-learning) e provas semanais. Eu me mudei sozinha da Paraíba para São Paulo apenas para tentar o processo seletivo (a Piscina) e, felizmente, deu certo! Mas essa jornada fica para um próximo texto.
A Libft é o nosso primeiro projeto oficial como Cadetes. O objetivo é recriar do zero várias funções da biblioteca padrão do C (libc), como isalpha, memcpy, bzero, além de funções mais avançadas como atoi, itoa e a ft_split (😭). Também há uma seção focada nas linked lists, implementando funções como lstnew, lstdelone e lstadd_front. Por regra da escola, todas as funções recriadas devem levar o prefixo ft_ (de Forty-Two).
Os maiores desafios
Para quem nunca tinha visto código na vida, o gerenciamento de memória foi um choque. Sem dúvidas, as funções mais difíceis para mim foram a ft_split e a ft_strtrim. Foram as que me exigiram mais tempo de estudo, especialmente para garantir o tratamento correto de ponteiros e evitar qualquer vazamento de memória (memory leak) ou um Segmentation Fault escondido, afinal, basta um único deslize desses para a Moulinette (O sistema de correção automática) ou os avaliadores zerarem o projeto...
O que realmente me ajudou a destravar a lógica foi externalizar o problema: comecei a desenhar os arrays e ponteiros no papel, fazendo uma espécie de "teste de mesa" visual. Ver a memória acontecendo no papel deixou o entendimento do código mais simples (tem momentos que o tradicional funciona).
O Projeto
Quem tiver curiosidade em conferir como ficou a estrutura final do meu repositório, ele está disponível no GitHub: github.com/ciproterona/42_libft.
Nota sobre contribuições: Como este é um projeto acadêmico e individual, não aceito merges de Pull Requests externos para alterar o código principal. No entanto, sinta-se totalmente livre para abrir uma Issue ou PR com caráter estritamente educacional (propor uma lógica mais eficiente, discutir novos conceitos ou apontar melhorias). Só peço, por favor, que evite enviar interações sem propósito ou sem uma explicação clara. E quero relembrar que entrei na 42 sem ter nenhum conhecimento sobre Git, C, algoritmos e lógica de programação. Eu aprendi tudo durante esses 3 meses que estive na 42.
Adoraria saber: quem aqui também começou a programar direto pelo baixo nível do C? Como foi a experiência de vocês com gerenciamento de memória no início? E como vocês estudam programação atualmente?
Estarei trazendo atualizações aqui no TabNews para os próximos projetos! Até mais 👐🏼