Nessuno qui ha affrontato le questioni pratiche del perché qualcuno che studia TCS dovrebbe imparare la programmazione.
Se hai intenzione di fare un dottorato di ricerca in TCS in un dipartimento di Informatica, ci sono buone probabilità che tu abbia bisogno di seguire alcuni corsi non teorici, e quelli saranno quasi certamente ad alta intensità di programmazione. A seconda del programma in cui ti trovi, potresti anche aver bisogno di conoscenza di argomenti non teorici per superare gli esami di qualifica.
Quando finisci il tuo dottorato di ricerca, la maggior parte delle opportunità di lavoro per TCS sono nel mondo accademico. Se lavori nel mondo accademico, ti verrà richiesto di insegnare e potresti dover insegnare a un corso di laurea triennale a livello di introduzione che sarà più programmabile che teorico. Anche se stai insegnando una lezione di teoria agli studenti universitari, come ad esempio Algorithms, puoi aspettarti che i tuoi studenti sapranno di più sulla programmazione che sulla teoria e senza sapere cosa sanno i tuoi studenti, sarà difficile per te colmare le lacune nella loro comprensione . Rabbrividisco al pensiero che gli studenti universitari di CS vengano insegnati da qualcuno che non conosce la programmazione!
Se non ti interessano queste preoccupazioni pratiche, allora puoi probabilmente fare ricerche senza davvero sapere nulla sulla programmazione. Certamente hai molta compagnia nella comunità TCS, ma il chilometraggio varierà in base all'area esatta della Teoria in cui stai lavorando. Ad esempio, se stai facendo pura teoria della complessità computazionale, dimostrando limiti inferiori su classi che nessuno ha mai sentito parlare, allora è probabile che la programmazione non ti sarà utile. Ma se stai facendo qualcosa di più algoritmico, allora sento che riuscire a scrivere un buon codice di lavoro pulito rafforzerà la tua intuizione se non altro.
Consiglio di imparare C (non C ++). Prendi una copia di K&R e leggila fronte-retro. C non ha molte delle fantasiose caratteristiche dei linguaggi moderni, ma ha una sintassi e una semantica semplici ma eleganti, che dovresti essere in grado di apprendere interamente. Tuttavia, anche quando capisci il linguaggio nel suo insieme, ci vuole ancora pratica per padroneggiare la scrittura di un codice elegante e privo di bug in C. Tuttavia, se riesci a padroneggiare la codifica in C, sarai in grado di padroneggiare qualsiasi linguaggio di programmazione che incontri. Inoltre, questa disciplina ti aiuterà a pensare come pensa l'hardware, il che sarà utile durante la progettazione di algoritmi.
Idee come i puntatori sono molto importanti per chiunque stia progettando algoritmi, ma sfortunatamente linguaggi come Java e Python li oscurano da te, quindi è per questo che non li consiglio come prima lingua a qualcuno con un background matematico. OOP è più importante per le persone che devono mantenere enormi progetti software, non per chi sta progettando algoritmi.