Eu quero me aprofundar em C e, normalmente, quando quero aprender um novo idioma, penso em uma meta de projeto simples / atingível que tenha algum objetivo prático (faça uso de uma API, automatize uma tarefa, etc.)
Estou tendo mais dificuldade em encontrar um para C, principalmente porque tudo o que leio aponta para o fato de que o uso principal de C atualmente está em sistemas embarcados e em projetos de software mais complexos, como sistemas operacionais.
Isso me indica o fato de que não preciso aprender ou que apenas preciso ser um pouco mais complicado na minha estratégia de aprendizado?
Referências a recursos de aprendizagem prática? (tutorial / como produzir um resultado final com algum objetivo / benefício)
Respostas:
Eu recomendaria apenas pegar uma cópia da linguagem de programação C de Kernighan e Ritchie (2ª edição) . No final de cada capítulo, há vários exercícios, além de uma introdução muito boa à linguagem C. Isso não fará de você um mestre do idioma, mas você deve ter uma compreensão boa o suficiente no final do livro e exercícios para talvez encontrar um projeto de código aberto escrito em C para o qual possa ler o código-fonte e talvez contribuir para.
Se você deseja ver projetos reais do mundo real com o código C neles. Está ficando mais difícil - muitos projetos usam uma linguagem de "nível superior", mas C ainda está vivo e chutando. Se você quer aprender C, não tenha medo de reinventar a roda para alcançar o aprendizado. Não é uma boa ideia reinventar soluções a qualquer hora, mas é perfeitamente bom fazê-lo como um exercício acadêmico.
fonte
Você precisará entender realmente a alocação de memória. Parece que você já usou outros idiomas antes, mas as chances são de que esses outros idiomas ocultassem os detalhes sangrentos do gerenciamento de memória. Em C, o gerenciamento de memória é sempre explícito. Existem algumas vantagens nisso, mas isso significa que você precisa ter cuidado para acertar ou todo o inferno se abrirá.
Use os recursos de depuração de memória disponíveis para a plataforma que você usa. Para o Linux, existe o Electric Fence, no Mac OS X o Guard Malloc. Também existe o Valgrind, que suporta vários sistemas operacionais.
Se você não conseguir liberar memória que deve ser liberada, haverá um vazamento de memória. Continue fazendo isso e você ficará sem memória. Mesmo com o armazenamento de backup (o que a maioria das pessoas chama de memória virtual), você pode fazer com que o sistema pagine excessivamente ou até fique sem espaço de troca.
Se você liberar memória que já foi liberada, corromperá a pilha e a falha, mas provavelmente não imediatamente. Você também corromperá a pilha se exceder um buffer. As ferramentas de depuração de memória ajudarão com tudo isso.
O teste de unidade também ajuda.
fonte
Concordo com a maioria das pessoas aqui que hoje os idiomas são determinados pela tarefa em questão. Houve um tempo em que você teve uma escolha limitada a esse respeito. Hoje, o C é usado principalmente no domínio de programação Embedded / System, onde há necessidade de otimização de código. Você precisa escrever códigos precisos para obter o máximo, porque, se alguma vez você começar a usar essa abstração, o material subjacente deverá ser muito robusto. Eu diria que você tenta contornar alguns projetos GNU de código aberto, como o próprio Linux ou algo que precisa de desenvolvedores em C. Tente sua mão nesses projetos em vez de escrever algo do zero em C. Esta é provavelmente a melhor maneira de escrever códigos e aprender um idioma.
fonte
Você vai querer fazer algo que funcione na linha de comando. A programação da GUI em C é uma grande dor de cabeça, mesmo com uma boa estrutura de GUI.
Minha sugestão usual para uma experiência prática de aprendizado em C tem sido uma lista de contatos ou outro aplicativo simples de gerenciamento de dados. Isso abrangerá a maioria dos bits importantes (E / S, gerenciamento de memória, processamento de texto etc.), e você não precisará usar nada fora da biblioteca C padrão para realizá-lo. O C não possui nenhum suporte interno para gráficos, rede, som ou muito mais 1 ; portanto, para sua primeira incursão na programação C, é melhor evitar qualquer coisa que dependa desse tipo de coisa.
C pode ser usado para programação de uso geral; você apenas precisa diminuir um pouco suas expectativas (imagine que seja 1983 e você está sentado na frente de um VT52 conectado a um VAX 11/750 e estará na mentalidade certa).
Lembre-se de que C não tem guardas de lâmina e não impedirá que você faça algo estúpido. A definição de idioma é um pouco solta em alguns lugares, e há algumas operações que não são ilegais como tais, mas também não são bem definidas.
1 - A revisão mais recente (2011) do padrão de idioma adicionou suporte de encadeamento interno
fonte
Eu recomendo o Projeto Euler . Eu o usei para melhorar meu C ++ e é incrível. É ótimo porque cada problema é uma pequena tarefa que pode levar menos de uma hora para ser concluída (pelo menos as primeiras).
Você precisará de um criador de perfil e um livro sobre como otimizar o código de velocidade. Certifique-se de seguir a regra de 1 minuto: você deve obter a resposta dentro de 1 minuto.
fonte
Se você JÁ é um programador e APENAS precisa aprender C, e não se importa em aprender uma versão mais antiga da linguagem (o núcleo ainda é praticamente o mesmo), o "C para programadores" de Leendert Ammeraal não pode ser derrotado . Trabalhe com isso, do começo ao fim.
fonte