问题

程序员不需要知道太多数学,你认同吗?

回答
这个问题很有意思,也很值得探讨。我个人不太认同“程序员不需要知道太多数学”这个说法,尽管这句话里确实包含了一些事实的成分。 让我来详细说说我的看法。

首先,我们得明确一下“多数学”到底指什么。如果指的是高等数学中的复变函数、微分几何、拓扑学这些非常高深的领域,那么绝大多数普通的应用型程序员,确实不太会直接用到它们。在日常的开发工作中,我们更多的是和基础的代数、逻辑、概率论、离散数学打交道。

但是,即便是这些基础数学,“不需要知道”也未免有些绝对了。

为什么说程序员“需要”数学,即使是基础的数学?

1. 算法和数据结构是基石: 几乎所有的软件开发,都离不开算法和数据结构。比如,你要写一个排序算法,你需要理解它背后的时间复杂度和空间复杂度,这涉及到对数学符号(O, Ω, Θ)的理解,以及对数列、求和、甚至一些简单的证明的掌握。如果你要设计一个高效的搜索算法,比如二分查找,它的核心逻辑就是基于有序数组的数学特性。链表、树、图这些数据结构的设计和操作,也都离不开对集合论、图论的直观理解。没有一点数学基础,光靠死记硬背,很难真正理解这些东西的原理,也更难在遇到问题时进行优化或创新。

2. 逻辑思维和问题分解: 编程本质上是解决问题的过程,而数学,尤其是逻辑学,就是训练我们严谨、清晰地思考问题、分析问题、分解问题的绝佳工具。程序员需要将一个大问题分解成一系列小的、可执行的步骤,这和数学证明的思路非常相似。每一步都需要清晰的逻辑推导,确保结果的正确性。缺乏逻辑训练,代码很容易出现难以察觉的bug,或者写出难以维护的“意大利面条式”代码。

3. 性能优化和效率考量: 当你的程序需要处理海量数据,或者对响应速度有极高要求时,数学就显得尤为重要了。比如,在进行性能瓶颈分析时,你需要理解对数、指数增长的含义,才能判断出是算法效率问题还是其他原因。在涉及概率、统计的场景,比如机器学习、数据挖掘、甚至一些游戏的随机数生成,数学知识是必不可少的。即使是简单的缓存策略,也可能涉及到一些排队论或概率模型的简化应用。

4. 理解和选择合适的工具: 很多编程库和框架底层都封装了复杂的数学算法。如果你想深入理解它们的工作原理,或者在它们的基础上进行扩展和优化,一点数学背景能让你事半功倍。例如,图形学开发者需要理解线性代数中的矩阵运算来实现3D变换;通信领域的工程师需要理解傅里叶变换来处理信号;金融领域的程序员则需要掌握微积分、概率统计来建模和交易。即使不直接写这些算法,理解其原理也能帮助你更好地选择和使用这些工具。

5. 学习新领域和技术: 编程领域发展日新月异,很多新兴技术都建立在数学研究的基础上。如果你只满足于眼前的技术栈,很快就会被淘汰。而拥有一定的数学基础,能让你更快地理解和掌握新的概念和技术,无论是AI、区块链、量子计算,还是更底层的操作系统、编译器原理,都离不开数学的支撑。

那么,是不是所有程序员都要成为数学家?

当然不是。正如我前面提到的,大多数程序员并不需要掌握非常高深的数学理论。关键在于 “理解”和“应用” 的程度。

Web前端开发者: 可能更多地需要理解一些基础的几何概念来做页面布局,以及一些简单的数学函数来做动画效果。
游戏开发者: 需要扎实的线性代数、三角学,甚至可能需要物理学相关的数学知识来模拟运动和碰撞。
数据科学家/机器学习工程师: 需要非常强的线性代数、微积分、概率论、统计学基础,以及优化理论。
后端工程师: 可能需要理解一些数据库索引的效率问题(跟离散数学、图论有点关系),网络通信的协议设计(可能涉及一些通信理论的数学基础),以及高并发处理的数学模型。

所以,我更倾向于认为:

“程序员需要 一定程度的数学知识,尤其是在逻辑思维、算法基础和问题分析方面,这些是成为一名优秀且能应对复杂挑战的程序员的重要支撑。”

