• 请不要在回答技术问题时复制粘贴 AI 生成的内容
snappyone
V2EX  ›  程序员

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

  •  
  •   snappyone · May 6, 2019 · 12114 views
    This topic created in 2743 days ago, the information mentioned may be changed or developed.

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

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

    62 replies  •  2019-10-29 16:12:47 +08:00
    taogen
    taogen
    May 6, 2019 via Android❤️4
    1
    现在开始学基础也不会晚。最近也一直在看计算机基础相关圣经。我整理了一个计算机基础书单,可以参考参考 https://github.com/tagnja/resources-of-learning/blob/master/%23cs-foundations.md
    xinyusir
    xinyusir
    May 6, 2019
    2
    同感,现在比较痛苦就是没有大块的时间可以看这些基础了,大块的时间都给了工作,只剩下些碎片时间
    snappyone
    snappyone
    OP
    May 6, 2019
    3
    @xinyusir 是的,而且这块的知识比较硬核
    XiLemon
    XiLemon
    May 6, 2019
    4
    整了一本 CSAPP,目前看到第 3 章,确实难啃。
    CEBBCAT
    CEBBCAT
    May 6, 2019
    5
    我想需要先定义一下基础
    snappyone
    snappyone
    OP
    May 6, 2019
    6
    @CEBBCAT 计算机基础吧,就操作系统、网络那些
    tt67wq
    tt67wq
    May 6, 2019
    7
    看源码是真的难
    rb6221
    rb6221
    May 6, 2019❤️2
    8
    我不是,但是根据我的经验和见过的大佬,基础扎实的话应该是这样的……
    别人解决问题是,能凭经验就凭经验,他会一直凭自己的知识(看懂报错 查文档,而不是直接百度别人的解决办法
    然后,对于不同难度的问题,不管简单还是难的,解决的速度全都是不紧不慢,不会很快但也绝对不慢(跟工作量有关系,但是查出问题解决办法的速度绝对很快)
    zyEros
    zyEros
    May 6, 2019
    9
    啥都能写,只要给时间,啥都能做到超出预期,就这样。
    sinchuan
    sinchuan
    May 6, 2019
    10
    一眼看出问题所在!能做的东西比别人多比别人深!
    dazhangpan
    dazhangpan
    May 6, 2019❤️22
    11
    不了解底层调程序,就像年轻时哄女朋友,你不知道她为什么不高兴,为什么不理你,为什么会突然梨花带雨。尝试吃饭,买礼物,去旅游,都不见得能有效果。都等深入了底层之后,程序就像与你耳鬓厮磨多年的少妇,你拍拍屁股就知道换什么姿势。
    BIAOXYZ
    BIAOXYZ
    May 6, 2019
    12
    @taogen 密码学部分太多了,贵精不贵多。体系结构那里我觉得不能少了 CSAPP 吧。
    snappyone
    snappyone
    OP
    May 6, 2019
    13
    @dazhangpan 哥还是你说的到位
    littiefish
    littiefish
    May 6, 2019 via iPhone
    14
    嗯,百科全书,啥事都来问你
    taogen
    taogen
    May 6, 2019
    15
    @BIAOXYZ 密码学确实有点多,有时间优化一下去掉一些。CSAPP 我放在操作系统类别中了,我看了下目录确实应该放到体系结构那。
    luozic
    luozic
    May 6, 2019 via iPhone
    16
    主要是看出问题的时候,不出问题的时候,猪也在天上飞,一旦出了问题,没基础的最喜欢的就是甩锅。
    crysislinux
    crysislinux
    May 6, 2019 via Android
    17
    感受并不好,有些代码一看就有隐患。为了进度你还是得忍。
    b00tyhunt3r
    b00tyhunt3r
    May 6, 2019 via iPad
    18
    @crysislinux 注释给测试。。
    snappyone
    snappyone
    OP
    May 6, 2019
    19
    @luozic 是不是有一种认知完全不在一个世界的感觉啊
    xuanbg
    xuanbg
    May 6, 2019❤️1
    20
    不要脸地自认“基础扎实”一把。。。感受就是没啥感受啊。。。

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

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

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

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

    修完性能上升 10%
    ryd994
    ryd994
    May 7, 2019 via Android
    29
    说实话我不觉得大多数程序员需要很强的操作系统基础。
    算法强一点是有好处的
    操作系统你会用就可以了,谁闲的蛋疼问你 malloc 分几步,TCP 传输数据分几步
    计算机组成就更用不到了,除非你搞底层。不然你一个 Python 程序员 Java 程序员,程序都在虚拟机里跑呢,机器底层的性能特性你根本无法控制好么
    usingnamespace
    usingnamespace
    May 7, 2019 via iPhone
    30
    @ryd994 不不不 这些玩意是通用的 都是很好的内工 一通百通 当然 这是对于有志于成为顶级程序员来说
    usingnamespace
    usingnamespace
    May 7, 2019 via iPhone
    31
    汇编不需要 c 一定要很熟啊
    ryd994
    ryd994
    May 7, 2019 via Android
    32
    @usingnamespace 既然都在用 Java 了谁还在乎极限性能啊。真那么在乎的会用 C++ 或 C 好么。
    usingnamespace
    usingnamespace
    May 7, 2019 via iPhone
    33
    @ryd994 写一辈子 java ? java 养你一辈子?
    Mithril
    Mithril
    May 7, 2019❤️3
    34
    基本上就是你不管做什么,大概心里都会有个谱。
    - 这个需求能不能做,如果做了哪些部分会成为瓶颈。
    - 做一个公用的库,怎样设计会尽量避免 bug。
    - 遇到 bug,能大概知道问题有可能出在哪些地方,有针对性的去排除。
    实际上计算机应用技术的基本原理已经几十年没有什么发展了,无非是用新的语言又做了一遍。学习这些东西就和学习历史一样,了解的越多你就越会发现,太阳底下没有新鲜事,千百年来人类一直都是一个样子。
    fsafdasfsdafsd
    fsafdasfsdafsd
    May 7, 2019
    35
    @shiji
    求分享
    ryd994
    ryd994
    May 7, 2019 via Android❤️1
    36
    @usingnamespace 你能看看 28 楼么?我就是那个基础扎实的。但我不认为有必要人人如此。
    我虽然不写 Java,但是 Java 养很多人一辈子没什么问题。不说很多后端程序员就是 crud,除了基本的业务逻辑,往上可以搞分布式。而分布式是基本不依赖本地机器性能特性的。
    henryhu
    henryhu
    May 7, 2019
    37
    基础扎实还需要经验丰富
    AngryMagikarp
    AngryMagikarp
    May 7, 2019
    38
    当你遇到一个工作了几年连 HTTP 协议都不懂的人的时候就想骂人。
    geniusmyn
    geniusmyn
    May 7, 2019
    39
    @shiji 求分享
    Tenma
    Tenma
    PRO
    May 7, 2019
    40
    @AngryMagikarp 老哥,我就不是很懂,只知道应用,请求头啊请求体啊啥的。什么三次握手根本就不了解,但是我没有要写网络框架的需求,也没有遇到过有什么场景需要深入了解 http 协议。当然我确实是菜鸡一枚……,但是真的想不到有啥情况需要我深入了解这个协议……
    ChenFanlin
    ChenFanlin
    May 7, 2019
    41
    @shiji #27 不严谨, Math.min(猝死, 60 岁);
    zouzou
    zouzou
    May 7, 2019❤️1
    42
    @ryd994
    基础扎实,操作系统、计算机网络、数据结构有 90/100 分以上。
    基础不扎实,操作系统、计算机网络、数据结构有 60/100 分,刚过及格分,这是对软件开发工程师的基本要求,有必要人人如此。
    没基础,那就是不及格,只会调用 api,面向百度编程。
    linghutf
    linghutf
    May 7, 2019
    43
    身边曾有过这样的人,简直是百科全书似的,解决问题也非常深!
    shiji
    shiji
    May 7, 2019
    44
    @ChenFanlin 有道理

    @fsafdasfsdafsd
    @geniusmyn
    其实我的意思是,很多人(包括我)喜欢收集书单,收集教程,@XX 云笔记,结果光顾着收集,光顾着比较哪本更好,哪本是“圣经”, 到头来根本没认真翻开看过几本。除非家里有矿,可以不上班在家看书学习。。。
    smdbh
    smdbh
    May 7, 2019
    45
    原来是这样
    Mithril
    Mithril
    May 7, 2019❤️1
    46
    @Tenma
    比如说你了解 HTTP 协议在某些情况下每发送一个请求会创建一次 TCP 链接,而 TCP 链接(包括你说的三次握手)会比较消耗资源。
    那么你写业务代码设计 HTTP 接口的时候就会尽量减少调用次数,在高频调用接口上使用 RPC 等其他方法。

    虽说你可以百度或者其他人凭“经验”告诉你要减少 HTTP 接口调用次数,但更可能的是你第一次在这里遇到过性能问题,才会去查找咨询这方面的信息。然而如果基础足够扎实的话,第一次开发和设计接口的时候就可以避免这种问题,可以显著减少开发和 Debug 过程中的试错成本
    ifxo
    ifxo
    May 7, 2019
    47
    做任何事都是程序化的
    Geekgogo
    Geekgogo
    May 7, 2019
    48
    那么,该怎么加强自己的基础呢
    www5070504
    www5070504
    May 7, 2019
    49
    不知道什么算基础扎实 作为一个跨专业(电子专业毕业的)进来的 现在写 python 学了一些操作系统 算法之类的东西 一直在看书 但是还是感觉自己永远基础那么菜。。 很多时候基本上就是调 api 用的东西挺多的 很多东西都没法了解
    www5070504
    www5070504
    May 7, 2019
    50
    btw 基础这个东西真的很扎实有时候也不一定就很厉害了 同事哈工大博士 程序里边也会有一些让人费解的调用和写法 而且一点也不遵循 pep8 的格式
    www5070504
    www5070504
    May 7, 2019
    51
    很羡慕那些能把火箭上每个螺丝都弄的明明白白的人 确实很厉害 估计要钻研很久花很多心思吧
    snappyone
    snappyone
    OP
    May 7, 2019
    52
    @www5070504 确实挺难的,但是一通百通,掌握之后的好处也是巨大的
    lzjamao
    lzjamao
    May 7, 2019
    53
    同感,原理性的知识很重要,这是技术岗位与非技术岗位的核心竞争力。个人觉得应用层的技术会越来越好,使用门槛越来越低。
    whusnoopy
    whusnoopy
    May 7, 2019
    54
    重剑无锋大巧不工
    独孤九剑在手,管你怎么来,我都一样破
    whusnoopy
    whusnoopy
    May 7, 2019
    55
    @www5070504 哈工大博士和基础扎实又不一定必然划等号,也可能有是擅长考试或专注科研发论文的(只是说可能,没有说博士都水)
    xman99
    xman99
    May 7, 2019❤️6
    56
    2019-2020 书单
    语言经典书:

    C:C 程序设计语言( K&R )->C 和指针->C 专家编程->C 陷阱与缺陷->你必须知道的 495 个 C 语言问题

    C++: C++ primer -> effective C++->深度探索 C++对象模型 ->stl 源码分析->C++必知必会

    java:java 编程思想->java 并发编程->深入理解 Java 虚拟机:JVM 高级特性与最佳实践

     

    算法经典书:

    算法导论->数据结构与算法分析(维斯)->编程之美->剑指 offer

     

    系统经典书:

    无关平台:

    深入理解计算机操作系统->编译原理(龙书)->程序员自我修养

    TCP/IP 协议详解 v1

     

    linux:鸟哥的 linux 私房菜->unix 高级环境编程(必看,熟读,完全消化)->unix 网络编程(卷 1&卷 2 )->unix 编程艺术(进阶)->linux shell 脚本攻略(短小精悍)->linux 内核设计与实现->深入理解 linux 内核

     

    windows:windows 核心编程(必看)->深入理解 MFC(经典)->windows 内核情景分析(上下)->寒江独钓 windows 内核安全编程

     

    视野:

    linux 多线程服务端编程

    深入理解 nginx

    深入剖析 nginx

     

    调试:软件调试的艺术(强烈推荐!!)

    设计模式:headfirst 设计模式(强烈推荐!!)
    luozic
    luozic
    May 7, 2019
    57
    @snappyone 哎,會吹牛逼就行,反正大部分都在沒出問題前,都不管到底啥實現。
    funlee
    funlee
    May 7, 2019
    58
    一个转行的前端程序员表示经典的大头书看不懂啊,求指导。
    www5070504
    www5070504
    May 7, 2019
    59
    @whusnoopy 嗯 发完我自己也有点觉得自己说法有些奇怪了 不过在我们这种学渣眼里哈工大的 cs 专业的博士已经是定级选手了。。QAQ
    snappyone
    snappyone
    OP
    May 7, 2019
    60
    @funlee 大头书一般需要看很多遍才行,看不懂的地方还得补补前置知识,反正一言难尽
    CHYK
    CHYK
    May 7, 2019
    61
    😌哎,看到这句话 "试想如果一个程序员基础很扎实,后期在基础上添砖加瓦确实很轻松,而一开始只注重语言和应用的人则被拉开了巨大的差距" ... 真的想说句 too young。仅此。

    但又怕引来太多的争论,甚至口水。这里就引用我听过了的,一位老前辈的话吧: 我刚开始工作的时候,有人再强调基础的重要性,然后我工作了十几年,那个人还在谈基础的重要性。。。

    大部头,这里的学霸,或者亚学霸肯定都啃过几部,然,差距的症结真的在这里么?
    头条的老大(Boss)以前有个演讲说的很不错,了解一下。

    您看过的龙书,有人让您去写编译器么?您设计了 X 脚本语言,领域语言(DSL)有人用么?练那么久的 C++,甚至写了一个自己非常自豪的 X 引擎,您给别人团队用,别人敢用么?

    那么多外行转过来做前端,《 HTTP 权威指南》听都没听说过,甚至跟科班一样的薪酬,还不明白么?

    。。。enough

    :) 开心就好。开心最重要了。
    EthanV2
    EthanV2
    Oct 29, 2019
    62
    @CHYK 试想把编程作为一门艺术 是不是应该不给自己有天花板的机会,如果按赚钱来讲,弄不弄基础就在于你公司的技术栈需不需要自己开发框架,如果不是按赚钱来讲,搞艺术的就肯定想自己能做出拿得手的东西。现实固然残酷,但是如果没有理想那和咸鱼又有什么区别,当然每个人都有自己想法。咸不咸鱼都是自己想要的,学不学底层原理如果只是想了解 那就去了解好了,如果是想要自己写框架,提高性能,自己造轮子,那底层基础是必不可少的。如果只是谈业务逻辑,和实现业务逻辑,也不用考虑性能,那何必去操那份心呢。走好自己心里想要的那条路便好
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   703 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 98ms · UTC 18:00 · PVG 02:00 · LAX 10:00 · JFK 13:00
    ♥ Do have faith in what you're doing.