您的位置:首页 > 理论基础

关于计算机,关于程序,关于数学

2013-01-04 13:19 295 查看
选一些比较有系统性的思路:

~~~~~~~~

这儿是我能记得的在学校学到的数学:

Grade School: Numbers, Counting, Arithmetic, Pre-Algebra ("story problems")

初中:数,数数,算术知识,初级代数("带问题的小故事")

High School: Algebra, Geometry, Advanced Algebra, Trigonometry, Pre-Calculus (conics and limits)

高中:代数,几何,高等代数,三角学,微积分先修课 (二次曲线论和极限)

College: Differential and Integral Calculus, Differential Equations, Linear Algebra, Probability and Statistics, Discrete Math

大学:微积分,微分公式,线性代数,概率和统计,离散数学

~~~~~~~~~~

我现在意识到那个书单列表原是设计来准备给那些以后要当科学家和工程师的学生的。他们在高中里所教的数学课程并不是为你的编程生涯做准备的,简单的事实是,多数的编程工作所需要的数学知识相比其他作为工程师角色的人所需要的数学增长的更快。

即使你打算当一名科学家或者一名工程师,在你理解了什么是数学之后-- 数学它如何而来,如何而去,为何而生,我发现这更加容易去学习和欣赏几何学和三角学。不必去专研记住几何上的证明和三角恒等式,虽然那确实是高中学校要求你必须去做的。

~~~~~~~~~~~~~~

在现实中,计算机科学家经常使用的数学,跟上面所列的数学仅有很小的重叠。 举个例子,你在中学里学的大部分数学是连续性的:也就是说,那是作为实数的数学。而对于计算机科学家来说,他们所感兴趣的95%也许更多的是离散性的:比如,关于整数的数学。

~~~~~~~~~~~~

对程序员来说,最有效的离散数学的分支是概率理论。这是你在学校学完基本算术后的紧接着的课。你会问,什么是概率理论呢?你就数啊,看有多少次出现满堂彩?或者有多次是同花顺。 不管你思考什么问题如果是以"多少种途径。。。"或"有多大几率的。。。",那就是离散问题。当他发生时,都 转化成"简单"的计数。抛个硬币看看。。。? 毫无疑问在他们教你基本的计算用法后他们会教你概率理论。

我还保存着大学里的离散数学课本。可能他只占了三分之一的课程,但是它却涵盖了我们几乎每天计算机编程工作大部分所用到的数学。

~~~~~~~~~

除了概率和离散数学外,还有不少其他的数学分支,可能对程序员相当的有用,学校通常不会教你的,除非你的辅修科目是数学。这些数目列表包括:

统计学,其中一些包括在我的离散数学课里,她的某些训练只限于她自身。自然也是相当重要的,但想学的话不需要什么特别的入门。

代数和线性代数(比如,矩阵)。他们会在教完代数后立即教线性代数。这也简单,这但相当多的领域非常有用,包括机器学习。

数理逻辑。我有相当完整的关于这门学科的书没有读,是Stephen Kleene写的,克林闭包的发明者,我所知道的还有就是Kleenex。这个就不要读了。我发誓我已经尝试了不下20次,却从没有读完第二章。如果哪位牛掰有什么更好的入门建议的话可以给我推荐。虽然,这明显是非常重要的一部分。

信息理论和柯尔莫戈洛夫复杂性理论。真不可思议,不是么?我敢打赌没哪个高中会教你其中任何一门课程。她们都是新兴的学科。信息理论是(相当相当相当相当难懂)关于数据压缩,柯尔莫戈洛夫复杂性理论是(同样非常难懂)关于算法复杂度的。也就是说,你要把它压缩的尽量小,你所要花费的时间也就变的越长,同样的,程序或数据结构要变得多优雅也有同样的代价。他们都很有趣,也很有用。

当然,也有其他的一些因素,某些领域是重复的。也拿来说说吧:你所发现有用的那部分数学,不同于那些你在学校里认为有用的数学。

那微积分呢?每个人都学它,所以它也一定是重要的,不对吗?

~~~~~~~

微积分都是关于连续统的 -- 变化的比率, 曲线的面积, 立体的体积。是些有用的东西,但是实际细节却包含大量的记忆量并且枯燥,作为一个程序员来说根本不需要这些。 更好的方法是从整体上了解那些概念和技术,在必要的时候再去查询那些细节。

~~~~~~~~~

正确学习数学的方法是广度优先,而非深度优先。你要考察的是整个数学世界,学习每个概念的名字,区分出什么是什么。

~~~~~~~~

学习数学的正确方法是忽略实际的算法和证明,对于大部分情况来说, 。。。:他们的名字,他们的作用,他们计算的大致步骤, (有时是)谁发明了他们,发明了多久了,他们的缺陷是什么,和他们相关的有什么。把数学当文科来学。

为什么呢?因为第一步反应在数学上的是问题的确定。如果你有一个问题去解决,并且假设你没有头绪如何开始, 这将花费你很长的时间来弄明白。但如果你知道这是个变异的问题,或者是一个凸优化问题,或者一个布尔的逻辑问题,然后你起码能知道从哪着手开始寻找解决方案。

~~~~~~~~

我认为学习数学最好的方法是每天花15到30分钟逛维基百科。那上面有数千数学分支的相关文章。 可以从一些你感兴趣的文章着手(比如,弦理论,或者,傅立叶变换,或者张量理论,就是能冲击你相象力的东西) 阅读。如果有什么你不理解的,就去了解那些链接。如此这般直到你累到不行为止。

~~~~~~

对我来说,我已经注意到一些我已经感兴趣的领域(包括人工智能,机器学习,自然语言处理,和模式识别)大量的使用到数学。如我已经挖的有点深度的领域,我已经发现他们使用的数学不再比我在中学的学到的数学还要更难;大部分来说仅仅是不同领域。而不是更难了,并且学习使我能写(或者是在我自己的代码里使用)神经网络,基因算法,贝页斯分类器,集群算法,图像识别,和其他时髦的东西,能产生很酷的应用。我常向我的朋友显宝。

。。。。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