Ninguém aqui abordou questões práticas sobre por que alguém que estuda o TCS deve aprender programação.
Se você está planejando fazer um doutorado em TCS em um departamento de Ciência da Computação, há uma boa chance de você precisar de alguns cursos não-Teóricos, e esses certamente serão muito intensivos em programação. Dependendo do programa em que você está, você também pode precisar de conhecimentos sobre assuntos não-Teóricos para passar nos exames de qualificação.
Quando você termina seu doutorado, a maioria das oportunidades de emprego para o TCS está na academia. Se você trabalha no meio acadêmico, é esperado que você ensine, e você pode ensinar uma classe de iniciação científica no ensino superior que será mais programação do que teoria. Mesmo se você estiver ministrando uma aula de teoria para estudantes de graduação, como, por exemplo, Algoritmos, você pode esperar que seus alunos saibam mais sobre programação do que teoria e, sem saber o que seus alunos sabem, será difícil para você preencher as lacunas na compreensão deles. . Estremeço com o pensamento de que os graduandos de CS sejam ensinados por alguém que não conhece programação!
Se você não se importa com essas preocupações práticas, provavelmente poderá fazer pesquisas sem realmente saber nada sobre programação. Certamente você tem muita companhia na comunidade do TCS, mas a milhagem variará dependendo da área exata da teoria em que você estiver trabalhando. Por exemplo, se você estiver fazendo pura teoria da complexidade computacional, provando limites mais baixos nas classes que ninguém possui já ouviu falar, é provável que a programação não lhe seja útil. Mas se você estiver fazendo algo mais algorítmico, sinto que ser capaz de escrever um bom código de trabalho limpo reforçará sua intuição, se nada mais.
Eu recomendo aprender C (não C ++). Pegue uma cópia da K&R e leia-a de frente para trás. C não possui muitos dos recursos sofisticados das linguagens modernas, mas possui sintaxe e semântica simples, mas elegantes, que você deve aprender por inteiro. No entanto, mesmo quando você entende a linguagem completamente, ainda é necessário dominar a escrita de um bom código elegante e livre de erros em C. No entanto, se você pode dominar a codificação em C, poderá dominar qualquer linguagem de programação que encontrar. Além disso, essa disciplina o ajudará a pensar como o hardware pensa, o que será benéfico ao projetar algoritmos.
Ideias como ponteiros são muito importantes para quem cria design de algoritmos, mas, infelizmente, linguagens como Java e Python as ocultam, então é por isso que não as recomendo como primeira linguagem para alguém com formação em matemática. OOP é mais importante para pessoas que precisam manter grandes projetos de software, não para quem está criando algoritmos.