软件工程师应该知道如何组装自己的计算机吗?
来自Mac背景,除了偶尔的RAM升级和换出硬盘外,我从来没有花太多时间来修补/组装/调整自己的计算机。我感觉我对计算机在概念级别,CPU,总线,内存等的工作方式有很好的了解,但是我并没有太多的实践经验可以将它们组合在一起/拆开。
我的问题是,通过学习组装自己的计算机,在软件工程技能方面有什么收获吗?如果我们一生都在将硬件整合在一起,那么它如何影响我们编写或者考虑软件的方式?
解决方案
回答
如果穿鞋,我们可能应该知道如何系鞋带。但是,最有可能的是,如果我们足够聪明,可以穿上它们。
如果没有,那我们就有问题了。
回答
好处是显而易见的:
- 我们可以节省几美元以备好用
- 如果我们失去了软件工程师的职位,那么我们可以在组装计算机方面赚钱。
上次购买组装计算机时,我发现CPU与散热器之间没有导热膏。
至于软件工程技能,我没有发现任何好处。
回答
我们不会从组装计算机中学到很多对程序员有用的知识。除了构建计算机之外,知道将pci卡放在何处以及如何插入处理器并没有真正的用处。
我确实认为我们需要一些有关计算机工作原理的低级知识,但是对于程序员来说很有趣的所有东西已经被焊接在主板上了。我们将从编程c或者汇编语言中学到更多知识,甚至可以阅读Charles Petzold的书Code ...
回答
嗯
老实说,组装计算机的实际行为并不能真正从根本上提高我们对计算机的了解。我们不是在构建这些部件,而是按照说明将它们组装到外壳中。
但是,使操作系统与组件正常工作以及与此有关的调试问题仍需要改进。
而且Aku关于省钱的观点是一个很好的观点。
回答
好吧,说实话,我不知道该选择哪一部分来组装顶级开发或者游戏PC。我知道所有东西如何融合在一起,我知道软件瓶颈等。
我必须组装PC时要做的是首先找到目的。开发人员PC?赌博?多媒体?办公室?
然后,我考虑了要求。显然,一台简单的办公PC可以使用更少的硬盘空间,板载GPU等。当我发现这一点时,我便在互联网上搜寻评论,已经组成的系统,汤姆的硬件基准,以尝试在预算范围内找到最佳组合。要考虑的另一件事是新的发展。例如,如果英特尔在一个月内发布了新的CPU型号,我会等待,以便较低型号的价格下降。
找到所需组件的列表后,我可以去当地的计算机商店或者在网上找到最优惠的价格。我更喜欢在当地的商店,因为这样可以节省很多时间,例如当我发现零件失效或者需要保修时。通常通常会贵一些。
组装主要是逻辑思维,有点耐心和保持专注;)
回答
Beware of programmers who carry screwdrivers. (Leonard Brandwein)
作为组装程序员,我们不会从组装PC中学到任何东西。我可以不用安装下水道系统就可以使用厕所。
回答
并非没有必要,但我认为程序员应该了解如何针对其上运行的硬件优化代码。
CPU,内存,网络和磁盘资源对性能有很大影响。程序员应该知道何时以及如何使用缓存来提高应用程序的性能,以及如何利用代码在可用时利用大资源。
作为一个怪胎,我会说学习如何组装计算机。
回答
引用我们的一位开国元勋(Jeff Atwood):
In my book, one of the best ways to understand the hardware is to get your hands dirty and put one together, including installing the OS, yourself. It's a shame Apple programmers can't do this...
虽然我不太确定这可以使我们成为一个更好的程序员,但是它是我们使用的工具。这些机器经常中断或者需要升级。我认为能够做到这一点是一个好主意,而从头开始构建一个是学习此方法的方法。
回答
我已经建立了自己的计算机,但是我认为它并没有增加我成为软件工程师的能力。也不会知道如何建立一个帮助工程师。
了解计算机的工作方式以及软件与硬件的交互方式使我们成为一名更好的工程师。
仅仅因为我可以将多核CPU放入主板并不意味着我理解并行处理为何对我有帮助,或者理解进入函数调用的关键部分意味着什么。并且由于它具有4 MB的缓存,这并不意味着我了解该缓存的功能以及分页的工作方式。
有很多人可以建造计算机,但是可以为他们设计软件的人很少。如果真是这样,那么软件工程师的收入将远远少于他们。
回答
加入Mac崇拜之前,我曾先构建自己的Windows和Linux计算机。我确实学到了一点,我认为这没有使我成为一个更好的程序员。
虽然这不是无用的知识。就像厨师一样,对水暖知识也有所了解。这些知识并不真正适用于核心任务,但是当出现问题时可以很方便地使用。
编辑:
在理解计算机工作原理的基础与将计算机与Newegg的各个部分放在一起之间有很大的区别。了解CPU,高速缓存和内存功能对于编程的价值。知道如何升级视频是一项有用的技能,但对日常软件开发没有帮助。
回答
取决于我们是哪种学习者。如果我们有很好的想象力,那么我们可能无需动手就能学到关于硬件的所有知识,因此有些人需要着眼于事物以增进理解。
就是说,如果我们有机会构建一台新计算机作为学习计算机,那么我们将学到很多东西,例如花时间看看南桥在哪里,是哪块芯片然后查找,找到SATA在哪里控制器,它是哪个品牌,并查找它,查看其特征等等。如果我们尽可能快地将各个部分放在一起,我们可能会学到在发生故障的情况下该怎么做并节省几美元,仅此而已。
同样,建造事物会增加人们对它们的好奇心,这并不是一件坏事。
回答
如果"写出色的代码"系列中的所有内容都说得通,那么我会说不,对于工作,我们将没有太多要实际构建系统的麻烦。现在,作为技术人员,必须诊断问题,硬件和软件,可以增强我们解决问题的能力,并且会有所帮助。问题在于,我们可以通过将几台计算机组合在一起来玩耍而学不到的东西。我们最终会错过各种制造商所做的所有小怪异的事情,并且如果可以应用它,则可以帮助扩大我们对设计选择的优缺点的总体了解。
回答
我倾向于认为,只要我们学到东西并扩展知识和视野,这都是一件好事,所以我要说"是"。
回答
是的,但不是我们正在考虑的意义。我认为学习基本的微处理器设计,存储器架构等非常有价值。如果我们可以获得一个使用PIC或者Stamp进行基本操作的项目工具包,那就更好了。弄清楚这些抽象,并在位层次上学一点点。还建议对相关的Patterson和Hennessy书籍进行审查。
用组件构建PC是一次不错的练习,只是要了解各个部分的兼容性问题。
回答
这类似于有关软件和电子工程的问题。
回答
建立自己的计算机可以使我们成为更好的通才,而不是更好的专家。如果我们将编程视为编辑器中的代码专用应用程序,然后变成应用程序,那么构建自己的系统将无助于此实践。
但是,如果我们需要将服务器放入一个可管理的服务器中,进行管理,弄清楚它是在崩溃时是属于应用程序,驱动器故障还是风扇故障,而不是南下的话,那么,是的,知道所有内容是什么,理解它们是什么。这样做,我们购买了哪些产品,为什么购买了它,无论是硬件还是软件都是问题所在,那么建造计算机是这条路的最低第一步。如果我们不负责代码的实际执行和实用程序,那么这就是浪费时间。
A human being should be able to change a diaper, plan an invasion, butcher a hog, conn a ship, design a building, write a sonnet, balance accounts, build a wall, set a bone, comfort the dying, take orders, give orders, cooperate, act alone, solve equations, analyze a new problem, pitch manure, program a computer, cook a tasty meal, fight efficiently, die gallantly. Specialization is for insects.
回答
作为多年构建计算机的程序员,我想说它对我的代码质量或者结构没有很大的影响,但为我的硬件质量如何影响最终用户奠定了良好的基础。有运行代码的经验。
此外,我认为这也许是最大的好处:构建自己的PC给我们足够的知识,可以说说作为员工提供给开发系统是否是一个好的系统。向IT /管理人员提供有关他们所提供的系统为何较差的信息,这可能是获得升级的关键。