【转】算法与数学之美

       
         
               
  •                          
  •            
  • 首页
  •            
  • 博客
  •            
  • 学院
  •            
  • 下载
  •            
  • GitChat
  •            
  • TinyMind
  •            
  • 论坛
  •            
  • 问答
  •            
  • 商城
  •            
  • VIP
  •            
  • 活动
  •            
  • 招聘
  •            
  • ITeye
  •            
  • CSTO
  •            
  •                          
                                                                                                 
               
  •          
                 
   
   
   
   




    



    

        

            


                算法与数学之美
            


            

交流思想,分享知识,碰撞火花,有容乃大!


        

        
    



   

       

    

                    

浅谈程序员的数学修养


    

    
    

        

                   
                        

                
   

                    

                    

                    
                    
                    浅谈程序员的数学修养

640?wx_fmt=jpeg


可能有很多朋友在网上看过Google公司早几年的招聘广告,它的第一题如下了:{first 10-digit prime found in consecutive digits e}.come中出现的连续的第一个10个数字组成的质数。据说当时这个试题在美国很多地铁的出站口都有大幅广告,只要正确解答了这道题,在浏览器的地址栏中输入这个答案,就可以进入下一轮的测试,整个测试过程如同一个数学迷宫,直到你成为Google的一员。又如Intel某年的一道面试题目:巴拿赫病故于1945831日。他的出生年份恰好是他在世时某年年龄的平方,问:他是哪年出生的?这道看似很简单的数学问题,你能不能能快地解答呢?下面则是一道世界第一大软件公司微软的招聘测试题:中间只隔一个数字的两个素数被称为素数对,比如5和7,1719,证明素数对之间的数字总能被6整除(假设这两个素数都大于6),现在证明没有由三个素数组成的素数对。这样的试题还有很多很多,这些题目乍初看上去都是一些数学问题。但是世界上一些著名的公司都把它们用于招聘测试,可见它们对新员工数学基础的重视。数学试题与应用程序试题是许多大型软件公司面试中指向性最明显的一类试题,这些试题就是考察应聘者的数学能力与计算机能力。某咨询公司的一名高级顾问曾说:微软是一家电脑软件公司,当然要求其员工有一定的计算机和数学能力,面试中自然就会考察这类能力。微软的面试题目就考察了应聘人员对基础知识的掌握程度、对基础知识的应用能力,甚至暗含了对计算机基本原理的考察。所以,这样的面试题目的确很“毒辣”,足以筛选到合适的人。

640?wx_fmt=png


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

640?wx_fmt=gif


程序设计当中解决的相当一部分问题都会涉及各种各样的科学计算,这需要程序员具有什么样的基础呢?实际问题转换为程序,要经过一个对问题抽象的过程,建立起完善的数学模型,只有这样,我们才能建立一个设计良好的程序。从中我们不难看出数学在程序设计领域的重要性。算法与计算理论是计算机程序设计领域的灵魂所在,是发挥程序设计者严谨,敏锐思维的有效工具,任何的程序设计语言都试图将之发挥得淋漓尽致。程序员需要一定的数学修养,不但是编程本身的需要,同时也是培养逻辑思维以及严谨的编程作风的需要。数学可以锻炼我们的思维能力,可以帮助我们解决现实中的问题。可以帮助我们更高的学习哲学。为什么经常有人对一些科学计算程序一筹莫展,他可以读懂每一行代码,但是却无法预测程序的预测结果,甚至对程序的结构与功能也一知半解,给他一个稍微复杂点的数学公式,他可能就不知道怎么把它变成计算机程序。很多程序员还停留在做做简单的MIS,设计一下MDI,写写简单的Class或用SQL语句实现查询等基础的编程工作上,对于一些需要用到数学知识的编程工作就避而远之,当然实现一个累加程序或者一个税率的换算程序还是很容易的,因为它们并不需要什么高深的数学知识。

640?wx_fmt=png


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

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

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

640?wx_fmt=png

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

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

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

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

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

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

∑编辑 | Gemini

640?wx_fmt=png

算法数学之美微信公众号欢迎赐稿

稿件涉及数学、物理、算法、计算机、编程等相关领域,经采用我们将奉上稿酬。

