当前位置:  开发笔记 > 编程语言 > 正文

理论计算机科学什么时候有用?

如何解决《理论计算机科学什么时候有用?》经验,为你挑选了8个好方法。

在课堂上,我们了解了暂停问题,图灵机器,减少等等.许多同学都说这些都是抽象和无用的概念,而且知道它们并没有真正的意义(即,一旦课程结束,你就会忘记它们结束而不是失去任何东西).

为什么理论有用?你有没有在日常编码中使用它?



1> Jeffrey L Wh..:

真实的故事:

当我从研究生院拿到第一份编程工作时,那些拥有我工作公司的人都是飞行员.在我被雇用几周后,其中一人问我这个问题:

阿肯色州共有106个机场.你能写一个能找到最短路径的程序吗?

我认真地认为他是根据我对旅行推销员问题和NP完全性的了解而对我进行测验的.但事实证明他不是.他对此一无所知.他真的想要一个能找到最短路径的程序.当我解释说有106个因子解决方案并且发现最好的解决方案是众所周知的计算上棘手的问题时,他感到很惊讶.

这就是一个例子.


找到绝对答案是不可行的,但有些搜索算法可以提供相当不错的"猜测".好的例子永远不会少.
所以,你告诉他N!o?Har har.

2> Rob Williams..:

当我从大学毕业时,我认为我与其他所有人都相提并论:"我拥有CS的学士学位,其他人也很多,我们都可以做同样的事情." 我最终发现我的假设是假的.我脱颖而出,我的背景与它有很大关系 - 特别是我的学位.

我知道有一个"轻微"的区别,因为我在CS中有一个"BS"因为我的大学是全国第一个(据说是1987年的#2)获得CS学位课程认证的学生之一,而我在第二堂课毕业获得认证.当时,我认为这不重要.

我在高中和大学期间也注意到我在CS方面做得特别好 - 比我的同龄人要好得多,甚至比我的许多老师都要好.我被要求帮助很多,做了一些辅导,被要求帮助研究项目,并且被允许在没有其他人的情况下进行独立研究.我很高兴能够提供帮助,但我对这种差异没有太多考虑.

大学毕业后(USAFA),我在空军工作了四年,其中两年申请了我的CS学位.在那里,我注意到我的同事很少有学位或甚至与计算机相关的培训.空军给了我五个月的认证培训,在那里我再次发现缺乏学位或培训.但在这里我开始注意到差异 - 很明显,我遇到的许多人并不真正知道他们在做什么,包括那些接受过培训或学位的人.请允许我说明一下.

在我的空军认证培训中,共有十三人(包括我).作为空军军官或同等学历,我们都拥有学士学位.我根据年龄和等级处于中间位置(我是六个O-1和六个O-3及以上的O-2).在这次培训结束时,空军给我们所有人提供橡皮图章,同样有能力为国防部的任何部分获取,建造,设计,维护和操作任何计算机或通信系统.

然而,在我们这十三个人中,只有六个人拥有任何形式的计算机相关学位; 其他七个学位的学位从航空学到化学/生物学到心理学.在我们六个拥有CS学位的人中,我了解到两个人从未编写过任何类型的程序,并且从未使用过计算机而不是随便(写论文,玩游戏等).我了解到另外两个人在他们的CS学位课程中只在一台计算机上编写了一个程序.只有一个人和我自己写过一个以上的程序或使用过多种计算机 - 事实上,我们发现我们两个人编写了很多程序并使用过多种计算机.

在我们为期五个月的培训结束时,我们的班级被分配了一个编程项目,我们分成四组分别进行培训.我们的教师将课程分开,以便公平地传播"编程人才",他们分配了团队领导,技术主管和开发人员的角色.每个小组都有一周的时间来实施(在Ada中)一个基于文本的全屏用户界面(这是1990年),用于在教练提供的飞行力学库之上的飞行模拟器.我被指派为四人团队的技术负责人.

我的团队负责人(没有计算机学位)要求我们其他三个人将项目分成任务,然后将其中的三分之一分配给我们每个人.我在第一天的中间完成了我的第三项任务,然后在剩下的时间里帮助我的另外两名队友,与我的团队负责人(BSing; ^)交谈,并在我的电脑上玩游戏.

第二天早上(第二天),我的团队私下通知我,我们的另外两名队友没有取得任何进展(实际上没有人写出"if"语句会编译),他让我接受他们的工作.我在下午中午完成了整个项目,我的团队花了一整天的时间来驾驶模拟器.

另一个具有可比CS学位的人也被指派为他的团队的技术负责人,他们在第三天结束时完成.他们也开始飞行他们的模拟器.本周末,其他两支队伍尚未完成,甚至没有取得重大进展.我们不被允许帮助其他球队,所以就这样了.

与此同时,在第三天的中间,我注意到飞行模拟器似乎表现得"错误".由于我的一个同学拥有航空学位,我问过他.他很神秘,然后承认他实际上并不知道是什么让飞机飞了!?!我傻眼了!事实证明,他的整个学位课程都是关于安全和碰撞调查 - 没有真正的数学或科学背后的飞行.另一方面,我可能是航空领域的未成年人(还记得USAFA吗?),但我们设计了机翼并进行了真正的风洞试验.因此,我悄悄地花了一周的时间重写教师提供的飞行力学图书馆,直到模拟器"向右"飞行.

从那时起,我作为一名承包商花了将近二十年的时间,偶尔作为一名员工,总是从事软件开发和相关活动(DBA,建筑师等).我继续发现更多相同的东西,最终我放弃了我年轻的假设.

那么,我究竟发现了什么?不是每个人都是平等的,这是可以的 - 我不是一个更好的人,因为我可以有效地编程,但我更有用,因为这是你需要我.我了解到我的背景真的很重要:在一个电工和电气工程师的家庭中长大,建立电子工具包,阅读学校/公共图书馆的每本计算机书籍,因为我无法访问真正的计算机,然后转向新的我的高中有电脑的城市,然后把我自己的电脑作为礼物送到有不同大小和种类的电脑的学校(电脑到大型机),从非常好的工程学校获得认可的学位,不得不写在不同类型的计算机上有很多不同语言的程序,

最后,我了解到我的能力建立在了解计算机如何在电气水平上工作的基础上 - 分立的电子元件,电路,子系统,接口,协议,位,字节,处理器,设备,驱动程序,库,程序,系统,网络,以及我现在经常工作的大型企业级集团.所以,当这个该死的东西行为不端时,我完全知道如何以及为什么.我知道什么是不可能做的以及什么可以做到的.而且我对已经完成的工作,已经尝试过的工作以及相对未开发的工作知之甚多.

最重要的是,在我了解了所有这些之后,我了解到我不知道该死的东西.面对所有可能知道的事物,我的知识微乎其微.

而且我对此非常满意.但我建议你试试.


好帖子:)我最近参加了几个与数学相关的课程(偏微分方程,张量,密码学,图像处理等),我相信它会得到回报.

