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

2021-02-22 21:13:22 +08:00
 zzzzeno

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

名词引起误会很抱歉。
zzzzeno
2021-02-23 14:12:01 +08:00
@wzb0909 明白了,感谢!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/755239

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX