我在哪里可以找到程序员的数学主题和资源?

时间:2021-07-16 05:16:43

There are a few questions around that circle around this question but I feel this is different enough.

关于这个问题围绕这个问题存在一些问题,但我觉得这个问题已经不同了。

I've decided I want to improve the breadth and depth of my maths skills specifically in areas that are useful and/or interesting to programmers.

我已经决定要提高数学技能的广度和深度,特别是在程序员有用和/或有趣的领域。

  1. What topics should I study?
  2. 我应该学习哪些主题?

  3. What resources do you recommend (blogs/books/online lectures...)?
  4. 你推荐什么资源(博客/书籍/在线讲座......)?

I'm looking for easy to consume resources because I'll be doing this in my free time, I don't want to spend days struggling through a dense text but I want to get deeper than the surface. I've read the Yegge article on the topic (and most of the comments) which is useful but I think the voting system here will help me focus on the most useful/best resources and topics.

我正在寻找易于消耗的资源,因为我将在空闲时间这样做,我不想花费数天时间在密集的文本中挣扎,但我想要比表面更深入。我已经阅读了关于该主题(以及大多数评论)的Yegge文章,这篇文章很有用,但我认为这里的投票系统将帮助我专注于最有用/最好的资源和主题。


Edit:

I am looking to create myself a study course that I'll follow over the next few years, I'm not looking to solve a particular problem I just want to learn some new skills that will interest me and may be useful in my career in the future.

我希望创建一个我将在未来几年内学习的学习课程,我不打算解决一个特定的问题我只是想学习一些我感兴趣的新技能,并且可能对我的职业生涯有用。未来。

12 个解决方案

#1


Concrete Mathematics: A Foundation for Computer Science would be my suggestion for a book that covers some advanced topics.

具体数学:计算机科学基础将是我对一本涵盖一些高级主题的书的建议。

#2


For an introduction to Discrete Mathematics I strongly suggest this.

有关离散数学的介绍,我强烈建议这样做。

I feel very lucky to have been provided this book from University

我很幸运能从大学那里得到这本书

#3


Any programmer would do well to have a solid understanding on the undergraduate level of these following math courses:

任何程序员都应该对以下数学课程的本科水平有一个很好的理解:

  1. Calculus (at through multivariate calc)
  2. 微积分(通过多变量计算)

  3. Discrete Mathematics (absolutely essential)
  4. 离散数学(绝对必要)

  5. Linear Algebra (necessary for an understanding of matrices)
  6. 线性代数(理解矩阵所必需的)

  7. Combinatorics (further development of Dicrete maths)
  8. 组合学(Dicrete数学的进一步发展)

  9. Introduction to Abstract Algebra (this will solidify your understanding of modulo number systems, in particular binary, octal, hex etc.). It also gives a deep understanding of set theory which is ubiquitous in practical programming and the comp sci literature.
  10. 抽象代数简介(这将巩固您对模数系统的理解,特别是二进制,八进制,十六进制等)。它还深入理解了在实际编程和comp sci文献中普遍存在的集合论。

This is the fundamentals. If your are thinking about graphics or game programming then you have a whole slew of additional courses in physics, graphic arts, and possibly fluid dynamics. Also Differential Geometry is essential for any real world modeling of motion on curved surfaces.

这是基本面。如果您正在考虑图形或游戏编程,那么您将拥有大量的物理,图形艺术和流体动力学课程。此外,微分几何对于曲面上运动的任何真实世界建模都是必不可少的。

#4


It's a bit off from your question, but let me suggest the Princeton Companion to Mathematics.

这有点偏离你的问题,但让我建议普林斯顿同伴数学。

It gives an overview of all of mathematics, so it is more than "math useful to programmers", but it's style is as easy to understand as it gets, and the important parts are in there.

它概述了所有的数学,因此它不仅仅是“数学对程序员有用”,而且它的风格也很容易理解,而且重要的部分就在那里。

