编码重要吗?[关闭]


9

编码对擅长计算机科学重要吗?一个人应该实施该算法以了解它吗?

我记得一个CS教授的成语:“ 我从不编码”


32
您是在问一组程序员是否很重要……您可能不会得到公正的答复。
雷切尔

25
在充分尊重您教授的习语的前提下,如果他不编写代码,那么他就没有资格教别人如何编写代码。如果他的教学纯粹是理论性的,那么仍然会受益于具有编码技能。
罗伯特·哈维

19
您会向不会游泳的人上游泳课吗?
Steven A. Lowe 2010年

5
@Steven A. Lowe:我认为不游泳的教授是教授水生生理学,而不是游泳。不过,如果他不游泳,我会怀疑他是否知道氮麻醉的感觉。
哈维尔2010年

4
@哈维尔:他更有可能在教水下拆除,甚至没有经过SCUBA认证。像这样的人(“教授”除外)的技术术语是“ poseur” ;-)
Steven A. Lowe 2010年

Answers:


27

你不会真正了解该算法很好,直到你的代码吧。


3
这不一定是正确的,人们可以理解一种算法并将其应用于情况或问题,而无需实际编码。
aggietech 2010年

10
@aggietech:我认为这里的关键词是“好”。
罗伯特·哈维

2
@aggietech,罗伯特说对了。我可以模仿算法,但是当我真正尝试使它们起作用时,我发现我需要学习多少。

3
如果您谈论的是for循环和冒泡排序,那没什么大不了的,但是在阅读有关遗传算法的书和用遗传算法实际解决实际问题之间存在巨大差异
Steven A. Lowe

2
@Steven,是的,复杂性与它有很大关系。

19

编码对您的教授而言并不重要,但是您需要记住,他没有酬劳做事情。他付钱说东西(写东西)。

我是前数学教授,所以我很了解这种动态。

如果您想遵循他的道路并成为一名理论计算机科学家,那么可以,编码的重要性就不那么重要了。但是,如果您这样做了,请记住要保持谦卑,知道您的薪水是由那些选择做事的人所赚取的资源支付的。


3
经验之声。这是我所见过的关于教授职位的最佳总结。
2010年

1
是的,如果您要教别人“做得好”,那么我需要您练习“做”。
贝丝·怀特泽尔2010年

@BitOff:我同意,但是“如果”也是“仅当”。一位从不编码的教授没有商业教学软件开发的经验,但是他可能非常适合教授复杂性理论。在这种情况下,他教学生的是如何证明定理,因此唯一的要求是他需要练习证明定理(而不是编码)。
ShreevatsaR 2010年

@ShreevatsaR是的,我同意。实际上,我并不十分严格要求他们在实践中编写大量代码。优秀的编码员很少会成为优秀的老师。如果老师知道他们的工作日积分,他们可以弥补。我们在本地有一个计划,将行业人士带入课堂。老师是教学专家,会编码,并且知道如何从行业人士中汲取信息,以使学生受益。
贝丝·怀特泽尔2010年

16

计算机科学与计算机无关,而天文学与望远镜有关

— Edsger Dijkstra

我倾向于同意。


2
好的,但这与问题有什么关系?
罗伯特·哈维

2
“编码对擅长计算机科学重要吗?” 如果计算机不相关,计算机的物理编码又如何重要?
ElGringoGrande

1
@罗伯特·哈维:计算机科学并不明确地与计算机有关,许多天文学家花费很少的时间通过玻璃透镜观察。有些人只是分析结果。在计算机编程之前,就已经知道了计算机编程中一半的重要发现。
2010年

2
@Robert Harvey:计算机科学根本不是关于编程的知识,它是计算科学。在纯二进制编码之外,您还使用一种抽象的语言来实现计算机科学的理论和发现。计算机科学(例如量子计算)中有许多想法无法完全实现编程。我要说的是,无需使用编程语言,就可以完全优雅地表达所有计算机科学思想。命名不能的名字。
ElGringoGrande 2010年

