开发人员是否应该了解计算机硬件的内部运作方式?[关闭]


13

我不是在谈论内存的分配方式和内存管理(例如,您可以从C中学到的东西),而是在硬件方面,以及计算机硬件的每个组件在内部如何工作以及它们如何相互通信。

你们当中有多少人知道所有这些?

Answers:


31

这取决于您的工作。

如果您是嵌入式开发人员(并且要在非常小的设备中编写非常接近金属的文字),则需要了解系统中每个组件的内外。

如果您是系统开发人员(并且正在编写操作系统,设备驱动程序甚至数据库),那么您将需要了解有关底层硬件接口的所有知识。

如果您是游戏开发人员并且在项目后期(正在优化的地方),则需要了解将要使用的CPU缓存和图形架构的来龙去脉。

如果您是应用程序开发人员,那么除了将内存使用率保持在合理水平之外,您不需要了解任何其他信息。

如果您是一名Web开发人员,那么了解Internet协议将很方便,但是除了如何处理内存问题之外,没有其他必要。


20
了解您的计算机始终可以使您成为一名更好的开发人员,即使您仅做业务应用程序。此类知识可能不是必需的,但无疑很重要。
罗伯特·哈维

@Robert Harvey:正确,这就是为什么我说“ 不需要知道”。无论如何,知道这些事情当然不会有任何伤害。:)
greyfade 2010年

2
+1,但我知道(超过)一些从未考虑过内存使用的Web开发人员。
蒂姆·波斯特

-1表示“如果您是应用程序开发人员,则除了将内存使用率保持在合理水平之外,您不需要了解任何其他信息。” 周围系统中的一些较大问题是由于应用程序设计师不知道如何使用数据库,然后在“事情运行缓慢,而不是我的代码;请参见配置文件”时指责dba引起的。
Andrew Hill

@AndrewHill:什么时候是硬件问题而不是算法问题?问题是关于了解底层硬件行为,而不是高层算法。
greyfade 2014年

12

不,你不,但我认为这是一个好主意。学习关于事物如何在逻辑级别上运行的概述,确实对我的发展有所帮助。


6

我认为有关应用程序开发人员和Web开发人员的评论是错误的。

例如,如果某人正在开发涉及很多安全性东西(例如ssh或其他某种加密算法)的Web应用程序,那么很重要的一点是,他们必须知道自己所运行的硬件类型,以便他们可以确定机器是否可以实际处理工作量。另一个示例可能包括一个托管某种下载内容的服务器。如果您预期会有大量请求,那么您最好了解磁盘驱动器的功能以及所连接的总线接口的任何类型。

从应用程序的角度来看,如果您正在开发某种CAD程序或进行3d渲染的程序,则可以期望这些应用程序在算法和图形上都需要大量计算。最好先了解硬件,以确保应用程序具有响应性和可用性。

我并不是说您必须深入了解PCI协议之类的内容,但您最好了解接口和硬件的功能。

最终,无论您进行哪种开发,它都是很重要的。您需要了解的详细程度尚有争议。


2

对于一个专业的程序员,我把它看作一个整体的角度来理解整个系统,而不是仅仅知道一个给定的编程语言的语法大谈特谈。我发现它可以帮助程序员(和分析师)做出明智的设计决策,并做出更明智的算法和数据结构选择。

以我自己的经验,最好的程序员往往会在不同程度上了解内部工作原理,无论是了解目标平台的本机汇编指令集,学校的计算机组织入门课程,基本的数字电子学还是能够理解详细的内容。在最新型号中对CPU和GPU内核的描述中,最优秀的人比不太优秀的人拥有更完整的知识。


1

我不确定它是否有帮助,但是当我对正在使用的系统了解更多的时候,我会感到更加自在。在我小的时候,我不喜欢不知道我正在使用的系统的汇编语言。我已经进行了更改,或者已经学到了足够多的知识,或者更多的知识并不能使我对系统有更多的了解。我从没做过硬件方面的工作,但是我可以拆开一台计算机,为不同的子系统以及它们之间的交互方式命名。


0

我在25年前的一门计算机体系结构课程以及当时在一个非现实体系结构上学到的东西很少。

我主要在各种平台上进行应用程序编程。有一段时间我在开发代码,使其不仅可以在商品x86硬件上运行,还可以在Sparc,PA-RISC和其他服务器体系结构上运行。我所做的工作完全不需要该级别的知识。


0

我将Java编程作为AP高中课程教授。我发现,当学生对计算机的内部工作有所了解时,它确实有助于他们理解编程概念。

我不会太过分-只是简单的概念(例如将事物如何存储在内存中)似乎对学生有所帮助。


0

我将按照标题中的要求回答:

是的,开发人员应该了解硬件的内部工作原理。多少取决于开发人员的类型及其目标,可用时间和个人兴趣。当然,应该优先考虑他们在自己所在地区使用的直接工具,技术等。这种意见是作为一个全面的个人。在不牺牲工艺的情况下,您对工艺之外的事情了解得越多越好。

这并不意味着您需要对Cheese Whiz感到疯狂。全面了解硬件,各部分之间的交互方式,操作系统如何使用它们。按照这些思路,我建议为所有开发人员阅读一本操作系统概念书。

我都知道吗 哎呀没有。我已经忘记了太多关于SCSI的无用信息,甚至都不是很有趣。但是,了解它是非常宝贵的经验。我还忘记了许多其他与硬件相关的细节,但请记住我从这些知识中学到的重要概念。

因此,我当然建议学习有关硬件的知识。根据您的需要以合理的速度进行操作。尽可能多地学习细节,但要专注于概念。


0

每个开发人员都应该了解与计算机工程相关的基本概念:二进制算术,基数转换,布尔代数,逻辑门,CPU的组成(以及组件的作用),缓存,虚拟内存,压缩,错误检测和纠正...

这些知识的了解程度取决于程序员的工作。就像其他人所说的那样,嵌入式系统开发人员必须比Web开发人员更加熟悉硬件功能以及如何编写最能利用硬件的软件。

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.