`
sunxboy
  • 浏览: 2870108 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

真正的程序员天生爱数学(转)

阅读更多
两届微软MVP获得者叶帆认为,如果是一个真正的程序员,那么他(她)天生就应该喜欢学习数学才对。

因为在叶帆看来,学理科的人分两种不同的人群,一部分人以逻辑思维为主,数学、物理、编程成绩较好;另一部分人以记忆为基础,英语和化学优胜一筹。以叶帆为例,他个人已从事<nobr>软件</nobr>开发十余年,是“地地道道”的程序员,同时也很喜欢数学:大学里就曾参加过<nobr>学校</nobr>组织的计算机编程和高等数学的竞赛,取得了编程第一,高等数学第二的好成绩。“所以我认为真正的程序员,不存在应不应当学习数学的问题,只要工作需要,随时都可以深入学习。”叶帆如是说。

不过叶帆也承认高等数学与一般程序员的关系并不是很大,只需理解和实现即可。因为在实际工作中有时候很少用到高等数学的知识。叶帆也只是在开发隧道广告系统中,对图像处理和г校正时用到一部分数学知识(主要是矩阵变换的知识),而且其中的大部分实现还是借鉴了现成的代码,数学知识本身反而并不需要深入了解。听起来,叶帆的回答颇有矛盾辨证的感觉。

特殊群体的程序员(如搜索开发、图像处理等等)和研究所的研究员似乎可能需要更多的数学知识,至于一般程序员,叶帆认为“只要具备高中数学基础就已经足够。”

先前有国外著书,矛头直指早期的计算机先驱如约翰冯诺伊曼(John von Neumann)和阿兰图灵(Alan Turing),说他们本身就是理论数学家,把数学模型移植到计算机中,尤其是算法,从而导致从那时到现在计算机科学始终受到数学的制约。他还认为在算法概念上编写软件不是什么好方法。对此,叶帆认为在编程没有涉及到高端<nobr>技术</nobr>层面上的时候,算法概念上的编写软件只是极少人的课题,因为面向对象的编程的思想已经深入人心。“当然如果你是一个科学家(或研究员),数学一定离你很近,甚至有可能数学是你工作的灵魂,而计算机代码仅仅是表达你思想的一种道具。”【文:呐不喊】

编后语:
记得一位有着10多年开发经验的老程序员曾经说过:“所有的程序本质上就是逻辑。技术你已经较好地掌握了,但只有完成逻辑能力的提高,你才能成为一名职业程序员。”他就象打了一个比方,你十八般武艺都很精通,但就是内力不够,所以永远都成不了武林顶尖高手。而这个内力对于程序员来说,就是你的数学内涵。
分享到:
评论
63 楼 bonny 2007-11-12  
呵呵,也许这么悖论说明了我的这上面说的是个假命题:-)

.....或者我们根本就是把不相关的问题扯起来了


62 楼 ray_linn 2007-11-12  


这种没有逻辑的推论是不是说明这个MVP本身也是逻辑不清楚,不适合当程序员。
61 楼 bonny 2007-11-12  
protti 写道
抛出异常的爱 写道
草履草最高

而数学的作用就是如何使用机械化去替代人肉,降低试错的成本.



我非常的赞同这个观点。当初莱布尼茨提出了两个哲学问题(其实是一个)
1,创造一种通用的语言,使之可以表达所有的含义
2,是否所有的问题都可以有限判定中解答


所谓的数学逻辑,不过是使用数学语言进行机械判定的过程,不过数学推理是严密的,减少了我们出错的机会。
60 楼 bonny 2007-11-12  
看了很多国外数学家的生平介绍
我发现国内的教学有一个很大的误解
(我没去过国外,不知道国外的教学是什么样子的)
就是吧数学和物理,哲学等科学区分的很清除

而看到国外的大数学家的经历
我发现他们似乎根本不注重这些
他们更注重的是思想的表达和问题的解决
而于此过程中用到了那些门类的知识他们倒不会区分的那么明显
甚至他们会发明一些工具来解决问题
最后教科书告诉我们他们是一大堆家的综合,真是很好笑

落下地来
看的出来他们的教育注重想象力和创造力,成绩却差的一塌糊涂
最后多拿诺贝尔
而我们奥林匹克奖牌是一陀一陀的
大多最后做了教师(ms有人做过统计)

59 楼 bonny 2007-11-12  
数学知识够用就好了
不必精通

很多时候如果你觉得数学知识不够可以去现学

所谓的数学不过是逻辑的表达
逻辑思维清晰的人未必是数学好的人
数学好的一般逻辑不会太差

所以说程序员爱数学这个命题应该算是一个弯弯绕
现代数学从上个世纪开始已经非常非常庞大了
在上个世纪初叶我们还可以看到精通很多个分支的数学家
现在基本上已经看不到了
所以说还是够用就好

顺便说一下在《数学:确定性的丧失》这本书里面
作者提出了好几类人:纯数学家和应用数学家
前者代表任务是哈达等,认为数学家应该不关注应用
后者是大家数学的莱布尼茨、笛卡尔等基本上数学家知识副业
主业都是物理学家或者天文学家地理学家哲学家

作者的倾向很明显:实用主义,够用就好
58 楼 fyting 2007-11-11  
又是一个微软MVP对数学泛泛而谈...让我突然就想起了曾毅...
57 楼 bcccs 2007-11-10  
yx06 写道
其实数学就是数学就是用来买菜的,程序和数学是不搭界的。同志们,认识的最高境界就是这样。

good,sigh!
56 楼 yx06 2007-11-09  
其实数学就是数学就是用来买菜的,程序和数学是不搭界的。同志们,认识的最高境界就是这样。
55 楼 protti 2007-11-09  
chinata 写道
protti 写道
dengyin2000 写道
ray_linn 写道
bcccs 写道
总有某种经验在起作用。不可能穷举。



应该说人脑不是电脑,电脑算鸡鸭同笼每次都会穷举一遍,人脑会cache结果.



你也可以让电脑cache 结果。  hibernate的query cache。


我认为人发明出来的东西永远不可能比人聪明。

我觉得这话只能说是发明出来的东西永远不会比发明者更聪明,但是比其他人聪明还是很容易的:)


~~!又说的我没脾气...........
54 楼 chinata 2007-11-08  
protti 写道
dengyin2000 写道
ray_linn 写道
bcccs 写道
总有某种经验在起作用。不可能穷举。



应该说人脑不是电脑,电脑算鸡鸭同笼每次都会穷举一遍,人脑会cache结果.



你也可以让电脑cache 结果。  hibernate的query cache。


我认为人发明出来的东西永远不可能比人聪明。

我觉得这话只能说是发明出来的东西永远不会比发明者更聪明,但是比其他人聪明还是很容易的:)
53 楼 庄表伟 2007-11-08  
抛出异常的爱 写道
草履虫单细胞生物,
之后是多细胞
。。。。
脊柱
两栖
爬行
哺乳
猴子

。。。。
如果人不被进化掉的话
怎么对的起早就到顶的草履虫前辈呢


《4400》、《Heroes》,我喜欢的。
52 楼 bcccs 2007-11-08  
抛出异常的爱 写道
protti 写道
抛出异常的爱 写道
草履草最高


大哥.....什么意思?没明白!
草履虫单细胞生物,
之后是多细胞
。。。。
脊柱
两栖
爬行
哺乳
猴子

。。。。
如果人不被进化掉的话
怎么对的起早就到顶的草履虫前辈呢

这杠抬的。
51 楼 抛出异常的爱 2007-11-08  
protti 写道
抛出异常的爱 写道
草履草最高


大哥.....什么意思?没明白!
草履虫单细胞生物,
之后是多细胞
。。。。
脊柱
两栖
爬行
哺乳
猴子

。。。。
如果人不被进化掉的话
怎么对的起早就到顶的草履虫前辈呢
50 楼 protti 2007-11-08  
抛出异常的爱 写道
草履草最高


大哥.....什么意思?没明白!
49 楼 抛出异常的爱 2007-11-08  
Trustno1 写道
抛出异常的爱 写道
Trustno1 写道
我必须指出的是,数学有多种多样.某种数学仅适合于描述某种东西,4的平方根是2,一个人的平方根又什么?hehe.
所谓,能编写出合格的程序,写出格式良好的代码,实际上只不过是通过人肉不断进行试错的过程,而数学的作用就是如何使用机械化去替代人肉,降低试错的成本.

人要是一次能把程序写对的话,银弹就产生了。


爱迪生试错几千次得到灯丝,那是智慧的创造,但是如果他今后制造每根灯丝都要重复原来的1000次试错过程就是愚蠢的行为.

我认为现在1000次试错的过程正在被人为的扩大。。。。
IBM就是这个方向的带头人。。。

protti 写道


我认为人发明出来的东西永远不可能比人聪明。

草履草最高
48 楼 protti 2007-11-08  
dengyin2000 写道
ray_linn 写道
bcccs 写道
总有某种经验在起作用。不可能穷举。



应该说人脑不是电脑,电脑算鸡鸭同笼每次都会穷举一遍,人脑会cache结果.



你也可以让电脑cache 结果。  hibernate的query cache。


我认为人发明出来的东西永远不可能比人聪明。
47 楼 bcccs 2007-11-07  
dengyin2000 写道
ray_linn 写道
bcccs 写道
总有某种经验在起作用。不可能穷举。



应该说人脑不是电脑,电脑算鸡鸭同笼每次都会穷举一遍,人脑会cache结果.



你也可以让电脑cache 结果。  hibernate的query cache。

但是电脑对结果的利用效果不能和人脑比。人脑可以类比归纳。当然在某些领域,电脑也略有一点归纳的能力了。
46 楼 dengyin2000 2007-11-07  
ray_linn 写道
bcccs 写道
总有某种经验在起作用。不可能穷举。



应该说人脑不是电脑,电脑算鸡鸭同笼每次都会穷举一遍,人脑会cache结果.



你也可以让电脑cache 结果。  hibernate的query cache。
45 楼 ray_linn 2007-11-07  
bcccs 写道
总有某种经验在起作用。不可能穷举。



应该说人脑不是电脑,电脑算鸡鸭同笼每次都会穷举一遍,人脑会cache结果.
44 楼 bcccs 2007-11-07  
weiqingfei 写道
Trustno1 写道
抛出异常的爱 写道
Trustno1 写道
我必须指出的是,数学有多种多样.某种数学仅适合于描述某种东西,4的平方根是2,一个人的平方根又什么?hehe.
所谓,能编写出合格的程序,写出格式良好的代码,实际上只不过是通过人肉不断进行试错的过程,而数学的作用就是如何使用机械化去替代人肉,降低试错的成本.

人要是一次能把程序写对的话,银弹就产生了。


爱迪生试错几千次得到灯丝,那是智慧的创造,但是如果他今后制造每根灯丝都要重复原来的1000次试错过程就是愚蠢的行为.


这样理解异常的话不厚道。
写程序不会写1000次同样的程序。

同样,爱迪生要是想发明1000种即使是类似的不同灯丝,他都得试上n次。

总有某种经验在起作用。不可能穷举。

相关推荐

    程序员考试刷题-DAL-test:DAL测试

    程序员考试刷题DAL测试 目录 介绍 随着 21 世纪的到来,教育趋势的敏锐观察者注意到,越来越多的人有兴趣重新思考我们教育孩子和我们自己的方式。 这样做的动机包括粉碎系统的冲动,或“破坏”现有模型并将结果转化...

    讲软件项目中的人员管理PPT学习教案.pptx

    研究显示,经验和专业知识比数学基础更重要,且优秀的程序员不一定具备良好的管理能力。 6. **人员招聘**:项目经理需要区分合格与合适的候选人。合格的人员具备相应的经验,而合适的人员则能真正胜任工作。招聘...

    函数式编程从崛起到没落到再崛起共2页.pdf.zip

    另外,函数式编程的无副作用特性使代码更易于理解和调试,因为程序员不需要担心函数会意外地修改外部状态。 在大数据处理和实时流处理领域,函数式编程框架如Apache Spark和Flink因其天生的分布式计算能力而备受...

    R语言知识体系概览

    R语言是一门统计语言,主要用于数学建模、统计计算、数据处理、可视化等几个方向,R语言天生就不同于其他的编程语言。R语言封装了各种基础学科的计算函数,我们在R语言编程的过程中只需要调用这些计算函数,就可以...

    图像修复实现。使用GPUCUDA、Theano和Tensorflow的并行计算加速图像修复。.zip

    - GPU(图形处理器)天生适合执行并行计算,因为它拥有大量的计算核心,可以同时处理大量数据。相比CPU,GPU在处理大规模数学运算时能提供显著的性能提升,尤其是在处理图像和视频等数据密集型任务时。 3. **CUDA*...

    prolog programming for artificial intelligence

    5. 符号推理:在符号推理任务中,如数学证明、逻辑谜题求解等,Prolog能够提供强大的逻辑推理能力,是人工智能研究中不可或缺的一部分。 综上所述,如果要系统地学习Prolog编程在人工智能中的应用,读者将会接触到...

    Programming-in-Haskell-2nd-Edition.pdf

    函数式编程是一种编程范式,强调用数学函数解决问题,避免了可变状态和副作用。在Haskell中,一切都是不可变的,这使得代码更易于理解和调试。Hutton通过本书引导读者理解如何通过组合简单函数来构建复杂的逻辑。 2...

    桌面计算机上利用格子Boltzmann方法的GPU计算.pdf

    LBM的标准形式涉及其基本的数学模型,该模型通过离散速度模型和碰撞规则来模拟流体行为,其并行特性源于其在空间和时间上的局部性,使得同一时刻的许多计算单元可以独立进行运算。CUDA是NVIDIA公司开发的一种编程...

    A History of Haskell - Being Lazy With Class

    哈斯克尔(Haskell)是一种非严格的、纯函数式编程语言,其名称来源于美国数学家哈斯克尔·加里(Haskell Curry)。在1987年的功能编程语言和计算机架构会议上,众多学者聚集一堂,讨论了一个令人忧虑的现象:功能...

    links:链接到有趣的学习资源

    主题包括但不限于软件工程,数学,物理学,历史和商业。 目录 引号 学一点东西是很危险的事。 喝得深一些,否则不要尝尝皮埃里亚春天的味道。 “每个人都可以学会雕刻:必须教导米开朗基罗如何做到这一点。伟大的...

    OpenGL 中的曲线

    它提供了一种标准接口,使得程序员可以创建复杂的3D图形和动画。在OpenGL中,曲线是描绘复杂形状和路径的重要工具,其中贝塞尔(Bezier)曲线和B样条(BSpline)曲线尤为常用。 **1. 贝塞尔曲线** 贝塞尔曲线是一...

    Java基础面试题 91道.pdf

    计算机无法直接理解人类的自然语言,所以需要程序员使用特定的编程语言来表达思路和方法。 2. Java编程语言:Java是一种面向对象的编程语言,它从C++语言中继承了很多特点,包括类、继承和多态。Java去掉了C++中...

    Functional Programming in Scala

    函数式编程是一种编程范式,它将计算过程视为数学函数的评估。在FP中,函数是第一等公民,意味着它们可以被赋值给变量、作为参数传递给其他函数,甚至作为返回值。这种风格强调无副作用的纯函数,即函数的输出只依赖...

    js函数式编程

    函数式编程(Functional Programming, FP)是一种编程范式,它强调程序执行的过程是通过对数学函数的应用来完成的,而不是通过改变状态和可变数据的方式。在这种范式下,函数被视为一等公民,可以作为参数传递给其他...

    ASP EXCEL导入SQL

    在REST软件架构下我们不能对于XML文件进行序列化处理,这样程序员必须要使用自己的XML绑定框架。而以序列化的JavaScript对象为基础的JSON已经获得了广泛认可,它被认为能以远比XML更好的方式来序列化和传输简单数据...

    功能编程

    功能编程是一种编程范式,它强调计算应被视为数学函数的求值,而不是对状态的改变或命令的执行。在功能编程中,程序是通过组合纯函数(不产生副作用且仅依赖于其输入的函数)来构建的。这种编程风格提供了可预测性、...

    2021_Matf-Git:Git u Haskellu

    【描述】"2021_Matf-Git Git u Haskellu" 可能是指2021年某个数学与计算机科学相关的项目或研讨会,重点是将Git的命令和功能实现于Haskell中。这可能涉及到编写Haskell库来模拟Git操作,或者用Haskell构建一个与Git...

    DynaJ-开源

    对于想要使用DynaJ进行游戏开发的Java程序员,需要掌握Java语言基础,了解基本的图形学原理,以及可能涉及的物理、数学知识。同时,学习DynaJ的API文档和示例代码是快速上手的关键。此外,参与开源社区的讨论和贡献...

Global site tag (gtag.js) - Google Analytics