2010-08-24 36 views
6

我在编程中阅读了很多关于数学的博客和论坛帖子,并为自己做了一个结论,即编程需要基础数学。我不是一个好的数学家。但是,在不深入数学科学的前提下,是否有可能改进我的逻辑思维和算法思维?有没有什么练习或一些书可以帮助我提高这些技能,以便我可以成为一名优秀的建筑师?数学与编程

预先感谢您。

+3

你能否告诉我们你的数学有多好?你在这个清单中认识到什么?你会说你精通什么? -Trigonometry 演算 - 概率/离散数学 - 线性代数(矩阵) -statistics -Analysis(东西一样无穷级数,无穷求和) – 2010-08-24 20:40:06

+0

我认为这是一个合适的不同,而且比更易处理的问题更常见http://stackoverflow.com/questions/157354/is-mathematics-necessary-for-programming – mctylr 2010-08-24 21:02:04

+0

我不能说这是好事。 5分3分。我在学校错过了一些东西,很难理解更高的数学。 – Azat 2010-08-24 21:36:57

回答

2

但是在某种程度上可以改进我的逻辑思维和算法思维而不必深入数学科学?

但逻辑和问题解决是数学的基础。

我怀疑真正的问题是如何教数学,以及你(和你以前的老师)认为数学是什么。我建议A Mathematician's Lament,以更好地解释数学是什么,而我们通常教的是数学。

是否有任何练习或某些书可以帮助我提高这些技能,使我可以成为一名优秀的建筑师?

是的,其他人给了你一个比我更好的建议列表,但基本的想法是,你可以学会更好地学习数学,特别是计算机科学和编程最常用的数学。

我假设你是指软件架构师,因为传统架构,如工程,在应用数学有坚实的基础。无论如何,好的软件架构师需要足够的舒适来进行非正式问题和算法分析,这需要一个数学基础。

我通常会说,如果你可以学习相当于计算机科学学位(即微积分,离散数学或线性代数的第一年)的典型一年级大学数学要求,那么将会有很长的路要走让你成为更好的计算机科学家,更好的程序员或建筑师。如果没有,这不是不可能的,但它可以使你在工作中更好(更快地正确,高效和有效地评估或解决问题)。

祝你好运。

+0

是的,确切地说。我是指软件架构师。 – Azat 2010-08-24 21:41:38

7

通过Project Euler工作。

CLRS Algorithms的开头在数论,离散数学,组合数学,概率论,图论和其他真正有用的东西上有一点点。它正在教,确切地说适用于算法,并跳过其他所有内容。

0

这里有很多类型的编程。如果您正在设计无线压缩算法,您可能需要工程硕士学位。如果你正在制作一个在线颜色选择器,你可以在高中时触发。

3

上面的很棒的建议 - 在上下文中,有一个很好的project改革高中的数学教育。这可能有助于你理解学习数学的一些挫折,以及如何克服这些困难。

请记住 - 很多数学教育都是锻炼你抽象思维和解决问题的能力。这两种技能都需要练习,有时候,即使你没有看到问题与所谓的“现实生活”之间的直接联系,但通过解决问题总有一些东西需要学习和实践。

1

过去四十年来,计算机科学本科课程重视什么是“离散数学”。它曾经是这样的课程将涵盖抽象代数等材料,并进入'sorts'和'kind'等概念,这对于程序的代数规范很有用。如果那是你认为你会喜欢的那种算术,那么买一本关于离散数学的旧书,像这样:Discrete Mathematics in Computer Science (1977)$ 5已发货!

我不相信昂贵的苏珊娜艾普斯书中包含类似的材料,应该知道,因为那本可怕的价格过高的书是我在新生离散数学课程(2003)中必须使用的 - 我不能相信价格几乎翻了一番!

1

你不需要知道微积分就可以编程。计算机编程由非常简单的数学运算组成,只需加法,减法,乘法,小数四舍五入,甚至长分(4年级数学派上用场)。

计数器非常有用;你需要知道如何从零开始计数。简单。大多数语言都是从零开始的,这意味着从零开始而不是从一开始。许多学习者忘记了这一点。增量和预增量(例如,i++++i)在变量在语句中使用变量之后或之前增加一个变量i

逻辑运算符在编程上非常庞大。经常使用小于和大于测试某个值并保持在适当的范围内。您需要认识到i < 55 > i相同,但它们计算为truefalse。当如此使用时:if (i < 5) ...i = 4时,则它等于if (true) ...

同样,AND,OR和NOT运算符对布尔测试很重要。您可能想要知道if (i < 5 && i >= 0) ...这意味着如果i小于5并且i大于或等于0,则NOT(!)和OR(||)的行为方式与此类似。

有些语言要求您区分整数和小数(或浮点数)。整数数学使用四舍五入的方式,对于每种语言都是不同的。随着操作变得更加复杂,十进制数字的准确性会有不同的问题。

一些先进的技术涉及模数操作(%)。所做的只是将剩下的两个数字相除。它用于区分偶数和奇数(例如表中的行)。对计算机编程的基础知识,包括控制结构和经营

更多的一般信息: http://computerprogramming.suite101.com/

2

我会说,你需要的数学取决于你要求解决的问题。

您被要求解决的问题取决于您拥有的数学技能。

任何说你只需要四年级数学的人也告诉你,你不可能合理地期望有机会解决更具挑战性的问题。

我会指出,计算机已经改变了数学和应用。我的工程教育包括许多微积分和使用铅笔和纸张的封闭解决方案。

我的第一个职业生涯意味着在计算机上应用离散的数值类比。

如果你想做这样的工作,最好学到很多关于numerical methodslinear algebra

this paper发布时,Google的Page Rank是一个250亿美元的特征值问题。谷歌的市值今天是144亿美元。

计算机图形学在数学上非常密集。如果你喜欢图形,更好地学习matricies。

统计数据非常重要,特别是当您在网络上有大量海量数据时。学习Rbasic statistics冷。

阅读像"Programming Collective Intelligence"这样的东西,看看哪些新颖的问题需要一些复杂的数学。

如果你想解决这些问题,最好忙个不停。

0

确实,数学的良好基础将有助于编程!为了增强算法思维,您可以尝试解决组合问题。有时候一些数学结果会降低代码的复杂性,所以如果你想解决基本问题,至少应该让自己适应高中数学。我建议你阅读Donald E. Knuth的“计算机编程艺术”和Ronald L. Graham,Donald E. Knuth和Oren Patashnik的“具体数学”。我认为具体数学会给你一个计算机科学数学的良好基础,你应该试一试。

最好的编码!