Personne ici n’a abordé les questions pratiques de savoir pourquoi une personne qui étudie le SDC devrait apprendre à programmer.
Si vous envisagez de faire un doctorat en SDC dans un département d'informatique, il y a de fortes chances que vous ayez à suivre des cours non théoriques, qui nécessiteront presque certainement beaucoup de programmation. Selon le programme dans lequel vous vous inscrivez, vous devrez peut-être également connaître des matières non théoriques pour réussir vos examens de qualification.
Lorsque vous terminez votre doctorat, la plupart des possibilités d’emploi pour TCS sont dans le monde universitaire. Si vous travaillez dans le monde universitaire, on vous demandera d'enseigner, et d'enseigner un cours de niveau CS pour les étudiants de premier cycle de niveau intro qui sera plus programmé que théorique. Même si vous donnez un cours théorique aux étudiants de premier cycle, comme par exemple Algorithmes, vous pouvez vous attendre à ce que vos étudiants en sachent plus sur la programmation que sur la théorie, et sans savoir ce que vos étudiants savent, il vous sera difficile de réduire l'écart de compréhension. . Je frémis à l'idée d'enseigner aux étudiants de premier cycle en CS par quelqu'un qui ne connaît pas la programmation!
Si vous ne vous souciez pas de ces problèmes pratiques, alors vous pouvez probablement faire de la recherche sans vraiment rien savoir de la programmation. Certes, vous avez beaucoup de contacts dans la communauté TCS, mais le kilométrage variera en fonction du domaine exact de la théorie dans lequel vous travaillez. Par exemple, si vous faites de la théorie de la complexité calculatoire pure, établissez des limites inférieures à des classes que personne n'a jamais. jamais entendu parler de, alors il est probable que la programmation ne sera d'aucune utilité pour vous. Mais si vous faites quelque chose de plus algorithmique, alors j’estime qu’être capable d’écrire un bon code de travail propre renforcera votre intuition, si rien d’autre.
Je recommande d'apprendre le C (pas le C ++). Prenez une copie de K & R et lisez-la en avant. C n'a pas beaucoup de fonctionnalités sophistiquées des langues modernes, mais il a une syntaxe et une sémantique simples mais élégantes, que vous devriez pouvoir apprendre dans leur intégralité. Cependant, même lorsque vous comprenez le langage dans son intégralité, il vous faut encore de la pratique pour écrire de bons codes élégants et sans bug dans le langage C. Néanmoins, si vous maîtrisez le codage en C, vous pourrez maîtriser tous les langages de programmation que vous rencontrez. De plus, cette discipline vous aidera à réfléchir à la pensée du matériel, ce qui sera bénéfique lors de la conception d'algorithmes.
Les idées comme les pointeurs sont très importantes pour quiconque conçoit des algorithmes, mais malheureusement, des langages comme Java et Python vous les masquent, c'est pourquoi je ne les recommande pas en tant que première langue à une personne ayant une formation en mathématiques. La POO est plus importante pour les personnes qui doivent gérer des projets logiciels volumineux, et non pour ceux qui conçoivent des algorithmes.