1.概况
博主的专业是数学与应用数学,简称应数。虽然后面跟了个应用数学,但是这个专业应该是本科阶段最接近数学的专业了。我认为这个专业使我具有如下的几个优势:
- 数学的学习使我具有较强的思维能力。编程本质上就是通过写代码的方式来解决实际的问题,而解决问题时,清晰的思路显得尤为重要。数学,比起其他学科,会更加抽象一些,对我锻炼思维能力颇有助益。
- 很多编程时遇到的实际问题,最终都可以转换成类似的数学问题。应数专业有一门必修课,叫做数学模型,讲述的是如何用抽象的数学符号、数学式子、图形等刻画客观世界的本质,从而转换成数学问题,最终用数学方法解决问题。而解决这些数学问题时,如果计算量较大,最终还是要使用编程的方式来解决。
- 学习数学使我养成了勤动手,爱分析和计算的好习惯。由于很多数学问题非常抽象,推理的过程很长,同时也有一定的计算量,这使得我必须勤于动手,通过纸笔画图、分析、计算。编程时,我也会先画图分析,写出程序的基本框架和流程,再动手敲代码,这使得我在编程的过程中事半功倍。
2.我为什么喜欢编程?
事情还得从我上中学讲起。当时,我父亲着力把我往数学方面去培养,他给我买了很多数学的科普书籍,比如《数学花园漫游记》《数学与哲学》《数学家的眼光》等等,试图培养我对数学的兴趣。他认为我天生就是一个学数学的料(至今我仍然不知道他为啥这么认为),这也是我后面专业报了数学的一个重要原因。但这些数学的书籍在讲述数学世界的美的同时,经常提到计算机的概念,这反而提起了我对计算机的兴趣,对编程的兴趣。
除此之外,我作为一个走读生,并没有受到学校太大的限制,并且让我很早就接触到了计算机。那是我上高中的时候,我父亲给我买了一个笔记本电脑。当然,他的初衷是让我利用计算机学习课程,比如一些网课,还有查阅资料、记电子笔记等等。但是对于一个几乎从来没有接触过电脑的中学生来说,这是个非常新奇的事物。中学阶段,课业压力重,学校的事情大部分都千篇一律,没有什么变化。所以,哪怕是一台小小的笔记本电脑,我也会在无聊的时候乱折腾。
这“折腾”起来就不得了了,很多事情我现在想起来都觉得很有意思。我喜欢往电脑上装各种软件,看看有什么奇怪的功能,然后再卸载掉。我也会进到系统的设置里面,胡乱捣鼓各种设置。我还会上网冲浪,看看网络上有什么新奇、有意思的东西。我还学会了用U盘重装系统,当我感到电脑已经被我搞的一团糟的时候,就把系统重装了。如此种种,让我认识到了计算机世界的神奇。
我在课余,还有一个重要爱好,就是下棋。这个棋就包括中国象棋、围棋还有五子棋等等,这些棋类我都会买几本书来系统学习,这就导致我的水平比普通人高出一点,已经在我生活的圈子里找不到对手了。那就只能到网络上和网友下棋,或者是跟电脑软件下棋。在我跟电脑软件下棋的时候,一旦把难度系数调高,就会感受到非常强的压迫感,无论如何都很难赢电脑,这又激发了我对棋软的兴趣,甚至去买一些付费软件(水平比免费软件要高出一大截)来测试,比如让两个软件互相下棋。不过更令我感兴趣的是,这些软件到底是如何计算的,为什么能做到每一步棋都如此稳、准、狠,令人摸不着头脑的同时又无懈可击。
在我买的棋类书籍中,有一两本书,是专门讲解人工智能如何下棋的。在计算机的世界中,一切都是数值的运算。以中国象棋为例,棋软会定义每个棋子的价值、棋子的位置带来的威胁度、棋子能走的位置是否通畅等等,并通过一些算法,计算出当前局面的分数,并不断用类似穷举的方式去推演接下来可能的走法。这些观点非常吸引当时对计算机还一无所知的我。
其实,我不知道这里面究竟哪件事是导火索,让我从此无可挽救的喜欢上编程。或许,计算机作为新兴的事物,本身就具有极强的魅力,所以喜欢上她并不需要理由。不过,中学期间并没有太多时间系统学习编程,具体的学习还是得等到上大学之后。
3.学习编程时,我会怎么做?
上了大学之后,我就可以发挥出我较强的自学能力这个优势了。我学习编程的主要途径就是阅读大佬的书籍,以及大量的练习。我想,这两件事情大家都会去做,而且应该也能做的挺不错。不过我想说的是另外两件事,那就是:
- 学习编程不只是编程,还要多去学习数学和英语。
- 学习编程,更重要的是编程的思维,画图+总结梳理是非常重要的。
3.1 数学和英语的重要性
作为一个数学系的学生,我想说的是,数学确实对编程有很大的帮助。我也结识了一些学习编程的朋友,根据我的观察,由于我对数学有自己的一些理解,在解决一些编程问题时会有不同的角度,这尤其体现在某些算法问题上。不过,更重要的还是学习数学对一个人思维的锻炼,我发现,数学学的好的同学,抽象思维的能力比普通人要强得多。数学是需要花专门的时间去学习的,不过网络上有很多免费的课程,市面上也有很多相关的教材,多去看看大佬是如何分析和思考问题的,反过来也会对编程有所帮助。
至于英语,我想不必多说。学习编程时,免不了要去看英文文档,如果看不懂的话,会走非常多的弯路。不过我认为,英语不用去专门花额外的时间去学,在看英文文档的同时,去查一查不认识的词就行了。我自认为英语学的还可以,所以需要查询的词汇比较少,如果你英语基础比较薄弱,那就多查查就行了。在技术文档里,很多词汇都会反复使用,所以到后面熟练了,感觉会比一开始好很多。
3.2 画图+梳理总结
画图!画图!画图!
写程序之前,请先画图,梳理清楚你想写什么,流程是怎么样,然后再动手去写代码。不然,很有可能是一波操作猛如虎,调bug调一上午。
举个数学中的例子,有时候你会觉得某些概念或者定理非常抽象,这个时候厉害点的老师就会告诉你,应该数形结合。而编程,很多时候也是有些抽象的,但是很少会像数学那么抽象。数学中有些定理实在是过于抽象,由于我水平不太够,实在是无法通过画图的方式来表述。但是编程中很多看似非常复杂的问题,一旦用图来表示,就会变得清晰明了,从而被解决。
当然,在梳理总结知识点的时候,也可以通过画图的方式。如果你觉得你没法准确的通过画图来表述某个知识点,那很有可能是因为你学的不够扎实。
总结
说一千道一万,关键还是要去付诸行动,比如每天抽出2~3个小时来学习编程,周末全天时间都来学习编程。我学习编程的目标还是为了更好的武装自己,既然有兴趣,又能在某个领域做出自己的贡献,何乐而不为呢。其实,我也没有想好未来要去哪家IT公司,但不管是去哪里,能充分发挥出我的价值,我就满意了。
本篇博客主要是讲下我对编程的一些看法,方便你更好的了解我。由于主要是发表一些看法,我也没有举一些具体的例子,如果想要和我一起学习编程,建议你去阅读下我其他的博客,我会尽量做到日更。
另外,如果对我有什么建议,可以直接在评论区提出,非常感谢大家。