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

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

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

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

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

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

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

编后语:
记得一位有着10多年开发经验的老程序员曾经说过:“所有的程序本质上就是逻辑。技术你已经较好地掌握了,但只有完成逻辑能力的提高,你才能成为一名职业程序员。”他就象打了一个比方,你十八般武艺都很精通,但就是内力不够,所以永远都成不了武林顶尖高手。而这个内力对于程序员来说,就是你的数学内涵。
分享到:
评论
43 楼 weiqingfei 2007-11-07  
Trustno1 写道
抛出异常的爱 写道
Trustno1 写道
我必须指出的是,数学有多种多样.某种数学仅适合于描述某种东西,4的平方根是2,一个人的平方根又什么?hehe.
所谓,能编写出合格的程序,写出格式良好的代码,实际上只不过是通过人肉不断进行试错的过程,而数学的作用就是如何使用机械化去替代人肉,降低试错的成本.

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


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


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

同样,爱迪生要是想发明1000种即使是类似的不同灯丝,他都得试上n次。
42 楼 Trustno1 2007-11-07  
抛出异常的爱 写道
Trustno1 写道
我必须指出的是,数学有多种多样.某种数学仅适合于描述某种东西,4的平方根是2,一个人的平方根又什么?hehe.
所谓,能编写出合格的程序,写出格式良好的代码,实际上只不过是通过人肉不断进行试错的过程,而数学的作用就是如何使用机械化去替代人肉,降低试错的成本.

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


爱迪生试错几千次得到灯丝,那是智慧的创造,但是如果他今后制造每根灯丝都要重复原来的1000次试错过程就是愚蠢的行为.
41 楼 抛出异常的爱 2007-11-07  
Trustno1 写道
我必须指出的是,数学有多种多样.某种数学仅适合于描述某种东西,4的平方根是2,一个人的平方根又什么?hehe.
所谓,能编写出合格的程序,写出格式良好的代码,实际上只不过是通过人肉不断进行试错的过程,而数学的作用就是如何使用机械化去替代人肉,降低试错的成本.

人要是一次能把程序写对的话,银弹就产生了。
但数学的作用不是替代人肉。。。
而是减少人脑的负担。。。
40 楼 protti 2007-11-07  
引用
根据平常干的工作

根据每个人的想法。
引用
重不重要自己都知道

自己对不对自己都知道
引用
不需要一个统一的标准。

不需要讨论出结果。(我比较赞同这个)
39 楼 JavaInActoin 2007-11-07  
protti 写道
JavaInActoin 写道
这没什么好讨论的,根据平常干的工作,重不重要自己都知道,这里大部分都学过几门大学数学,用的上的就继续研究,也有很多人基本用不上,不需要一个统一的标准,也不需要哲学式地判断到底要不要数学。

~~!讨论是因为LZ引用的一句话。
如果按照你这个说法,以后什么都不用讨论了,毕竟每个人都有自己的想法。


不能这样推理吧,我只是说简单的是非不需要费这么大力去讨论,把简单事情复杂化。
38 楼 protti 2007-11-07  
JavaInActoin 写道
这没什么好讨论的,根据平常干的工作,重不重要自己都知道,这里大部分都学过几门大学数学,用的上的就继续研究,也有很多人基本用不上,不需要一个统一的标准,也不需要哲学式地判断到底要不要数学。



~~!讨论是因为LZ引用的一句话。
如果按照你这个说法,以后什么都不用讨论了,毕竟每个人都有自己的想法。
37 楼 JavaInActoin 2007-11-07  
这没什么好讨论的,根据平常干的工作,重不重要自己都知道,这里大部分都学过几门大学数学,用的上的就继续研究,也有很多人基本用不上,不需要一个统一的标准,也不需要哲学式地判断到底要不要数学。
36 楼 protti 2007-11-07  
Trustno1 写道
我必须指出的是,数学有多种多样.某种数学仅适合于描述某种东西,4的平方根是2,一个人的平方根又什么?hehe.
所谓,能编写出合格的程序,写出格式良好的代码,实际上只不过是通过人肉不断进行试错的过程,而数学的作用就是如何使用机械化去替代人肉,降低试错的成本.



数学给程序员带来了什么好处?也许从逻辑的角度来看确实是同一种思维。
1+1=2
1+1是条件
2是结果

