除了应付考研,不搞硬件的人,计算机组成原理这门课还有别的用吗?
|      1786375312123      2020-06-21 22:08:29 +08:00 没什么用处,我是学电的。我现在还记得上大学时候老师教的 NAND 如何组成的,一步步推导硬件上如何实现基础的逻辑或与非,到最后的数字加减。 结果几年了,再也没用到这些东西。就是懂计算机底层是如何实现的,无非就是偶尔能装逼 | 
|      2yangzhezjgs      2020-06-21 22:22:05 +08:00 有用,参考 csapp  https://book.douban.com/subject/26912767/ | 
|  |      3kop1989      2020-06-21 22:26:33 +08:00 如果以后搞 it 软件工程,没用。 但是这门课解答了你计算机的基本原理。即便你不记得细节了,你也会大概明白计算机是怎么运转起来的。 万一你以后需要造更高效的轮子呢?这时候有这门课打底,你最起码知道该去学什么。 | 
|      4gadsavesme      2020-06-21 22:47:48 +08:00 面试有大用 | 
|  |      5felixcode      2020-06-21 22:48:40 +08:00  9 培训班出来的越多,这种基础性的东西越是稀缺的资源,基本也决定很多人技术能力的上限在哪里。 | 
|  |      6peachpeach      2020-06-21 22:53:46 +08:00 via iPhone  2 我一个在苏宁的大学同学,做 java 开发的,底层知识一点都不懂,甚至装系统都不会。 也照样写程序。 而我是个苦逼的嵌入式,组成原理是必备的基础。 | 
|      7vk42      2020-06-21 22:54:59 +08:00 如果只是做基础搬砖工也许用不到,但组成原理和体系结构这类知识其实决定了 CS 相关从业者的瓶颈,所谓知其然知其所以然的关系吧 | 
|      8ljpCN      2020-06-21 23:03:40 +08:00 via Android  12 让你拥有常识。知道变量在内存里,知道程序最终变成指令输入到 CPU 电路。从事软件开发,无非是在这些东西的封装上再做开发,总会有某个时刻,你发现你运用的这一层封装还残存或是暴露出或是运用了底层的概念。 就像学习物理有什么用?让你拥有常识。知道力是物体运动状态改变的原因。知道不存在永动机。这让你对世界的判断有明确的依据了。 没那么多神奇的事情。计算机和整个世界,都是在这样的规则上运行。基本规则知道得越全面,你就越有把握运用好这个世界暴露出的 API 。 | 
|  |      9CEBBCAT      2020-06-21 23:12:56 +08:00 在写 Go,最近看了些并发相关的文章。如果没学过计算机组成原理,该怎么理解原子操作呢? | 
|  |      10mreasonyang      2020-06-21 23:14:24 +08:00 via iPhone  1 了解其中的概念即可,不需要深究细节。另外和楼上几位观点不同,我觉得和上学时很多其他学科比这科并不会成为软件工程师的生涯瓶颈 | 
|      11klesh      2020-06-21 23:14:54 +08:00 via Android  1 以前 js 的数据还没有 contains 方法的时候,知道组成原理的人会用~indexOf 来代替 | 
|  |      12blless      2020-06-21 23:21:43 +08:00 via Android 为啥会没用呢,虽然有些章节过时了,我看完就感觉醍醐灌顶。现实世界真正的构成很难,但是学完计算机原理至少程序世界是如何运作,也知道很多语言限制在哪里了,比如浮点数计算之类的。 | 
|  |      13adadada      2020-06-21 23:55:15 +08:00 本科教材上的一般都是非常基础的内容,多少知道一下应该没有坏处。我认识的一个研究生时搞数论的人,现在在做处理器设计相关的工作。可能我们很难预见职业“生涯”中会做什么,所以就时刻做好准备呗。 | 
|  |      14May725      2020-06-22 00:15:40 +08:00 我的看法是:这对从事软件行业,肯定有用。  虽然上层软件日新月异,但万变不离其宗。 就比如,如果懂汇编,就大概知道编译器这个东西干了什么事。 如果了解冯诺依曼结构体系,就可以分析你的程序运行慢,是慢在哪里。 | 
|      15fishCatcher      2020-06-22 00:19:41 +08:00 via iPhone 有幸去 ucb 交换过一学期,选了 cs61c,认真学下来感觉硬件和软件有了很强的联系,而且感叹计算机真的太棒了。 | 
|  |      16miyuki      2020-06-22 00:45:59 +08:00 via Android | 
|  |      17anguiao      2020-06-22 01:03:56 +08:00 via Android 找一本经典教材,仔细看一遍就行了。 有多大好处说不上,反正不会有坏处。以后和人吹逼,肚子里也有料。 | 
|  |      18KunMinX      2020-06-22 01:10:28 +08:00 组成原理提供了计算机的背景认知,或者说前置知识。 有了组成原理做铺垫,后续想学编译原理什么的都能轻松入门。 可以有选择地学,可以只学语言相关的那部分。 之前看过某平台的一位老师讲的挺好的,顺道分享给有需要的人。 http://gk.link/a/10j4A | 
|      19jessehzj      2020-06-22 01:28:57 +08:00 看了#16 的帖子,更加说明不知道底层的也能过得好好的。看过一遍 csapp 不会不知道 locality | 
|  |      20Perry      2020-06-22 01:32:04 +08:00 有必要,不过当码工的话学点基础感觉就够了,本科也学的啊 | 
|      21laike9m      2020-06-22 01:36:02 +08:00 via Android 可以类比安全气囊对于开车的作用 | 
|      22vk42      2020-06-22 01:44:03 +08:00 @jessehzj 看过 csapp 了还算不知道底层?很多时候学习不是通过上学上课,主动被动接受知识的方式很多。系统学过只是帮你少踩一些坑,不然就像那个帖子里面一样被坑了还不知道怎么回事 | 
|      23ppphp      2020-06-22 03:19:31 +08:00 工具链完整的老东西不需要基础知识,出新东西,工具不完整的时候就需要了 | 
|  |      24DonaidTrump      2020-06-22 05:44:11 +08:00 via iPhone 做 cs 有用,做 curd 就没啥用 | 
|  |      25LeoZhu      2020-06-22 06:41:35 +08:00 基础决定上限,建立领域的认知 | 
|  |      26nevin47      2020-06-22 07:45:56 +08:00 via Android 我自己的体验是,做上层软件的时候,略懂一点点基本差不多了,很难接触到再下一层的东西。 做偏底层一些的时候,那就需要再系统的回顾一下,基本的原理和概念必须要懂,才能愉快的工作。 最近的工作是在直接手撕 Kernel 或者甚至改 cpu 内存这些的架构,那是恨不得组成原理的每一个字都融汇贯通。。书都快翻烂了 | 
|  |      27opengps      2020-06-22 08:03:35 +08:00 没有直接作用(不能当饭吃) 有潜在作用(等你用到了不用浪费很长时间去从不知道开始搜索查资料浪费几天甚至一直不理解) | 
|  |      28opengps      2020-06-22 08:05:37 +08:00 我做开发也有 10 年了,然而我就是那种,能做出来东西,却不能深究极致的类型。虽然我的做法符合市场需求可以轻松做出产品,但是真遇到强劲的技术型对手我是一打就倒 | 
|  |      29zdnyp      2020-06-22 11:35:25 +08:00 内功和招式的区别? | 
|      30printese      2020-06-22 12:21:58 +08:00 via iPhone  1 之前看到零拷贝原理的讲解,提到 DMA 瞬间秒懂 如果组原没学好,估计还得从什么是 DMA 开始学,这就是差别 | 
|  |      31hatebugs      2020-06-22 12:33:00 +08:00 via Android 性能优化的时候能用到,比如 cpu cacheline 这些 | 
|      32codgician      2020-06-22 14:39:44 +08:00 如果不从功利的角度来看,从锻炼思维的角度来看还是有一些作用的。 比如计组里处处体现着 trade-off 的思想,或许这也可以对将来做其他方向的研发提供一些启发? | 
|  |      33coderluan      2020-06-22 15:43:23 +08:00 这个看行业, 比如我做图像处理的, 计组就挺重要的, 虽然不影响你实现算法, 但是不会这些你的实现的算法肯定没会的人快, 但是我们这行基本完全用不到计算机网络的, | 
|  |      34imbushuo      2020-06-22 16:07:07 +08:00 举个生产里的例子:我们的某个生产服务(也就日常几千万 QPS 吧,小项目超菜的()在换了新厂商的最新 CPU 后,很多 hot path 的 throughput 变得不可思议地低,如果没学过 locality 和不了解最新 CPU 微架构的话( preferrably 还得从 hw team 那儿知道主板的设计)你可能根本没思路去诊断和优化( 我一直有的一个想法就是就算写 CRUD,写 toy CRUD 和 CRUD at very large scale 的区别是非常大的,奈何这个站的大部分用户一辈子可能没有机会碰 very large scale 的项目,或者一辈子都在写 cold path 上的代码( | 
|  |      35xiaowangge      2020-06-22 17:33:35 +08:00 拿 Java 举例子: volatile 内存可见性 CPU 缓存 Synchonized 内存屏障 | 
|  |      36labulaka521      2020-06-22 19:32:43 +08:00 via iPhone 那么能不能推荐几本关于计算机原理的书 | 
|      37koebehshian      2020-06-23 09:57:23 +08:00 @labulaka521 推荐《编码——隐匿在计算机软硬件背后的语言》,这本书我一开始以为是讲编码的,实际上是讲计算机原理的,从数字电路到汇编 | 
|      39fengsien1999 OP @labulaka521 计算机组成原理(第 2 版) 高等教育出版社,唐朔飞编著;计算机组成原理 科学出版社,严云洋编著 |