Já escrevi exatamente sobre isso em outros posts:
Veja: https://www.tabnews.com.br/clacerda/mergulhando-nos-fundamentos-a-influencia-silenciosa-do-c
No caso de C, os melhores materiais de estudo vêm diretamente dos autores da linguagem e dos pioneiros da computação. O livro "The C Programming Language", comumente conhecido como K&R, é a bíblia do C, escrito por seus próprios criadores. Muitos podem ser tentados por cursos em vídeo modernos, mas a verdade é que este livro, escrito muito antes de muitos de nós nascermos, é a melhor maneira de aprender a linguagem.
C é uma linguagem simples. Em sua essência, é quase trivial. C não oferece muitas das abstrações encontradas em linguagens modernas. Portanto, quando se trata de construir algo complexo em C, a tarefa pode ser desafiadora. Aqui entra o "Advanced Programming in the UNIX Environment". Mais do que apenas um livro; é uma janela para o mundo da programação em C no "mundo real". Ele desvenda os mistérios por trás de como ferramentas como o NGINX ou o PostgreSQL funcionam.
Ao dominar os conceitos apresentados neste livro, você não apenas será capaz de entender essas ferramentas, mas também de modificar, otimizar e até mesmo criar soluções semelhantes.
Em meio a tantos livros antigos, pode parecer que a linguagem C tenha estagnado no tempo. Porém, "C for the 21st Century" é uma ponte que conecta as abordagens clássicas com as modernas técnicas e ferramentas de desenvolvimento. Novas bibliotecas, otimizações e padrões surgiram. Este livro abraça a evolução da linguagem, apresentando as melhores práticas atuais, ferramentas modernas e um olhar renovado sobre a programação em C no cenário contemporâneo.
Após explorar os recursos literários fundamentais para entender a linguagem C, é essencial adotar uma abordagem prática que complementa a teoria com experiências reais de desenvolvimento. Isso envolve mergulhar profundamente nos sistemas subjacentes, construir projetos do zero e estudar o trabalho dos mestres.
Entendendo os Sistemas Subjacentes
Todas as tecnologias modernas, independentemente da stack de desenvolvimento utilizada, interage com o sistema operacional por meio de uma API em C. Essa universalidade sublinha a importância do C como a base do desenvolvimento de software. Ao se envolver em projetos que exigem interação direta com as "system calls", os desenvolvedores adquirem um entendimento profundo de como o software se interfaceia com o hardware, outros processos, e o próprio sistema operacional. Essa experiência prática é inestimável, pois revela a complexidade e a beleza da comunicação no nível do sistema, algo que a teoria por si só não pode fornecer completamente. É fundamental ter uma compreensão sólida (libc) quanto das chamadas de sistema. Aqui o man
é seu melhor amigo.
Construindo do Zero
A ideia de escrever seu próprio servidor web ou sistema de banco de dados pode parecer assustadora, mas é um exercício fascinante na aplicação do C para resolver problemas complexos. Começar com uma versão simples que atenda a um caso de uso específico pode esclarecer o funcionamento de ferramentas como NGINX ou PostgreSQL. Tais projetos não apenas aprimoram suas habilidades de programação, mas também aprofundam sua apreciação pela eficiência e flexibilidade que o C oferece.
Aprendendo com os Mestres
Além de construir suas próprias ferramentas do zero, é crucial estudar o trabalho dos mestres, mergulhando no código-fonte de projetos emblemáticos. Ler o código-fonte dessas ferramentas é uma jornada de descoberta. Claro, não tente entender tudo de uma vez; o objetivo é absorver qualquer coisa, algo que faça sentido. Tente modificar algo e recompile sem quebrar o sistema. Ou melhor ainda quebre algo de propósito, e com a ajuda des mensagens de erro do compilador, arrume.
Explore todas as opções de compilação disponíveis e faça benchmarks de seu desempenho, compilando com -O3 para otimização máxima e sem nenhuma otimização. Execute o binário dentro do GDB e observe as diferenças.
Um abraço e bons estudos!