Nadie aquí ha abordado los problemas prácticos de por qué alguien que estudia TCS debería aprender a programar.
Si está planeando hacer un doctorado en TCS en un departamento de Ciencias de la Computación, existe una buena posibilidad de que necesite tomar algunos cursos que no sean de Teoría, y estos seguramente serán muy intensivos en programación. Dependiendo del programa en el que se encuentre, también puede necesitar conocimientos de materias no teóricas para aprobar sus exámenes de calificación.
Cuando terminas tu doctorado, la mayoría de las oportunidades laborales para TCS están en la academia. Si trabajas en la academia, se espera que enseñes, y se espera que enseñes una clase de CS de pregrado de nivel introductorio que será más programación que teoría. Incluso si está enseñando una clase de teoría a estudiantes de pregrado, como digamos Algoritmos, puede esperar que sus estudiantes sepan más sobre programación que teoría, y sin saber lo que saben sus estudiantes, será difícil para usted cerrar las brechas en su comprensión. . ¡Me estremezco ante la idea de que alguien que no conozca la programación enseñe a estudiantes universitarios de CS!
Si no le importan estas preocupaciones prácticas, entonces probablemente pueda hacerlo haciendo una investigación sin realmente saber nada sobre programación. Ciertamente, tiene mucha compañía en la comunidad de TCS, pero el kilometraje variará según el área exacta de Teoría en la que esté trabajando. Por ejemplo, si está haciendo una teoría de complejidad computacional pura, demostrando límites más bajos en clases que nadie tiene Alguna vez has oído hablar, entonces es probable que la programación no te sea útil. Pero si está haciendo algo más algorítmico, creo que ser capaz de escribir un buen código de trabajo limpio fortalecerá su intuición, si nada más.
Recomiendo aprender C (no C ++). Recoja una copia de K&R y léala de frente a atrás. C no tiene muchas de las características sofisticadas de los lenguajes modernos, pero sí tiene una sintaxis y una semántica simples pero elegantes, que deberías poder aprender en su totalidad. Sin embargo, incluso cuando comprenda el lenguaje en su totalidad, aún requiere práctica para dominar la escritura de un código elegante y libre de errores en C. Sin embargo, si puede dominar la codificación en C, podrá dominar cualquier lenguaje de programación que encuentre. Además, esa disciplina lo ayudará a pensar cómo piensa el hardware, lo que será beneficioso al diseñar algoritmos.
Ideas como los punteros son muy importantes para cualquier persona que diseñe algoritmos, pero desafortunadamente, lenguajes como Java y Python los ocultan de usted, por eso no los recomiendo como primer idioma para alguien con experiencia en matemáticas. OOP es más importante para las personas que tienen que mantener grandes proyectos de software, no para alguien que está diseñando algoritmos.