#5


Some time ago Steve Yegge wrote a dedicated article about math for programmers. His thesis is: As a programmer you should learn math but you should do so in different way than in shool/university.

前段时间,史蒂夫耶格写了一篇关于程序员数学的专门文章。他的论点是:作为一名程序员,你应该学习数学,但你应该以不同于学校/大学的方式这样做。

His summary is this:

他的总结如下:

  1. Math is a lot easier to pick up after you know how to program. In fact, if you're a halfway decent programmer, you'll find it's almost a snap.
  2. 在您知道如何编程之后,数学更容易掌握。事实上,如果你是一个中等程度的程序员,你会发现它几乎是一个短暂的。

  3. They teach math all wrong in school. Way, WAY wrong. If you teach yourself math the right way, you'll learn faster, remember it longer, and it'll be much more valuable to you as a programmer.
  4. 他们在学校教数学都错了。方式,错了。如果你以正确的方式教自己数学,你会学得更快,记得更长,而且对于你作为程序员来说它会更有价值。

  5. Knowing even a little of the right kinds of math can enable you do write some pretty interesting programs that would otherwise be too hard. In other words, math is something you can pick up a little at a time, whenever you have free time.
  6. 知道一些正确的数学类型可以让你写一些非常有趣的程序,否则会很难。换句话说,只要你有空闲时间,数学就是你可以一次拿起一些东西。

  7. Nobody knows all of math, not even the best mathematicians. The field is constantly expanding, as people invent new formalisms to solve their own problems. And with any given math problem, just like in programming, there's more than one way to do it. You can pick the one you like best.
  8. 没有人知道所有的数学,甚至不是最好的数学家。随着人们发明新的形式主义来解决自己的问题,这个领域不断扩大。对于任何给定的数学问题,就像在编程中一样,有不止一种方法可以做到这一点。你可以选择你最喜欢的那个。

  9. Math is... ummm, please don't tell anyone I said this; I'll never get invited to another party as long as I live. But math, well... I'd better whisper this, so listen up: (it's actually kinda fun.)
  10. 数学是...嗯,请不要告诉任何人我说过这个;只要我活着,我就永远不会被邀请参加另一个派对。但是数学,好吧......我最好低声说出来,所以听听:(这实际上很有趣。)

Sad note: Steve abandoned his blog because of too much aggressive feedback.

悲伤的说明:史蒂夫放弃了他的博客,因为反馈过于激进。

#6


  1. If you have any interest in game development, 3D graphics, or anything somewhat related to those, then do multivariate calculus and basic physics. This will help you understand the basic concepts much better. Also, linear algebra will help immensely with all of the matrix/vector stuff you will be doing.

    如果您对游戏开发,3D图形或任何与此相关的任何内容感兴趣,那么请进行多元微积分和基础物理。这将有助于您更好地理解基本概念。此外,线性代数将极大地帮助您完成所有矩阵/矢量。

    If you are NOT interested in these topics, I would still say study calculus and physics. Why? Solving calculus and physics problems gives you good experience in problem solving and exercises the brain. Programmers NEED to be good problem solvers... that is our job. Concepts you pick up from these courses are things you will keep with you the rest of your life.

    如果你对这些话题不感兴趣,我仍会说学习微积分和物理。为什么?解决微积分和物理问题可以让您在解决问题和锻炼大脑方面获得良好的经验。程序员需要成为优秀的问题解决者...这是我们的工作。您从这些课程中学到的概念是您将在余生中随身携带的事物。

  2. MIT and Stanford both have really good online courses for topics such as this. Of course you can't just jump into multivariate calculus without some more basic calc, but MIT and Stanford have resources for your basic calculus classes as well. Basic physics will be a little bit easier to pick up. Again, you can check MIT and Stanford for physics.

    麻省理工学院和斯坦福大学都有很好的在线课程,主题就是这样。当然,如果没有更基本的计算,你不能只是跳进多元微积分,但麻省理工学院和斯坦福大学也有基本微积分课程的资源。基础物理学将更容易接受。再次,你可以检查麻省理工学院和斯坦福大学的物理学。

