Никто здесь не обратился к практическим вопросам того, почему кто-то изучающий TCS должен изучать программирование.
Если вы планируете получить степень доктора философии в TCS в отделе компьютерных наук, есть большая вероятность, что вам нужно будет пройти курсы, не связанные с теорией, и они почти наверняка будут очень интенсивными в программировании. В зависимости от программы, в которой вы участвуете, вам также могут потребоваться знания предметов, не связанных с теорией, чтобы сдать квалификационные экзамены.
Когда вы заканчиваете докторскую диссертацию, большинство рабочих мест для TCS в академических кругах. Если вы работаете в академической среде, от вас ожидают, что вы будете преподавать, и от вас могут ожидать, что вы будете преподавать на старшекурсном курсе CS, который будет скорее программированием, чем теорией. Даже если вы преподаете теоретический класс для старшекурсников, как, например, «Алгоритмы», вы можете ожидать, что ваши студенты будут знать больше о программировании, чем теории, и, не зная, что знают ваши студенты, вам будет трудно преодолеть пробелы в их понимании , Я содрогаюсь при мысли о том, что старшекурсников CS преподают те, кто не знает программирования!
Если вас не волнуют эти практические проблемы, то вы, вероятно, можете получить результаты, не зная ничего о программировании. Конечно, у вас есть много компаний в сообществе TCS, но пробег будет варьироваться в зависимости от того, в какой именно области Теории вы работаете. Например, если вы занимаетесь чистой теорией вычислительной сложности, доказывая нижние границы для классов, которых никто не имеет когда-либо слышал о, то вполне вероятно, что программирование будет бесполезно для вас. Но если вы делаете что-то более алгоритмическое, то я чувствую, что возможность написать хороший чистый рабочий код укрепит вашу интуицию, если ничего больше.
Я рекомендую изучать C (не C ++). Возьмите копию K & R и прочитайте ее спереди назад. В C нет многих необычных возможностей современных языков, но он имеет простой, но элегантный синтаксис и семантику, которые вы должны быть в состоянии выучить полностью. Тем не менее, даже когда вы полностью понимаете язык, все еще требуется практика, чтобы освоить написание хорошего элегантного кода без ошибок на языке C. Тем не менее, если вы сможете освоить кодирование на C, вы сможете освоить любой язык программирования, с которым вы столкнетесь. Кроме того, эта дисциплина поможет вам думать, как думает аппаратное обеспечение, что будет полезно при разработке алгоритмов.
Такие идеи, как указатели, очень важны для всех, кто занимается разработкой алгоритмов, но, к сожалению, такие языки, как Java и Python, скрывают их от вас, поэтому я не рекомендую их в качестве первого языка для тех, кто имеет математическое образование. ООП важнее для людей, которые должны поддерживать огромные программные проекты, а не для тех, кто разрабатывает алгоритмы.