投稿邮箱:[email protected]



               

             

               

            

    
    
    
            

        
            上一篇华为东莞基地:福利与环境到底有多么诱人?        

    

                

        
            下一篇区块链开发、机器(深度)学习暨Python大数据综合应用研修班        

    

    



       

       

          

        
        

            
        

        

            
            
            

                

                    
                

                
                
                
                
                  
                

                    还能输入1000个字符
                    
                

            

        

    

            

        
        
  •        betterdays1234          
               
                 betterdays12342018-07-13 17:39:27#1楼
               
    看来果然这个个不是带来看到;爱上了扩大
                         
           

        
  • 上一页
  • 1
  • 下一页

        
    

       

                    

        


            
                读《程序员数学》有感            

        


        

            


                
                    liu_005
                    
                        liu_005
                        
                    

                

            


            


                05-07
                
                    
                        
                    
                    959

            


        

        


            
                因为本人数学不佳,逻辑思维也不强,最近想提升一下自己的数学素养和逻辑思维能力,于是去图书馆借来了《程序员的数学》一书,拜读之后,有所思有所想,总结如下。总体来说,这本书对于学习了高中数学的人和有最基础...            

        

    


                    

        


            
                程序员如何学数学            

        


        

            


                
                    dc_726
                    
                        dc_726
                        
                    

                

            


            


                08-22
                
                    
                        
                    
                    4853

            


        

        


            
                最近在找一些传统离散数学以外的数学书,想从其他角度补习一下计算机科学相关的数学知识,偶然间就看到一些人都推荐了这篇文章Math For Programmers,通读了一遍果然不错。但文章有点长,所以没...            

        

    

区块链以太坊DApp开发为什么人才稀少?薪资到底有多高?区块链以太坊DApp开发是怎么炼成的?他们都在学些什么?区块链的日益火爆和备受追捧,使得区块链开发人员成为稀缺人才,同时更加伴随着高薪,但是众多转型人员并不了解…………

                                    
                
            
                

        


            
                写给程序员的数理科普:混沌与三体            

        


        

            


                
                    valada
                    
                        valada
                        
                    

                

            


            


                07-01
                
                    
                        
                    
                    54

            


        

        


            
                最初计算机出现就是为解决两方面问题:第一破解密码,第二科学计算。所以想聊聊这两方面的内容,也就是数学、物理学。有时候换个角度会发现自己的技能树还能解决其他学科的问题。而这些都是很实用的问题,其衍生出了...            

        

    


                    

        


            
                有思想的程序员            

        


        

            


                
                    lslxfhc
                    
                        lslxfhc
                        
                    

                

            


            


                05-02
                
                    
                        
                    
                    363

            


        

        


            
                一个            

        

    


                    

        


            
                <em>程序员</em>的数学 -- 结城浩            

        


        

            


                            下载
                
            


            


                2018年05月08日 00:00
            


        

        


            
                <em>程序员</em>的数学.pdf 2016-10-12 上传大小:11.8MB 数学与编程 本书主要介绍了一些编程的数学背景,还有一些算法的<em>思想</em>。通过简单的例子和简练的说明讲明白了很多复杂...            

        

    


                    

        


            
                程序员编程思想之数学素养(转载时请注明出处)            

        


        

            


                
                    MakeYourChance
                    
                        MakeYourChance
                        
                    

                

            


            


                07-25
                
                    
                        
                    
                    1195

            


        

        


            
                数值分析中的哲学思想
(转载时请注明出处)

 


 序
(一)Matable老师?
  (1)秦XX,我们的数值分析老师,匪号“秦三!”,可是我们私底下叫他“Matable老师!”因为上他的课,他常...            

        

    

        

            有思想的程序员 - CSDN博客        

   
     

       2018-7-3      

   
        

                     每一个有思想的程序员都应该通过网络,把... 光研究数理逻辑中的语言概念,似乎不能给出什么有趣的答案。 我觉得书本...        

    

                                

                
            

                    

        


            
                程序员数学修养            

        


        

            


                
                    dc_726
                    
                        dc_726
                        
                    

                

            


            


                06-10
                
                    
                        
                    
                    849

            


        

        


            
                

 

1.什么是数学

