我是一个非常熟练的软件工程师,但是我并不了解太多理论。我想学习更多理论。我感兴趣的特定主题是:计算复杂性,形式语言和类型理论。但是我对于如何开始学习这些领域一无所知。
您将向那些想通过自学学习更多理论的人推荐什么资源?是否有针对软件工程师的理论计算机科学自学指南?
我是一个非常熟练的软件工程师,但是我并不了解太多理论。我想学习更多理论。我感兴趣的特定主题是:计算复杂性,形式语言和类型理论。但是我对于如何开始学习这些领域一无所知。
您将向那些想通过自学学习更多理论的人推荐什么资源?是否有针对软件工程师的理论计算机科学自学指南?
Answers:
这是一个广阔的领域,有几个截然不同的领域。
首先,我将介绍有关什么是计算机的一些最基本的想法:Hopcroft和Ullman,“自动机理论,语言和计算简介”。
我之所以特别推荐的原因是,他们强调证明。他们通过严格的思维方式指导您。那就是编写程序和科学之间的区别。
有几种学习类型理论的方法。对于一个正在工作的程序员, 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的所有内容,但第六部分(高级系统)除外,并实现本书所讨论的玩具语言。您最终会在类型理论上扎根,并且可能还会是一个更好的程序员。
我是“理论和算法”的忠实粉丝。我曾经有一次机会访问位于印度马德拉斯(IIT-M)的印度技术学院的理论计算机科学。我在IIT-M那里了解很多理论家。当我去那里的时候,我对什么是理论一无所知,但是今天我完全喜欢它。
感谢@Kate F作为指针,是的,Hopcroft和Ullman是一个很好的起点。
但是,这是我的开始方式
阅读Cormen的算法介绍。<\ br>这是一个很好的起点。学习时,请尝试尽可能多地理解每个证明。如果您很好地理解证明,请尝试使用您选择的任何语言编写相同的逻辑。(它需要更长的时间,但是值得一试)
关注诸如
FOCS
SODA
STOC
EC(电子商务)之类的理论顶级会议-算法博弈理论
COLT(学习理论会议)-学习理论
CRYPTO-
密码学
SOCG(计算几何专题讨论会)-计算几何
CCC(计算复杂度)-复杂度理论
即使您不太了解,也请尝试阅读和思考。您必须做尽可能多的证明。