微积分和线性代数如何对系统程序员有用?[关闭]


10

我发现一个网站说微积分和线性代数对于系统编程是必需的。

据我所知,系统编程与osdev,驱动程序,实用程序等有关。我只是想不出微积分和线性代数在这方面有什么帮助。我知道微积分在科学中有多种应用,但是在这个特定的编程领域,我无法想象微积分有多么重要。

该信息位于以下站点上:http : //www.wikihow.com/Become-a-Programmer

编辑:这里的一些答案正在解释有关算法的复杂性和优化。当我提出这个问题时,我试图更具体地介绍系统编程领域。算法的复杂性和优化可以应用于任何编程领域,而不仅仅是系统的编程。这就是为什么在提出问题时我无法提出这样的想法的原因。


6
它不只是直接应用,还可以改变您的思维过程。
SomeKittens

3
我没有做很多系统编程(好的,我什么也没做),但是我想如果您正在运行一系列性能测试,并且想要对结果进行统计分析,那么微积分和线性代数可以参加进来。在进行算法复杂度分析时,可能也需要它们。
FrustratedWithFormsDesigner 2012年

2
@Telastyn:真的吗?那很有意思。这是如何运作的?
FrustratedWithFormsDesigner 2012年

2
您可以提供该网站的链接吗?它可能会添加一些上下文,这将帮助您获得更具体的答案。
卡勒布

2
@FrustratedWithFormsDesigner-类比从值到指针就像推导。您从一个函数开始并派生它以获得一个新的函数,该函数意味着其他含义(一个int指向一个内存地址而不是一个数字)。您甚至可以获得二阶导数(指向指针的指针),这意味着有点相同,但有所不同。然后要撤消该操作,您需要集成(取消引用指针),这有一些警告(派生函数与对象切片时丢失的常量)。希望这是有道理的,已经有好几年了……
Telastyn 2012年

Answers:


6

我想如果您要在现代操作系统之上编写非GUI实用程序而不使用其内部结构,那么它并不是很重要。如果您要更改现代操作系统或开发新操作系统,则情况可能大不相同。

如果您使用的是视频硬件或裸机窗口系统,则需要线性代数的知识才能有效地更新图形。我没有看过自己,但是我敢打赌,您可以在X,KDE和Gnome的源代码中找到示例。

如果您正在使用有关数字信号处理的硬件,那么演算将非常重要。我想象有一些设备需要使用系统的CPU而不是本地微处理器来完成繁重的工作,并且这些设备通常与模拟电气系统接口。

在尝试对数据进行曲线拟合时,微积分在性能分析中也起着重要作用,除了线性代数外。


即使只是进行DirectX或OpenGL编程,也需要一些线性代数知识。
钻机2012年

@钻机:边走边学,这就是我的方法。恕我直言,从数学角度学习,恕我直言。
编码员

8

SomeKittens的评论对金钱是正确的:您需要微积分和线性代数,因为这些课程会改变您的思维方式和理解世界的方式。线性代数就是关于从一个域到另一个域的映射。微积分涵盖了函数的行为方式。它们本身就是强大的工具,但是您在研究这些领域时所学的技术也已成为您对世界的心理了解的一部分。

您还需要这些课程,因为人们会期望您能够以这些方式思考。我很少看到我的同事在白板上采用多项式的导数,但是我经常看到函数的草图,在某个有趣的点绘制了切线,或者曲线下的区域被阴影化。我们不太在乎实际值来计算它们,但了解值的变化至关重要,这是日常对话的一部分。

任何本科计算机科学学位都需要微积分,线性代数,统计学,逻辑和其他数学课程,这不是因为程序员需要定期直接应用这些技术(尽管他们可能会根据自己的工作而定),而是因为您需要了解以后会出现的材料的知识。


2
如果我可以多次投票,我会。
Mindor先生2012年

虽然是有用的答复,但没有回答问题。例如,我之所以来到这里,是因为我最近正在对r600g驱动程序进行一些黑客娱乐,并且对改善数学背景(这很薄弱)感兴趣。在驱动程序中找到一个需要扩展我的数学知识的想法真的很不错,最好是抽象代数,拓扑之外的东西,但不一定限于此。一堆“驱动程序开发数学”之类的查询都没有提出,这是我能得到的最接近的页面。
Hi-Angel

@ Hi-Angel我不同意。它可能无法以您期望的方式回答该问题,也可能无法回答您单独的“我可以做什么以提高我的数学技能”问题,但是我认为高级数学主要对系统程序员有用,因为它可以改变您的观点并提供了更深刻的理解。图形程序员实际上经常定期使用微积分和线性代数,而系统程序员则较少。但是了解这些主题仍然很重要。
卡雷布(Caleb)

6

我会继续说,我认为微积分或线性代数对于系统编程而言可能并不重要。

我当然认为微积分和线性代数通常值得学习-我是一个数学专家!而且,正如其他答案所指出的那样,存在一些间接关联,因为性能分析和算法设计可以使用高级数学。但是,我不认为系统编程比大多数其他通常不被认为是数学的领域更依赖于这类数学。


有没有看过GPU?:)有点数学,尤其是。为其编写驱动程序...但这是真的:如果您遇到问题,可以随时使用math.stackexchange.com :))
Aadaam 2012年

我也是计算机图形学的人。我很像那句话!而且您是对的:任何想编写图形卡驱动程序的人都需要了解计算机图形(以及随之而来的线性代数和基本演算)以及系统编程。
即将来临的风暴,2012年

