越来越多的高级编程语言的使用是否会导致缺乏计算机体系结构知识的程序员?


15

引用维基百科的文章“高级编程语言”:

高级编程语言是一种从计算机详细信息中抽象而来的编程语言。与低级编程语言相比,它可能会使用自然语言元素,更易于使用或在平台之间具有更大的可移植性。这些语言隐藏了CPU操作的详细信息,例如内存访问模型和范围管理。

也就是说,随着编程语言水平的提高,程序员与运行程序的硬件之间的距离就越远。

现在,我不知道各个级别的语言使用情况的统计信息,但是我怀疑较高级别的语言正越来越多地取代较低级别的语言。如果是这样,这是否会导致缺乏计算机体系结构知识的程序员?这会对行业造成问题吗?

Answers:


16

它可以,但很可能不会导致问题。

这只是经济学。如果绝大多数人失去了理解基础架构的能力,并且仍然需要大量的知识来理解基础架构,那么有工作的人将获得工作并获得更多的报酬,而那些没有工作的人将只有得到的报酬。不需要的工作(而且可能还会获得更多的报酬……谁知道?)。

知道对您有帮助吗?绝对。您可能会更好。在大多数情况下是否有必要?不。这就是为什么抽象是如此出色的原因,我们站在巨人的肩膀上,而不必自己成为巨人(但周围总会有巨人)。


4
但是所有抽象都是泄漏的。如果您想成为对泄漏抽象进行故障排除的必备工具,那么必须了解基础架构。
dsimcha 2010年

5
@ dsimcha,Agreed,但要成为首选,您需要“别人”来找您;-)如果每个人都需要了解一切,那么抽象失败了。
Preets 2010年

1
@Preets,这就是为什么许多抽象惨败的原因。甚至有足够的空间供有志之士存在,这证明抽象已经失败了。
Pacerier 2014年

@Ryan,这实际上会导致一个问题,将来,由于泄漏抽象的各层,世界上充斥着充满细微错误的应用程序。如今,令人惊奇的是,像Google这样拥有无限资源的公司仍然可以在其核心应用中发现错误。
Pacerier,2014年

3
@Pacerier google远远没有无限的资源,它们使应用程序复杂度提高了几个数量级,并且比大多数其他应用程序增加了多个数量级的代码行。声称每个人都应该知道底层计算机知识,因为所有抽象都可能泄漏,就像说每个人都应该知道如何不使用任何工具从头开始建造房屋,因为暴风雨可能会摧毁房屋。花费这样的资源是不可行的(或明智的)。
萨拉

9

我认同。这个趋势令我担心。 没有抽象是完美的 ; 如果有一种简化任何复杂问题的完美方法,它将很快替换原来的问题。(这种情况在过去曾发生过,偶尔在计算机上发生过,在其他领域则更为频繁,这些领域并没有像我们这样担心后向兼容性,例如物理学。)

这意味着每次使用抽象时,都会隐藏一些重要的基本复杂性。如果您不知道那是什么,为什么在那儿以及它在做什么,您最终会不小心写出大火车残骸,而又不知道如何解决它们,因为您不知道真正发生了什么。

试图告诉您其他情况的人要么在卖蛇油,要么根本就没有认真使用软件的经验。在工作中,我正在编写一个程序,该程序在美国所有电视台和广播台中都可以正常运行。随着站点和网络变得越来越大,越来越复杂,为一个小型站点设计产品的很好的快速而肮脏的技术在为具有50个站点和200个通道的网络实施时最终碰到了很大的技术壁垒!没有对语言如何工作的深刻理解(首先是一种高效的语言),对数据库如何工作的深刻理解,我们的编码人员将永远无法成功地使产品规模化。

这也不是一个孤立的故事。软件不断增长,越来越复杂,而不是简单,而且恐怕这种水平的技术专长将成为一门失传的艺术,明天的程序将比今天的程序更糟,而不是更好。


5
我听说过它表示为“您需要从工作位置的下一层开始了解抽象”。好吧,那是比较费时的。我的记忆力有缺陷。因此,如果您使用C或Delphi工作,则应了解汇编的工作方式。如果您使用Smalltalk或Java,则应了解VM的工作方式。(可以说,你应该总是知道一些关于议会!)如果你使用TCP的工作,你应该知道IP是如何工作的。等等。
Frank Shearar

1
我的意思是,您可以更进一步:为什么只需要了解汇编就足够了?那只是对二进制CPU指令的手持式高级抽象。可是等等!机器码?那只是一个抽象!您需要学习如何使用晶体管构建逻辑门来构建CPU!以及总线和寄存器。可是等等!晶体管?那只是原子的某种配置的抽象。原子只是量子场波动的抽象。最后,这只是javascript:alert("Hello world")需要弦理论的博士学位。
萨拉

1
@kai你有点可笑。我倾向于同意您的看法,通常对于大多数应用程序来说,您不需要了解多层结构。但是,我们谈论的是边缘案例,而不是每天的工作。当然,您不需要知道管道是如何工作的。但是,如果脏水开始填满您的水槽,在尝试修复它之前,您可能应该了解一些有关它的信息。或者,您也可以将一根钢筋压入下水道,直到再次起作用,并且谁在乎水的流向。(续...)
DrewJordan

1
@DrewJordan我的意思是:除非您是一位需要了解并解决特定类别的问题的专业人士(或者只是出于个人兴趣),否则坦率地说您需要了解内部工作原理是荒谬的和您所使用的每种工具的怪异之处。我只是出于对它的逻辑结论的立场。当然,如果在互联网连接失败时使用了正确的工具,知道以太网电缆的构造将使您能够构建新的电缆,但是当您在20层以上工作时花时间和金钱来获取知识是浪费。
萨拉

1
@DrewJordan当然,SOMEONE需要了解所有这些内容,以便有人可以在抽象中断时对其进行修复,但是抽象的全部要点是将需要了解详细信息的人数降至最低,以便绝大多数人可以专注于完成工作。您在哪里随意得出“太低的水平”的界限只是取决于您个人碰巧使用的东西,如我的论据ad absurdium所说明的(这不是谬论,我会让您知道!)
sara

5

是的,我认为人们对语言的了解会随着语言的发展(以及类似,随着指令集的发展)而更少。但是,正如在许多其他地方所指出的那样,当今大多数程序的主要约束不是CPU时间或效率,而是程序员时间。 如果设计语言的人继续努力使抽象高效,并且如果人们继续正确地使用这些抽象,那么对计算机体系结构的理解就不是完全必要的。至少,如今,完整的知识并不是成为一名优秀的程序员的基础


2
从理论上讲,是的,但是那是几个相当大的假设
梅森惠勒2010年

1

不,它不会导致缺乏计算机体系结构知识的程序员。语言用于解决特定领域中的问题。如果要解决特定的问题,请使用适当的语言或在资源允许的情况下使用一种足够好的语言。

实际上,哪些领域实际上需要计算机体系结构的知识?那需要绑定到特定的硬件体系结构吗?操作系统?设备驱动程序?可以,但是即使如此,此类代码中只有一部分需要特定的体系结构知识。

性能改进?是的,您可以应用计算机体系结构的知识来提高算法的性能。但是另外两个因素对性能有更大的影响:使用更好的算法和对语言运行时环境的了解。

从本质上讲,更多的抽象编程语言解决了不需要计算机体系结构细节的问题。它们允许解决更多问题。使用它们的人不是在使用它们来解决与机器有关的问题。需要解决与机器有关的问题的人们将继续使用机器支持的语言。这不是零和问题。

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.