做一个基础很扎实的程序员是一种什么感受啊

2019-05-06 12:14:13 +08:00
 snappyone

想到这个话题是因为最近在看 linux 操作系统内核以及 mysql 的一些源码,突然感慨大学时候的一些基础课程的重要性以及底层原理的重要性,譬如我现在去看汇编都看不懂,c 语言也忘光了。

试想如果一个程序员基础很扎实,后期在基础上添砖加瓦确实很轻松,而一开始只注重语言和应用的人则被拉开了巨大的差距

10451 次点击
所在节点    程序员
62 条回复
dazhangpan
2019-05-06 22:00:17 +08:00
另外说一点题外话,这个“基础扎实”表现于你的软件就是两点:
1.稳定
这种稳定不是靠 UT 和覆盖率堆出来的稳定,而是在你练达晓畅之后自生出的一种气质
2.高性能
逻辑上这个很好解释,就是你明白硬件和操作系统的细节和机制,所以你能充分加以利用,所以你的软件有很高的性能
然而这个逻辑是彻头彻尾的错误
因为所有能去深入到底层细节的程序员,并不是因为他们天生喜欢底层的那些细节,而是他们首先有对高性能的渴望,这是一种焦渴难耐的贪婪,是一种如芒在背的占有;这对对他们来说,是一种 SM 般的快感
所以如果你并不渴望这种快感,真没必要搞什么基础研究,但是如果你有这种渴望,那就不要压抑自己的天性
chengpohi
2019-05-07 00:14:01 +08:00
随手写个 parser ୧( ⁼̴̶̤̀ω⁼̴̶̤́ )૭加个鸡腿
fsafdasfsdafsd
2019-05-07 00:19:22 +08:00
基础 内功
技术 招式。
zndbly
2019-05-07 00:19:35 +08:00
懂底层的人应该会有胸有成竹的感觉把
MonoLogueChi
2019-05-07 00:24:29 +08:00
认识一个数学出身的老哥,空间变换每次我都要想半天,他拿起来直接就撸,撸完了我还看不懂,现在有需求直接找他给写个类库就可以了
MonoLogueChi
2019-05-07 00:28:02 +08:00
@dazhangpan 我基础并不好,但是我希望写出来的东西性能更好,所以经常研究这方面的东西,现在一看别人的东西有点卡,有的时候不看源码都能猜出来哪里有问题了,看着别人写出来的东西性能差,自己心里难受
shiji
2019-05-07 00:36:45 +08:00
我整理了一个计算机书单
保证能看到 60 岁。。。
加上后来新的技术。。
保证能看到死。。。。
ryd994
2019-05-07 01:28:14 +08:00
怎么才叫扎实呢?人外有人天外有天
我搞过 Linux 内核,现在在搞虚拟化网络驱动
在同届里算是基础最扎实的了

@dazhangpan 调底层程序更惨。因为驱动、内核都是讲求简单高效。逻辑很简单,但没人帮你管理内存。问题主要是性能和内存访问错误。你永远不知道她是否在生气,为什么生气,以及什么时候炸了,为什么炸了。

Windows 内核还稍微好点,有 kd,Linux 内核的 kd 基本不可用,只能靠 print。

然后隔壁六十多的老工程师过来一看,你们这个 struct 顺序不对啊,会 cache thrashing 的。

修完性能上升 10%
ryd994
2019-05-07 01:31:27 +08:00
说实话我不觉得大多数程序员需要很强的操作系统基础。
算法强一点是有好处的
操作系统你会用就可以了,谁闲的蛋疼问你 malloc 分几步,TCP 传输数据分几步
计算机组成就更用不到了,除非你搞底层。不然你一个 Python 程序员 Java 程序员,程序都在虚拟机里跑呢,机器底层的性能特性你根本无法控制好么
usingnamespace
2019-05-07 01:41:17 +08:00
@ryd994 不不不 这些玩意是通用的 都是很好的内工 一通百通 当然 这是对于有志于成为顶级程序员来说
usingnamespace
2019-05-07 01:41:53 +08:00
汇编不需要 c 一定要很熟啊
ryd994
2019-05-07 01:47:18 +08:00
@usingnamespace 既然都在用 Java 了谁还在乎极限性能啊。真那么在乎的会用 C++ 或 C 好么。
usingnamespace
2019-05-07 01:54:15 +08:00
@ryd994 写一辈子 java ? java 养你一辈子?
Mithril
2019-05-07 03:09:14 +08:00
基本上就是你不管做什么,大概心里都会有个谱。
- 这个需求能不能做,如果做了哪些部分会成为瓶颈。
- 做一个公用的库,怎样设计会尽量避免 bug。
- 遇到 bug,能大概知道问题有可能出在哪些地方,有针对性的去排除。
实际上计算机应用技术的基本原理已经几十年没有什么发展了,无非是用新的语言又做了一遍。学习这些东西就和学习历史一样,了解的越多你就越会发现,太阳底下没有新鲜事,千百年来人类一直都是一个样子。
fsafdasfsdafsd
2019-05-07 03:16:51 +08:00
@shiji
求分享
ryd994
2019-05-07 04:14:00 +08:00
@usingnamespace 你能看看 28 楼么?我就是那个基础扎实的。但我不认为有必要人人如此。
我虽然不写 Java,但是 Java 养很多人一辈子没什么问题。不说很多后端程序员就是 crud,除了基本的业务逻辑,往上可以搞分布式。而分布式是基本不依赖本地机器性能特性的。
henryhu
2019-05-07 08:35:12 +08:00
基础扎实还需要经验丰富
AngryMagikarp
2019-05-07 09:27:11 +08:00
当你遇到一个工作了几年连 HTTP 协议都不懂的人的时候就想骂人。
geniusmyn
2019-05-07 09:35:11 +08:00
@shiji 求分享
Tenma
2019-05-07 09:45:13 +08:00
@AngryMagikarp 老哥,我就不是很懂,只知道应用,请求头啊请求体啊啥的。什么三次握手根本就不了解,但是我没有要写网络框架的需求,也没有遇到过有什么场景需要深入了解 http 协议。当然我确实是菜鸡一枚……,但是真的想不到有啥情况需要我深入了解这个协议……

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

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

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

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

© 2021 V2EX