普通开发商应该知道多少裸机?

Eig*_*ite 4 hardware bare-metal

前几天让我感到震惊的是,我对我期望运行软件的硬件几乎一无所知.我已经做了大约5年的开发,但自从我离开大学以来,我没有考虑过硬件理论/设计.我甚至不再建造自己的机器了,因为,老实说,我宁愿付出额外的一些钱,让Comp Sci辍学让我在店里建造它.

虽然它有什么引擎盖下正在进行的基础知识有很好的理解显然很重要,它是抽象,使远离我们,因为我们真的不需要与错综复杂假惺惺开发者Programmed I/OMemory-Mapped I/O等..

或者我们呢?

请注意,我在谈论你的每日LOB开发人员,而不是专门的裸机人.

那么,定义"平均"你将如何,但总体而言,一个称职的程序员能够多深入潜水?

Ale*_*x B 9

这取决于您的开发水平.

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

但在所有的发展中,你可能应该知道基本面.例如,

  1. von-Neumann架构的瓶颈在哪里?
    • CPU缓存如何工作(在多线程中很重要).
    • OS处理器调度在单处理器多处理器CPU上的差异(再次,在多线程中很重要).
    • IO的工作方式以及写入文件的原因并不一定意味着数据会立即持久存在.
    • IO的速度有多慢以及为什么大多数数据库应用程序都受IO限制.
    • 为什么网络比IO(甚至更多的无线网络)更慢,更不可靠.

另一方面,我不认为了解内存映射IO的具体内容,或者了解NAND和NOR闪存之间的区别对于普通的*(桌面/ Web)开发人员来说非常重要.即使对现代CPU体系结构的了解,本身也可能是一门科学,看看它们在过去几年中有多复杂,更不用说现代编译器发出代码变得越来越难以预测(文章链接表明现在更难以在低级优化时超越编译器).几十年前,它类似于汽车修理工更容易,今天并不是很多人会试图自己修车.

**"平均"的定义可能有所不同.*