编程 和 数学 的关系是什么?
准备买本 《黑客与画家》和《怎样解题》补充一下。(本人在学习php零基础 之前没学过c/c++ ) 展开
数学是基础学科,有丰富的数学基础可以对理解编程中的逻辑有帮助。
编程对不同的人有不同的意义:
对于一般的程序员就是代码的产出和可运行程序(数学在这里面并不是特别重要,更重要的是对各种框架的理解、熟练掌握、设计模式等)。
对于算法工程师来说,数学就很重要了(例如机器学习,密码学,计算机图形学等,当然这个对题主来说还太遥远)。
题主说的函数实际上就是为了实现目的的一种封装形式,而递归只是在函数中调用自身(当然需要终止条件)。
扩展资料:
编程的核心是什么,总结起来就是编程思想和逻辑算法,编程思想需要不断的总结归纳,框架思想也是编程思想的一种,需要从千千万万的代码逻辑种抽象出解决问题的方案或者框架。
说的通俗一点就是解决问题的能力,问题也是分为很多种,有直接简单的问题,有长期复杂的问题,也有未来还没有发生的问题,解决方案有直接的办法,也有通过设计框架来解。
所以格局低一点的人可能就是着重眼前实际问题的解决,格局高的人就会想着设计一个框架也就是业内常说的轮子来规避类似问题的发生,这就是普通程序员和顶级高手的差距,出发点和格局都不在一个步调上。
至于具体解决问题的模式设计,就会涉及到逻辑算法,简单的可能非常容易理解,复杂一点或者多种组合了基本上就需要用到数学知识了,所以只有认识到这一层面才会觉得数学这东西对于编程显得特别重要。
特别针对一些复杂问题或者解决根本问题上,由于自身条件或者所处的工作岗位决定,有些程序员甚至一辈子都不会接触到,但并不意味着不存在,数学对于编程逻辑的重要性不言而喻。
不管是分析解决问题,还是喜欢从更大的格局来解决问题,不要小瞧数学对编程的影响,虽然不是每个编程角落都能和数学扯上关系,但对于重要场景一定不会缺席,但也没有必要为了学习编程专门去学一遍数学,如果是在校学生看到可能意义会更加重大一些。
所以讲数学逻辑好的人,学习编程是有一定优势的,喜欢逻辑推理的人从骨子看是非常适合做一名优秀的程序员,当然真的优秀,还需要发自内心的热爱。
参考资料来源:
第一,编写程序体现的是一个人的逻辑思维,既然涉及到逻辑,必然会与数学有些关系。但是与数学关系的深浅要与你所涉及的方面有关。
第二,编程中必须要学的数学:
1.最基本的数字与运算知识:二进制的概念(在哈夫曼树,哈弗曼编码等方面有直接的应用),取余的概念(在循环链表,随机数方面有应用),基础平面几何(在绘制窗口,绘制曲线,自定义按钮等图形化的地方会用到),还有些很基础的数学知识绝对不超出初中的范畴。
2.计算机中的数学知识:主要的一门叫做离散数学,讲的是逻辑代数的相关知识,其实在真正的编程中不会直接体现这门课的重要性,对于初学者只要知道:与或非是怎么回事,什么是集合就可以了。离散数学还涉及到一些图与树的概念,我现在先把这些划归到数据结构中。
3.我前面说了,编程与你的需求有直接的关系,有些编程领域与数学的知识密不可分:
1)搞底层:举个例子,如果你想设计一套你自己的windows字体,那么肯定涉及到字体平滑,字体平滑就涉及到一个很难的数学知识:插值。这个知识在数值分析中讲解,而且没有高等数学的基础,这门课想学会的可能性几乎是零。。。这门课主要解决的是高等数学中的问题如何用计算机解决,比如:泰勒插值,拉格朗日插值,求解一般方程或微分方程的解,还有的我忘了,反正都是很难的知识。而底层的很多编程都是以这些为基础的。
2)搞图形学:CG技术由于在游戏中的如日中天,使得很多初高中生对图形学神往已久,但却不知计算机图形学的知识是建立在很多大学数学课程的基础上的。尤其是图形学理论的学习,没有线性代数的基础是根本看不懂的。而在三维视图方面又要涉及到高等数学中极坐标的知识。很多算法,比如梁-Baskey算法对于平面几何分析水平的要求是非常高的!如果你想搞游戏设计,动画电影(这个是要写脚本程序的,否则画面哪能那么好),我劝你还是到了大学再深入学习吧。
3)搞算法:学习算法与其说数学要好,还不如说成是智力要好。。。比如分治法,动态规划算法,回溯法等对于问题的前期分析要求很高,尤其是列出递归方程,这些我觉得是在考智力。还有一些,比如图算法,树的应用,排序,查找,这些知识涉及到计算机专业的另一门课程:数据结构,这门课是计算机专业的核心课程之一,也是专业与非专业的最大区别。这门课对数学要求不高,但对于一个人的思维要求比较高。还有像计算几何的问题,那就是纯数学问题了。。。
4)搞密码学:我不搞这方面,而且也没研究过,但听说这方面对数学要求极高!由于我的数学比较好,别人还推荐过我去搞这方面,但是我一想到面对的都是数字,我就退缩了。。。
以上就是我所知道的与数学有关的计算机分支,每个方面都够人学一辈子,而且学好了,前途与钱途都是大大的!
第三,这么多方面都跟数学有关,那编程岂不没法学了?还有些方面对于数学要求相对较低,我说的相对较低是由于不管哪方面都会涉及到一些基础的数学算法。总的来说,越往高层,对数学的要求越低,比如MFC,那些网络编程,系统编程都是封装好的,但对于一个系统来说整体的规划和设计更关键,就是说前期的需求分析、逻辑结构设计和物理结构设计比编码更重要,当然工资也更高。。。
最后,我想给你提些学习编程的建议:
1)由于你的年龄还小,中国的教育体质问题,希望你不要把太多的精力放在这上面。。。我想你懂的。虽然听说过哪个孩子做了个游戏之后成了百万富翁,但这么多年了,似乎只有他一个,不要怀疑自己的实力,但更不要幻想你有这个运气。。。
2)编程注重逻辑思维,你才是初中生,大脑的发育不知是否成熟(绝不是说你智力低,你应该知道大脑发育是有阶段的吧),所以要以语言的基础为主,这个对数学要求不高。
3)请选一门语言去练习,编程注重实践,没有实践只有理论那就等于没学,所以一定多练练。至于语言,我推荐学习C或C++,至于C与C++是怎么回事,怎么学习,这是另一个比较难的话题。。。注意别上来就学VC++(MFC),否则你会一事无成!
4)编程很枯燥,所以要耐得住性子,不要一见到难题就退缩,一见到不会的概念就把书扔了,不会的时候请多看看基础,八成是语言基础不到位。
就写这么多吧,希望我的回答对你有帮助。你若有什么问题还可以继续问,若是编程过程中遇到什么问题也可以问我,很欢迎的!
所以对大多数人来说,在数学方面都不太可能取得什么很深的造诣。直白一点能学好数学的人太少。数学是又深奥又费解学习成本巨大需要耗费大量时间学完不用立马就忘的学科。所以说数学重要,先问问你自己能不能学会。
其次,计算机学科跟数学根本就不是一门学科,不存什么包含关系。计算机编程有自己的理论体系,很多跟数学关系不大。学好编程最重要的是对你学的编程语言的熟练运用和工具SDK的烂熟于心。每个语言都有自己的设计理念,不存在什么好学的编程语言。
所以说,题主, 你想得太远了。软件开发需要用到的知识比数学重要的太多了。比如英语。而数学对于大多数人来说是最难学也是最不重要的知识,基本上是学了就忘忘了就扔扔了也没感觉的那种,很多搞编程的可能一辈子也用不到数学知识。为什么?理解C++的指针和多态需要数学吗?一个复杂的系统架构也不需要半点数学知识,而你就是看不懂。
还有就是程序调试技术,很多IDE给出的出错语句非常费解,什么指针为空,数组越界,内存溢出,SDK找不到, 你没经验时打死你也看不懂你的编程工具提示的是什么。这时你那高大上的数学真是P用没有,它能帮你排查错误找出程序崩掉的原因吗?我看不行吧,你还是得到论坛百度去问人家这些基本的问题。
在你担心数学好不好之前,你更应该关心编程环境怎么搭建,连IDE都搞不定不知道程序怎么跑起来你还搞什么呀,下一步就是程序基本的语法和SDK库函数的掌握,基本SDK都不知道什么意思怎么去用,如字符串函数,文件读写和数据库常用操作,这些你都不会你还有学下去的必要吗?还有更重要的更基本的程序调试技术,程序老出错老崩溃怎么办呀,哪里变量为空了内存写错了?为什么程序老编不过去呀,谁能帮帮我呀!!!这个时候你发现那牛逼的数学知识真是屁用没有,你还是感叹自己基本功底不行经验太少,这个时候打死你也不会再关心数学好不好的问题了。
如果说用到数学的大概只有3D游戏引擎,很智能的人工智能,如格斗游戏的电脑应对玩家的复杂AI,生化危机中僵尸怪物的配合商量运用策略包抄玩家和记忆功能,还有航空航天领域这样高精尖技术学科才会用到复杂一点的数学知识。而这些都是计算机专家才要掌握的内容。所以题主你是想多了,还是先关心下自己程序为什么编不过老是报错的问题吧
第一,编写程序体现的是一个人的逻辑思维,既然涉及到逻辑,必然会与数学有些关系。但是与数学关系的深浅要与你所涉及的方面有关。
第二,编程中必须要学的数学:
1.最基本的数字与运算知识:二进制的概念(在哈夫曼树,哈弗曼编码等方面有直接的应用),取余的概念(在循环链表,随机数方面有应用),基础平面几何(在绘制窗口,绘制曲线,自定义按钮等图形化的地方会用到),还有些很基础的数学知识绝对不超出初中的范畴。
2.计算机中的数学知识:主要的一门叫做离散数学,讲的是逻辑代数的相关知识,其实在真正的编程中不会直接体现这门课的重要性,对于初学者只要知道:与或非是怎么回事,什么是集合就可以了。离散数学还涉及到一些图与树的概念,我现在先把这些划归到数据结构中。
3.我前面说了,编程与你的需求有直接的关系,有些编程领域与数学的知识密不可分:
1)搞底层:举个例子,如果你想设计一套你自己的windows字体,那么肯定涉及到字体平滑,字体平滑就涉及到一个很难的数学知识:插值。这个知识在数值分析中讲解,而且没有高等数学的基础,这门课想学会的可能性几乎是零。。。这门课主要解决的是高等数学中的问题如何用计算机解决,比如:泰勒插值,拉格朗日插值,求解一般方程或微分方程的解,还有的我忘了,反正都是很难的知识。而底层的很多编程都是以这些为基础的。
2)搞图形学:CG技术由于在游戏中的如日中天,使得很多初高中生对图形学神往已久,但却不知计算机图形学的知识是建立在很多大学数学课程的基础上的。尤其是图形学理论的学习,没有线性代数的基础是根本看不懂的。而在三维视图方面又要涉及到高等数学中极坐标的知识。很多算法,比如梁-Baskey算法对于平面几何分析水平的要求是非常高的!如果你想搞游戏设计,动画电影(这个是要写脚本程序的,否则画面哪能那么好),我劝你还是到了大学再深入学习吧。
3)搞算法:学习算法与其说数学要好,还不如说成是智力要好。。。比如分治法,动态规划算法,回溯法等对于问题的前期分析要求很高,尤其是列出递归方程,这些我觉得是在考智力。还有一些,比如图算法,树的应用,排序,查找,这些知识涉及到计算机专业的另一门课程:数据结构,这门课是计算机专业的核心课程之一,也是专业与非专业的最大区别。这门课对数学要求不高,但对于一个人的思维要求比较高。还有像计算几何的问题,那就是纯数学问题了。。。
4)搞密码学:我不搞这方面,而且也没研究过,但听说这方面对数学要求极高!由于我的数学比较好,别人还推荐过我去搞这方面,但是我一想到面对的都是数字,我就退缩了。。。
以上就是我所知道的与数学有关的计算机分支,每个方面都够人学一辈子,而且学好了,前途与钱途都是大大的!
第三,这么多方面都跟数学有关,那编程岂不没法学了?还有些方面对于数学要求相对较低,我说的相对较低是由于不管哪方面都会涉及到一些基础的数学算法。总的来说,越往高层,对数学的要求越低,比如MFC,那些网络编程,系统编程都是封装好的,但对于一个系统来说整体的规划和设计更关键,就是说前期的需求分析、逻辑结构设计和物理结构设计比编码更重要,当然工资也更高。。。
最后,我想给你提些学习编程的建议:
1)由于你的年龄还小,中国的教育体质问题,希望你不要把太多的精力放在这上面。。。我想你懂的。虽然听说过哪个孩子做了个游戏之后成了百万富翁,但这么多年了,似乎只有他一个,不要怀疑自己的实力,但更不要幻想你有这个运气。。。
2)编程注重逻辑思维,你才是初中生,大脑的发育不知是否成熟(绝不是说你智力低,你应该知道大脑发育是有阶段的吧),所以要以语言的基础为主,这个对数学要求不高。
3)请选一门语言去练习,编程注重实践,没有实践只有理论那就等于没学,所以一定多练练。至于语言,我推荐学习C或C++,至于C与C++是怎么回事,怎么学习,这是另一个比较难的话题。。。注意别上来就学VC++(MFC),否则你会一事无成!
4)编程很枯燥,所以要耐得住性子,不要一见到难题就退缩,一见到不会的概念就把书扔了,不会的时候请多看看基础,八成是语言基础不到位。
就写这么多吧,希望我的回答对你有帮助。你若有什么问题还可以继续问,若是编程过程中遇到什么问题也可以问我,很欢迎的!