面向程序员的理论计算机科学自学资源


14

我是一个非常熟练的软件工程师,但是我并不了解太多理论。我想学习更多理论。我感兴趣的特定主题是:计算复杂性,形式语言和类型理论。但是我对于如何开始学习这些领域一无所知。

您将向那些想通过自学学习更多理论的人推荐什么资源?是否有针对软件工程师的理论计算机科学自学指南?


3
这取决于您要了解的内容。Arora-Barak全面介绍了计算复杂性理论(可在线免费获得)。因此,这是一个不错的起点。
托马斯(Thomas)

4
您是否曾在大学/大学上过理论课程,例如数据结构,算法等?如果您没有上过通常要求的本科理论课,那么这些课程的教科书将是一个很好的起点。之后,您可以查看Wikipedia文章,我们的书籍列表和视频列表,以及Coursera / Udacity / EdX / ...上的在线课程。Coursera提供非常不错的理论课程。
卡夫

你在大学学习了什么?
奥马尔·谢哈卜

您使用哪种语言编程?许多理论上的CS可以与一些具体的东西一起学习。例如,如果您想了解更多有关形式语言的信息,那么正则语言/表达式(即regexp的表达式)就是一个很好的起点,就像对编译器的了解一样。对于类型理论,您可能想使用静态类型的语言,例如haskell,F#或ML。
龙宝贝

尝试使用Dewdney的New Turing Omnibus作为广泛/可访问的简介/调查/横截面。又见流行,激发TCS的科普读物
VZN

Answers:


7

这是一个广阔的领域,有几个截然不同的领域。

首先,我将介绍有关什么是计算机的一些最基本的想法:Hopcroft和Ullman,“自动机理论,语言和计算简介”。

我之所以特别推荐的原因是,他们强调证明。他们通过严格的思维方式指导您。那就是编写程序和科学之间的区别。


1
谢谢!我不知道这是否会改变任何东西,但实际上我确实有一些基于证明的数学背景(我可能应该在问题中提到这一点)。我已经完成了基于证明的真实分析,点集拓扑和抽象代数。
亨利H.15年

然后,您将可以非常快地完成它:)
Kate F

它的一个差异,但没有区别。CS包含许多其他原则,等等
vzn

我不认为严格的要求确实是编程和数学之间的区别。编程和证明定理是非常相关的任务(请参阅Curry-Howard同构),几乎所有非数学任务都比编程更严格。与阅读证明的人相比,编译器对错误的原谅要少得多。
Jan Johannsen

2
@JanJohannsen我颇不以为然-例如,见C.未定义行为
凯特˚F

9

有几种学习类型理论的方法。对于一个正在工作的程序员, B。Pierce的类型和编程语言是一个好的开始。 R. Harper撰写的《实用编程语言基础》也可能不错。如果您想对操作语义学有一些容易理解的背景知识,我建议使用G. Winskel的《编程语言的形式语义学:简介》。与T. Nipkow,G。Klein,具体语义学,已为Isabelle / HOL交互式证明助手正式确定了Winskel的书的变形形式。我怀疑仅从这本书(或任何本书)中就很难与证明者打交道,您希望附近的专家提出问题。如果您想对类型理论采用更数学的方法,可以查看JR Hindley,JP Seldin,Lambda微积分和组合器:简介,或H.Barendregt的Lambda Calculi with Types。尽管我不建议从Barendregt开始。

如果您只想提出一条建议,我想读一下Pierce的所有内容,但第六部分(高级系统)除外,并实现本书所讨论的玩具语言。您最终会在类型理论上扎根,并且可能还会是一个更好的程序员。


2

我推荐Martin Davis,Ron Sigal和Elaine Weyuker撰写的可计算性,复杂性和语言


对于老派的TCS来说,这是一本漂亮的书。除了领域理论语义的一部分,可以跳过。
马丁·伯杰

1

我是“理论和算法”的忠实粉丝。我曾经有一次机会访问位于印度马德拉斯(IIT-M)的印度技术学院的理论计算机科学。我在IIT-M那里了解很多理论家。当我去那里的时候,我对什么是理论一无所知,但是今天我完全喜欢它。

感谢@Kate F作为指针,是的,Hopcroft和Ullman是一个很好的起点。

但是,这是我的开始方式

  1. 阅读Cormen的算法介绍。<\ br>这是一个很好的起点。学习时,请尝试尽可能多地理解每个证明。如果您很好地理解证明,请尝试使用您选择的任何语言编写相同的逻辑。(它需要更长的时间,但是值得一试)

  2. 关注诸如
    FOCS
    SODA
    STOC
    EC(电子商务)之类的理论顶级会议-算法博弈理论
    COLT(学习理论会议)-学习理论 CRYPTO-
    密码学
    SOCG(计算几何专题讨论会)-计算几何
    CCC(计算复杂度)-复杂度理论

即使您不太了解,也请尝试阅读和思考。您必须做尽可能多的证明。

  1. 如果您正在特别考虑计算复杂性,那么这是一个不可思议的地方(来自Stanford)。
  2. 跟随苏丹Madhu的Jelani Nelson的Boaz Barak的Sanjeev Arora教授
  3. 这是计算复杂性领域中的一组综合信息
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.