计算理论

4

学习计算理论的用途和重要性是什么?

我在大学期间学过这门课程,但我没有认真学习它。

我还发现了以下链接,其中提供了一些视频讲座:

计算理论

10个回答

10

Shai Simonson的课程非常好。我听过他的课。正如他在最初的讲座中所说,“计算理论”是对抽象概念的研究。但这些抽象概念对于更好地理解计算领域非常重要,因为我们处理的大多数概念都有很多抽象和逻辑基础。

正如John Saunders所说,如果您精通编程语言,甚至可以成为一个好程序员。但了解底层原理将使您永远成为一个卓有见识的人。因此,请继续学习(注:我理解为什么您没有认真学习过它,因为我们大学的大多数老师并不擅长解释这个主题(我也有一位糟糕的老师),但我向您保证,在这里学习的老师是您能得到的最好的老师)。


5
我认为每位计算机科学专业的学生都应该了解一些计算理论,即使你不从事任何研究。
有些概念是普遍的,在其他课程中你会反复遇到。例如有限状态机,当你学习字符串匹配算法和编译器时,你需要知道它们。另一个例子,你将学习一些约减算法(将一个模型转换为另一个模型),这些东西教会你如何抽象地思考和算法化。

2
@Yin Zhu:就我个人而言,可计算性理论对我几乎没有什么帮助。虽然很有趣,但实际价值不大。我学习状态机更多是通过学习UML而不是学习它们背后的理论。不过,每个人都有自己的选择。 - John Saunders
1
@John,我同意你的观点。我第一次学习状态机是在学习算法时。但是计算理论课程对此进行了正式处理,展示了知识的另一个方面。 - Yin Zhu
1
@Yin Zhu:如果你对它感兴趣,那就去学。另一个方面虽然引起了我的兴趣,但并没有实际价值。 - John Saunders

2
人类最伟大的能力是抽象思维。这就是区分我们和动物的特征。我们越多地运用这种能力,就越成功地解决问题。
对于一些人来说,下棋可能是一种无意义的消遣,对任何人都没有实际用途,但它在每次需要做出重要决策时都能让玩家具备预见未来的能力。
此外,下棋还揭示了那些隐藏在丑陋语法和僵化代码之下的优雅和简洁性,而这些东西我们每天都要筛选出来以谋生。

1

计算理论的重要性取决于你的人生规划。如果你想成为一名计算机科学家,那么它是你未来学习的重要基础。

如果你只想成为一名程序员或软件工程师,那么你可能永远不会再次使用这些知识。


3
“只是一个程序员”?先生,我挑战您在黎明时分进行1和0的较量! - Peter Rowell
2
我认为计算理论对于任何认真的程序员/软件开发人员都很重要。这有点像学习几何学成为一名建筑师;虽然有助于完成工作的工具,但了解其工作原理也是很好的。 - orokusaki
2
@orokusaki:如果你喜欢了解“为什么事情会起作用”,那就继续前进吧。我的观点是,我在过去的30年里从未使用过任何计算机科学方面的知识,并且在接下来的30年中也不指望会这样做。 - John Saunders
1
如果你晋升为首席开发人员或架构师,那么计算理论中有很多有用的流行语词汇,比如“图灵完备”、“NP-完全”和“时间复杂度”,可以用来向老板解释为什么有时他想让你做的事情要么不可能完成,要么需要超过2周的时间和3个人以上的实现。 - slebetman

1

除了常用的工具(如正则表达式、上下文无关文法、状态机等)在作为程序员日常生活中的实用性之外,一门良好的理论计算机科学课程将会教你如何以某种方式对某些问题进行建模,以便能够有效地解决。

对于没有接受过这个学科训练的人来说,看起来聪明的解决方案,对于那些接受过训练的人来说,就会自然而然地成为“正确的方式”。我建议你密切关注课程内容,因为它将给你提供一个非常强大的工具集,可以帮助你成为一个出色的程序员和抽象思考者。


0

就软件工程而言,它确实具有其实用方面。

例如,你可能会想用正则表达式解析一些编程语言作为程序的输入。计算机科学理论证明这是一个不好的想法(大多数编程语言语法都不是正则的),无论你如何努力,都无法克服这个问题。

其他例子可能包括NPC问题等。

基本上,计算机科学理论可以教你很多关于推理的重要事情。但它也描述了编程和算法的基本限制。

“知道你的极限”


0
计算理论是计算机科学、语言学和数学之间的一种关键点。如果你有智慧的好奇心,那么应该学习其中的基本理论。如果你只是想了解如何让电脑做某些事情,那么可以跳过这部分内容。对我来说,我非常喜欢它。但我也喜欢拓扑学,所以在这方面可能不是一个典型的开发者。

0

一些实际例子:

在花费大量时间解决问题之前,您需要知道:

  • 问题是否无法解决。

  • 是否存在“好的”(多项式)解决方案,因为有些问题可能没有“好的”解决方案(或者至少是我们目前所知的)。:)

  • (略微不太实用)您需要知道一个问题是否比另一个问题更“困难”,即需要更多的时间/空间。


1
@Liran Orevi:我想我过着被保护的生活——我从来没有遇到过无法解决的问题。那不是我的工作。如果我怀疑这个问题无法解决,那么证明它无法解决也不是我的工作——如果我们真的需要证明,我们会雇佣一位计算机科学博士——作为临时工。 - John Saunders
@John Saunders,不幸的是有些人并不怀疑 - 请查看来自“ATuring”的帖子“2009年4月14日@ 16:37” 来源:http://ming.tv/flemming2.php/__show_article/_a000010-001018.htm - Liran Orevi

0
每个计算机科学工程师都必须学习计算理论,因为它扮演着至关重要的角色...计算理论是以下方面的基础:
编写在计算设备上运行的高效算法。
编程语言研究及其开发。
高效编译器设计和构建。

你的回答目前写得不清楚。请编辑以添加更多细节,以帮助其他人理解这如何解决所提出的问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

-1

计算理论研究处理可计算问题所需的基本原始操作。"可计算"是指von Neumann机器风格的处理方式,与Lisp机器不同。(Church-Turing论文表明它们最终相等,但在实践中它们会产生两种非常不同的计算模型。)

例如,以下是在von Neumann样式机器中实现基本图灵功能所需的最小设置:

  • 移动数据
  • AND、OR 和 NOT转换
  • COMPARE运算符
  • JUMPIFEQUAL函数

要获得通用的图灵功能,您可能需要有内存寻址和一个调用堆栈。

随着人类思维变得更加复杂,“可计算”的目标也越来越高。可能不存在上限。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接