所以学习数学无非就是让我们时刻计算结果。如果涉及到更深的应用,可能就不会太多了吧。
比如web开发的人,最常用的就是接触各种框架,以及它们之间的组合,数学用得就不那么多了吧?

引用
用机械化去替代人肉,降低出错的成本

无非也是一种提前考虑结果的过程。
35 楼 deeravenger 2007-11-07  
不觉得平常工作中数学有多么重要
我想对于大部分程序员来讲都是这样吧
34 楼 axgle 2007-11-07  
把标题"真正的程序员天生爱数学"以及编后语去掉,再看叶帆的观点.也没有什么不对.
1.叶帆也承认高等数学与一般程序员的关系并不是很大,只需理解和实现即可。因为在实际工作中有时候很少用到高等数学的知识
==yes,right
2.特殊群体的程序员(如搜索开发、图像处理等等)和研究所的研究员似乎可能需要更多的数学知识,至于一般程序员,叶帆认为“只要具备高中数学基础就已经足够。”
==yes,right
3.他还认为在算法概念上编写软件不是什么好方法。对此,叶帆认为在编程没有涉及到高端技术层面上的时候,算法概念上的编写软件只是极少人的课题,因为面向对象的编程的思想已经深入人心。“当然如果你是一个科学家(或研究员),数学一定离你很近,甚至有可能数学是你工作的灵魂,而计算机代码仅仅是表达你思想的一种道具。”
==yes,right

最后一句话我要驳斥他一下:他认为"计算机代码仅仅是表达你思想的一种道具"

反驳过程很简单:"叶凡仅仅是喜欢数学思考的一种道具".

去掉两个字就OK了:"仅仅"

因为"仅仅"这两个字含有轻视的味道.没有数学,没有计算机,没有你我他,地球照样运转.
虽然数学计算机你我他都很重要.但是与地球的运转没有什么关系.
例如微积分就和程序员无关.但离散数学靠点谱...
33 楼 Trustno1 2007-11-07  
另外说一句,对于应用型的程序员来说,数学真正会起作用的地方,应该是程序语言所要处理的对象,而不是反过来。
32 楼 ozzzzzz 2007-11-07  
庄表伟 写道
不知道这个叶帆的数学水平与程序能力究竟如何,毕竟微软MVP,代表的是价值,而非能力。
就从这篇文章来看,这个叶帆的逻辑思维能力,大有问题。

1、“从事软件开发十余年”,能够说明他是“地地道道”的程序员吗?一个人从事多少年的软件开发,才算是地地道道的程序员呢?多少年以下,就不够地道呢?

2、一个地地道道的程序员,与一个真正的程序员,是等价关系吗?

3、叶帆很喜欢数学,姑且认为他已经是一个真正的程序员,能够推论出:“真正的程序员,天生就应该喜欢数学”吗?

4、“所以我认为真正的程序员,不存在应不应当学习数学的问题,只要工作需要,随时都可以深入学习。”叶帆如是说。
如果按照叶帆的逻辑,在工作不需要的时候,程序员还需要去研究、深入学习数学吗?
如果工作中没有需要,这个程序员,如何体现出自己喜欢数学呢?————因为我当年参加过学校组织的数学竞赛(注意,是学校组织的)

5、在“大部分实现还是借鉴了现成的代码”的情况下,叶帆同学的数学能力体现在哪里呢?

6、至于一般程序员,叶帆认为“只要具备高中数学基础就已经足够。”
那么,一个从事了十余年软件开发的一般程序员,算不算真正的程序员呢?
一个“只具备高中数学基础”的程序员,算不算天生就喜欢数学呢?

7、喜欢数学,还得是天生?后天喜欢的都不行?

8、最后一个问题:计算机先驱如约翰冯诺伊曼(John von Neumann)和阿兰图灵(Alan Turing),是程序员吗?

按照你的分析,这个MVP肯定不是真正的程序员——逻辑太差了。
31 楼 Trustno1 2007-11-07  
我必须指出的是,数学有多种多样.某种数学仅适合于描述某种东西,4的平方根是2,一个人的平方根又什么?hehe.
所谓,能编写出合格的程序,写出格式良好的代码,实际上只不过是通过人肉不断进行试错的过程,而数学的作用就是如何使用机械化去替代人肉,降低试错的成本.
30 楼 protti 2007-11-07  
片面的追求数学的人,我认为才不是合格的程序员。

