那么作为数学系的学生,如果仍想把编程学好,并为数学这把“屠龙刀”找到用武之地,有没有其它的办法呢?答案是肯定的。
目前各种开源编程语言、操作系统、应用软件以及编程工具都已经发展的相当成熟好用,它们一起构成了整个互联网的开源技术底座,而且大多都形成了非常成熟开源社区。个人通过这些开源社区,可以找到非常丰富的入门教程、帮助文档、教学视频等学习资源,还可以在线获得很多技术大咖的及时答疑解惑,完全可以弥补学校编程教育资源的不足和问题。
基于这些互联网上的学习资源,个人想学好编程,还需要充分发挥自己的主观能动性,抛弃所谓的天赋、喜不喜欢、有没有兴趣等主观的、道听途说的、廉价的、即无法证实也无法证伪的想法和疑问,在认真调查研究基础上,结合自己的实际情况,以及学习和职业发展目标的需要,制定一个合理可行的学习计划和方案,然后在不断学习中实践、在不断实践中学习。
下面我将从思想、原则、方法三个层面,分享我们团队在学习编程过程中的一些经验。
从思想观念的角度来讲,首先要给自己的大脑洗个澡,洗去那些错误有害的观念,植入能够反映客观现实的思想。有以下几点需要注意:
停止去问我有没有编程天赋这个问题,这不是一个好问题,因为是与否的回答都不能证实和证伪。
停止去问我对编程有没有兴趣、喜不喜欢的问题,因为在没有深入了解一件事情之前,我们没有资格回答这个问题。
停止去抱怨学校教育的不足之处,因为一个社会组织的发展也有它的内在客观规律(比如经济利益是驱动并决定组织向不同方向发展的根本动力),所以一个组织最后发展到让组织内所有人都不爽的状态,都有它不可抗拒的一面,整天的抱怨只是在宣泄情绪、浪费自己的时间而已。如果你在一个组织中浪费了青春年华,最后还要承担其不好的后果,那就下决心用行动去改变自己,从而把对自己成长的影响降到最低。
作为数学系的学生,我们要对数学本身有信心。不要仅仅停留在数数、买菜这么低的层次上来看待数学。数学是人类智慧皇冠上最灿烂的明珠,是一切自然、社会和工程科学的通行语言,这是真理,不用费时间和脑力去怀疑,我们最好能把数学当成一种信仰。我们暂时看不到、感受不到,不是因为这是不是真理的问题,而是我们还没有达到相应的高度。编程本质上就是把用数学语言描述的解决方案“翻译”为程序代码而已,只要我们能学好数学,就能学好编程。
在智能信息时代,软件才是连接一切的关键,而数学思想和算法则是所有软件的灵魂。因此,身处数学系的你,如果想找一份好工作,成为技术大牛,或者想知道数学到底是如何与自然、科学和工程学科相互作用的,想把数学变成真正的生产力,就需要把编程学好。
从原则的角度来讲,有如下原则我们需要坚持:
少即是多,慢即是快
循序渐进,日积月累
先入门存活,再实践精通
从方法的角度来讲,有如下的方法你可以尝试:
首先快速入门 Linux 及开源编程生产力工具,如:ubuntu、git(版本控制)及开源代码托管平台、cmake、vim、gcc、gdb、vscode 等等,然后在不断的使用过程中实践精通。这里强调的是要用开源工具来学习编程。
在学习编程的过程中,每天坚持写学习复盘总结,通过不断反观、反思、反省自己学习编程的过程,不断提炼总结经验教训,看清自己在学习过程中的思维与行为模式,并不断调整优化。这是一个向自己学习的过程,也是自主学习的核心要义。
可以找一个或多个引路人,定期寻求指导和反馈,帮助及时发现学习中存在的问题,答疑解惑,这样会少走很多弯路,少踩很多坑。
在编程之前,首先要写好编程数学文档。文档要尽量以最简洁明了、逻辑清晰的数学语言来描述要实现的算法,保证每一个计算步骤的正确性。简洁明了、逻辑清晰的数学语言往往意味着对应的程序实现也是简洁明了、逻辑清晰的。注意,这里所说的编程数学文档,不是通常教材上看到的那种伪代码,因为这种伪代码大部分是无法直接翻译成程序语言的。
精通数学中的张量语言,经验表明用它写出的编程数学文档,大部分是可以直接翻译为代码的。
在编程之前,你还要准备好可以用来测试程序运行的简单算例,用于在编程过程中随时测试你的程序。
要实现复杂的算法,先进行分解设计,把算法“正交”分解成很多简单的模块,其中每个模块有明确的功能和输入输出,然后采用增量开发的模式,逐个实现并测试其正确性,最后再集成测试正确性。
去阅读别人的代码时,有与编程相关的数学文档,要先看数学文档。如果没有,就要在看代码的过程中,不断尝试用数学语言来重新阐述这些代码,并写成编程数学文档,再结合一些必要的运行测试,可极大提升理解学习别人代码的速度。
反过来把编程作为学习数学的工具,帮助自己更深刻地理解数学本身。
学会使用符号计算工具,代替纸笔进行数学公式的推导,比如 Python 中 sympy 符号计算工具箱。
以上是我们团队在编程过程中总结的实战经验。目前团队小伙伴陈春雨已通过这一系列学习和实践,成功的从编程菜鸟晋升为大虾,初具亮剑江湖的实力,可见以上经验还是颇具参考性。希望这些经验能够帮到更多想把编程学好的学生。我也会一如既往地探索,从而可以帮助更多学生快速提升编程能力,为社会培养更多既懂理论、又懂实践的综合型人才。
欢迎更多有志于把计算数学变为真正生产力的老师、学生加入我们!
算法时代,未来已来!作为计算数学人,我们应心怀使命,肩扛责任,迎难而上,以攻坚的姿态开拓创新,为解决国家重大“卡脖子”问题贡献自己应有的一份力量,同时为培养新一代中国数学的中坚力量而努力。
相信我们在一起,就会了不起!
(原文链接:https://mp.weixin.qq.com/s/vB0qAz2e1QmNMKnBGitEYw)