按照维基百科上的解释,数学没有准确的概念,它可以笼统地分为纯数学和应用数学。纯数学研究数量(Quantity)、结构(Structure)、空间(Space)、变化(Chan...            
        

    

        

            浅谈程序员数学修养 - CSDN博客        

   
     

       2018-7-19      

   
        

                                              浅谈程序员的数学修养     可能有很多朋友在网上看过Google公司...        

    

                    

        


            
                浅谈程序员数学修养            

        


        

            


                
                    chengjunming123
                    
                        chengjunming123
                        
                    

                

            


            


                07-19
                
                    
                        
                    
                    118

            


        

        


            
                                                  浅谈程序员的数学修养

 

 

 

可能有很多朋友在网上看过Google公司早几年的招聘广告,它的第一题如下了:{first 1...            
        

    


                    

        


            
                程序员的文学修养            

        


        

            


                
                    rub00001
                    
                        rub00001
                        
                    

                

            


            


                11-11
                
                    
                        
                    
                    572

            


        

        


            
                据说世界上一切都是相通的,马克思说是统一于物质;有哲学家说一切都是数学;还有王守仁的“心外无物”;等等。程序员既然是喜欢一点逻辑思维的,那么我们也需要扩展一些阅读,罗素当初就是觉得生活没有什么意思,然...            

        

    


            
                        

            

                


                    
                        疯狂Java程序员基本修养PDF                    

                


                


                    2018年02月13日
                    62.61MB
                    下载
                


            

            

                
                    
                

            

        

                    

        


            
                读书笔记之《程序员的自我修养》            

        


        

            


                
                    zuoside__lord
                    
                        zuoside__lord
                        
                    

                

            


            


                05-14
                
                    
                        
                    
                    41

            


        

        


            
                目前看到 可执行文件elf里,太好看了,哈哈哈 明天继续看,唯一不好的就是虚拟机麻烦,缺linux 手机敲代码复杂,还是买个云服务器算了,晚安。...            

        

    


                    

        


            
                《疯狂Java程序员基本修养》笔记(1-5)            

        


        

            


                
                    sinat_22797429
                    
                        sinat_22797429
                        
                    

                

            


            


                06-05
                
                    
                        
                    
                    449

            


        

        


            
                第一章:
1. 数组初始化的两种方式:


静态初始化:初始化时由数组显式指定每个数组元素的初始值,由系统决定数组的长度。
动态初始化:初始化时程序员只指定数组长度,由系统为数组元素分配初始值。

2...            
        

    


                    

        


            
                程序员的自我修养——读书笔记            

        


        

            


                
                    lemonwxj
                    
                        lemonwxj
                        
                    

                

            


            


                05-11
                
                    
                        
                    
                    1223

            


        

        


            
                第一部分:温故而知新 
第一章:介绍基本的背景知识——操作系统、线程、硬件1、关于C语言中的hello world这些问题你都清楚吗? 
 
2、计算机硬件设备的三个核心部件: 
     1》中央处...            

        

    


            
        

        


            
                Notes:《程序员的自我修养——链接、装载与库》            

        


        

            


                
                    Elsa_Rong
                    
                        Elsa_Rong
                        
                    

                

            


            


                12-19
                
                    
                        
                    
                    139

            


        

        


            
                记录下每章的知识点,便于以后对着这份知识图谱,复习和重组。温故而知新万变不离其宗掌握硬件中的核心部件:CPU、内存、I/O控制芯片 
了解CPU核心频率提升过程中硬件构架的演进:从Bus,到PCI/I...            

        

    


                    

        


            
                属于自己的《程序员的自我修养》之温故而知新            

        


        

            


                
                    dearKundy
                    
                        dearKundy
                        
                    

                

            


            


                12-04
                
                    
                        
                    
                    820

            


        

        


            
                最近看了一本由俞甲子和石凡写的《程序员的自我修养》,这本书讲的通俗易懂,非常适合初学者去学习。而我便把最精彩的部分呈现出来。

第一章:温故而知新

第一章主要是巩固和总结计算机软硬件体系里面几个重要...            
        

    


                        

            

                


                    
                        程序员的自我修养--链接、装载与库(高清带完整书签版).pdf                    

                


                


                    2017年11月14日
                    33.58MB
                    下载
                


            

            

                
                    
                

            

        

                        

            

                


                    
                        Java程序员的基本修养(PDF版)                    

                


                


                    2014年04月18日
                    63.36MB
                    下载
                


            

            

                
                    
                

            

        

                    

        


            
                《程序员的自我修养》读书笔记            

        


        

            


                
                    u012927281
                    
                        u012927281
                        
                    

                

            


            


                01-27
                
                    
                        
                    
                    790

            


        

        


            
                程序员自我修养第六章读书笔记            

        

    


            
        

        


            
                程序员的自我修养—链接、装载与库pdf            

        


        

            


                
                    cf406061841
                    
                        cf406061841
                        
                    

                

            


            


                02-07
                
                    
                        
                    
                    478

            


        

        


            
                下载地址:网盘下载   内容简介编辑《程序员的自我修养:链接、装载与库》对装载、链接和库进行了深入浅出的剖析,并且辅以大量的例子和图表,可以作为计算机软件专业和其他相关专业大学本科高年级学生深入学习系...            

        

    


            
           

               

没有更多推荐了,返回首页


           

       

   

   





    














    
    
    
    
    

    

 
     

不良信息举报

                           
         
             
                                   

浅谈程序员的数学修养

             
             
                                   
                                                                                                                                                                           
             
             
                                   
                                       
             
             
                                   
                                           

最多只允许输入30个字

                 
             
         
         
                                     
     
 
 

 

 转载

你可能感兴趣的:(【转】算法与数学之美)