fengsien1999
V2EX  ›  问与答

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

  •  1
     
  •   fengsien1999 · Jun 21, 2020 · 7396 views
    This topic created in 2329 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

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

    如果组原没学好,估计还得从什么是 DMA 开始学,这就是差别
    hatebugs
    hatebugs
    Jun 22, 2020 via Android
    31
    性能优化的时候能用到,比如 cpu cacheline 这些
    codgician
    codgician
    Jun 22, 2020
    32
    如果不从功利的角度来看,从锻炼思维的角度来看还是有一些作用的。
    比如计组里处处体现着 trade-off 的思想,或许这也可以对将来做其他方向的研发提供一些启发?
    coderluan
    coderluan
    Jun 22, 2020
    33
    这个看行业, 比如我做图像处理的, 计组就挺重要的, 虽然不影响你实现算法, 但是不会这些你的实现的算法肯定没会的人快, 但是我们这行基本完全用不到计算机网络的,
    imbushuo
    imbushuo
    Jun 22, 2020
    34
    举个生产里的例子:我们的某个生产服务(也就日常几千万 QPS 吧,小项目超菜的()在换了新厂商的最新 CPU 后,很多 hot path 的 throughput 变得不可思议地低,如果没学过 locality 和不了解最新 CPU 微架构的话( preferrably 还得从 hw team 那儿知道主板的设计)你可能根本没思路去诊断和优化(

    我一直有的一个想法就是就算写 CRUD,写 toy CRUD 和 CRUD at very large scale 的区别是非常大的,奈何这个站的大部分用户一辈子可能没有机会碰 very large scale 的项目,或者一辈子都在写 cold path 上的代码(
    xiaowangge
    xiaowangge
    Jun 22, 2020
    35
    拿 Java 举例子:

    volatile 内存可见性 CPU 缓存

    Synchonized 内存屏障
    labulaka521
    labulaka521
    Jun 22, 2020 via iPhone
    36
    那么能不能推荐几本关于计算机原理的书
    koebehshian
    koebehshian
    Jun 23, 2020
    37
    @labulaka521 推荐《编码——隐匿在计算机软硬件背后的语言》,这本书我一开始以为是讲编码的,实际上是讲计算机原理的,从数字电路到汇编
    1ffree
    1ffree
    Jun 23, 2020
    38
    @imbushuo (也就日常几千万 QPS 吧,小项目超菜的()
    ?????
    fengsien1999
    fengsien1999
    OP
    Jun 23, 2020
    39
    @labulaka521 计算机组成原理(第 2 版) 高等教育出版社,唐朔飞编著;计算机组成原理 科学出版社,严云洋编著
    imbushuo
    imbushuo
    Jun 23, 2020 via iPhone
    40
    @1ffree 平心而论对于 Monitoring 来说这个数据很正常,MS 那边的 Geneva Monitoring 数据比这个还要多
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1027 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 139ms · UTC 18:44 · PVG 02:44 · LAX 10:44 · JFK 13:44
    ♥ Do have faith in what you're doing.