2009-12-07 92 views
4

有一天,我对我期望软件运行的硬件几乎一无所知。我已经做了大约5年的开发工作,但自从离开大学后,我一直没有关注硬件理论/设计。我甚至不再制造我自己的机器,因为,诚实地说,我宁愿支付额外的几块钱,让Comp Sci退出在我的店铺建立它。平均开发人员应该知道裸机需要多少钱?

虽然它有一个什么样的引擎盖下怎么回事,它的抽象的基础知识有很好的理解,使远离我们作为开发者,我们真的不需要用Programmed I/OMemory-Mapped I/O等错综复杂假惺惺显然很重要,..

或者我们做?

请注意,我在这里谈论你的每日LOB开发,而不是专门的裸机。

因此,定义'平均'你将如何,但总体而言,一个胜任的程序员能够潜入多深?

+0

什么,YAGNI在这里不适用? ;) – Benjol 2009-12-07 12:39:54

+0

其实我很确定YAGNI非常适用,但为了自我改善的利益... – Stimul8d 2009-12-07 13:39:34

回答

9

这取决于你的发展水平有多高。

  1. 如果您为嵌入式系统开发,这意味着很多硬件知识(接近EE级别)。
    • 如果您在某些专业领域,比如游戏的低级3D图形编程,您应该知道特定图形卡的来龙去脉。
    • 如果你正在做web或桌面应用程序,可能不是那么多。

但在所有的发展,你应该知道的基本知识。例如,

  1. von-Neumann架构的瓶颈在哪里?
    • CPU缓存如何工作(在多线程中很重要)。
    • 操作系统调度在单处理器多处理器CPU上将如何不同(再次,在多线程中很重要)。
    • IO的工作方式以及为什么当您写入文件并不一定意味着您的数据立即持久。
    • IO有多慢,为什么大多数数据库应用程序都是IO绑定的。
    • 为什么网络比IO更慢,更不可靠(而无线网络更是如此)。

在另一方面,我不认为知道具体喜欢什么内存映射IO是,或知道NAND和NOR闪存之间的差异,平均*非常重要(桌面/网络)开发人员。即使对现代CPU架构的了解也可能会成为一门科学,看看它们在过去几年中的复杂程度,更不用说code emitted by modern compilers is becoming more difficult to predict(链接文章显示,现在更难超越编译器在低级优化)。就像几十年前的汽车修理工更容易一样,今天并不是很多人会尝试自己修理汽车。

**的“平均”的定义可能会有所不同。*

+0

+1。我也想*强调*在各个层面上的记忆速度差异的知识。一级缓存,二级缓存,内存,驱动器缓存和硬盘的速度。另外,旋转磁盘的顺序可能会非常快,但闪存磁盘如何可以快速找到。 – 2009-12-07 12:00:33

+0

这对我来说是一个足够全面的答案。欢呼的伙计。 – Stimul8d 2009-12-10 14:00:33

3

这当然是可能的,无需了解底层硬件做任何度日。然而,即使知道例如缓存的工作方式以及在特定目标机器上哪些操作是快速/慢速的,也可以帮助您在设计软件时做出更好的设计决策。

就我个人而言,我认为知道如何机器,我花一天工作至少10小时有非常满意;)

然后又为什么定居平均?

3

我觉得能够理解编译器发出的汇编语言非常有用,在我的例子中是C++。这在考虑优化问题和解决困难的调试问题时非常有用。

2

在很多情况下,您不知道您的程序将运行在哪个硬件上,因此关心一台机器的某些特定细节是没有意义的。用户可能会在某些64位RISC硬件上的虚拟机上运行Win32可执行文件,谁知道。除非您确定知道目标硬件,否则最好使用操作系统和标准库提供的抽象,并按预期使用它们。相信构建操作系统的人员,编译器和库可以正常工作。

1

操作系统开发人员为了抽象底层物理世界做了出色的工作。他们的目的是为普通开发人员提供与许多硬件通用的接口,以便他可以专注于其应用程序并开发可移植,易于维护并能够获得操作系统更新优化的代码。

因此,对于普通开发人员制作平均应用程序,我认为最好不要问太多关于硬件的问题。

+2

我第一次见到它表明缺乏技术知识是件好事。 – 2009-12-07 10:51:49

+0

我的观点并不是为了防止人们学习!它是关于专业化,授权和关注的有效手段。 – mouviciel 2009-12-07 12:24:29

+0

@尼尔,他们说无知是幸福的... – Benjol 2009-12-07 12:38:55

相关问题