V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
fengsien1999
V2EX  ›  问与答

计算机组成原理对于职业生涯的作用?

  •  1
     
  •   fengsien1999 · 2020-06-21 22:04:11 +08:00 · 6109 次点击
    这是一个创建于 1607 天前的主题,其中的信息可能已经有所发展或是发生改变。

    除了应付考研,不搞硬件的人,计算机组成原理这门课还有别的用吗?

    40 条回复    2020-06-23 18:30:40 +08:00
    786375312123
        1
    786375312123  
       2020-06-21 22:08:29 +08:00
    没什么用处,我是学电的。我现在还记得上大学时候老师教的 NAND 如何组成的,一步步推导硬件上如何实现基础的逻辑或与非,到最后的数字加减。
    结果几年了,再也没用到这些东西。就是懂计算机底层是如何实现的,无非就是偶尔能装逼
    yangzhezjgs
        2
    yangzhezjgs  
       2020-06-21 22:22:05 +08:00
    kop1989
        3
    kop1989  
       2020-06-21 22:26:33 +08:00
    如果以后搞 it 软件工程,没用。
    但是这门课解答了你计算机的基本原理。即便你不记得细节了,你也会大概明白计算机是怎么运转起来的。
    万一你以后需要造更高效的轮子呢?这时候有这门课打底,你最起码知道该去学什么。
    gadsavesme
        4
    gadsavesme  
       2020-06-21 22:47:48 +08:00
    面试有大用
    felixcode
        5
    felixcode  
       2020-06-21 22:48:40 +08:00   ❤️ 9
    培训班出来的越多,这种基础性的东西越是稀缺的资源,基本也决定很多人技术能力的上限在哪里。
    peachpeach
        6
    peachpeach  
       2020-06-21 22:53:46 +08:00 via iPhone   ❤️ 2
    我一个在苏宁的大学同学,做 java 开发的,底层知识一点都不懂,甚至装系统都不会。
    也照样写程序。
    而我是个苦逼的嵌入式,组成原理是必备的基础。
    vk42
        7
    vk42  
       2020-06-21 22:54:59 +08:00
    如果只是做基础搬砖工也许用不到,但组成原理和体系结构这类知识其实决定了 CS 相关从业者的瓶颈,所谓知其然知其所以然的关系吧
    ljpCN
        8
    ljpCN  
       2020-06-21 23:03:40 +08:00 via Android   ❤️ 12
    让你拥有常识。知道变量在内存里,知道程序最终变成指令输入到 CPU 电路。从事软件开发,无非是在这些东西的封装上再做开发,总会有某个时刻,你发现你运用的这一层封装还残存或是暴露出或是运用了底层的概念。
    就像学习物理有什么用?让你拥有常识。知道力是物体运动状态改变的原因。知道不存在永动机。这让你对世界的判断有明确的依据了。
    没那么多神奇的事情。计算机和整个世界,都是在这样的规则上运行。基本规则知道得越全面,你就越有把握运用好这个世界暴露出的 API 。
    CEBBCAT
        9
    CEBBCAT  
       2020-06-21 23:12:56 +08:00
    在写 Go,最近看了些并发相关的文章。如果没学过计算机组成原理,该怎么理解原子操作呢?
    mreasonyang
        10
    mreasonyang  
       2020-06-21 23:14:24 +08:00 via iPhone   ❤️ 1
    了解其中的概念即可,不需要深究细节。另外和楼上几位观点不同,我觉得和上学时很多其他学科比这科并不会成为软件工程师的生涯瓶颈
    klesh
        11
    klesh  
       2020-06-21 23:14:54 +08:00 via Android   ❤️ 1
    以前 js 的数据还没有 contains 方法的时候,知道组成原理的人会用~indexOf 来代替
    blless
        12
    blless  
       2020-06-21 23:21:43 +08:00 via Android
    为啥会没用呢,虽然有些章节过时了,我看完就感觉醍醐灌顶。现实世界真正的构成很难,但是学完计算机原理至少程序世界是如何运作,也知道很多语言限制在哪里了,比如浮点数计算之类的。
    adadada
        13
    adadada  
       2020-06-21 23:55:15 +08:00
    本科教材上的一般都是非常基础的内容,多少知道一下应该没有坏处。我认识的一个研究生时搞数论的人,现在在做处理器设计相关的工作。可能我们很难预见职业“生涯”中会做什么,所以就时刻做好准备呗。
    May725
        14
    May725  
       2020-06-22 00:15:40 +08:00
    我的看法是:这对从事软件行业,肯定有用。
    虽然上层软件日新月异,但万变不离其宗。
    就比如,如果懂汇编,就大概知道编译器这个东西干了什么事。
    如果了解冯诺依曼结构体系,就可以分析你的程序运行慢,是慢在哪里。
    fishCatcher
        15
    fishCatcher  
       2020-06-22 00:19:41 +08:00 via iPhone
    有幸去 ucb 交换过一学期,选了 cs61c,认真学下来感觉硬件和软件有了很强的联系,而且感叹计算机真的太棒了。
    miyuki
        16
    miyuki  
       2020-06-22 00:45:59 +08:00 via Android
    赞同 #8 的观点,比如前几天的“双层循环 ij 比 ji 更快”问题

    golang 面试题之 为什么这种更快呢?
    https://www.v2ex.com/t/677996
    anguiao
        17
    anguiao  
       2020-06-22 01:03:56 +08:00 via Android
    找一本经典教材,仔细看一遍就行了。
    有多大好处说不上,反正不会有坏处。以后和人吹逼,肚子里也有料。
    KunMinX
        18
    KunMinX  
       2020-06-22 01:10:28 +08:00
    组成原理提供了计算机的背景认知,或者说前置知识。

    有了组成原理做铺垫,后续想学编译原理什么的都能轻松入门。

    可以有选择地学,可以只学语言相关的那部分。

    之前看过某平台的一位老师讲的挺好的,顺道分享给有需要的人。

    http://gk.link/a/10j4A
    jessehzj
        19
    jessehzj  
       2020-06-22 01:28:57 +08:00
    看了#16 的帖子,更加说明不知道底层的也能过得好好的。看过一遍 csapp 不会不知道 locality
    Perry
        20
    Perry  
       2020-06-22 01:32:04 +08:00
    有必要,不过当码工的话学点基础感觉就够了,本科也学的啊
    laike9m
        21
    laike9m  
       2020-06-22 01:36:02 +08:00 via Android
    可以类比安全气囊对于开车的作用
    vk42
        22
    vk42  
       2020-06-22 01:44:03 +08:00
    @jessehzj 看过 csapp 了还算不知道底层?很多时候学习不是通过上学上课,主动被动接受知识的方式很多。系统学过只是帮你少踩一些坑,不然就像那个帖子里面一样被坑了还不知道怎么回事
    ppphp
        23
    ppphp  
       2020-06-22 03:19:31 +08:00
    工具链完整的老东西不需要基础知识,出新东西,工具不完整的时候就需要了
    tulongtou
        24
    tulongtou  
       2020-06-22 05:44:11 +08:00 via iPhone
    做 cs 有用,做 curd 就没啥用
    LeoZhu
        25
    LeoZhu  
       2020-06-22 06:41:35 +08:00
    基础决定上限,建立领域的认知
    nevin47
        26
    nevin47  
       2020-06-22 07:45:56 +08:00 via Android
    我自己的体验是,做上层软件的时候,略懂一点点基本差不多了,很难接触到再下一层的东西。
    做偏底层一些的时候,那就需要再系统的回顾一下,基本的原理和概念必须要懂,才能愉快的工作。
    最近的工作是在直接手撕 Kernel 或者甚至改 cpu 内存这些的架构,那是恨不得组成原理的每一个字都融汇贯通。。书都快翻烂了
    opengps
        27
    opengps  
       2020-06-22 08:03:35 +08:00
    没有直接作用(不能当饭吃)
    有潜在作用(等你用到了不用浪费很长时间去从不知道开始搜索查资料浪费几天甚至一直不理解)
    opengps
        28
    opengps  
       2020-06-22 08:05:37 +08:00
    我做开发也有 10 年了,然而我就是那种,能做出来东西,却不能深究极致的类型。虽然我的做法符合市场需求可以轻松做出产品,但是真遇到强劲的技术型对手我是一打就倒
    zdnyp
        29
    zdnyp  
       2020-06-22 11:35:25 +08:00
    内功和招式的区别?
    printese
        30
    printese  
       2020-06-22 12:21:58 +08:00 via iPhone   ❤️ 1
    之前看到零拷贝原理的讲解,提到 DMA 瞬间秒懂

    如果组原没学好,估计还得从什么是 DMA 开始学,这就是差别
    hatebugs
        31
    hatebugs  
       2020-06-22 12:33:00 +08:00 via Android
    性能优化的时候能用到,比如 cpu cacheline 这些
    codgician
        32
    codgician  
       2020-06-22 14:39:44 +08:00
    如果不从功利的角度来看,从锻炼思维的角度来看还是有一些作用的。
    比如计组里处处体现着 trade-off 的思想,或许这也可以对将来做其他方向的研发提供一些启发?
    coderluan
        33
    coderluan  
       2020-06-22 15:43:23 +08:00
    这个看行业, 比如我做图像处理的, 计组就挺重要的, 虽然不影响你实现算法, 但是不会这些你的实现的算法肯定没会的人快, 但是我们这行基本完全用不到计算机网络的,
    imbushuo
        34
    imbushuo  
       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 上的代码(
    xiaowangge
        35
    xiaowangge  
       2020-06-22 17:33:35 +08:00
    拿 Java 举例子:

    volatile 内存可见性 CPU 缓存

    Synchonized 内存屏障
    labulaka521
        36
    labulaka521  
       2020-06-22 19:32:43 +08:00 via iPhone
    那么能不能推荐几本关于计算机原理的书
    koebehshian
        37
    koebehshian  
       2020-06-23 09:57:23 +08:00
    @labulaka521 推荐《编码——隐匿在计算机软硬件背后的语言》,这本书我一开始以为是讲编码的,实际上是讲计算机原理的,从数字电路到汇编
    1ffree
        38
    1ffree  
       2020-06-23 11:11:02 +08:00
    @imbushuo (也就日常几千万 QPS 吧,小项目超菜的()
    ?????
    fengsien1999
        39
    fengsien1999  
    OP
       2020-06-23 11:24:49 +08:00
    @labulaka521 计算机组成原理(第 2 版) 高等教育出版社,唐朔飞编著;计算机组成原理 科学出版社,严云洋编著
    imbushuo
        40
    imbushuo  
       2020-06-23 18:30:40 +08:00 via iPhone
    @1ffree 平心而论对于 Monitoring 来说这个数据很正常,MS 那边的 Geneva Monitoring 数据比这个还要多
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5782 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 02:59 · PVG 10:59 · LAX 18:59 · JFK 21:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.