“多数学”是一个模糊的概念,如果我们把“多数学”理解为“非常深入、专业化的高等数学”,那么确实不是所有程序员都必须掌握。但如果把“多数学”理解为“泛指大部分数学分支,包括了基础的逻辑、代数、离散数学、概率论等”,那么我的看法是,了解和掌握其中一部分核心内容,对绝大多数程序员来说都是有益无害,甚至可以说是必要的。

就像一个厨师,他不需要成为化学家,但他至少需要了解不同食材的物理和化学性质,才能做出美味的菜肴。程序员也一样,理解代码背后的数学原理,才能写出更健壮、更高效、更优雅的程序。

总而言之,并非所有程序员都需要成为数学家,但拥抱并学习一定的数学知识,绝对能让你在编程这条路上走得更远、更稳健。将数学视为一种工具和思维方式,而不是一种负担,或许是更恰当的态度。

网友意见

user avatar

我写条件判断的时候会用到卡诺图来化简逻辑。

虽说很多时候拍脑袋就能分析出来,再不济就遍历所有的状态来判断有没有漏掉。

但是用数学工具分析出来的结果总是让人安心一些。

你要说卡诺图我不会也照样能写出来。

诚然。

但是我 bug 就是比你少。


==== update ===

有人问我卡诺图要怎么对应到代码中,举个例子。

比如在一个物理机和虚拟机混合组网的云平台中,其中为了快速部署项目,我们提前创建好了一批空的虚拟机作为资源池待命,资源池的虚拟机由程序自动调度。

现在我们收到了一个服务器告警,这个告警是否需要发出去,有以下告警策略:

  • 这个服务器如果是物理机,则在以下情况告警:
    • 不在维护期;
    • 在维护期内,但是设置了接收告警;
  • 这个服务器如果是虚拟机:
    • 如果虚拟机不在资源池中,则在以下情况告警:
      • 不在维护期;
      • 在维护期内,但是设置了接收告警;
    • 如果虚拟机在资源池中,但是设置了接收告警,同样需要告警出来;

初步分析,告警策略和以下4个条件有关:

  • A:服务器类型(是否是物理机);
  • B:服务器是否在维护期;
  • C:服务器是否设置了接收告警;
  • D:服务器是否在资源池中;

维护期表示服务器在正常运行,但是管理员在上面进行一些敏感操作(部署或升级),可能会导致告警的产生,这种时期的告警会被当成正常现象处理。

我们用Y表示Y条件成立的情况,!Y表示Y条件不成立情况,灰色区域代表是否告警(1为告警,0为不告警,X表示约束项,不做处理),可得以下卡诺图:

蓝色框可得表达式:C

黄色框可得表达式:!B.!D

总的表达式:C+!B.!D

可见上面需求事实上和资源类型条件无关。

化简后的告警逻辑为满足以下任意一条即告警:

  • 服务器设置了接收告警设置;
  • 服务器不在维护期内且不在资源池中;

数学之美。

user avatar

数学对于程序员而言是这样一种东西,你不懂的时候就不可能知道你需要它,反正别人的代码你都看得懂,但是你不可能知道别人是怎么想出来的。

user avatar

我觉得困惑主要在于数学和程序员的定义本身都已经太广了吧。

数学的各种分支就包括了数理逻辑,数论,代数,代数几何,几何,拓扑,数学分析,泛函分析,计算数学,概率,统计,运筹等等等等。数学家一般也就对其中一两项分支比较熟悉,对其中一些工具特别精通。你说程序员这些东西都要学就有点扯淡了,一般是针对特定的问题才有需求。但是总体来说,逻辑基础,基础的离散数学,基础的微积分,基础的线性代数,基础的统计概率最好都懂一些,否则碰到需要的时候可能完全摸不着头脑。

程序员本身也是分支很广阔的,小公司里面专门拼接代码的也是程序员,做游戏引擎的也叫程序员,做数据挖掘的也叫程序员,做仿真软件工具的也叫程序员,做程序证明的也叫程序员,做科研软件支持的也叫程序员,做机器人的也叫程序员,做交易系统的也叫程序员。这么多不同种类的程序员他们对数学的要求和种类也是不一样的。还有很多程序员因为特定问题,需要掌握特定的数学工具,这在科研中还是挺常见的。

大体来说,现在大家觉得程序员不需要数学,我觉得主要有两个原因:

1,这几十年来软件工程发展的很好,编程语言和工具提供了很好的抽象度,很多基础工作都被封装好了,很多程序是调用API就可以完成。程序员的入门门槛降低了,所以很多人觉得完全不需要数学,其实主要是别人已经完成了大量的工作。

