Eu estudo ciências da computação há mais de uns 3 anos e já venho sofrendo programando há mais de 5 ou 6 nas mais diferentes de linguagens (C#, C, C++, Java, Javascript, Haskell, Python..). Contudo, hoje em dia eu só domino bem uma delas, Python.
Apesar de que já dominei e estudei C# o suficiente para ter dado aulas de programação de jogos utilizando à linguagem, pra quem tá curioso de ouvir minha voz e os jogos que ensinava, segue aqui o link. Ainda sou fã dessa linguagem só que infelizmente não tive muitas oportunidades de trabalhar com ela ainda. Não façam isso, se vocês sabem algo muito bem, utilizem! A pior coisa que já fiz foi não construir nada quando conhecia C# e programação de jogos bem o suficiente.
Só que Python é uma linguagem de programação alto nível e com alguns problemas inerentes à ela apesar de ser suficiente na maioria dos casos que utilizo. Nem sempre ela será a única solução, tanto que hoje em dia construo APIs também utilizando Java no trabalho.
Então, decidi aprender algo novo e colocar um desafio pra mim: chegar mais perto do metal e que linguagem alto nível é mais perto do C?. Além de ser uma linguagem com escopo bem definido e pequeno. (Python possui muito mais funções e tipos “primitivos” do que C, isso você pode ter certeza).
1º passo: definir as fontes

As fontes de estudo que você deve procurar provavelmente estarão em inglês, raro algumas exceções em pt-br.
Algumas boas fontes são as indicações em sites como Google.com, Quora.com e fóruns como o Reddit.
Existem alguns artigos que ensinam pontos específicos, provavelmente você irá utilizá-los durante sua jornada mas não o tempo todo. Depois de ter definido as fontes principais (livros ou cursos). A gente coleta algumas menores secundárias (artigos, sites, etc, geralmente coisas menores).
Outra grande fonte são as pessoas, procure pessoas que saibam C e possam também lhe apontar bons materiais e artigos sobre conceitos difíceis.
2º passo: consumir essas fontes
Leia atentamente e faça todos os exercícios, há menos aqueles que você percebe só são uma modificação irrisória (mas se você percebe e não tem ideia de como fazer, vai valer a pena pensar ) do anterior, provavelmente será perda de tempo :).
Consumir essas fontes é essencial, principalmente se você for iniciante, como já conheço outras linguagens de programação, somente dei uma olhada por cima do sumário e sai marcando pontos que fossem ser interessantes e/ou eu não dominava mesmo, como modifiers (C possui 4 modifiers e eu jurava que só tinha 2). Quando você tiver uma dúvida, pergunte à um mentor, eles geralmente vão saber aquela pequena informação que te salva 3 horas de pesquisa!.
3º passo: construir coisas com o aprendizado
Uma das coisas que ainda não fiz mas tenho certeza que é extremamente necessário pois o fiz quando aprendi sobre aprendizagem de máquina (continuo aprendendo muito, pense num assunto gigante!).
Mas o 3º passo é esse, tentem resolver um problema difícil utilizando C, você vai aprender muito sobre a linguagem e quais as suas limitações, por ex: image criar um site em C, é possível? Se sim, o quão fácil/difícil é?. Aprender fazendo é a melhor maneira.
Por fim, segue alguns recursos que gostei de ter usado/várias pessoas indicaram:
Bons livros para aprender C:
“Programming in C” , escrito por Greg Perry.
“Use a cabeça – C”, escrito por David Griffiths e Dawn Griffiths.
Fontes secundárias:
Meu jabá
Quer saber sobre as notícias de T.I. mais relevantes? sigam o meu newsletter.