程序员,顾名思义,能编写出合格的程序,写出格式良好的代码。谁管你程序数学分量有多高,WEB开发的程序员,又用了多少数学呢?
29 楼 庄表伟 2007-11-07  
不知道这个叶帆的数学水平与程序能力究竟如何,毕竟微软MVP,代表的是价值,而非能力。
就从这篇文章来看,这个叶帆的逻辑思维能力,大有问题。

1、“从事软件开发十余年”,能够说明他是“地地道道”的程序员吗?一个人从事多少年的软件开发,才算是地地道道的程序员呢?多少年以下,就不够地道呢?

2、一个地地道道的程序员,与一个真正的程序员,是等价关系吗?

3、叶帆很喜欢数学,姑且认为他已经是一个真正的程序员,能够推论出:“真正的程序员,天生就应该喜欢数学”吗?

4、“所以我认为真正的程序员,不存在应不应当学习数学的问题,只要工作需要,随时都可以深入学习。”叶帆如是说。
如果按照叶帆的逻辑,在工作不需要的时候,程序员还需要去研究、深入学习数学吗?
如果工作中没有需要,这个程序员,如何体现出自己喜欢数学呢?————因为我当年参加过学校组织的数学竞赛(注意,是学校组织的)

5、在“大部分实现还是借鉴了现成的代码”的情况下,叶帆同学的数学能力体现在哪里呢?

6、至于一般程序员,叶帆认为“只要具备高中数学基础就已经足够。”
那么,一个从事了十余年软件开发的一般程序员,算不算真正的程序员呢?
一个“只具备高中数学基础”的程序员,算不算天生就喜欢数学呢?

7、喜欢数学,还得是天生?后天喜欢的都不行?

8、最后一个问题:计算机先驱如约翰冯诺伊曼(John von Neumann)和阿兰图灵(Alan Turing),是程序员吗?
28 楼 jigsaw 2007-11-07  
mathematics is more interesting than programming
in that anyone can play with it
without any restraint on hardwares.
27 楼 bcccs 2007-11-07  
抛出异常的爱 写道
ozzzzzz 写道
逻辑是逻辑,数学是数学。逻辑和数学有关联,但是不能说数学好逻辑就一定好,反之也不能说逻辑强数学就一定强。

问题是中国的大多数学生没学过逻辑学
不得不用数学来当练习。
就如同美少女梦工厂里上不起礼仪,就去学舞蹈

谁说没有学过,基本上所有国家的人,逻辑启蒙都是从平面几何学起到。如果平面几何证明你能把逻辑弄清楚。你的逻辑能力差不到哪里去。
26 楼 抛出异常的爱 2007-11-07  
ozzzzzz 写道
抛出异常的爱 写道
ozzzzzz 写道
逻辑是逻辑,数学是数学。逻辑和数学有关联,但是不能说数学好逻辑就一定好,反之也不能说逻辑强数学就一定强。

问题是中国的大多数学生没学过逻辑学
不得不用数学来当练习。
就如同美少女梦工厂里上不起礼仪,就去学舞蹈

因此才会有csdn,而这篇文章恰好就来自csdn。

说话太阴损了。。。
25 楼 ozzzzzz 2007-11-07  
抛出异常的爱 写道
ozzzzzz 写道
逻辑是逻辑,数学是数学。逻辑和数学有关联,但是不能说数学好逻辑就一定好,反之也不能说逻辑强数学就一定强。

问题是中国的大多数学生没学过逻辑学
不得不用数学来当练习。
就如同美少女梦工厂里上不起礼仪,就去学舞蹈

因此才会有csdn,而这篇文章恰好就来自csdn。
24 楼 抛出异常的爱 2007-11-07  
ozzzzzz 写道
逻辑是逻辑,数学是数学。逻辑和数学有关联,但是不能说数学好逻辑就一定好,反之也不能说逻辑强数学就一定强。

问题是中国的大多数学生没学过逻辑学
不得不用数学来当练习。
就如同美少女梦工厂里上不起礼仪,就去学舞蹈

相关推荐

    程序员考试刷题-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