发帖
日期

关于数学系学生学习编程的一些思考和建议(二)

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

北太天元客服 1 1 2023-02-20

关于数学系学生学习编程的一些思考和建议(一)

(转载自公众号:算海扬帆)      我见过很多数学系的学生,认为自己编程能力不行,说自己不是编程的那块料,每每遇到需要编程的任务,心里就犯难。即使那些稍微有点勇气的学生,下定决心硬着头皮上,也往往收效甚微,成长缓慢。      这不是一个正常的现象。因为数学系的学生,在经过了几年的学习和训练后,是应该具备相当程度的结构化、定量化的抽象逻辑思维能力,并且能够借助数学的思想和方法,熟练使用数学语言来刻画问题、构造解决方案。对于受过良好训练的数学系学生来说,所谓编程,本质上就是把用数学语言描述的解决方案“翻译”为程序代码而已。数学和计算机编程本来就是天作之合,有数学背景的学生应该具备很大的优势和潜力来学好编程。     我一直认为,能同时掌握数学语言和计算机编程语言的人,到高校一定是科研能手,到公司一定是业务骨干。但现实却是,很多大学的数学院系,仍在不断培养大量害怕编程的学生。如果去问数学系的学生将来要找什么工作,很多人的第一个想法就是当一名老师。如果问关于数学研究的事情,他们非常自然地认为证明分析就是数学研究的全部内容。       数学系的毕业生有很多去了学校,或者金融、互联网这些来钱快的行业。而在中国需要数学重点支撑的科学计算与工业软件领域,我们会发现数学背景出身的人寥寥无几。学生不愿去的直接原因,一方面是对自己编程能力和学习潜力没有信心;另一方面对数学如何应用到科学计算和工业软件领域也没有什么概念,对于实际工业应用背景更是知之甚少,缺乏将数学语言自如转换为应用领域语言的能力。     当前国产科学计算和工业软件远远落后于西方发达国家,在总体上存在基础薄弱、创新不足、人才短缺和应用困难等问题,被结结实实地“卡”着脖子。而要解决这一严峻的问题,培养大量既懂应用数学 、又懂计算机编程和应用物理的综合型人才,并引导他们进入科学计算和工业软件领域,是当下亟需做的事情。(鄂维南院士在《人工智能时代交叉科学的人才培养》一文中对算法时代如何培养人才有更深入细致的阐述)      那么,我们当前的数学教育已经做好培养这些综合性人才的准备了吗?依目前的情况来看,显然没有。数学系的学生,在数学、编程和数学应用之间的自我怀疑、彷徨、痛苦和挣扎,并不是一种偶然现象,而大学数学科研和人才培养体制机制的僵化就是造成这种现象的一个外部客观原因。      时至今日,在很多大学的数学系中,计算机编程教学依然是以教授语法知识为主,对数学核心课程的支撑也仅仅停留在商业软件的使用上,几乎没有关于编程原则、方法、技能和生产力工具的教学内容。      为什么只是教教编程语法?因为承担编程教学的师资,大部分还是数学系出身,基本没有受过正规的计算机编程训练。而且目前高校的这种以“数数”为主的评价机制,让承担编程教学的老师即使有心,也不太可能把大量时间花在学习提高自己编程能力、搞好编程教学的事情上。在师资的引进和培养上,大多学校还是以“戴帽子”的人为主,至于实际需要什么样的师资来为国家、社会培养更有用的人才,往往考虑的不够深入全面。所以,从我上大学到现在,整整 20 年了,大部分数学系的计算机编程教育,依然没有什么变化,而且预计在将来可见的很长一段时间内,整体上也不会有什么实质性的变化。  (原文链接:https://mp.weixin.qq.com/s/vB0qAz2e1QmNMKnBGitEYw)

北太天元客服 0 2 2023-02-20

如何在Windows平台下部署北太天元插件开发环境

由于北太天元发布的开发的插件的SDK是使用GCC编译器生成的,不支持微软编译器的使用,在Windows平台下必须部署对应的 GCC 编译器开发环境才能开展 c/c++ 插件的开发工作。我们可以采用基于MSYS2的MinGW-w64 GCC搭建Windows下C++开发环境。MSYS2是仿Linux的终端交互环境,可以使用Linux下的终端命令和快捷方式,自带pacman软件管理包,让您将精力放到C++代码的编写上,而不是复杂的依赖环境的搭建和编译,可以复用自己在Linux下的开发经验。使用g++进行库的链接、源码编译等操作,可更进一步了解C++代码的编译过程。绿色便携版本的 MSYS2 + MinGW64 开发环境包传送阵如下:链接: https://pan.baidu.com/s/15KEJ_CZpEjNo_hQ7JIuAeQ提取码: 5361

Forever 0 1 2023-01-11