MIT OpenCourseWare:

#7


Generally speaking, the applications of math to computer programming are pretty domain-specific - that is, you need to know whatever math the specific program you're writing requires. The only mathematical topics I can think of that are generally applicable to all kinds of programming are simple arithmetic and boolean logic, but I think if you didn't already know those you wouldn't be much of a programmer ;-)

一般来说,数学在计算机编程中的应用是非常特定于领域的 - 也就是说,您需要知道您正在编写的特定程序所需的数学。我能想到的唯一数学主题通常适用于所有类型的编程都是简单的算术和布尔逻辑,但我想如果你还不知道那些你不会成为程序员的那些;-)

Basically, I would just recommend learning the math as needed for whatever project you're working on. If you want to give yourself a good excuse to learn some new math, start a hobby program that does something mathematical.

基本上,我建议您根据需要学习所有正在进行的项目的数学计算。如果你想给自己一个很好的借口来学习一些新的数学,那就开始一个做数学的爱好程序。

#8


As for topics, look at some of the answers here. Recommended ressources are difficult for me to give, I'm German speaking. I would recommend starting with linear algebra and geometry, which you will find in computer graphics. Look at the undergraduate math series by Springer for example.

至于主题,请在这里查看一些答案。推荐的资源很难给我,我是德语。我建议从线性代数和几何开始,你会在计算机图形中找到它。比如Springer的本科数学系列。

#9


Number theory doesn't have many direct applications to programming (though there are some neat tricks you can use for optimization), but there are several basic concepts that make cryptology much easier to study.

数论没有很多直接应用于编程(虽然有一些巧妙的技巧可以用于优化),但是有一些基本概念使得密码学更容易学习。

My number theory class used Silverman's Friendly Introduction to Number Theory, which is one of the best math textbooks I've ever seen. It's very easy to read (the title is entirely accurate about its friendliness), but covers a wide range of topics. Silverman is also an author on my cryptography textbook, An Introduction to Mathematical Cryptography. It's more technical, addresses most areas of cryptography, and provides plenty of references for where to find more detail.

我的数论类使用了西尔弗曼的数论导论,这是我见过的最好的数学教科书之一。它很容易阅读(标题完全准确,它的友好性),但涵盖了广泛的主题。西尔弗曼也是我的密码学教科书“数学密码学入门”的作者。它更具技术性,可以解决大多数加密领域,并提供了大量参考资料,可以在哪里找到更多细节。

#10


Consider Knuth's Art of Computer Programming series. It can get dense, but it will ground you in the math most needed for programming. I'd suggest going for the available fascicles of Volume 4 early on. These books are not for everybody, but if you find them interesting you will learn a whole lot.

考虑Knuth的计算机编程艺术系列。它可以变得密集,但它会使你最需要编程的数学。我建议尽早选择第4卷的分册。这些书不适合所有人,但如果你觉得它们很有趣,你会学到很多东西。

They won't teach you calculus or geometry, which are important in many aspects of programming but tend to be more specialized.

他们不会教你微积分或几何,这在编程的许多方面都很重要,但往往更专业。

#11


I think you should dive into whatever interests you most and in order to find out what that is you should get some books which cover the facts and offer orientation and some books which nurture your motivation and curiosity. You really have to dive into it to find out, it's a pretty individual thing imho.

我认为你应该深入了解你最感兴趣的东西,为了找出你应该得到的东西,你应该得到一些涵盖事实和提供方向的书籍,以及一些培养你的动机和好奇心的书籍。你真的不得不深入了解它,这是一个非常个人的事情imho。

Facts / Orientation:

事实/方向:

Donald Knuth - Bronstein, Semendjajew

Donald Knuth - Bronstein,Semendjajew