3
@Orbling:非常正确。例如,回想起图灵在第一台电子计算机诞生之前就发明了通用图灵机的概念。他没有编写大量代码的事实是否使他成为无能的计算机科学家?
mipadi 2010年

11

如果您是在谈论成为纯粹的计算机科学学者,专门研究抽象的基础计算机科学概念,那么不一定。

打个比方:这有点像问NASA的每个火箭科学家是否都必须在太空中飞行才能成为“好火箭科学家”。当然不是。成为宇航员是航天工业的一部分,也是非常实际的一部分,但这并不意味着地面科学家在他们自己的方式中就不那么重要了。

就是说,最好是应用他创建的算法,如果不是真的用一种真正的编程语言编写的话。从这个意义上讲,您可以将算法设计视为数学的一个分支。


1
我认为可以公平地说,美国宇航局的所有火箭科学家在火箭科学方面都有扎实的基础,并且在机械和电气工程方面有深入的实践经验。哦,他们通常也知道如何编写代码。
罗伯特·哈维

3
我认为他们已经计算了许多次轨迹,而不仅仅是理论上的计算。

3
+1,我想再举一个例子-您不需要在酿酒方面有丰富的经验就可以成为一个很棒的贵族(或任何品酒的家伙)。
Jas 2010年

2
@Jas:比喻糟糕透顶。计算机科学家不是最终产品的接收者。他们酿酒师。
doppelgreener 2010年

1
@Axidos不,不,他们是葡萄农
Mark C 2010年

9

要成为一名真正的计算机科学家,编码并不重要。在他们寻求开发有用的抽象概念时,代码中的思考会限制思维。大多数优秀的编码人员没有能力来分析复杂的算法,也没有开发概念,例如编程语言,高级搜索和排序算法,有限自动机理论,分布式计算理论,R树,容错协议,可靠的通信协议,数字信号处理算法,密码学理论,性能分析和优化,有效的缓存,映射减少,可靠的安全协议等。优秀的编码人员和计算机工程师通常可以在他们试图构建并有效执行的系统中使用这些理论,但是这确实是计算机系统工程师或计算机程序员的领域。

编码对于成为计算机程序员至关重要。了解如何将计算机科学家产生的有用的抽象概念编码为工作代码也很有用。

计算机科学中的一个大问题是,他们通常不得不找到数学问题的解决方案,而这些数学解决方案在解决当今的编程问题时几乎没有用。即使他们编写了解决方案,也没有人真正能够使用它。考虑一下数字信号处理理论。它是由Fourier,Hilbert和Shannon等人发明的,但是直到大约20年前,它才广泛应用于计算机化的DSP问题。

计算机教育中的一个大问题是,大多数由计算机科学家教授的人都不会成为计算机科学家。但是太多的计算机科学家对此一无所知。编码对他们来说可能并不重要,但是如果您在他们的班级里,那几乎可以肯定对您来说很重要。

计算机教育中的另一个大问题是,许多真正的计算机科学家缺乏可用于教授软件开发的行业经验。他们本质上是在尝试教授他们真正不知道的东西。这使他们失去信誉。在工业环境中重要的事情通常不会向其中一些计算机科学家注册。

简短的编码对于大多数成为“计算机科学家”的人来说很重要,因为这些人中的大多数将成为计算机程序员和计算机系统工程师。


出色的答案,直达问题的核心。问题是,您需要同时学习:与行业相关的计算科学和软件工程。大多数大学的教学水平都优于另一所,通常是前者-由于后者本身就是一所研究机构,因此促进后者的发展与后者的关系不大,要达到后者并不是太容易。在大多数实际领域中这是一个问题。
2010年

3

取决于教授所在的子领域。

精通数值分析的任何人都可能是Fortran专家。任何AI教授都将使用Lisp或Prolog或类似的代码进行编码。

在某些数学领域,确实不需要编码。我自己还是有点可疑。


2

