Tidak ada seorang pun di sini yang membahas masalah praktis mengapa seseorang yang mempelajari TCS harus belajar pemrograman.
Jika Anda berencana untuk mengambil gelar PhD di TCS di departemen Ilmu Komputer, ada kemungkinan Anda perlu mengambil beberapa mata kuliah non-teori, dan itu hampir pasti akan sangat intensif pemrograman. Bergantung pada program yang Anda ikuti, Anda mungkin perlu pengetahuan tentang mata pelajaran non-teori untuk lulus ujian kualifikasi Anda.
Ketika Anda menyelesaikan PhD, sebagian besar peluang kerja untuk TCS ada di dunia akademis. Jika Anda bekerja di dunia akademis, Anda akan diharapkan untuk mengajar, dan Anda mungkin diharapkan untuk mengajar kelas CS tingkat sarjana tingkat dasar yang akan lebih banyak pemrograman daripada teori. Bahkan jika Anda mengajar kelas teori untuk undergrads, seperti Algoritma, Anda dapat berharap bahwa siswa Anda akan tahu lebih banyak tentang pemrograman daripada teori, dan tanpa mengetahui apa yang diketahui siswa Anda, akan sulit bagi Anda untuk menjembatani kesenjangan dalam pemahaman mereka. . Saya ngeri membayangkan undergrad CS yang diajarkan oleh seseorang yang tidak tahu pemrograman!
Jika Anda tidak peduli dengan masalah praktis ini, maka Anda mungkin bisa melakukan riset tanpa benar-benar tahu apa-apa tentang pemrograman. Tentu saja Anda memiliki banyak perusahaan dalam komunitas TCS, tetapi jarak tempuh akan bervariasi tergantung pada area teori mana Anda bekerja. Misalnya, jika Anda melakukan teori kompleksitas komputasi murni, membuktikan batas bawah pada kelas yang tidak ada yang memiliki pernah mendengar, maka kemungkinan pemrograman tidak akan berguna bagi Anda. Tetapi jika Anda melakukan sesuatu yang lebih algoritmik, maka saya merasa bisa menulis kode kerja bersih yang baik akan memperkuat intuisi Anda jika tidak ada yang lain.
Saya merekomendasikan belajar C (bukan C ++). Ambil salinan K&R dan bacalah dari depan ke belakang. C tidak memiliki banyak fitur mewah bahasa modern, tetapi memang memiliki sintaksis dan semantik yang sederhana namun elegan, yang harus Anda pelajari secara keseluruhan. Namun, bahkan ketika Anda memahami bahasa secara keseluruhan, masih perlu latihan untuk menguasai penulisan kode bebas bug yang bagus dan elegan di C. Namun demikian, jika Anda dapat menguasai pengkodean dalam C, Anda akan dapat menguasai bahasa pemrograman yang Anda temui. Selain itu, disiplin itu akan membantu Anda berpikir bagaimana perangkat keras berpikir, yang akan bermanfaat saat merancang algoritma.
Gagasan seperti pointer sangat penting bagi siapa saja yang mendesain algoritma, tetapi sayangnya, bahasa seperti Java dan Python mengaburkannya dari Anda, jadi itu sebabnya saya tidak merekomendasikan mereka sebagai bahasa pertama bagi seseorang dengan latar belakang matematika. OOP lebih penting bagi orang yang harus memelihara proyek perangkat lunak besar, bukan seseorang yang merancang algoritma.