3> benjismith..:

当然,这很有用.

想象一下开发人员正在研究模板引擎.你知道那种事......

Blah blah blah ${MyTemplateString} blah blah blah.

它开始时很简单,有一个厚脸皮的小正则表达式来替换.

但逐渐地,模板变得更加花哨,开发人员包含用于模板化列表和字符串映射的功能.为了实现这一点,他写了一个简单的小语法并生成一个解析器.

变得非常狡猾,模板引擎可能最终包含条件逻辑的语法,以根据参数的值显示不同的文本块.

在CS中具有理论背景的人会认识到模板语言正逐渐变得图灵完成,并且解释器模式可能是实现它的好方法.

为模板构建了解释器后,计算机科学家可能会注意到大多数模板请求都是重复的,一遍又一遍地重新生成相同的结果.因此,开发了一个缓存,并且在执行昂贵的转换之前,所有请求都通过缓存进行路由.

此外,某些模板比其他模板复杂得多,渲染时间也要长得多.也许有人会在渲染之前估计每个模板的执行情况.

可是等等!!!团队中的某个人指出,如果模板语言确实是图灵完成的,那么估算每个渲染操作的执行时间的任务就是停止问题的一个例子!! 哎呀,不要那样做!

在实践中,关于理论的是所有实践都是基于理论的.理论上.



4> Nick..:

我最常用的东西:

编写可以优雅扩展的算法的计算复杂性

了解内存分配,分页和CPU缓存是如何工作的,这样我就可以编写高效的代码了

理解数据结构

了解线程,锁定和相关问题

至于图灵机等的那些东西,我认为这很重要,因为它定义了我们所有人都在运作的约束条件.这很重要,值得欣赏.



5> Steven A. Lo..:

这是学习代数和被教导如何使用计算器之间的区别

如果你知道代数,你就会意识到,同样的问题会以不同的形式体现,而你不懂规则用于将问题转化为一个更简洁的形式

如果你只知道如何使用计算器,你可能会浪费大量的时间冲压按钮上是(a)已经解决的问题,(B)不能得到解决,或(c)是像其他一些问题(解决或未解决的,你不认识,因为它是一个不同的形式

暂时假装计算机科学是物理学......这个问题看起来很愚蠢吗?



6> Paul Nathan..:

我的一个朋友正在使用一些模板来处理语言.我被要求做一点咨询.我们讨论的部分内容是模板功能,因为如果模板是图灵完成的,他们必须真正考虑VM-ish属性以及他们的编译器如何/如果支持它.

我的故事就是这样:自动化理论仍然被教授,因为它仍然具有相关性.暂停问题仍然存在,并限制了您可以做的事情.

现在,这些事情是否与数据库管理员敲定C#代码有关?可能不是.但是当你开始进入更高级别时,你会想要了解你的根源和基础.



7> Toybuilder..:

虽然我没有直接将它们应用于日常工作中,但我知道我对正规计算机科学的教育影响了我的思考过程.我当然从一开始就避免了某些错误,因为我从我灌输的正式方法中吸取了教训.

在他们学习的时候,这似乎毫无用处; 但是我打赌你的同学最终会遇到一个问题,他们会使用他们所教的内容,或者至少是它背后的思维模式......

Wax on ... Wax off ... Wax on ... Wax off ......这与空手道有什么关系?




8> CMPalmer..:

在一项工作中,我被分配了改进我们的配电模型的网络跟踪算法的任务,因为他们使用的算法太慢了.三相网络基本上是三个n树(因为电网中不允许环路).网络节点在数据库中,并且一些原始团队无法弄清楚如何构建内存模型,因此跟踪是通过数据库上的连续深度SELECT完成的,对每个阶段进行过滤.因此,为了跟踪节点,来自变电站的十个节点将需要至少10个数据库查询(原始团队成员是数据库高手,但在算法中缺乏合适的背景).

我编写了一个解决方案,将3个n树的节点网络从数据库转换为数据结构,其中每个节点在节点结构数组中存储一次,并且使用双向链接指针将n树关系转换为三个二叉树该阵列使得可以在任一方向上轻松跟踪网络.

它至少快两个数量级,三个在非常长的下游迹线上.

令人遗憾的是,我必须在n树,二叉树,指针和双链表中教授一个类,这些程序员已经接受过数据库和VB方面的培训,以便他们理解算法.

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有