新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     >>W3CHINA.ORG讨论区<<     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> It is the theory that decides what can be observed. - Albert Einstein
    [返回] W3CHINA.ORG讨论区 - 语义网·描述逻辑·本体·RDF·OWL计算机理论与工程『 理论计算机科学 』 → 【转载]浅谈程序员的数学修养 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 488201 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 【转载]浅谈程序员的数学修养 举报  打印  推荐  IE收藏夹 
       本主题类别: 信息检索 | 科研生涯    
     DMman 帅哥哟,离线,有人找我吗?魔羯座1984-1-11
      
      
      威望:1
      头衔:数据挖掘青年
      等级:研二(Pi-Calculus看得一头雾水)(版主)
      文章:803
      积分:5806
      门派:W3CHINA.ORG
      注册:2007/4/9

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给DMman发送一个短消息 把DMman加入好友 查看DMman的个人资料 搜索DMman在『 理论计算机科学 』的所有贴子 点击这里发送电邮给DMman 访问DMman的主页 引用回复这个贴子 回复这个贴子 查看DMman的博客楼主
    发贴心情 【转载]浅谈程序员的数学修养


    刚才又看到有人讨论编程和数学的关系,转一篇不错的文章给大家看看:

                              浅谈程序员的数学修养

    原文出自http://www.eefocus.com/html/07-05/4139170505009667.shtml

        可能有很多朋友在网上看过google公司早几年的招聘广告,它的第一题如下了:{first 10-digit prime found in consecutive digits e}.com,e中出现的连续的第一个10个数字组成的质数。据说当时这个试题在美国很多地铁的出站口都有大幅广告,只要正确解答了这道题,在浏览器的地址栏中输入这个答案,就可以进入下一轮的测试,整个测试过程如同一个数学迷宫,直到你成为google的一员。

      又如Intel某年的一道面试题目:巴拿赫病故于1945年8月31日。他的出生年份恰好是他在世时某年年龄的平方,问:他是哪年出生的?这道看似很简单的数学问题,你能不能能快地解答呢?

      下面则是一道世界第一大软件公司微软的招聘测试题:中间只隔一个数字的两个素数被称为素数对,比如5和7,17和19,证明素数对之间的数字总能被6 整除(假设这两个素数都大于6),现在证明没有由三个素数组成的素数对。这样的试题还有很多很多,这些题目乍初看上去都是一些数学问题。但是世界上一些著名的公司都把它们用于招聘测试,可见它们对新员工数学基础的重视。数学试题与应用程序试题是许多大型软件公司面试中指向性最明显的一类试题,这些试题就是考察应聘者的数学能力与计算机能力。

      某咨询公司的一名高级顾问曾说:微软是一家电脑软件公司,当然要求其员工有一定的计算机和数学能力,面试中自然就会考察这类能力。微软的面试题目就考察了应聘人员对基础知识的掌握程度、对基础知识的应用能力,甚至暗含了对计算机基本原理的考察。所以,这样的面试题目的确很“毒辣”,足以筛选到合适的人。

      四川大学数学学院的曹广福教授曾说过:“一个大学生将来的作为与他的数学修养有很大的关系”。大学计算机专业学生都有感触,计算机专业课程中最难的几门课程莫过于离散数学、编译原理、数据结构,当然像组合数学、密码学、计算机图形学等课程也令许多人学起来相当吃力,很多自认为数据库学得很好的学生在范式、函数依赖、传递依赖等数学性比较强的概念面前感到力不从心,这些都是因为数学基础或者说数学知识的缺乏所造成的。

      数学是计算机的基础,这也是为什么考计算机专业研究生数学都采用最难试题(数学一) 的原因,当然这也能促使一些新的交叉学科如数学与应用软件、信息与计算科学专业等飞速发展。许多天才程序员本身就是数学尖子,众所周知,Bill Gates的数学成绩一直都很棒,他甚至曾经期望当一名数学教授,他的母校——湖滨中学的数学系主任弗雷福·赖特曾这样谈起过他的学生:“他能用一种最简单的方法来解决某个代数或计算机问题,他可以用数学的方法来找到一条处理问题的捷径,我教了这么多年的书,没见过像他这样天分的数学奇才。他甚至可以和我工作过多年的那些优秀数学家媲美。当然,比尔也各方面表现得都很优秀,不仅仅是数学,他的知识面非常广泛,数学仅是他众多特长之一。”。影响一代中国程序人的金山软件股份有限公司董事长求伯君当年高考数学成绩满分进一步说明了问题。很多数学基础很好的人,一旦熟悉了某种计算机语言,他可以很快地理解一些算法的精髓,使之能够运用自如,并可能写出时间与空间复杂度都有明显改善的算法。

      程序设计当中解决的相当一部分问题都会涉及各种各样的科学计算,这需要程序员具有什么样的基础呢?实际问题转换为程序,要经过一个对问题抽象的过程,建立起完善的数学模型,只有这样,我们才能建立一个设计良好的程序。从中我们不难看出数学在程序设计领域的重要性。算法与计算理论是计算机程序设计领域的灵魂所在,是发挥程序设计者严谨,敏锐思维的有效工具,任何的程序设计语言都试图将之发挥得淋漓尽致。

      程序员需要一定的数学修养,不但是编程本身的需要,同时也是培养逻辑思维以及严谨的编程作风的需要。数学可以锻炼我们的思维能力,可以帮助我们解决现实中的问题。可以帮助我们更高的学习哲学。为什么经常有人对一些科学计算程序一筹莫展,他可以读懂每一行代码,但是却无法预测程序的预测结果,甚至对程序的结构与功能也一知半解,给他一个稍微复杂点的数学公式,他可能就不知道怎么把它变成计算机程序。很多程序员还停留在做做简单的MIS,设计一下 MDI,写写简单的Class或用SQL语句实现查询等基础的编程工作上,对于一些需要用到数学知识的编程工作就避而远之,当然实现一个累加程序或者一个税率的换算程序还是很容易的,因为它们并不需要什么高深的数学知识。

      一名有过10多年开发经验的老程序员曾说过:“所有程序的本质就是逻辑。技术你已经较好地掌握了,但只有完成逻辑能力的提高,你才能成为一名职业程序员。打一个比方吧,你会十八般武艺,刀枪棍棒都很精通,但就是力气不够,所以永远都上不了战场,这个力气对程序员而言就是逻辑能力(其本质是一个人的数学修养,注意,不是数学知识)。”

      程序员的数学修养不是一朝一夕就可以培养的。数学修养与数学知识不一样,修养需要一个长期的过程,而知识的学习可能只是一段短暂的时间。下面是一些我个人对于程序员如何提高与培养自己的数学修养的基本看法。

    首先,应该意识到数学修养的重要性。作为一个优秀的程序员,一定的数学修养是十分重要也是必要的。数学是自然科学的基础,计算机科学实际上是数学的一个分支。计算机理论其实是很多数学知识的融合,软件工程需要图论,密码学需要数论,软件测试需要组合数学,计算机程序的编制更需要很多的数学知识,如集合论、排队论、离散数学、统计学,当然还有微积分。计算机科学一个最大的特征是信息与知识更新速度很快,随着数学知识与计算机理论的进一步结合,数据挖掘、模式识别、神经网络等分支科学得到了迅速发展,控制论、模糊数学、耗散理论、分形科学都促进了计算机软件理论、信息管理技术的发展。严格的说,一个数学基础不扎实的程序不能算一个合格的程序员,很多介绍计算机算法的书籍本身也就是数学知识的应用与计算机实现手册。

      其次,自身数学知识的积累,培养自己的空间思维能力和逻辑判断能力。数学是一门分支众多的学科,我们无法在短暂的一生中学会所有的数学知识,像泛函理论、混沌理论以及一些非线性数学问题不是三五几天就可以掌握的。数学修养的培养并不在与数学知识的多少,但要求程序员有良好的数学学习能力,能够很快地把一些数学知识和自己正在解决的问题联系起来,很多理学大师虽然不是数学出身,但是他们对数学有很强的理解能力和敏锐的观察力,于是一系列新的学科诞生了,如计算化学、计算生物学、生物信息学、化学信息学、计算物理学,计算材料学等等。数学是自然学科的基础,计算机技术作为理论与实践的结合,更需要把数学的一些精髓融入其中。从计算机的诞生来看它就是在数学的基础上产生的,最简单的0、1进制就是一个古老的数学问题。程序设计作为一项创造性很强的职业,它需要程序员有一定的数学修养,也具有一定的数学知识的积累,可以更好地把一些数学原理与思想应用于实际的编程工作中去。学无止境,不断的学习是提高修养的必经之路。

      第三,多在实践中运用数学。有些高等学校开设了一门这样的课程——《数学建模》。我在大学时期也曾学过,这是一门内容很丰富的课程。它把很多相关的学科与数学都联系在一起,通过很多数学模型来解决实际的生产生活问题,很多问题的解决需要计算机程序来实现。我在大学和研究生阶段都参加过数学建模竞赛,获得了不少的经验,同时也进一步提高了自己的数学修养。实际上,现在的程序设计从某些角度来看就是一个数学建模的过程,模型的好坏关系到系统的成败,现在数学建模的思想已经用于计算机的许多相关学科中,不单只是计算机程序设计与算法分析。应该知道,数学是一门需要在实践中展示其魅力的科学,而计算机程序也是为帮助解决实际问题而编制的,因此,应该尽量使它们结合起来,在这个方面,计算机密码学是我认为运用数学知识最深最广泛的,每一个好的加密算法后面都有一个数学理论的支持,如椭圆曲线、背包问题、素数理论等。作为一名优秀的程序员,应该在实际工作中根据需要灵活运用数学知识,培养一定的数学建模能力,善于归纳总结,慢慢使自己的数学知识更加全面,数学修养得到进一步提高。

      第四,程序员培养制度与教学的改革。许多程序员培养体制存在很多缺陷,一开始就要求学员能够快速精通某种语言,以语言为中心,对算法的核心思想与相关的数学知识都一笔带过,讲得很少,这造成很多程序员成为背程序的机器,这样不利于程序员自身的快速成长,也不利于程序员解决新问题。我在长期的程序员培训与计算机教学工作采用了一些与传统方式不一致的方法,收到了一定的效果。很多初学程序的人往往写程序时有时候会有思维中断,或者对一些稍难的程序觉得无法下手,我采用了一些课前解决数学小问题的方法来激励大家的学习兴趣,这些小问题不单单是脑筋急转弯,其中不少是很有代表意义的数学思考题。通过数学问题来做编程的热身运动,让学员在数学试题中激发自己的思维能力,记得有位专家曾经说过,经常做做数学题目会使自己变聪明,很长时间不去接触数学问题会使自己思维迟钝。通过一些经典的数学问题来培养学员的思维的严谨性和跳跃性。很多人可能不以为然,其实有些看似简单的问题并不一定能够快速给出答案,大脑也是在不断的运用中变更加灵活的。不信吗?大家有兴趣可以做做下面这道题目,看看能不能在1分钟之内想到答案,这只是一道小学数学课后习题。很多人认为自己的数学基础很好,但是据说这道题目90%以上的人不能在一个小时内给出正确答案。试试,如果你觉得我说的是错的。

      证明:AB+AC>DB+DC(D为三角形ABC的一个内点)。

      最后,多学多问,多看好书,看经典。我在这里向大家推荐两部可能大家已经很熟悉的经典的计算机算法教材,它们中间很多内容其实就是数学知识的介绍。第一部是《算法导论》,英文名称:Introduction to Algorithms,作者:Thomas H. Cormen ,Charles E. Leiserson ,Ronald L. Rivest ,Clifford Stein。本书的主要作者来自麻省理工大学计算机,作者之一Ronald L.Rivest 由于其在公开秘钥密码算法RSA上的贡献获得了图灵奖。这本书目前是算法的标准教材,美国许多名校的计算机系都使用它,国内有些院校也将本书作为算法课程的教材。另外许多专业人员也经常引用它。本书基本包含了所有的经典算法,程序全部由伪代码实现,这更增添了本书的通用性,使得利用各种程序设计语言进行程序开发的程序员都可以作为参考。语言方面通俗,很适合作为算法教材和自学算法之用。另一部是很多人都应该知道的Donald.E.Knuth所著《计算机程序设计艺术》,英文名称:The Art of Computer Programming。 Donald.E.Knuth人生最辉煌的时刻在斯坦福大学计算机系渡过,美国计算机协会图灵奖的获得者,是本领域内当之无愧的泰斗。有戏言称搞计算机程序设计的不认识Knuth就等于搞物理的不知道爱因斯坦,搞数学的不知道欧拉,搞化学的不知道道尔顿。被简称为TAOCP的这本巨著内容博大精深,几乎涵盖了计算机程序设计算法与理论最重要的内容。现在发行的只有三卷,分别为基础运算法则,半数值算法,以及排序和搜索(在写本文之际,第四卷已经出来了,我也在第一时间抢购了一本)。本书结合大量数学知识,分析不同应用领域中的各种算法,研究算法的复杂性,即算法的时间、空间效率,探讨各种适用算法等,其理论和实践价值得到了全世界计算机工作者的公认。书中引入的许多术语、得到的许多结论都变成了计算机领域的标准术语和被广泛引用的结果。另外,作者对有关领域的科学发展史也有深入研究,因此本书介绍众多研究成果的同时,也对其历史渊源和发展过程做了很好的介绍,这种特色在全球科学著作中是不多见的。至于本书的价值我觉得Bill Gates先生的话足以说明问题:“如果你认为你是一名真正优秀的程序员读Knuth的《计算机程序设计艺术》,如果你能读懂整套书的话,请给我发一份你的简历”。作者数学方面的功底造就了本书严谨的风格,虽然本书不是用当今流行的程序设计语言描述的,但这丝毫不损伤它“程序设计史诗”的地位。道理很简单,它内涵的设计思想是永远不会过时的。除非英语实在有困难,否则建议读者选用英文版。我个人就是阅读的该书的英文版,虽然花了不少money和时间,但是收获颇丰,值得。

      总之,要想成为一名有潜力有发展前途的程序员,或者想成为程序员中的佼佼者,你一定要培养良好的数学修养。切记:对于一名能够灵活自如编写各种程序的人,数学是程序的灵魂。


       收藏   分享  
    顶(8)
      




    ----------------------------------------------
    数据挖掘青年 http://blogger.org.cn/blog/blog.asp?name=DMman
    纪录片之家 (很多纪录片下载)http://www.jlpzj.com/?fromuid=137653

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/9/27 12:46:00
     
     guangye1358 帅哥哟,离线,有人找我吗?
      
      
      等级:大二(研究汇编)
      文章:32
      积分:209
      门派:XML.ORG.CN
      注册:2006/5/21

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给guangye1358发送一个短消息 把guangye1358加入好友 查看guangye1358的个人资料 搜索guangye1358在『 理论计算机科学 』的所有贴子 引用回复这个贴子 回复这个贴子 查看guangye1358的博客2
    发贴心情 
    好.顶上~
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/10/1 10:38:00
     
     mingjun_ok 美女呀,离线,快来找我吧!
      
      
      等级:大一新生
      文章:3
      积分:68
      门派:XML.ORG.CN
      注册:2007/10/1

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给mingjun_ok发送一个短消息 把mingjun_ok加入好友 查看mingjun_ok的个人资料 搜索mingjun_ok在『 理论计算机科学 』的所有贴子 引用回复这个贴子 回复这个贴子 查看mingjun_ok的博客3
    发贴心情 
    很好,参考,参考!!
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/10/3 13:51:00
     
     jianfan 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:1
      积分:59
      门派:XML.ORG.CN
      注册:2007/10/5

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给jianfan发送一个短消息 把jianfan加入好友 查看jianfan的个人资料 搜索jianfan在『 理论计算机科学 』的所有贴子 引用回复这个贴子 回复这个贴子 查看jianfan的博客4
    发贴心情 
    狂赞同
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/10/5 12:03:00
     
     senjoso 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:4
      积分:71
      门派:W3CHINA.ORG
      注册:2007/10/6

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给senjoso发送一个短消息 把senjoso加入好友 查看senjoso的个人资料 搜索senjoso在『 理论计算机科学 』的所有贴子 引用回复这个贴子 回复这个贴子 查看senjoso的博客5
    发贴心情 
    good。受益不少。
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/10/7 0:05:00
     
     xiaopengyou 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(猛啃高等数学)
      文章:11
      积分:104
      门派:W3CHINA.ORG
      注册:2007/10/8

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给xiaopengyou发送一个短消息 把xiaopengyou加入好友 查看xiaopengyou的个人资料 搜索xiaopengyou在『 理论计算机科学 』的所有贴子 引用回复这个贴子 回复这个贴子 查看xiaopengyou的博客6
    发贴心情 
    值得参考
    !!
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/10/8 19:55:00
     
     okee 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(猛啃高等数学)
      文章:29
      积分:180
      门派:W3CHINA.ORG
      注册:2006/4/26

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给okee发送一个短消息 把okee加入好友 查看okee的个人资料 搜索okee在『 理论计算机科学 』的所有贴子 引用回复这个贴子 回复这个贴子 查看okee的博客7
    发贴心情 
    需要到高的那得那个层次?
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/10/9 9:06:00
     
     mkII 帅哥哟,离线,有人找我吗?
      
      等级:大二(研究C++)
      文章:33
      积分:254
      门派:XML.ORG.CN
      注册:2004/11/26

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给mkII发送一个短消息 把mkII加入好友 查看mkII的个人资料 搜索mkII在『 理论计算机科学 』的所有贴子 引用回复这个贴子 回复这个贴子 查看mkII的博客8
    发贴心情 
    推荐的两本书虽然写得很好,但不一定适合大多数人
    算法导论很多内容讲得不是很深入,比较浅显。Aho等写的算法设计与分析学起来更有感觉一些。
    计算机程序设计艺术确实太难了一点,需要较深的数学功底。可以先看具体数学一书。最好能下载个解释器,边读书边写程序,收获会很大
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/10/13 9:16:00
     
     tyhoho 美女呀,离线,快来找我吧!处女座1982-9-17
      
      
      等级:大一(猛啃高等数学)
      文章:29
      积分:179
      门派:XML.ORG.CN
      注册:2007/10/14

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给tyhoho发送一个短消息 把tyhoho加入好友 查看tyhoho的个人资料 搜索tyhoho在『 理论计算机科学 』的所有贴子 引用回复这个贴子 回复这个贴子 查看tyhoho的博客9
    发贴心情 
    赞同
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/10/14 15:28:00
     
     starrainlove 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(高数修炼中)
      文章:17
      积分:134
      门派:XML.ORG.CN
      注册:2007/9/19

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给starrainlove发送一个短消息 把starrainlove加入好友 查看starrainlove的个人资料 搜索starrainlove在『 理论计算机科学 』的所有贴子 引用回复这个贴子 回复这个贴子 查看starrainlove的博客10
    发贴心情 
    数学修养是要的,但也没那么多时间去搞啊
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/10/17 9:24:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 理论计算机科学 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/11/26 10:55:25

    本主题贴数63,分页: [1] [2] [3] [4]... [7]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    125.000ms