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

如果不是为了应付面试,对于技术我们真的有必要深入底层的去研究吗?

  •  
  •   zzzzeno · 2021-02-22 21:13:22 +08:00 · 3306 次点击
    这是一个创建于 1400 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题是 lz 这几天在深入学习 Golang 时产生的困惑

    毕竟时间总是有限的,除了需要工作,剩下的时间还得健身、学英语、学别的学科(例如经济学、理财)、敲一些自己的代码(自己的项目或者给开源项目贡献)、以及最重要的各种形式的娱乐等等等等(如果 996 这些就都不用考虑了

    举个例子比如说这里,我们知道 Go 里被 defer 的函数的参数会被预先计算好,原因是调用 runtime.deferproc 函数创建新的延迟调用时就会立刻拷贝函数的参数,函数的参数不会等到真正执行时计算。但我其实不用学习底层原理,仅仅知道这个 tip 就够用了,甚至即使我不知道,发现问题的时候当场 Google 就行了。

    那么学习底层原理的作用在哪,知其所以然真的有必要吗...把学习的时间花在纵向上是不是不如花在横向上,去掌握更多的技术栈(例如去学习一些前端的知识或者分布式、k8s 这种自己没有接触过的新玩意)

    29 条回复    2021-02-24 08:19:45 +08:00
    hxndg
        1
    hxndg  
       2021-02-22 21:24:24 +08:00   ❤️ 2
    以我个人的例子而言,如果只做 CRUD boy,确实不怎么需要,但是会给你修复 BUG 和解决问题带来很多问题。
    比方说,知道 TLS 和公钥密码学,不深入研究就能够提供在应用时的单向加密功能,但是如果设计 TLS 自动机的时候就会出现知识储备不足的问题导致安全性设计不到位(尤其是设计私有协议栈)
    再比方说,X86 是 TSO 体系,线程同步没有什么大的问题。但是代码迁移到 ARM 上出现一堆多线程问题怎么办?怎么做用户态的优化等东西的时候,就需要了解底层知识了。

    但是这不代表就不需要了解其他方面的知识,深刻和广播,都不可或缺
    a62527776a
        2
    a62527776a  
       2021-02-22 21:29:23 +08:00 via iPhone   ❤️ 1
    我感觉 学原理 学底层 有一部分原因是以史为鉴的因素 至少可以在遇到一个场景时 能从曾经所学中获得一些参考
    wzb0909
        3
    wzb0909  
       2021-02-22 22:19:00 +08:00
    呃,我认为基础知识,看课本上的就好了。

    初学就看初级书。初学看高级书只会让你输在起跑线。
    看书挑作者,不要随便是个人写的书就看。你的时间很宝贵。

    然后,底层当然要学,但是「要不要学」这个问题的答案,一定是不要。你要学的时候,你一定是明确知道自己要学的。
    有些事情不能急,时候没到,学了也白学。时候到了,你再怎么不情愿,自己就会去学。

    你要是觉得学了没有,你应该相信你的感觉。

    (哎完了我怎么总是这种语气,,,,
    IsaacYoung
        4
    IsaacYoung  
       2021-02-22 22:36:09 +08:00   ❤️ 1
    书到用时方恨少
    ggbdpq
        5
    ggbdpq  
       2021-02-22 22:41:31 +08:00 via Android
    老板用枪指着你去学,你就去学吧。
    新华字典那么多中文汉字,你可能就学会了几千个常用的。
    牛津词典那么多英文单词,你可能也就学了上万个。
    不然,你合理享受所剩时间的丰富安排吧。
    love
        6
    love  
       2021-02-22 22:45:33 +08:00   ❤️ 1
    没必要,大致知道些原理就行,细节不是做这方面的就别去扣了浪费时间
    底层又!=高级,反而上层编程模式更考验经验和能力
    night98
        7
    night98  
       2021-02-22 23:03:34 +08:00 via Android   ❤️ 1
    没必要,否则按照这个逻辑学习编程应该先从电路学起,现阶段所谓研究底层除非你是在企业基础架构部门,否则没有任何必要,面试问这些只是内卷的体现,和金融业差不多。在我看来编程的艺术就在于封装,不可见的内部细节和可预期的输出构建成的软件世界是一种美好
    RedBeanIce
        8
    RedBeanIce  
       2021-02-23 01:15:43 +08:00
    造轮子和 CRUD Boy 是两种人。也是两种思想。
    Claar
        9
    Claar  
       2021-02-23 01:37:19 +08:00 via iPhone   ❤️ 1
    这就跟要不要继续读书进行学术研究一样,很多东西如果你不想去面对的话是不需要面对的,我认为学习底层的目标是自己能够实现。哪怕部分底层 bug 无法解决也不是个人问题,就像你一个敲代码的无法直接替代财务一样:各有分工,你只要能做到自己需要做的部分就够了,能胜任工作就可以了。现在人人都说要懂点底层知识主要是卷
    ipwx
        10
    ipwx  
       2021-02-23 01:41:03 +08:00   ❤️ 1
    如果想做这么多事情,谁都做不完。我这么多年的人生经验就是,动手前先规划,尽可能一件事达成两个以上的目标。很简单,小学就学过的统筹思想,华罗庚它老人家的,可是越大越难以身体力行啊。

    举个例子,你说又想写代码又想学经济学,为啥不做量化。。。无论是全职量化系统开发,或者业余(开源项目)的量化算法研究,你这相当于一件事达成了两个目标。。。
    gouflv
        11
    gouflv  
       2021-02-23 01:47:16 +08:00 via iPhone
    老师常说,学习为了自己。应试应该看作是学习的结果之一
    l00t
        12
    l00t  
       2021-02-23 08:42:46 +08:00
    需要接触到什么层次主要取决于在哪一层干活,一般比干活的那层稍微往下一层就够用了。再深没必要。
    waiaan
        13
    waiaan  
       2021-02-23 09:19:25 +08:00
    当你要学的时候,你会知道的。
    zw1one
        14
    zw1one  
       2021-02-23 10:23:38 +08:00   ❤️ 1
    如果学这些知识对面试和当前工作无用的话,我确实是不会去学的,都是有必要才应试性的去学。
    本来每天上班做在电脑前,就开始肩痛腰痛脖子痛了。有这个时间,多锻炼身体,做做饭,和朋友出去走走,收拾一下自己找个女朋友,有女朋友的多陪陪女朋友,它不香么。
    zzzzeno
        15
    zzzzeno  
    OP
       2021-02-23 11:50:19 +08:00
    zzzzeno
        16
    zzzzeno  
    OP
       2021-02-23 11:54:47 +08:00
    @ipwx 「一件事达成两个目标」和做量化提供了很有意思的思路,感谢!
    zzzzeno
        17
    zzzzeno  
    OP
       2021-02-23 11:56:36 +08:00
    @zw1one 真实..想学的东西不少但周末可能还是陪女朋友玩去了...
    zzzzeno
        18
    zzzzeno  
    OP
       2021-02-23 12:23:12 +08:00
    @wzb0909
    感谢您的建议但是我想本帖并没有在讨论「初学」和「基础知识」

    不知道您说的「课本」和「初级书」是指什么样的书呢,国内大学的课本我能想到的就只有诸如谭浩强老师的著作以及各大学自研的由各种国内知名教授挂名实则是研究生写出的著作这样的书

    我想我并没有「随便是个人写的书就看」,这本 [Go 语言设计与实现]( https://draveness.me/golang/) 是 Draveness 大佬这两年最新完成的正准备出版的作品,比之前我看过的一些 Go 的经典书籍都更深入底层,我个人认为这本书是目前能找到的最好的 Golang 源码实现的中文著作

    抱歉没有冒犯您的意思我只是想为我看的这本书辩解一下哈哈
    wzb0909
        19
    wzb0909  
       2021-02-23 14:04:45 +08:00
    @zzzzeno 呃。

    我(之前就简单)查了作者的资料(,听你说完又确认了一次)。他可能是个合格的软件工程师,但作为书籍作者,在我还是归入「是个人」这个分类。

    我(之前就认真)看了你链接的「书」。我并不是「大佬」,所以我不想去仔细评价这本「书」哪里不好。简单说,就是没有重点,堆砌内容,不知其所以然,自言自语心中完全没有读者。

    「课本」就是指《计算机程序的构造和解释》之类的书。
    「初级书」举一个例子比如 Stroustrup 的《 The C++ Programming Language 》。
    「高级书」,比如《 Java 编程思想》?

    名词引起误会很抱歉。
    zzzzeno
        20
    zzzzeno  
    OP
       2021-02-23 14:12:01 +08:00
    @wzb0909 明白了,感谢!
    wzb0909
        21
    wzb0909  
       2021-02-23 14:28:48 +08:00   ❤️ 1
    @zzzzeno 啊哈,说到量化交易我多 bb 几句。量化交易只有高频交易对 IT 有要求,但是高频交易又和经济学非常无关。所以,之前的朋友的推理连不起来。。。。
    tiedan
        22
    tiedan  
       2021-02-23 14:34:41 +08:00
    其实也有些必要
    hzz2
        23
    hzz2  
       2021-02-23 14:37:27 +08:00 via Android
    有必要 只是大部分时候发现不了解这些也能做出来产品 然后就。。。。。。
    agagega
        24
    agagega  
       2021-02-23 14:39:56 +08:00 via iPhone   ❤️ 1
    首先不考虑个人兴趣这类因素。考虑一下,你在家里需要知道热水器和电视机怎么修吗?不需要,因为出问题了找人就行。但这不代表你一点基本的安全知识都不用了解。

    计算机也是一样,你几乎不用太考虑 CPU 的 bug 这种问题,因为离你隔了太多层。但离你越近的层,对你而言抽象泄漏的概率就越大,如果一点知识体系都没有,出了问题会非常麻烦。举例子的话,就是 React 程序员一点 DOM 知识都没有,你想想也难受是不是...
    asanelder
        25
    asanelder  
       2021-02-23 17:35:19 +08:00
    总是浮在表面, 时间长了你不觉得无聊么?
    你不好奇原理么?
    你就不想知道是什么实现的?
    你就不想知道那些是不明觉厉还是明觉不厉?
    你就不想知道那些人是真厉害还是在装 B 造各种名词?
    xjbeta
        26
    xjbeta  
       2021-02-23 23:20:46 +08:00 via Android
    之前研究了一下 libass 一到性能优化就捉急了
    然后看了这么一篇 dalao 的文章
    xjbeta
        27
    xjbeta  
       2021-02-23 23:20:59 +08:00 via Android
    learningman
        28
    learningman  
       2021-02-24 01:09:57 +08:00 via Android
    @night98 计算机科班本来就要学数字电路啊。。。然后汇编
    rodrick
        29
    rodrick  
       2021-02-24 08:19:45 +08:00   ❤️ 1
    1. 为了面试
    2. 为了装逼
    3. 为了在需要用到的场景不需要临时查资料
    4. 好奇

    适度看看就好,不要深究,不然真的学不过来
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2847 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 14:37 · PVG 22:37 · LAX 06:37 · JFK 09:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.