据我所知,人们需要了解三角函数和线性代数才能从图形API中做一些有用的事情,而不是在图形驱动程序中实现此API。在那里,您主要处理根据应用程序请求切换一堆寄存器。我可以想象在图形驱动程序中应用数学的唯一地方是对其编译器的优化。如果我错了,请纠正我-我想成为。我之所以来到这里,是因为我想提高自己的数学背景,并且对r600g几乎不做任何改动,将两者结合起来会很不错。
Hi-Angel'5

4

我怀疑这是真的。系统程序员必须更加关注性能和可靠性,因此算法分析可能很重要,并且有时需要演算来证明Big-Oh分析。排队论和离散优化(即数学优化而不是代码优化)等主题也可以发挥作用。但是,我认为这些将主要适用于从事操作系统和网络协议前沿的人们,而不是适用于USB 3.0驱动程序的人们。


离散优化的⁺¹似乎很有趣并且相关。
Hi-Angel

1

您对系统编程的定义与Wikipedia中的答案非常吻合。

如果您考虑它提供了什么-即。软件到硬件的接口,然后就开始理解为什么微积分和线性代数是必不可少的技能了。

提取低级接口需要您了解设备的工作方式。电子设备仍然受物理定律的约束。微积分和线性代数提供了一种对设备行为进行建模的方法。对设备建模可以让您将服务提供给它的功能。

话虽这么说,这两个领域并不是系统编程的全部目标。我知道很多EE在微积分和线性代数方面的表现都不尽人意,但仍然可以相当简洁地解释该设备的功能。


系统编程的定义是对还是错?
维克多

2
那不是很准确。与CPU的接口仅需要了解所提供的指令。
DeadMG

@DeadMG-对于CPU,我不能争论。我一直在思考诸如加速计或直接IO接口之类的原始硬件。话虽这么说,但其中大多数都带有某种芯片来提供接口。我认为我的评论可能比设备驱动程序层更适合芯片内的逻辑。

1

常规的Web应用程序和/或管理编程并不涉及线性代数或微积分的大量应用,但许多专业领域却涉及。如果处理几何,则势必会遇到线性代数。大多数物理学程序设计也涉及代数和微积分。以及几乎所有与波形处理有关的事情,例如声音和无线电编程。通常,理解离散数学尤其重要,离散数学尤其涉及集合论,图论和形式(布尔)逻辑,这些逻辑在许多应用程序(例如信息管理,数据库和其他将数据和/或逻辑结合在一起的地方)中很有用。在系统编程的情况下,我看不到太多的应用程序。


2
我认为您可以在大多数编程领域中都不需要使用演算或线性代数就可以“轻松”。但是,如果您对这些概念感到满意,那么对于将它们应用于多少个不同的问题,您会感到惊讶。测量和预测时钟漂移,电池维持时间是我最近才使用微积分的事情。三角剖分和路径预测涉及线性代数,这是我去年研究的一个问题。使用这些主题作为其他人以前使用的极其复杂且差的近似方法,并没有显示出任何问题……
Dunk 2012年

2
(续)...但是利用更高级的数学可以实现更简洁,更准确的实现方式,从而实现预期的效果。IOW,微积分和线性代数是一旦您学会了如何应用它们的强大工具,并且与大多数其他程序员相比,它们将帮助您上升到最高水平,因为大多数人在学校时并不愿意充分学习数学。对我来说,这意味着要着手于真正凉爽的项目而不是平凡的工作。
Dunk 2012年


0

据我所知,系统编程与osdev,驱动程序,实用程序等有关。我只是想不出微积分和线性代数在这方面有什么帮助。

有了微积分,只要一仔细看一下课程内容,就很容易了。它与算法复杂性,Big-O表示法密切相关-诸如此类,在编程中非常基础。

方程是估算算法复杂度时得到的结果。从0到的三级嵌套循环N为N 3,两级嵌套循环为N 2,一个为N。得到的评估结果看起来像(N 3 + 2 * N 2 + N)-这是一个等式。

现在,如果您想更好地了解当N增加时执行时间将增长多快,这与派生/微分密切相关。微积分的其他部分可能会有所帮助,包括极限和渐近分析-这些将使您了解Big-O表示法,在编程访谈中获得更好的评分以及可能在进行系统编程时表现更好。

  • 您被分配了设计文件分配表,您将使用什么数据结构?假设有许多很少修改的小文件,那将是更好的选择?假设总是在末尾附加相对少量的大文件,您将使用相同的结构吗?您会如何决定?

至于线性代数,这里的编程应用程序从一开始就为您服务。

http://pad1.whstatic.com/images/thumb/c/c4/LaTeX-2m.jpg/251px-LaTeX-2m.jpg

如果您不得不处理光栅图形(例如,在视频驱动程序中),则上述图片将在您最糟糕的噩梦中出现。

  • 测试#12345为何显示像素丢失?我在实施布雷森纳姆时做错了什么吗?难道是测试设计中的一个错误,没有正确考虑舍入错误?

在我所知道的每所大学中,CS都有一个趋势与数学系分离。我认为这是非常明智的举动。而且,CS学生被认为可以从使用现有解决方案中找出解决方案。一位优秀的CS学生会阅读关于容器的文档,看到一个O(什么都没有),打开维基百科,查看图表,然后确定容器是否合适。这将需要2分钟,就像检查某些API函数调用的重入性和参数要求一样。而且,恕我直言,探查器几乎总是比理论数学更好的解决方案。
编码员

2
@Coder,当然,有些计算机科学专业的学生最终不得不首先设计容器和算法。对于他们来说,数学和探查器是互补的工具:数学不会提供有效的实现,探查器也不会警告您您的测试数据只是fl幸。
查尔斯·格兰特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.