首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  程序员

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

  •  
  •   snappyone · 105 天前 · 7443 次点击
    这是一个创建于 105 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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

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

    虽说你可以百度或者其他人凭“经验”告诉你要减少 HTTP 接口调用次数,但更可能的是你第一次在这里遇到过性能问题,才会去查找咨询这方面的信息。然而如果基础足够扎实的话,第一次开发和设计接口的时候就可以避免这种问题,可以显著减少开发和 Debug 过程中的试错成本
        47
    ifxo   104 天前
    做任何事都是程序化的
        48
    Geekgogo   104 天前
    那么,该怎么加强自己的基础呢
        49
    www5070504   104 天前
    不知道什么算基础扎实 作为一个跨专业(电子专业毕业的)进来的 现在写 python 学了一些操作系统 算法之类的东西 一直在看书 但是还是感觉自己永远基础那么菜。。 很多时候基本上就是调 api 用的东西挺多的 很多东西都没法了解
        50
    www5070504   104 天前
    btw 基础这个东西真的很扎实有时候也不一定就很厉害了 同事哈工大博士 程序里边也会有一些让人费解的调用和写法 而且一点也不遵循 pep8 的格式
        51
    www5070504   104 天前
    很羡慕那些能把火箭上每个螺丝都弄的明明白白的人 确实很厉害 估计要钻研很久花很多心思吧
        52
    snappyone   104 天前
    @www5070504 确实挺难的,但是一通百通,掌握之后的好处也是巨大的
        53
    lzjamao   104 天前
    同感,原理性的知识很重要,这是技术岗位与非技术岗位的核心竞争力。个人觉得应用层的技术会越来越好,使用门槛越来越低。
        54
    whusnoopy   104 天前
    重剑无锋大巧不工
    独孤九剑在手,管你怎么来,我都一样破
        55
    whusnoopy   104 天前
    @www5070504 哈工大博士和基础扎实又不一定必然划等号,也可能有是擅长考试或专注科研发论文的(只是说可能,没有说博士都水)
        56
    xman99   104 天前   ♥ 6
    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 设计模式(强烈推荐!!)
        57
    luozic   104 天前
    @snappyone 哎,會吹牛逼就行,反正大部分都在沒出問題前,都不管到底啥實現。
        58
    funlee   104 天前
    一个转行的前端程序员表示经典的大头书看不懂啊,求指导。
        59
    www5070504   104 天前
    @whusnoopy 嗯 发完我自己也有点觉得自己说法有些奇怪了 不过在我们这种学渣眼里哈工大的 cs 专业的博士已经是定级选手了。。QAQ
        60
    snappyone   104 天前
    @funlee 大头书一般需要看很多遍才行,看不懂的地方还得补补前置知识,反正一言难尽
        61
    CHYK   104 天前
    😌哎,看到这句话 "试想如果一个程序员基础很扎实,后期在基础上添砖加瓦确实很轻松,而一开始只注重语言和应用的人则被拉开了巨大的差距" ... 真的想说句 too young。仅此。

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

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

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

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

    。。。enough

    :) 开心就好。开心最重要了。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   916 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 28ms · UTC 19:19 · PVG 03:19 · LAX 12:19 · JFK 15:19
    ♥ Do have faith in what you're doing.