每个程序员应该知道硬件内部的东西?我并不是指硬件组装或维护,而是硬件的实际工作方式。每个程序员应该知道什么关于硬件内部?
回答
你应该知道:
- 内存(ROM/RAM),与存储的差异(HDD/DVD/CD)。 (速度和访问方法的差异)。
- CPU/CORE'S,它们的功能以及多核的效果。
- I/O,可能不那么多,取决于编程领域。
- 可能的地址和数据总线。两者的大小的影响是什么。
- 硬件中断,即硬件能够中断当前程序。
这取决于系统上,你使用Smalltalk或口齿不清的时候我会说没有^^ 在Python中的浮点的东西将是很好的发展。 在C我会说学习一切,你可以找到^^
这台电脑说二进制。更具体地说,理解浮点表示。 “为什么我的数学出错了”可能是关于SO的最重复的问题。
我只想推荐阅读Programming from the Ground Up书:
这是一个介绍书,编程和计算机科学使用汇编语言。它假定读者以前从未编程过,并介绍了变量,函数和流量控制的概念。使用汇编语言的原因是为了让读者思考计算机如何在底下工作。从“裸机”的角度了解计算机的工作方式通常是顶级程序员和程序员之间的区别,他们永远无法掌握他们的艺术。
旧但IMO仍然相关。
字节顺序是理解的重要概念。无意中混淆了字节顺序可能会导致数小时的痛苦调试。
随着计算机变得更快,这几十年来一般是一致的硬件的一些基本方面是不断变化的。虽然过去人们可以通过检查生成的机器码和总计各种指令所需的周期数来估计一段代码的性能,但新的超线程处理器会将这些计算放在窗口外面。在许多情况下,将编译器和处理器视为邪恶的黑盒子越来越重要,它将以各种可能想象到的方式来摧毁代码的行为,这些方式仍然符合语言规范。作为一个对硬件内部非常了解的程序员,这是令人沮丧的。我可以理解这个需求,但是我的知识变得越来越没有用,这让我感到非常生气。
举例来说,你有一个任务是为某种机器人制作驱动程序。你必须了解机器人的内部。例如,机器人通过USB连接到电脑。司机然后将它作为一个包发送一个命令。机器人解释该命令并开始跳舞。现在说,你被赋予了这个任务,你现在已经想到了机器人的内部。你没有驱动程序,因为你不知道如何编程。现在发生的事情是,你无暇顾及机器人内部的研究,因为你认为你不必了解硬件。总而言之,这对每个人都不是必要的,但从长远来看,这是可以帮助你的。
- 1. 每个python程序员应该知道哪些python库?
- 2. 关于开发64位应用程序,我应该知道些什么?
- 3. 关于F#CTP我应该知道些什么?
- 4. 学习STL应该知道什么关于C++?
- 5. 程序员应该知道多少系统管理员?
- 6. x86汇编程序员转换为MIPS,我应该知道什么?
- 7. 程序员必须/应该知道的模式和原则列表是什么?
- 8. 每个开发人员都应该知道的PowerShell脚本
- 9. 每个.NET开发人员应该知道哪些类/接口?
- 10. 要知道什么顺序运行外部应用程序
- 11. C#/ .Net/WPF开发人员应该知道什么?
- 12. Ruby和Rails开发人员应该知道什么?
- 13. 测试人员应该知道什么概念?
- 14. 开发人员设计师 - 我应该知道什么?
- 15. IT员工应该知道/从(外包)软件供应商得到什么?
- 16. 为什么Java程序员应该关心2038年的错误?
- 17. 关于将Ruby on Rails应用程序与.NET系统结合使用,应该知道些什么?
- 18. 关于C++中的结构化异常(SEH)我应该知道些什么?
- 19. 关于MVC责任的另一篇帖子,谁应该知道什么?
- 20. 关于接近相对通话我应该知道什么? (win32,x86 asm)
- 21. 我应该知道什么对于不良和LINQ更好?
- 22. 著名的设计模式,一个C++程序员应该知道
- 23. 开发人员在构建手机应用程序之前应该知道什么?
- 24. 有谁知道为什么这个应用程序可用于0设备?
- 25. 为什么远程git服务器应该有 - 不知道
- 26. asp.net框架和库每个开发人员都应该知道...并使用
- 27. ADO.NET实体框架性能提示每个开发人员都应该知道
- 28. 这个程序应该做什么?
- 29. 不知道为什么程序崩溃
- 30. 如何知道程序在做什么?
这比在programmers.stackexchange或社区维基上更好。 – wheaties 2010-09-21 21:43:52
这绝对应该是一个社区wiki问题 – configurator 2010-09-21 21:51:34
@configurator:不,它应该是一个封闭的问题。民意调查不属于这里。 – 2010-09-21 22:12:51