听起来他更像是一个离散的数学专家……只是计算机科学背后的数学和理论。这些类型的教授不得不一言以蔽之。


5
我是数学爱好者和算法迷。我一直喜欢编码。但是,算法落后于编码。我认为1笔和1纸足够用于算法以及计算理论。我现在所做的只是思考和编写算法,而不是编码
hilal 2010年

5
用任何教授的话来讲一盐。如果他是离散数学的人,那么在谈论离散数学时要当心,而不是在谈论编程或软件工程时要认真对待。
David Thornley,2010年

1
离散数学专家是该领域中最重要的人,理论是由编码人员实施的,不需要被证明正确的实施。确实有少量盐。
2010年

@Orbling并采用程序设计人员(广泛的群体)所说的话,以类似的程度的中止判断力和常识。
Mark C 2010年

@Mark C:是的,我敦促每个人都服从任何剂量的人所说的话。
2010年


2

您仅会了解理论,但是我总是发现我对算法进行了理解,并且在对算法进行编码后,其理解能力提高了1000倍(例如,冒泡排序与Quicksort,了解Big-O很棒,但是在实践中可以在大数据中看到它-sets可让您对测量计算复杂性有一定的了解。

我发现的一件有趣的事情是,您越学习计算机科学的理论,编码就越容易。在某些时候,您不再以某种特定语言来思考事物,而是将它们视为更广泛的计算机科学概念。


2

这就像在问我所有的英语教授是否都应该具备写电影,电视剧,小说,戏剧和诗歌的能力。同样,想象一下一个数学教授,从来没有将数字用于同样荒诞的想法。就是说,有一些基本要素确实使编码对能够教授基础计算机科学具有重要意义。因此,教授应该了解基本的语言语法,以及如何编写与教授的课程一样复杂的程序。如果教授正在教授有关编译器设计的知识,并且以前从未编写过编译器,那将是一个主要问题。想象一下一个厨师烹饪的蛋糕以前从未煮过或吃过。Aye carumba。

虽然我可以看到实现算法以了解它的一些优点,但我怀疑这是必需的。毕竟,您可能会想知道,实现算法的难度有多远?例如,是否有人需要采取某种算法并在各种范式(例如过程,面向对象和函数式编程)下实现它才能真正知道它?他们是否必须知道编译器如何翻译所有代码并逐个电子地移动这些位,以至于对此过于痴迷。


“我从不编码”的含义确实包含了过去和现在时态。还可能存在一个隐含的假设,认为“编码”是教授下面的一个卑鄙的事物,它是另一种查看陈述的方式,该陈述可能带有负面的语气,在某些圈子中可能不会很好地通过。


3
如果英语教授在教别人如何编写电影剧本,他们应该知道如何编写电影剧本。但是,即使不是真正的书,所有的英语教授当然也应该能够写出非常好的论文。
罗伯特·哈维

2
@Robert Harvey:OP的教授没有说他不会写代码,只是他没有。他可能是一位理论上的计算机科学家,他将大部分时间都花在研究上。正如JB King所指出的,只要不讲授编译器设计或软件工程方面的知识,他在他的领域中很有可能会很有经验并胜任。
mipadi

@罗伯特·哈维(Robert Harvey):我认为@mipadi有要点,教授只是说“我从不编码”,不是说他没有能力。
2010年

@JB King,@ Orbling:我敢打赌,报价是翻译,所以不要从字面上过度分析它。
哈维尔2010年

@哈维尔:很可能,在这种情况下,它的清晰度甚至会更低。
2010年

2

您的教授可能是正确的,因为成为一名教授,您不需要编写代码,但对这一理论了解很多。但这在大学范围之外是行不通的。


1

尽管是一名专业软件开发人员,但我还是获得了机械工程学位。

您可以成为一名优秀的机械设计师,而很少有制造和加工零件的经验,而把这项工作留给了机械师。但是,知道如何制造和加工零件将使您成为一名更好的工程师,因为您可以预测要制造和组装的产品所遇到的困难。

软件也是如此。“编码员”是机械师或技术员,而软件工程师则是工程师。在很多地方,一个人同时做两个工作。这并非不可能,对于某些非常抽象的问题,“仅工程”职位可能会起作用。

但是对于绝大多数人来说,拒绝编码绝对没有任何好处。


2
但是,正如您所说,您是机械工程师,而且您在谈论软件工程。工程师制造东西。但是有问题的教授教计算机科学
mipadi

1

除非您正在考虑并结束停顿的问题,否则在计算机科学的各个方面总会使用编码。

我完全没有编程的唯一CS课程就是理论。我以为那里有很多物理学家说:“我从不做实验”,但他们可能也是说“我什么都没发现”的人。如果他们关心我,我会感到惊讶。


1
就我的计算机科学学位而言(大学在世界排名前10位,所以没有什么la脚),我想说我至少有三分之一的课程没有编程。计算远不止代码。
2010年

好吧,很显然我也去了前十所大学,我们甚至可能去了同一所大学,根据我们自己的好恶而选了不同的班级,或者随机地选了一个或多个同类的教授。
彼得·特纳

0

作为计算机科学专业的学生,​​我认为一开始最好理解涉及软件开发的概念。一旦您了解了软件背后的思想及其与计算机的交互方式,便可以开始编码并处理特定的实现问题了。

就像“软件异常”一样,起初您只处理它们是因为您做了不允许做的事情。然后,当您学习它们时,就开始对您的代码进行相同的处理,以使其更加冗长。

好吧,我认为那些不关心概念的人,例如那些在应用程序中使用Exceptions作为常规工作流的程序员。他们知道怎么做,但并没有真正为什么。


-6

我还有另一种成语给你的教授:

那些能做,不能教的人。

imo,谈话很便宜。任何人都可以无休止地谈论“理论”,并将其称为“计算机科学”。但是,直到它付诸实践之前,理论才是非常有用的,因为没有办法对其进行验证。我会带一个教授的关于某事的意见更严重,如果我知道他实际上解决了在代码中的一个特殊问题不是好像他只是在反刍“理论”,这可能会或可能不会有任何证据来备份自己的观点。


6
爱因斯坦,亚里斯多德,韦伯斯特,艾恩·兰德,梭罗,孔子和布克·华盛顿都是老师。多么没有根据的声明。
JeffO 2010年

4
-1对老师的侮辱性评论。经常引用我知道的话,但总是荒谬的。萧伯纳(George Bernard Shaw)的原始话是“可以做到的人。他还曾在1903年从《人类与超人》(Man and Superman)的书中说:“对我来说,人类救赎的唯一希望在于教导。并且是伦敦经济学院(LSE)的联合创始人,因此您可以判断他的观点。
Orbling 2010年

2
爱因斯坦一生中从未进行过物理实验-他确实描述了一些思想实验,这些实验是由他人进行的,并且(除了一个例外)完全按照他的预言进行。你会说爱因斯坦没有“课堂以外的实质成就”吗?为什么你认为仅仅因为教授没有实施任何最终用户直接使用,他还没有,比如说,研究一个新的算法在外地使用的程序员?实际上,您似乎甚至认为教授的工作就是教学生如何编码
ShreevatsaR 2010年

3
杜德(Dude),我在麻省理工学院(MIT)的许多计算机科学教授都很棒,为社会做出了巨大贡献,他们 “自己的领域里做事”-很多!但是他们的领域与编码几乎没有关系,而且即使有的话,它们的编码也很少。(严重的是,您是否希望从事量子计算的人为甚至不存在的量子计算机编写代码?)您似乎对计算机科学的看法非常狭窄。(请记住,它是计算机科学,而不是工程学。)
ShreevatsaR 2010年

2
@GrandmasterB:如果一位计算机科学教授专注于计算理论,那么他极有可能不需要编写代码。这并不意味着他在该领域没有做任何事情-他可能会发表有关计算理论的论文!您正在将编程计算机科学混为一谈。
mipadi 2010年
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.