Você definitivamente deveria aprender C e esses são os motivos:
Para este artigo fazer sentido, acho que vale começar me apresentando :D
Me chamo Letícia, tenho 21 anos, sou desenvolvedora júnior backend e atuo na área há quase 2 anos. Aprendi a programar com python (acho que a maior parte das pessoas começam assim hoje em dia né rs) e nas minhas experiências profissionais até hoje sempre trabalhei com NodeJS e Javascript.
Sempre estudei por conta própria, geralmente através de livros e conteúdos espalhados pela internet. Fui me aventurando em projetos pessoais de pequeno e médio porte que, junto com as tasks do trabalho, foram me ensinando da forma mais difícil a maior parte das coisas que sei hoje.
Me considero uma boa programadora. Tenho bastante conhecimento sobre algorítmos e estruturas de dados, design patterns, clean code, programação orientada à objetos, etc. Mas esse ano decidi dar um passo importante na minha carreira: fazer faculdade.
Sei que esse é um tópico controverso e bastante discutido, mas vamos pular essa parte aqui. Fato é: para fazer a prova de transferência para um dos cursos de computação da USP, precisei aprender a programar em C e essa foi uma das melhores coisas que me aconteceram durante minha carreira.
A ideia desse conteúdo é discutir as principais coisas que aprendi programando em C e porque você deveria se aventurar nesse caminho também.
1 - Aprendi que não sabia nada sobre como um computador funciona
Como C é uma linguagem de baixo nível, nela precisamos nos preocupar com coisas que não nos preocupamos em outras linguagens (como alocação de memória, variáveis e apontadores, espaço de alocação dos diferentes data types, etc).
Essas são coisas que as engines e os compiladores das linguagens de alto nível fazem por debaixo dos panos e nós não fazemos ideia! Compreender como a memória funciona, como nossas variáveis são armazenadas, o que é um byte, um bit, a diferença entre uma variável e seu endereço... tudo isso com certeza vai te fazer um desenvolvedor melhor. Você vai passar a entender porque algumas soluções funcionam e outras não, vai saber como otimizar a utilização dos recursos da sua máquina, vai perceber que memória e processamento não são coisas infinitas rs e muito mais!
Por exemplo: Um erro muito comum na vida dos programadores é o stack overflow. Você por acaso sabe o que raios é a stack e o que é um overflow? Pois aprenda a programar em C e você vai descobrir logo nos primeiros dias :D
2 - Aprendi que coisas aparentemente simples são bastante complexas por debaixo dos panos
Logo que aprendemos a programar, descobrimos o poder dos arrays, listas ou vetores (como quiser chamá-los) e conforme vamos nos aprofundando em determinadas linguagens, vemos que elas geralmente têm uma caixa de ferramentas cheia de funções prontinhas para fazer a manipulação desses arrays.
Se você nunca estudou como as coisas funcionam por debaixo dos panos, pode parecer muito simples adicionar ou remover um elemento de um array, fazer uma cópia ou mesmo iterar sobre cada elemento. Porém, quando você programa em C, descobre que essas funções não existem, você precisa cuidar de cada detalhe e eles nem sempre são simples.
Aprender como fazer essas operações na mão vai te mostrar que existem formas muito eficientes e formas muito ineficientes de fazer a mesma coisa. Vai te forçar a pensar melhor sobre as estruturas de dados que você escolhe usar no seu programa (porque a escolha errada pode te dar muuuuita dor de cabeça) e isso vai fazer de você um desenvolvedor muito melhor.
3 - Aprendi a usar a tipagem estática
A maior parte das linguagens de alto nível têm tipagem dinâmica. Isto é, você geralmente não precisa declarar uma variável antes de usá-la. Se precisa declarar, não precisa explicitar o seu tipo. Pode mudar o tipo de uma variável (de int para char, por exemplo) durante a execução do programa e, falando de objetos, não precisa declarar todos os campos logo na sua inicialização.
Em C é tudo diferente. Se uma variável foi declarada como int ela será int para sempre. Ao declarar funções, enviar um parâmetro do tipo char quando este deveria ser int gera erro. Se você declarar um objeto data, por exemplo, com os campos dia, mês e ano, não poderá adicionar um novo campo hora durante a execução do programa.
Entender o por quê uma linguagem de baixo nível precisa ter uma tipagem estática e aprender a trabalhar com ela vai te ensinar muito sobre a gestão de contratos de entrada e saída nas suas aplicações.
4 - Aprendi de vez o que é, onde vive e do que se alimenta a memória
Eu já perdi a conta de quantas vezes falei sobre memória nesse artigo, mas é porque aprender mais sobre alocação de memória é provavelmente a coisa mais valiosa que C me ensinou. Saber a diferença de uma alocação estática para uma alocação dinâmica, o que é a stack e o heap, quanto espaço uma variável do tipo char ocupa, quanto espaço uma variável do tipo int ocupa, etc... tudo isso me fez olhar para a programação de um jeito completamente diferente.
As coisas agora são mais concretas, mais palpáveis. Existe motivo e justificativa para cada operação. As operações com strings fazem sentido e pra mim essa foi a beleza de aprender a programar em C: o sentido que a linguagem dá pras coisas mais simples e óbvias.
Pra finalizar
Vou terminar dizendo uma coisa óbvia: a ciência da computação é uma ciência. Foram anos de investimento de capital financeiro e humano para desenvolver as ferramentas que temos hoje e, apesar de você não precisar ser um expert em linguagens de baixo nível para conseguir um emprego na área, saber da onde viemos e porque as coisas são do jeito que são, faz de você um profissional acima da média.
Ler uma documentação ou um quick start de uma linguagem e aprender a usar seus operadores e funções é algo que qualquer pessoa é capaz de fazer, mas só um desenvolvedor (ou um cientista da computação) sabe o que acontece por baixo dos panos, o que o compilador e a engine estão fazendo e porque algumas decisões de projeto se justificam e outras não.
Todas as profissões exigem tempo e dedicação e o caminho mais fácil geralmente nunca é o melhor. Dominar as bases da ciência da computação vai te dar a habilidade de aprender qualquer linguagem e qualquer tecnologia numa velocidade incrível.
Vou deixar aqui os links e materiais que usei nos meus estudos. Eles são bastante completos e junto com a boa habilidade de pesquisar no google o que não encontrar lá, vão te dar uma noção bem aprofundada da linguagem C e seus recursos.
Espero ter contribuído com vocês :D
https://www.ime.usp.br/~pf/algoritmos/
https://www.ime.usp.br/~hitoshi/introducao/