前几天让我感到震惊的是,我对我期望运行软件的硬件几乎一无所知。我已经做了大约5年的开发,但自从我离开大学以来,我没有考虑过硬件理论/设计。我甚至不再自己制造自己的机器了,因为老实说,我宁愿付出额外的一些钱,让Comp Sci辍学让我在店里建造它。
虽然很好地理解幕后发生的事情的基础知识显然很重要,但它被抽象为远离我们的开发人员,我们真的不需要关注Programmed I/O
的复杂性。或Memory-Mapped I/O
等,..
或者我们呢?
请注意,我在这里谈论的是你每天的LOB开发人员而不是专门的裸机人。
那么,定义'平均'你将如何,但总体而言,一个称职的程序员应该有多深才能潜水?
答案 0 :(得分:9)
这取决于你的发展水平。
但在所有的发展中,你可能应该知道基本面。如,
另一方面,我不认为了解内存映射IO的具体情况,或者知道NAND和NOR闪存之间的区别对于普通的*(桌面/网络)开发人员来说非常重要。即使是对现代CPU体系结构的了解也可能是一门科学本身,看看它们在过去几年中有多复杂,更不用说code emitted by modern compilers is becoming more difficult to predict了(文章链接显示它现在更难了)在低级优化时超越编译器)。几十年前,它类似于汽车修理工更容易,今天并不是很多人会试图自己修理汽车。
**“平均”的定义可能会有所不同。*
答案 1 :(得分:3)
当然可以在不了解底层硬件的情况下完成任务。但是,如果知道缓存如何工作以及特定目标机器上的哪些操作快/慢,将有助于您在设计软件时做出更好的设计决策。
就个人而言,我认为知道我每天至少花10个小时工作的机器非常满意;)
然后又为什么要平均?
答案 2 :(得分:3)
我觉得能够理解编译器发出的汇编语言非常有用,在我的例子中是C ++。在考虑优化和解决困难调试问题等问题时,这非常有用。
答案 3 :(得分:2)
在许多情况下,您不知道程序将运行哪种硬件,因此过多地关注一台机器的某些特定细节是没有意义的。用户可能会在64Bit RISC硬件上的虚拟机中运行Win32可执行文件。除非您确定知道目标硬件,否则最好使用操作系统和标准库提供的抽象,并按预期使用它们。相信构建操作系统,编译器和库的人员可以正常工作。
答案 4 :(得分:1)
操作系统开发人员为了抽象底层物理世界而做得很好。他们的目的是为普通开发人员提供许多硬件的通用接口,这样他就可以专注于应用程序并开发可移植,易于维护和能够优化操作系统更新的代码。
因此,对于普通开发人员制作平均应用程序,我认为最好不要问太多关于硬件的问题。