The Science of Programming - Data Structures and Algorithms

编程科学 - 数据结构和算法

Motivation / Curiosity:

动机/好奇心:

The Road to Reality - Fermat's Last Theorem - Godel, Escher, Bach

现实之路 - 费马的最后定理 - 哥德尔,埃舍尔,巴赫

Also for motivation on the more practical side:

另外在更实际方面的动机:

projecteuler.net

#12


What sorts of math problems do you want to solve? 'Math' is a pretty big area!

你想解决什么样的数学问题? '数学'是一个非常大的领域!

MIT has some online courses, but that's probably a big time investment.

麻省理工学院有一些在线课程,但这可能是一个很大的时间投资。

Wolfram has some tutorials, but again, you need to know what you're looking for.

Wolfram有一些教程,但同样,你需要知道你在寻找什么。

#1


Concrete Mathematics: A Foundation for Computer Science would be my suggestion for a book that covers some advanced topics.

具体数学:计算机科学基础将是我对一本涵盖一些高级主题的书的建议。

#2


For an introduction to Discrete Mathematics I strongly suggest this.

有关离散数学的介绍,我强烈建议这样做。

I feel very lucky to have been provided this book from University

我很幸运能从大学那里得到这本书

#3


Any programmer would do well to have a solid understanding on the undergraduate level of these following math courses:

任何程序员都应该对以下数学课程的本科水平有一个很好的理解:

  1. Calculus (at through multivariate calc)
  2. 微积分(通过多变量计算)

  3. Discrete Mathematics (absolutely essential)
  4. 离散数学(绝对必要)

  5. Linear Algebra (necessary for an understanding of matrices)
  6. 线性代数(理解矩阵所必需的)

  7. Combinatorics (further development of Dicrete maths)
  8. 组合学(Dicrete数学的进一步发展)

  9. Introduction to Abstract Algebra (this will solidify your understanding of modulo number systems, in particular binary, octal, hex etc.). It also gives a deep understanding of set theory which is ubiquitous in practical programming and the comp sci literature.
  10. 抽象代数简介(这将巩固您对模数系统的理解,特别是二进制,八进制,十六进制等)。它还深入理解了在实际编程和comp sci文献中普遍存在的集合论。

This is the fundamentals. If your are thinking about graphics or game programming then you have a whole slew of additional courses in physics, graphic arts, and possibly fluid dynamics. Also Differential Geometry is essential for any real world modeling of motion on curved surfaces.

这是基本面。如果您正在考虑图形或游戏编程,那么您将拥有大量的物理,图形艺术和流体动力学课程。此外,微分几何对于曲面上运动的任何真实世界建模都是必不可少的。

#4


It's a bit off from your question, but let me suggest the Princeton Companion to Mathematics.

这有点偏离你的问题,但让我建议普林斯顿同伴数学。

It gives an overview of all of mathematics, so it is more than "math useful to programmers", but it's style is as easy to understand as it gets, and the important parts are in there.

它概述了所有的数学,因此它不仅仅是“数学对程序员有用”,而且它的风格也很容易理解,而且重要的部分就在那里。

#5


Some time ago Steve Yegge wrote a dedicated article about math for programmers. His thesis is: As a programmer you should learn math but you should do so in different way than in shool/university.

前段时间,史蒂夫耶格写了一篇关于程序员数学的专门文章。他的论点是:作为一名程序员,你应该学习数学,但你应该以不同于学校/大学的方式这样做。

His summary is this:

他的总结如下:

  1. Math is a lot easier to pick up after you know how to program. In fact, if you're a halfway decent programmer, you'll find it's almost a snap.
  2. 在您知道如何编程之后,数学更容易掌握。事实上,如果你是一个中等程度的程序员,你会发现它几乎是一个短暂的。

  3. They teach math all wrong in school. Way, WAY wrong. If you teach yourself math the right way, you'll learn faster, remember it longer, and it'll be much more valuable to you as a programmer.
  4. 他们在学校教数学都错了。方式,错了。如果你以正确的方式教自己数学,你会学得更快,记得更长,而且对于你作为程序员来说它会更有价值。

  5. Knowing even a little of the right kinds of math can enable you do write some pretty interesting programs that would otherwise be too hard. In other words, math is something you can pick up a little at a time, whenever you have free time.
  6. 知道一些正确的数学类型可以让你写一些非常有趣的程序,否则会很难。换句话说,只要你有空闲时间,数学就是你可以一次拿起一些东西。

  7. Nobody knows all of math, not even the best mathematicians. The field is constantly expanding, as people invent new formalisms to solve their own problems. And with any given math problem, just like in programming, there's more than one way to do it. You can pick the one you like best.
  8. 没有人知道所有的数学,甚至不是最好的数学家。随着人们发明新的形式主义来解决自己的问题,这个领域不断扩大。对于任何给定的数学问题,就像在编程中一样,有不止一种方法可以做到这一点。你可以选择你最喜欢的那个。

  9. Math is... ummm, please don't tell anyone I said this; I'll never get invited to another party as long as I live. But math, well... I'd better whisper this, so listen up: (it's actually kinda fun.)
  10. 数学是...嗯,请不要告诉任何人我说过这个;只要我活着,我就永远不会被邀请参加另一个派对。但是数学,好吧......我最好低声说出来,所以听听:(这实际上很有趣。)

Sad note: Steve abandoned his blog because of too much aggressive feedback.

悲伤的说明:史蒂夫放弃了他的博客,因为反馈过于激进。

#6


  1. If you have any interest in game development, 3D graphics, or anything somewhat related to those, then do multivariate calculus and basic physics. This will help you understand the basic concepts much better. Also, linear algebra will help immensely with all of the matrix/vector stuff you will be doing.

    如果您对游戏开发,3D图形或任何与此相关的任何内容感兴趣,那么请进行多元微积分和基础物理。这将有助于您更好地理解基本概念。此外,线性代数将极大地帮助您完成所有矩阵/矢量。

    If you are NOT interested in these topics, I would still say study calculus and physics. Why? Solving calculus and physics problems gives you good experience in problem solving and exercises the brain. Programmers NEED to be good problem solvers... that is our job. Concepts you pick up from these courses are things you will keep with you the rest of your life.

    如果你对这些话题不感兴趣,我仍会说学习微积分和物理。为什么?解决微积分和物理问题可以让您在解决问题和锻炼大脑方面获得良好的经验。程序员需要成为优秀的问题解决者...这是我们的工作。您从这些课程中学到的概念是您将在余生中随身携带的事物。

  2. MIT and Stanford both have really good online courses for topics such as this. Of course you can't just jump into multivariate calculus without some more basic calc, but MIT and Stanford have resources for your basic calculus classes as well. Basic physics will be a little bit easier to pick up. Again, you can check MIT and Stanford for physics.

    麻省理工学院和斯坦福大学都有很好的在线课程,主题就是这样。当然,如果没有更基本的计算,你不能只是跳进多元微积分,但麻省理工学院和斯坦福大学也有基本微积分课程的资源。基础物理学将更容易接受。再次,你可以检查麻省理工学院和斯坦福大学的物理学。

MIT OpenCourseWare:

#7


Generally speaking, the applications of math to computer programming are pretty domain-specific - that is, you need to know whatever math the specific program you're writing requires. The only mathematical topics I can think of that are generally applicable to all kinds of programming are simple arithmetic and boolean logic, but I think if you didn't already know those you wouldn't be much of a programmer ;-)

一般来说,数学在计算机编程中的应用是非常特定于领域的 - 也就是说,您需要知道您正在编写的特定程序所需的数学。我能想到的唯一数学主题通常适用于所有类型的编程都是简单的算术和布尔逻辑,但我想如果你还不知道那些你不会成为程序员的那些;-)

