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

如何看待数理和计算机基础对程序员的作用?

  •  
  •   jiangwenjie · 2020-05-29 10:00:52 +08:00 · 4027 次点击
    这是一个创建于 1639 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1. 《离散数学》《高等数学》《概率论与数理统计》《线性代数》
    2. 《数据结构》《算法》《计算机网络》《操作系统》
    3. 《深入理解计算机系统》一书中的知识

    注 1:请从业务程序员、技术架构师、软件相关研究人员的方向出发分别讨论,也请标注出每门科目需要掌握、熟悉、了解的章节或模块,因为每一门科目都极其庞大,值得人一生研究。

    注 2:有此问题是因为在做《深入理解计算机系统》的 data-lab 时第一题就需要用离散推导,题目为在 32 位系统上使用 C 语言,使用~和&实现补码^操作,且不能使用控制语句(如 if,case 等)

    32 条回复    2020-05-30 10:30:10 +08:00
    HashV2
        1
    HashV2  
       2020-05-29 10:21:19 +08:00
    工作一年了,觉得自己网络这块确实差劲,这周才买了计算机网络 刚看到第二章应用层,感觉看这种书对技术的帮助没有那么立竿见影,但是对于架构会有一个比较清晰的认识,在学习相关技术的时候更容易理解和吸收
    ps: 之前我网络 7 层架构是啥都背不出来,各位见笑了 23333
    ipwx
        2
    ipwx  
       2020-05-29 10:24:22 +08:00
    我怎么觉得你说的深入理解计算机系统那坨推导是高中数学。。。

    离散的话,国内本科的离散数学就是个大杂烩,有高中数学部分(组合、逻辑)、有群论入门,有些还有图论。你计算机很多东西用到高中数学,那确实避不开。其他的数学,如果你只是搬砖,估计用不到多少。。。
    ipwx
        3
    ipwx  
       2020-05-29 10:28:03 +08:00
    顺便你列的几个,只是会用,本科学两年就够了,用不着一生去研究。
    neptuno
        4
    neptuno  
       2020-05-29 10:29:03 +08:00
    感觉大学里就是给你个影响,,让你以后工作了遇到问题能清楚知道自己是哪块知识不懂,然后可以精准的弥补这一块知识
    kiracyan
        5
    kiracyan  
       2020-05-29 10:33:14 +08:00
    就想工具书一样 你可能不用精通 但是你要浏览一遍 知道一些知识点在哪 用到的时候再去查
    zealot0630
        6
    zealot0630  
       2020-05-29 10:52:56 +08:00 via Android   ❤️ 1
    这些东西决定了你会不会 35 岁失业
    zhaorunze
        7
    zhaorunze  
       2020-05-29 11:40:42 +08:00
    工作两年,发现思想和算法才是程序的灵魂,语言只是骨架。
    enjoyCoding
        8
    enjoyCoding  
       2020-05-29 11:50:59 +08:00
    业务程序员?: API caller,熟悉公司业务就可吧
    Jooooooooo
        9
    Jooooooooo  
       2020-05-29 12:26:59 +08:00   ❤️ 4
    没啥用, 建议大家都别学
    hoyixi
        10
    hoyixi  
       2020-05-29 12:38:22 +08:00
    没啥用,你的公司只关心你能不能加班
    wangyzj
        11
    wangyzj  
       2020-05-29 13:02:23 +08:00
    不说机器学习相关职业
    数学作为工具主要是 cs 底层设计的理论基础
    数据结构这些是基于这些理论的经验实现
    计算机系统是这些经验实现的最终产物,当然不是只有这些

    只是写写代码,这些可以说都不需要
    要是想不断深究,就都必不可少
    不过我觉得到数据结构基本也就差不多了
    index90
        12
    index90  
       2020-05-29 13:21:46 +08:00   ❤️ 1
    没有这些知识,你连论文都看不懂,更别说实现了。

    你以为那些二维码 lib 天生就存在的吗?还不是人写的,为什么那个人不可以是你自己?
    Yoock
        13
    Yoock  
       2020-05-29 13:25:09 +08:00 via iPhone
    这些才是里子,写业务逻辑可替代性太高
    ddoocc
        14
    ddoocc  
       2020-05-29 13:48:12 +08:00
    第一行:线性代数是大部分理工科最重要的数学课程。不过怎么说呢,需要这些知识的岗位太少,会的人少,但是比需要的多。
    第二行:合格的程序员都应该会写玩具级别的操作系统。
    第三行:合格的程序员至少应该有所了解,知道问题出现时优化的方向。
    PS: 那个 data-lab 我也做过,用数电画卡诺图的方法也可以做。
    jiangwenjie
        15
    jiangwenjie  
    OP
       2020-05-29 13:49:42 +08:00
    @ipwx 会用是个很模糊的概念,而本科课程往往是阉割版的,并不足以窥探学科的全貌,比如对数据结构-树而言,是考试 60 分就算会用?还是能熟练使用高级语言 api 就算会用?还是能在遇到一个问题时能想到这种数据结构,并全面了解它的结构及变种,确定它是最优解?还是能手写二叉树?更甚一步是能和图进行知识图谱搭建?
    wizardoz
        16
    wizardoz  
       2020-05-29 13:51:27 +08:00
    有些东西是具有一定的相关性,但是未必是因果关系。
    as94boy
        17
    as94boy  
       2020-05-29 13:54:25 +08:00
    感觉颜色需要调一下,一片红给人感觉是出 bug 了。
    SKcoder
        18
    SKcoder  
       2020-05-29 13:54:28 +08:00
    简单来说,数学决定了你的工作量,是用十行代码完成还是 100 行代码完成一个功能。
    低层的知识决定了你程序的稳定性,并且当性能指标出现异常时能迅速定位。
    结合起来,就可以快速写出即稳定右高效的程序,对于整个架构也会有更加清晰的认识。

    个人愚见
    as94boy
        19
    as94boy  
       2020-05-29 13:55:04 +08:00
    @as94boy 抱歉,回复错了。
    chengkai1853
        20
    chengkai1853  
       2020-05-29 13:58:34 +08:00
    @index90 这么厉害,膜拜啊
    nicebird
        21
    nicebird  
       2020-05-29 17:00:30 +08:00
    业务程序员、技术架构师,1 用处都不大,上过就行了。2 、3,用的比较多,尤其是架构时,必须从顶向下全盘考虑。
    kop1989
        22
    kop1989  
       2020-05-29 17:07:26 +08:00
    程序员编程是“软件工程”,是工程学范畴,讲究最优性价比。
    数学用的比较广泛的是“计算机科学”,是理科范畴。

    这是完全两个方向。虽然都有“计算机”。
    secondwtq
        23
    secondwtq  
       2020-05-29 19:11:43 +08:00
    转个笑话 ...
    https://news.ycombinator.com/item?id=14191577
    第一个回复
    CODEWEA
        24
    CODEWEA  
       2020-05-29 19:15:02 +08:00
    程序员开发产品是非常考验综合素质的,上面仅仅是开始认识计算机方面的书籍。
    zjsxwc
        25
    zjsxwc  
       2020-05-29 20:17:08 +08:00 via Android
    离散数学倒是计算机的基础,布尔代数、树、图、有限状态机这些都是离散数学的东西,可以说在计算机里简直无处不在程序员天天接触,其他微积分、概率论什么的倒是很少用到。
    zjsxwc
        26
    zjsxwc  
       2020-05-29 20:25:18 +08:00 via Android
    微积分真的很少很少用到,而工程上复杂微积分问题,又可以通过复变函数中拉氏变换、Z 变换、傅里叶变化这些简化为线性代数问题,所以把线代学了就好了,虽然 crud 程序员也基本没机会用到线代,汗
    zjsxwc
        27
    zjsxwc  
       2020-05-29 20:28:15 +08:00 via Android
    请 v 站大佬介绍下哪里要用 概率论?
    Mithril
        28
    Mithril  
       2020-05-29 20:30:24 +08:00
    @zjsxwc 写个摇号程序年会抢红包
    nicevar
        29
    nicevar  
       2020-05-29 20:35:37 +08:00
    @zjsxwc 足彩数据分析
    Mithril
        30
    Mithril  
       2020-05-29 20:39:48 +08:00
    其实这些基础课程所学的具体知识你可能期末考完以后这辈子都用不到了,但是学到的理念和思想会终身受用。
    就说概率论,最简单的学过都知道小概率事件并非不可能事件。那为什么还有人要用哈希做数据库主键呢?哪怕是 SHA256,发生碰撞概率极小,但并非不可能的。
    再比如说你操作系统学过 IO 就不会做出开多线程写硬盘这种匪夷所思的事。
    只是有些东西你不会特意去考虑什么时候学的,具体的技能也很少被用到,并不代表它对你真的一点影响也没有。
    Nerv
        31
    Nerv  
       2020-05-30 07:23:40 +08:00
    data-lab 的题目我是靠直觉和一步步推导完成的。(然而卡在 ”logicalNeg“之后就鸽了俩月还没做)。原来这种问题可以有专门的数学方法来解决,受教了🎈。
    nightwitch
        32
    nightwitch  
       2020-05-30 10:30:10 +08:00
    线性代数和概率论是最常用的, 因为涉及到数值计算的工作每天都在打交道. 高数反而用的比较少, 因为教科书上那种干净的解析解在现实里是不存在的.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1022 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 23:15 · PVG 07:15 · LAX 15:15 · JFK 18:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.