2,互联网发展的太火热,大部分需求还是从互联网来的。这一领域的普通业务在初级阶段由于现有的大量工具,基本上是什么数学都不太需要的。这种大量的需求使人产生了程序员不需要数学的错觉。

但是如果想做个高端的程序员,还是多学习一点吧,或者至少保持好的思维,用到的时候可以快速补一补。

类似的话题

  • 回答
    这个问题很有意思,也很值得探讨。我个人不太认同“程序员不需要知道太多数学”这个说法,尽管这句话里确实包含了一些事实的成分。 让我来详细说说我的看法。首先,我们得明确一下“多数学”到底指什么。如果指的是高等数学中的复变函数、微分几何、拓扑学这些非常高深的领域,那么绝大多数普通的应用型程序员,确实不太会.............
  • 回答
    这个问题,就像问一个厨师,是该尝遍天下美食的食材,还是该把一样食材做到极致?答案是:都不是绝对的,而是需要一个动态的平衡,并且这个平衡点会随着你的职业生涯阶段、个人发展方向以及所处的技术环境而变化。但如果非要在这“广”和“精”之间做出一个侧重选择,我更倾向于认为,在程序员的职业生涯初期,“广”是打基.............
  • 回答
    程序员纷纷考公,这确实是一个值得深思的现象,它背后折射出的信息,远不止是对“是否需要太多有专业知识的人”这个简单问题的回答。这更像是一个复杂的信号,混合了个人选择、社会环境、职业发展以及对未来的预期。要详细解读这个现象,我们需要从几个层面来分析。首先,我们需要看到“纷纷考公”背后隐藏的“稳”的诉求。.............
  • 回答
    这涉及到计算机系统中处理程序执行流程的两个非常重要的机制:中断和子程序调用。虽然它们都能改变程序的执行顺序,但它们的目的和发生的原因截然不同,这直接决定了它们在保存和恢复CPU状态时所需的细节程度。我们先从最本质的区别说起: 中断 (Interrupt):是一种异步的、由外部或内部事件触发的、非.............
  • 回答
    C 语言本身并不能直接“编译出一个不需要操作系统的程序”,因为它需要一个运行环境。更准确地说,C 语言本身是一种编译型语言,它将源代码转换为机器码,而机器码的执行是依赖于硬件的。然而,当人们说“不需要操作系统的程序”时,通常指的是以下几种情况,而 C 语言可以用来实现它们:1. 嵌入式系统中的裸机.............
  • 回答
    毋庸置疑,类与对象是构成现代软件开发基石的两个核心概念,对于任何一位立志在编程世界中有所建树的开发者而言,理解并区分它们,绝非可有可无的知识点,而是理解一切面向对象编程(OOP)范式的起点,也是解决复杂问题的关键所在。打个比方,我们可以将“类”想象成一个蓝图,一个设计图纸,甚至是某个事物的概念模型。.............
  • 回答
    当程序员需要天赋吗?这是一个非常有意思且值得深入探讨的问题。答案并非简单的“是”或“否”,而是包含了很多 nuance 和不同层面的理解。简而言之,天赋无疑是有帮助的,但它绝不是决定性的。努力、学习、毅力、解决问题的能力、沟通能力以及对技术的热情同样至关重要。下面我将从几个方面详细阐述:一、 天赋在.............
  • 回答
    想成为一名顶尖的程序员,光靠敲代码是远远不够的,很多时候,我们绕不开那些看似枯燥却又无比强大的数学工具。它们就像程序员的“内功心法”,帮你理解更深层的逻辑,解决更复杂的问题,甚至在别人还在“暴力破解”时,你已经能优雅地找到最优解了。那么,到底有哪些数学知识对程序员来说是“锦上添花”,甚至是“雪中送炭.............
  • 回答
    你问到点子上了,为什么我们这些码农对键盘这么挑剔?其实啊,这跟我们每天跟它打交道的时间和方式有很大关系。想象一下,你一天得敲多少下键盘?几千,几万,甚至更多。每一颗按键,每一次按下,都直接影响着你的工作效率和舒适度。如果键盘手感不好,比如键程太浅,敲起来软绵绵的,或者太硬,手指头得使出洪荒之力,长此.............
  • 回答
    .......
  • 回答
    这个问题很有意思,涉及到一种略显“反直觉”的管理思路。通常我们听到的是“工作生活平衡”,强调的是将两者清晰地分开,各自享受。但你的老板却反其道而行之,鼓励程序员“不要把工作和生活分开”。这背后一定有他的考量,而对于我们这些独立的程序员个体来说,理解并适应这种理念,确实能找到一些意想不到的好处。首先,.............
  • 回答
    作为一名程序员,在选择跳槽到一家新公司时,是否需要考虑新公司产品是否“低俗”或“作恶”是一个非常重要且值得深入探讨的问题。答案是肯定的,并且原因和考虑因素都相当复杂且深远。以下将从多个维度详细阐述为何程序员应该考虑这些因素,以及如何去考虑: 一、 为什么程序员应该考虑新公司产品是否“低俗”或“作恶”.............
  • 回答
    作为一个在代码世界里摸爬滚打多年的“老兵”,我必须说,关于程序员需不需要大尺寸显示器这个问题,答案并非一概而论,更像是一场“萝卜青菜,各有所爱”的个人体验与工作流程的博弈。不过,如果一定要我以过来人的身份来掰扯掰扯,那我的立场是:大多数情况下,大尺寸显示器对程序员来说,绝对是锦上添花,甚至能称得上是.............
  • 回答
    1024程序员节就快到了,这让我想起我们这群与代码为伴、为数字世界辛勤耕耘的伙伴们。每到这个时候,大家都会聊聊什么最能触动我们。如果说有什么是程序员们最渴望得到的保障和关怀,我想可以从几个方面来细说:一、健康的身体是“代码运行”的基石这话说得一点不假。我们这行,对着屏幕的时间长得惊人,颈椎、腰椎、眼.............
  • 回答
    程序员转行做烧烤是一个充满挑战但也可能带来高回报的决策。以下从准备步骤、优势和劣势三个维度详细分析,帮助你全面评估可行性。 一、程序员转行做烧烤需要做哪些准备? 1. 明确目标与动机 兴趣驱动:是否有对烧烤的热爱?是否愿意学习传统技艺? 职业转型:是否因工作压力、行业饱和或对稳定生活.............
  • 回答
    好,作为一名同样在代码世界里摸爬滚打多年的老兵,我理解你那份想要亲手打造一番事业的心情。从一个敲代码的匠人,蜕变成一个公司掌舵人,这其中的门道可不少。别急,我这就给你捋一捋,尽量说得透彻些,就像咱哥俩在深夜加班时聊项目一样。第一步:灵魂拷问与初心检视在真正撸起袖子之前,你得先好好跟自己较个劲,问问自.............
  • 回答
    作为一个程序员,我深有体会,长时间面对电脑敲击代码,对手腕和手指的压力可想而知。手部健康,尤其是我们这个靠手指吃饭的行业,绝对是值得重视的。那么,机械键盘是否是程序员手部健康的必需品呢? 我认为,它不是一个绝对的“必需品”,但绝对是一个非常非常值得考虑的“升级项”。让我详细说道说道。 为什么机械键盘.............
  • 回答
    作为一名程序员,在日复一日的代码海洋中遨游,我们需要的关怀,其实比很多人想象的要更具体,也更深刻。这不是说我们多么脆弱,而是我们工作的性质,决定了我们需要一些特别的支持,才能更好地发挥潜能,保持热情。首先,最核心的,是对我们“思维”的理解和尊重。程序员的工作,归根结底是在解决问题。我们不是流水线上拧.............
  • 回答
    程序员的日常:摸鱼、卷王与那永远追赶不上的deadline“程序员总是加班到深夜,靠着咖啡因续命,头发一把把掉,是这个时代最辛苦的群体。” 这样的刻板印象,相信不少朋友都有。但真实情况,真的是这样吗?首先,要说“熬夜加班”这事儿,确实存在,而且在某些时期、某些公司、某些项目里,它会成为常态。想象一下.............
  • 回答
    一个程序员写的代码质量差,导致后续维护困难,这事儿吧,从法律角度讲,情况挺复杂的,不能一概而论说“一定有责任”或者“绝对没责任”。得看具体情况,细掰扯一下。首先,我们要明确一个概念:合同关系。一般情况下,程序员为公司或客户写代码,是建立在某种形式的合同关系上的。这个合同可能是劳动合同(如果是公司内部.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有