Basically, I would just recommend learning the math as needed for whatever project you're working on. If you want to give yourself a good excuse to learn some new math, start a hobby program that does something mathematical.

基本上,我建议您根据需要学习所有正在进行的项目的数学计算。如果你想给自己一个很好的借口来学习一些新的数学,那就开始一个做数学的爱好程序。

#8


As for topics, look at some of the answers here. Recommended ressources are difficult for me to give, I'm German speaking. I would recommend starting with linear algebra and geometry, which you will find in computer graphics. Look at the undergraduate math series by Springer for example.

至于主题,请在这里查看一些答案。推荐的资源很难给我,我是德语。我建议从线性代数和几何开始,你会在计算机图形中找到它。比如Springer的本科数学系列。

#9


Number theory doesn't have many direct applications to programming (though there are some neat tricks you can use for optimization), but there are several basic concepts that make cryptology much easier to study.

数论没有很多直接应用于编程(虽然有一些巧妙的技巧可以用于优化),但是有一些基本概念使得密码学更容易学习。

My number theory class used Silverman's Friendly Introduction to Number Theory, which is one of the best math textbooks I've ever seen. It's very easy to read (the title is entirely accurate about its friendliness), but covers a wide range of topics. Silverman is also an author on my cryptography textbook, An Introduction to Mathematical Cryptography. It's more technical, addresses most areas of cryptography, and provides plenty of references for where to find more detail.

我的数论类使用了西尔弗曼的数论导论,这是我见过的最好的数学教科书之一。它很容易阅读(标题完全准确,它的友好性),但涵盖了广泛的主题。西尔弗曼也是我的密码学教科书“数学密码学入门”的作者。它更具技术性,可以解决大多数加密领域,并提供了大量参考资料,可以在哪里找到更多细节。

#10


Consider Knuth's Art of Computer Programming series. It can get dense, but it will ground you in the math most needed for programming. I'd suggest going for the available fascicles of Volume 4 early on. These books are not for everybody, but if you find them interesting you will learn a whole lot.

考虑Knuth的计算机编程艺术系列。它可以变得密集,但它会使你最需要编程的数学。我建议尽早选择第4卷的分册。这些书不适合所有人,但如果你觉得它们很有趣,你会学到很多东西。

They won't teach you calculus or geometry, which are important in many aspects of programming but tend to be more specialized.

他们不会教你微积分或几何,这在编程的许多方面都很重要,但往往更专业。

#11


I think you should dive into whatever interests you most and in order to find out what that is you should get some books which cover the facts and offer orientation and some books which nurture your motivation and curiosity. You really have to dive into it to find out, it's a pretty individual thing imho.

我认为你应该深入了解你最感兴趣的东西,为了找出你应该得到的东西,你应该得到一些涵盖事实和提供方向的书籍,以及一些培养你的动机和好奇心的书籍。你真的不得不深入了解它,这是一个非常个人的事情imho。

Facts / Orientation:

事实/方向:

Donald Knuth - Bronstein, Semendjajew

Donald Knuth - Bronstein,Semendjajew

The Science of Programming - Data Structures and Algorithms

编程科学 - 数据结构和算法

Motivation / Curiosity:

动机/好奇心:

The Road to Reality - Fermat's Last Theorem - Godel, Escher, Bach

现实之路 - 费马的最后定理 - 哥德尔,埃舍尔,巴赫

Also for motivation on the more practical side:

另外在更实际方面的动机:

projecteuler.net

#12


What sorts of math problems do you want to solve? 'Math' is a pretty big area!

你想解决什么样的数学问题? '数学'是一个非常大的领域!

MIT has some online courses, but that's probably a big time investment.

麻省理工学院有一些在线课程,但这可能是一个很大的时间投资。

Wolfram has some tutorials, but again, you need to know what you're looking for.

Wolfram有一些教程,但同样,你需要知道你在寻找什么。