My path at 42 São Paulo
Portfólio de projetos realizados durante meu período na 42 São Paulo.
42 São Paulo é uma instituição educacional inovadora que oferece treinamento gratuito em engenharia de software, utilizando uma metodologia única de aprendizado colaborativo baseada em projetos práticos. Sem professores tradicionais, o programa está disponível 24 horas por dia, 7 dias por semana, com duração de aproximadamente 18 meses, focando em linguagens de programação fundamentais e tópicos avançados. O processo de seleção inclui uma fase imersiva denominada "Piscina", e a instituição se destaca pela alta taxa de empregabilidade, com 85% dos alunos ingressando no mercado de trabalho no primeiro ano. Parte de uma rede global com 35 campi distribuídos em 22 países, a 42 São Paulo prioriza a diversidade e a inclusão, oferecendo bolsas de estudo e desenvolvendo não apenas habilidades técnicas, mas também competências essenciais, como a resolução de problemas e o trabalho em equipe.
A Piscine é, sem dúvida, a parte mais crucial do processo seletivo da 42, onde desenvolvemos uma variedade de projetos.
Iniciamos com shell scripting e avançamos progressivamente para tarefas utilizando a linguagem de programação C.
-
O projeto "Shell 00", integrante do currículo de programação em C da 42, apresenta os alunos à criação de scripts no shell Unix. Os exercícios abordam progressivamente conceitos fundamentais, como permissões de arquivos, comandos básicos do shell e práticas de script. Entre as tarefas, estão a criação de saídas específicas de arquivos, o uso de comandos
Git
, a manipulação de sistemas de arquivos e a elaboração de scripts para automatizar operações, como a limpeza de arquivos temporários ou a identificação de arquivos ignorados em um repositório. O projeto enfatiza a atenção meticulosa aos detalhes e as avaliações entre pares, garantindo um aprendizado colaborativo e a consolidação dos fundamentos da programação em shell.
-
O projeto "Shell 01" da 42 concentra-se no desenvolvimento avançado de habilidades em scripting no shell. Ele consiste em exercícios que aprimoram a proficiência em comandos Unix e lógica de script, como a listagem de grupos de usuários, a busca e a contagem de arquivos, a extração de endereços MAC e a manipulação da saída de texto. Os alunos também são desafiados com tarefas criativas, como criar arquivos com nomes específicos e realizar operações aritméticas utilizando sistemas numéricos personalizados. O projeto enfatiza a resolução cuidadosa de problemas, o rigor na aderência à sintaxe e a colaboração entre pares, reforçando assim os conceitos fundamentais do scripting no shell.
-
O projeto "C 00" introduz conceitos fundamentais de programação em C, voltados para iniciantes. Os exercícios se concentram na criação de funções básicas, como a impressão de caracteres, números e combinações de dígitos, seguindo normas rigorosas de codificação. As tarefas incluem a escrita de funções para exibir o alfabeto em diversas ordens, verificar o sinal de números e gerar saídas formatadas, como combinações numéricas. O projeto utiliza exclusivamente a função
write
, assegurando uma compreensão aprofundada do gerenciamento de saída em nível baixo. Seu objetivo é incutir hábitos de codificação disciplinados e o domínio da lógica de programação, além de promover o aprendizado colaborativo e a avaliação entre pares.
-
Este conjunto de exercícios foca nos conceitos fundamentais de manipulação de ponteiros e
arrays
em C, com o objetivo de reforçar a compreensão dos alunos sobre operações com ponteiros. Cada tarefa requer a implementação de uma função sem o uso de funções externas, com exceção da função write, utilizada no exercício de exibição de strings. As atividades abrangem desde a atribuição de valores a inteiros através de ponteiros e a troca de valores entre inteiros, até a realização de operações matemáticas (divisão e módulo) com resultados armazenados em ponteiros. Além disso, os exercícios envolvem o manuseio de strings – incluindo a exibição e a contagem de caracteres – e a inversão e ordenação de arrays de inteiros. Os alunos devem submeter seus arquivos de código conforme as especificações de cada exercício.
-
Este conjunto de exercícios no módulo C 02 da 42 Piscine foca na manipulação de strings e operações de memória. Envolve a implementação de versões personalizadas de funções da biblioteca padrão (como
strcpy
,strncpy
estrlcpy
) e de funções utilitárias para verificar características de strings (por exemplo, se as strings contêm apenas caracteres alfabéticos, numéricos, imprimíveis, maiúsculos ou minúsculos). Outras tarefas incluem transformar strings (para maiúsculas, minúsculas ou capitalizando palavras), exibir caracteres não imprimíveis em hexadecimal e imprimir regiões de memória com uma representação formatada.Os exercícios aumentam em dificuldade e têm como objetivo fortalecer a compreensão de strings, ponteiros e gerenciamento de memória em C. Os alunos devem seguir rigorosamente as normas de codificação, verificadas pela Moulinette, e submeter seu trabalho conforme as especificações para serem aprovados nos testes automatizados.
-
Este módulo na Piscine de C da 42 foca na manipulação avançada de strings utilizando funções que replicam comportamentos da biblioteca padrão de C. As tarefas progridem em dificuldade, abrangendo comparações, concatenação, busca por substrings e gerenciamento do tamanho das strings.
Os alunos devem seguir normas rigorosas e submeter apenas os arquivos exigidos para serem aprovados no sistema de correção automatizada, Moulinette. O cumprimento dessas diretrizes garante que o código compile e funcione corretamente sob flags específicas do compilador (
-Wall -Wextra -Werror
).
-
O módulo C 04 foca em operações com strings e números em
C
, mesclando habilidades fundamentais — como contar caracteres e exibir strings — com tarefas intermediárias, como converter números entre diferentes bases. Os exercícios evoluem de forma progressiva, com ênfase na validação de entrada e no tratamento de erros, especialmente nas conversões de base. Essa abordagem garante uma base sólida para aplicações práticas, como o processamento de entradas do usuário e sistemas numéricos personalizados, enquanto as normas rígidas e as restrições de compilação reforçam boas práticas de codificação voltadas para o desenvolvimento no mundo real.O módulo C 04 oferece uma introdução sólida a técnicas essenciais de programação em C, combinando conceitos fundamentais e intermediários. Ao concluir esses exercícios, os alunos aprofundam sua compreensão sobre manipulação de strings e números, preparando-se para desafios mais avançados nos módulos seguintes.
-
O Rush 00 introduz os alunos à programação colaborativa em C, desafiando-os a gerar padrões de formas retangulares utilizando caracteres. O projeto integra conceitos essenciais como o uso da função
write
para saída, o controle de estruturas como laços aninhados e a validação de entrada para lidar com casos extremos. As equipes devem seguir rigorosamente as normas de codificação e respeitar as diretrizes de entrega do projeto, incentivando a disciplina na organização do código e no tratamento de erros.O Rush 00 oferece uma introdução prática ao trabalho em equipe e às habilidades fundamentais de programação em C. Ao enfrentar esse projeto, os alunos ganham experiência concreta em codificação estruturada, desenvolvem atenção aos detalhes e se preparam para desafios mais complexos ao longo da formação na 42.
-
O Rush 01 foca na resolução de quebra-cabeças lógicos com restrições, utilizando a linguagem C. O projeto combina habilidades fundamentais, como validação de entrada e tratamento de erros, com técnicas intermediárias de resolução de problemas voltadas para desafios em grade. Os alunos devem implementar um programa que preencha uma matriz 4x4 com números, baseando-se em pistas de visibilidade, garantindo valores únicos nas linhas e colunas e respeitando todas as restrições. Há uma ênfase especial na criação de algoritmos eficientes, no gerenciamento dinâmico de memória e na obediência rigorosa às normas de codificação.
O Rush 01 oferece uma introdução abrangente ao raciocínio lógico e a conceitos avançados de programação em C. Ao concluir esse projeto, os alunos fortalecem suas habilidades de resolução de problemas, aprendem a lidar com entradas complexas e se preparam para enfrentar desafios mais sofisticados nos módulos futuros.
-
O Rush 02 foca no processamento de texto e números em C, combinando tarefas fundamentais, como a leitura de entradas e a exibição de texto, com desafios intermediários, como o gerenciamento dinâmico de dicionários e a conversão de números para suas representações textuais. Os exercícios dão ênfase ao tratamento robusto de erros, ao gerenciamento de memória e ao respeito às regras de formatação do dicionário, garantindo uma base sólida para lidar com entradas complexas e dados estruturados.
O Rush 02 oferece uma introdução completa a técnicas essenciais de programação em C, unindo resolução prática de problemas com padrões rigorosos de codificação. Ao concluir esse projeto, os alunos aprofundam seus conhecimentos em processamento de texto, validação de entrada e uso dinâmico de memória, preparando-se para desafios mais avançados nos módulos seguintes.
O Warm Up na 42 funciona como uma fase preparatória para revisitar os fundamentos essenciais de programação aprendidos durante a Piscine. Esses exercícios abordam tópicos como laços, funções, ponteiros e estruturas de dados, reforçando tanto a base sintática quanto a semântica da linguagem C.
Junto com as habilidades técnicas, o aquecimento introduz a avaliação entre pares, ensinando comunicação eficaz, empatia e colaboração, que são valores centrais da metodologia de aprendizado da 42. Essa fase ajuda os alunos a ganhar confiança e se preparar para os desafios do currículo da 42.
-
O projeto P2P 101: Avaliação e Comunicação prepara os alunos da 42 para avaliações entre pares. Ele introduz o conceito de Comunicação Não-Violenta (CNV) para resolver conflitos e promover empatia durante as avaliações. O projeto inclui exercícios sobre a aplicação dos princípios e cenários da CNV, com o objetivo de desenvolver habilidades de comunicação e resolução de problemas. Também explica o processo de avaliação, com fluxogramas e diretrizes práticas.
-
O projeto Piscine Reloaded é uma coleção de exercícios que revisita os fundamentos da programação em C. Ele abrange tópicos como laços, ponteiros, manipulação de strings, estruturas e gerenciamento de memória. O objetivo é reforçar o aprendizado prático adquirido durante a Piscine, sem reutilizar o código anterior. O projeto inclui regras específicas de submissão e avaliação automatizada pela Moulinette, com ênfase no cumprimento das normas e práticas de codificação.
O Common Core da 42 é a etapa fundamental do currículo, projetada para oferecer uma base sólida em engenharia de software. Com duração de 12 a 18 meses, essa fase prepara os alunos para os desafios técnicos da área de tecnologia por meio de aprendizado prático e projetos inspirados em situações do mundo real.
Os alunos iniciam sua jornada explorando a programação em C
e C++
, passando de conceitos fundamentais a tópicos avançados, como os paradigmas imperativo e orientado a objetos. Essa introdução rigorosa estabelece as bases para compreender a fundo as complexidades da codificação e do desenvolvimento de software.
O currículo também abrange algoritmos e estruturas de dados, capacitando os alunos a criar soluções eficientes e a manipular dados de forma eficaz. Esses tópicos centrais são essenciais para enfrentar problemas computacionais complexos e otimizar o desempenho de softwares.
Além disso, os alunos mergulham em arquitetura de sistemas e redes. Eles aprendem os fundamentos da administração de sistemas UNIX
, adquirem uma compreensão sobre a arquitetura de redes e exploram a programação cliente-servidor — conhecimentos essenciais para a construção de sistemas confiáveis e escaláveis.
O programa também introduz programação gráfica e web por meio de projetos como o Fract-ol
, focado na criação de fractais, e o ft_transcendence
, que envolve o desenvolvimento de plataformas web interativas. Esses projetos permitem que os alunos experimentem aspectos criativos e técnicos do design de software.
-
A primeira milestone na 42 é representado pelo projeto
Libft
, um dos primeiros grandes desafios que os alunos enfrentam após concluir o warmup. O objetivo principal do projeto é criar uma biblioteca estática personalizada em C, reimplementando diversas funções da biblioteca padrão (libc
). Os alunos devem escrever suas próprias versões dessas funções e utilizar umMakefile
para compilar o código corretamente. Essa biblioteca será reutilizada em projetos futuros, já que o uso direto das funções da biblioteca padrão em C é proibido na maioria dos projetos da 42. Com essa milestone, os alunos não apenas reforçam sua compreensão sobre os conceitos fundamentais de programação, como também aprendem a estruturar e organizar o código de acordo com diretrizes rigorosas — algo essencial para o sucesso em projetos mais avançados. Além disso, esse projeto introduz os sistemas de testes e correções automatizadas utilizados pela 42, como a Moulinette, que avalia o código com base em critérios específicos.
-
O projeto ft_printf tem como foco recriar a funcionalidade da função
printf()
da biblioteca padrão em C. Ele desafia os participantes a implementar uma versão personalizada capaz de lidar com diversos especificadores de formato, como%c
,%s
,%p
,%d
,%i
,%u
,%x
,%X
e%%
. O objetivo é desenvolver uma implementação estruturada e eficiente, respeitando padrões rigorosos de codificação, garantindo segurança de memória e evitando comportamentos indefinidos. Esse exercício também introduz o uso de funções variádicas, permitindo o tratamento de um número variável de argumentos, além de oferecer uma excelente oportunidade para aprofundar as habilidades de programação em C.Além dos requisitos obrigatórios, o projeto inclui bônus opcionais, como o suporte a flags (
-0.# +
) e especificações de largura de campo. No entanto, esses bônus só são avaliados caso a implementação principal atenda perfeitamente a todos os critérios exigidos. Ao concluir o projeto, a versão personalizada doft_printf()
pode ser integrada à biblioteca pessoal do participante (libft
), tornando-se uma ferramenta valiosa para projetos futuros em C.
-
O projeto get_next_line desafia os participantes a implementar uma função capaz de ler uma linha por vez a partir de um
file descriptor
. Essa função imita o comportamento de ferramentas comogetline()
, mas deve respeitar restrições rigorosas, como o gerenciamento dinâmico de memória e a busca por eficiência. O projeto introduz conceitos como o uso de variáveis estáticas para manter o estado entre chamadas da função e leitura com buffer, garantindo um desempenho otimizado tanto para arquivos pequenos quanto para arquivos grandes.Principais características do
get_next_line
incluem:- Leitura incremental de arquivos utilizando um buffer de tamanho pré-definido (
BUFFER_SIZE
). - Retorno de linhas completas, incluindo o caractere de nova linha (
\n
), quando presente. - Suporte tanto para a entrada padrão (
stdin
) quanto para descritores de arquivos. - Gerenciamento seguro de memória para evitar vazamentos ou comportamentos indefinidos.
Este projeto enfatiza a modularidade, com a lógica principal distribuída entre funções auxiliares para manipulação de strings e gerenciamento de memória. Ele testa a compreensão do participante sobre ponteiros, alocação dinâmica e tratamento de erros em C.
- Leitura incremental de arquivos utilizando um buffer de tamanho pré-definido (
-
O projeto Born2beRoot introduz os participantes à administração de sistemas e aos fundamentos da virtualização. O objetivo é configurar uma máquina virtual como um servidor seguro, seguindo diretrizes rigorosas. Os participantes escolhem entre
Debian
ouRocky Linux
para criar um ambiente minimalista e eficiente, sem interfaces gráficas.O projeto enfatiza conceitos-chave de administração de sistemas, incluindo acesso seguro, gerenciamento de usuários, armazenamento criptografado e configuração de serviços. Além disso, um script de monitoramento personalizado é desenvolvido para automatizar o relatório de status do sistema.
Esse desafio serve como uma introdução ao gerenciamento e à segurança de servidores, proporcionando uma base sólida para projetos futuros na administração de sistemas.