Ніхто тут не займався практичними питаннями, чому хтось, хто вивчає TCS, повинен вчитися програмуванню.
Якщо ви плануєте докторську ступінь доктора TCS у відділі комп'ютерних наук, є хороший шанс, що вам знадобиться пройти деякі курси нетеоретичної теорії, і вони, безумовно, будуть дуже інтенсивними для програмування. Залежно від програми, в якій ви перебуваєте, вам також можуть знадобитися знання з нетеоретичних предметів, щоб скласти кваліфікаційні іспити.
Коли ви закінчите докторський ступінь, більшість можливостей роботи для ТКС є в наукових колах. Якщо ви працюєте в академічних колах, від вас, як очікується, викладатимете, і ви, можливо, очікуєте, що ви будете викладати нижчий рівень CS класу нижчого рівня, який буде більше програмуванням, ніж теорією. Навіть якщо ви викладаєте теоретичний клас для студентів, як, наприклад, Алгоритми, ви можете розраховувати, що ваші студенти будуть знати більше про програмування, ніж теорію, і не знаючи, що знають ваші студенти, вам буде важко подолати прогалини в їх розумінні . Я здригаюся від думки про те, що підпільників CS навчає той, хто не знає програмування!
Якщо ви не переймаєтесь цими практичними проблемами, то, ймовірно, ви можете отримати дослідження, не знаючи нічого про програмування. Звичайно, у вас є велика кількість компаній у спільноті TCS, але пробіг змінюватиметься залежно від того, в якій точній області Теорії ви працюєте. Наприклад, якщо ви займаєтеся чистою теорією складності обчислювальної техніки, доводячи нижчі межі класів, у яких ніхто не має коли-небудь чули, то ймовірно, що програмування вам не принесе користі. Але якщо ви робите щось більш алгоритмічне, то я відчуваю, що вміння написати хороший чистий робочий код зміцнить вашу інтуїцію, якщо нічого іншого.
Я рекомендую вивчити C (не C ++). Візьміть копію K&R та прочитайте її спереду. У C не так багато фантазійних особливостей сучасних мов, але він має простий, але елегантний синтаксис та семантику, які ви повинні мати можливість вивчити в повному обсязі. Однак, навіть коли ви розумієте мову в цілому, все одно потрібна практика освоєння написання хорошого елегантного коду без помилок у C. Тим не менш, якщо ви зможете освоїти кодування в C, ви зможете опанувати будь-яку мову програмування, з якою ви стикаєтеся. Крім того, ця дисципліна допоможе вам подумати, як думає обладнання, що буде корисно при розробці алгоритмів.
Такі ідеї, як покажчики, дуже важливі для всіх, хто займається дизайном алгоритмів, але, на жаль, такі мови, як Java та Python, не затьмарюють їх у вас, тому я не рекомендую їх використовувати як першу мову тому, хто має математичний досвід. OOP важливіше для людей, яким доводиться підтримувати величезні програмні проекти, а не тих, хто розробляє алгоритми.