作为一个非计算机专业的学生,愈发认识到编程语言对于各类专业的推动作用。 程序可以解决很多问题,诸如简化工作,免于繁琐的计算。通过编程,我们可以直观地观察到出脑海中很难构建的图形,我们可以得出汉诺塔的准确移动次序,我们可以在网络中爬取并整理归档海量的数据。
也许,我研究生阶段就是天天在房间里敲代码。
如果需要确切地说明关于编程的开始,我想小学在机房学的的turtle也算是编程。
我在昆山的农村读小学,租的房子距离小学不足一公里,每天步行上学。虽然说是农村,但是城市化程度已经很高。每家每户建造别墅,通常是三层小楼,另建一间车库。院子内打一口井,用于日常洗衣浇花。屋后留取一小块地,养些花草观赏,或是种些青菜。菜市场,大超市距离居住地不过一公里。附近公园有大广场,每天太阳落山后,人声鼎沸,喧嚣四起。广场中间约有500人跳广场舞,外围是小商小贩。有席地而坐,买各种小玩具的;有扛着木棍,一端用稻草扎作一段,上面用竹签扎着保鲜膜密封的菠萝;也有充气的塑料池塘,里面放些小鱼,工人垂钓,那鱼吊起来之后当然是不可以拿走的。说远了……
昆山的居住环境可以说是很满意了,相对于苏北农村,我那时以为的大城市就是如此。直到后来去过南京的新街口,方才窥得繁华两字的一隅。当时房价不算太高,在我10岁时,家中就商讨在附近买个房子,可惜又犹豫了。我当时竟还劝阻,一是买房子之后每月还房贷,平时更是只能节衣缩食,父母压力太大了,太心疼。二是不想留在昆山,固执地想回到农村,买了房子也没有过多用处。安土重迁的思想在我可真是身上根深蒂固,小孩子到底也是目光短浅。当然,父母也有过多参考我的意见,最主要的原因是他们当时也没有剩余太多存钱,我和我姐还要继续上学,压力太大。我妈身体不好,做过手术,而且还失业了。考虑再三,恐怕房贷真的很难还,终究没有买。当时还说好等我小学毕业可以一家四口一起去上海玩一天,可惜最后感觉还是太贵,也没有去。唉。
初次编程体验并不简单,是痛苦的。当时电脑课每周一节,对于家中没有电脑的孩子来说,对这样一个机器很是新奇。每次都是先联系打字,用的是经典的金山打字通,相当无聊。我感觉我的动手能力很差,直到现在都没有能够学会熟练地打字。在那当时,更是浇灭我对于计算机地热情。因为我一想到计算机,就想到无休止的打字练习。总不能每次都是打字,有时候也会剩余20分钟用于自娱自乐。当时只知道玩4399小游戏,然后 QQ农场种菜,随后浏览新闻,其余一概不知。现在想想,倒也真实。那时课程中访问网络,检索的能力直接回避,一直教那些子网,掩网地址之类,枯燥乏味,毫无用处。后面陆陆续续教授制作ppt,用word写作,就是那些调整字体颜色大小,首行缩进之类。然而我学习地十分缓慢,word的各种操作,完全记不下来。比如调整行间距就是右键段落,我能记住一个,可是再来一个首航缩进之类的混杂在一起,我就完全糊涂了。也许,可能是我太愚笨吧。现在只喜欢简单专注的写作,无需考虑过多格式,我写论文喜欢用LaTeX。
总之,这些事使得我对于电脑没啥好的印象,后来只喜欢看电视,玩手机游戏。
turtle不知道什么时候开始学的,现在只记得left, right, circle之类。后来大二生产实习中有一个切割的课程以及数控车削的课程的编程形式大抵类似。机械切割那个代码我做的也是糊里糊涂,终于是在同学的帮助之下才算完成。当时也不是不想学,感觉就是学不会。我把例子抄在纸上,带进机房,上课就照着这个,把代码输入进去。老师要求变换一下,我就什么都不会了。我的理解能力低下可见一斑。
很难把这一段经历称为编程。
《线性代数与空间解析几何》这门课程是理工科必修的数学基础,这其中自然要渗透一些计算机对计算的应用。估计许多高校都是选用MATLAB作为计算机对于矩阵运算的应用软件而介绍的吧。当时就是课上老师演示了一下,我们就随便听听,感觉很抽象,没有认真学习。在当时,我很不理解为什么要这样,为什么要那样?感觉这样写一堆英语真的很烦。当时也有想练习一下的想法,但是苦于没有电脑,也就不了了之。
最终突然要求集中去机房进行小测验。内容就是 MATLAB 的相关矩阵计算。大概就是矩阵求逆,求行列式之类。我害怕极了,因为我什么都不会。只好悄悄问旁边的同学,好在旁边的同学认真刻苦,把那些诸如inv(A),A'之类抄在书上。我也就凭借着零星的记忆,在旁边同学的帮助之下完成了测试,这一关算是过了。
本科生阶段,计算机思维是大家都要修的通识类课程。也就在那时,我接触到C语言,但是学的很糟糕,基本上什么都不会。
正逢疫情最严重的初始阶段,全国大学生上网课,进行线上学习。计算机课程就变成天天看老师录制的视频,间或穿插老师的讲解。课上跟着敲代码,课后完成一堆概念填空选择题和几道编程题。 每次编程的概念题目还好,直接在书本上就能够找到。 然而编程题强调不要照抄,要自己思考。我当时胆战心惊,想的是要自己的初次编程就要询问吗?那怎么可以,只好暗自思索。思考无果,无奈翻书,岂知书本上竟然也没有差不多的例子。书本用的是清华大学出版社的那本,这本书真的差劲。
只好再次胡思乱想。然而腹中没有墨水,怎么可能写出来呢?计算机编程课正好就在近代史纲要的上一节,有几次都是近代史网课挂着,在那个时候敲代码。说是敲代码,其实就是发呆,根本写不出来。真是对不起近代史的老师,老师讲的激情澎湃,痛斥清政府腐朽昏聩,哀叹中国羸弱不堪,然而我在C语言的泥潭里也是一筹莫展,痛恨我自己不能守土卫疆。
于是就上网找,网上资源确实多,但是我当时只会百度,出来的都是CSDN的内容,于是就照着抄抄,然后改一改。有些就询问同学,开个腾讯会议,给我讲解一二,不过收效甚微。
很快,课程结束需要交大作业。大作业是设计出一个日历,个人感觉很难。好在是三个人一个小组,基本上全部都是好朋友写的,我就是直接躺了。期间就是简单输入看看有没有bug,然后提提建议。总之躺着躺着就拿到了优秀,然而编程基础为零。
后续也参加了建模比赛,我当然就没有参与任何编程的东西。基本上统筹工作,参与受力分析,查阅文献,主要负责写作。
后面的学习似乎也一直用不到,我当然就没有学。后来对编程产生一定畏惧心理,至于后来的MATLAB学了三天就坚持不下去了。
之前6月份我们学校的 MATLAB 被美国禁用了,我当时还在想那这个软件就可以不用学习了吧!(请原谅我那时的幼稚和无知,我现在正在学习呢2022-09-20)我终于决定学习 MATLAB ,因为大家都说 MATLAB 这个工具很重要,对于以后的学习很有帮助,不学不行。
也没啥好方法,在B站上搜索MATLAB,就找到跳出来的第一个,开始观看。我现在已经记不得当时是哪一个视频了,只知道看了两节视频,跟着敲了两节课代码,就已经坚持不下去了。晦涩难懂,枯燥乏味,无奈放弃。
思来想去,逛知乎,看到有询问MATLAB被禁后有什么替代品之类的问题。于是我仔细阅读一番,好多回答都指向Mathematica和python,并且认为其简单易学,适合新手。由于我对C语言产生畏惧心理,觉得python这种编程类肯定也学不好。随后,我决定改学符号计算语言Mathematica。
不知道有什么好的学习方法。于是打开B站,键入关键词,寻找合适的视频。找到一个官方入门视频,用的是Mathematica 8版本作为案例。看了看我用的11版本,感觉新版本UI更好看一些。这个视频现在还在B站上,印象最为深刻的是讲解员的口音比较 “魔仙堡” ,听课时总是忍俊不禁。入门之后必然要持续学习,于是随后又看了一个播放量以及点赞都很高的视频。这个视频非常出色,条理清晰,我学习了一个寒假。其为中科大老师讲解录制的,内容完整,知识点全面,我收获颇丰。然而现在已经下架了,没法看到弹幕真是一件憾事。因为这个视频是中国大学慕课网站上面的,B站上的up主上传时虽然说明出处,但是可能仍然算是侵权吧。前面的符号计算基本看完后,我就没看了。后来想学一学后面时,只好在中国大学慕课网站上学习编程部分。在寒假时候,我已经学习至编程部分,感觉非常困难,同时也认为没有必要,于是后面就没有继续学习。
当时每一天都干劲慢慢,迫不及待地想要汲取知识。我每天都是8点之前起床,随后在堂屋的桌子上学习一上午,跟着看视频,跟着敲代码。老师的教学大纲制作得严谨认真,逻辑清晰明确。跟着学习,也能培养我连贯和清晰的思路,这对于知识的学习很有帮助。
符号式语言,简单和重复,不需要编程思维,没有条件分支和循环。这对于我来说合适不过。我后续想要使用时,也不用可以背诵,查找笔记即可。总之,似乎学会了画图,微分计算等等操作。感觉自己寒假也算没有浪费,也算没有辜负我的努力,总算是会一些东西得人了。
于此同时,我的同学却在学习python。
注意,这一小节不是按照上文一样的时间顺序,可以认为是一个补充吧。
Mathematica学习完成后,自然就是运用,我所能想到就是数学建模比赛。可惜大一寒假的美赛没敢参加。其实就算报名了,又能如何?我们那时恐怕都不知道知网是什么,更何况是英文文献。而且我们都不会绕过局域网,Google都打不开,又怎么可能搜集得到数据。接着是暑假的东三省的数学建模竞赛,又是没敢参加,真是懦弱。理由都很简单,我们什么都没学,什么都不会。
2020年的全国大学生数学建模竞赛参加了。因为可恶的疫情,致使我们的考试全部拖延至开学,积压在建模的前后。我们当然是为了成绩选择放弃国赛。成绩出的那一刻,果不其然,哈工大、哈工程都是少的可怜。我们当时真的是一腔热血,意气风发,甚是怀念。
我们想到要预约研讨室之时,房间已经满了。迫于无奈,考虑在图书馆四楼中心大厅讨论交流。又因为要准备考试,三天的数学建模只能使用两天。那一天我们早早吃完晚饭,来到图书馆,心情复杂。我们互相鼓励,开玩笑说就当是一次尝试。
到6点整,我们赶紧刷新网页,下载题目的压缩包。图书馆的网络慢的如同时间静止。终于下载好压缩包,解压之后赶紧看一看题目。我们各自浏览,从A题至D题。其中A题炉温曲线。感觉偏物理,感觉物理致使不多,没选;B题沙漠挖矿,比较有趣,待定;C题和D题我现在已经记不得是什么内容了,只是依稀记得有一道是关于金融的,看的头痛欲裂,果断放弃。随后经过商讨,确定选择B题参加比赛。
B题为一游戏设计背景,讲述主人公根据给定的资金以及时间限制,合理规划出最优行动路线,能够赚取最多的资金。一方面,沙漠中行走需要携带水和食物,但是背包有容量限制;另一方面,矿山挖矿需要消耗水和食物,但是能赚取更多资金。总之,这是一道不需要我们太多专业知识也能够勉强能做的题目了。
我们三个人三台笔记本蜷缩在一张很矮的桌子上,彼此讨论分析。毫无头绪,第一道题肯定是编程。好在有一个队友会编程,虽然非常不熟练。队友用C语言编程,基础还是当时计算思维课上学的内容。C语言编写的很长,还没有说到重点就已经70多行了。最后还是在另一位队友的笔算之下才勉强算完。我个人感觉我就在写论文,编程的内容我一概没看。我队友持之以恒,连续编程两小时,最终终于求解出第一问。虽然最后学习他人优秀论文时发现是错误的。总之,我的编程队友很辛苦,我们两个人却无法提供任何帮助。
第一次的建模当然没获奖。我们甚至论文都没写完,但是编程竟然有50多页。程序作者时隔一年后随即表示不忍直视。重复内容太多,编程的内容还不如手算,完全没有任何算法等思维。
第二次建模,有备而来。毕竟第一次的比赛经历过于惨烈。 第二次建模就是东三省建模了。寒假的美赛再次没敢参加。先说结论,东三省建模获得省一等奖。关于东三省数学建模联赛,我曾经做过调研。我有个同学大一就参加东三省数学建模联赛,随机拿到省一等奖。我观察我们学校的获奖人数,发现省一队伍每年都很多。这一信息极大地增强了我对于这次建模比赛获奖的信心。
这中间,我学习Mathematica,以及学习相关规划写作类软件的学习。我报以期待的RoamEdit,可惜自从丢过一次数据之后直至现在好久没用。但是当时用这一大纲目录式的写作很便捷高效率。可惜式线上,我们没法面对面。我们三个人使用腾讯会议交流畅通,使用金山文档进行写作却总是十分卡顿。金山的协作太差,文档字数多至一定程度后会不断卡顿甚至文字丢失和重复。我当时主要是负责查阅论文,找各种资料,文档的写作和排版。我自认为做出巨大贡献。我每天对文档内容不断修改打磨,揣摩他人硕士论文的思路以及行文表述,学习优秀获奖论文的写作方法,不断修改。现在读起来仍然觉得文字功底很好,是一篇佳作。可惜很久没有参与文章写作,现在恐怕再也写不出来了。
所以,在这一次建模中,我还是没有参与编程的内容。
这次比赛在9月举行,我们都在学校。提前一个星期无间断地定好比赛场地--研讨室。比赛三天,把一天分割成三个部分,我们每个人选择一天的一部分进行预定,依次类推三天,完美预约所有地方。中途甚至有人想要共用研讨室,那当然无情拒绝。
果不其然又是选择A题,大抵是研究促动器伸缩量的一个调节问题。我们都没有思路,用一种什么样的方式调节也没有得出结论,结果就是直接拉过去做一个近似。我当时就觉得这样肯定不行。不出所料荣获三等奖。我感觉这次的建模经历非常糟糕,我全程没法参与,只是搜集一些资料,写文章,排版,我完全不会做这道题目。
我这次也没有编程。
总之,现在终于来到python学习了。
然而在这之前,我还是需要讲一些故事。我在2021年暑假在家就学习了一部分python,然而学习一些就学不下去了。完全不会,根本看不懂。我当时用的编译软件是python自带的IDLE,相当难用。我同学建议我用这个,因为这个可以让我自己不断写一些关键词之类的,便于理解。但是我认为完全不对。像我这种基础很差,兴趣不高的学生来说,此做法严重打击我的信心。
我在暑假问同学有哪些好的python视频值得学习,他们推荐了小甲鱼。我看了一下感觉不错,但是学了四节就难以继续了,于是放弃。大三来上学之后,感觉不能这样颓废下去了,必须学会一门编程语言。上飞行器可靠性课程的时候,老师时不时地提一句编程,上导弹飞行力学的时候,老师也会讲一下编程实现数值解...我感觉身边同学都会编程语言,我压力倍增。
由于这个学期需要学习ANSYS的静力学分析,我认为静力学分析只要跟着视频就行,但是画出一个三维模型是比较困难的。于是我优先学习SolidWorks,打算把画三维图学会。SolidWorks总共就学习了两周,看的也是B站一个播放量比较高的视频,跟着做一下模型就基本上都会了。
随后我电脑就送去维修,然后两个月没有电脑用。这一段经历实在不想提。然而对于编程的学习紧迫感使得我的编程没有放下。我用U盘拷贝进学校电脑的python的安装包,随后安装并使用。由于是线上课而且课程并不多,这带给我大量的学习时间。然而初期学习是十分痛苦的,既有机房的屏幕刺眼疼痛,又有自己内心苦楚落寞。随后我就发现能逼迫自己学习的是压力而不是兴趣。在这种怕被同学比下去的危机之下,我很快看完python的基础知识,包括列表、循环、分支、字符串。同时我也跟着敲了一遍代码,感觉还行。接下来又继续学到了函数,终于是再也坚持不下去了。
随后我的电脑终于修好了,但是我选择重新购买了一台笔记本。我只想说荣耀的低端真的垃圾,我这次使用的是联想小新pro16。我也快考试了就没有继续学习。
然而这种压力仍然没有散去,一直笼罩心头。我在浏览知乎时候注意到学习python时候可以挑选自己喜欢的一个方向。我简单看一下python的应用方向,打算先从爬虫学起。
由于python的基础很薄弱,我选择一个视频教程是可以囊括基础语法和爬虫常用的一些函数的综合。
那个视频最终目标是爬取豆瓣电影Top250。我从头看起,把前面基础的数列,元组,分支,循环以及函数又重新学习了一遍。感觉似乎掌握地更好一些,随后又继续学习正则和beautifulsoup,最后终于学到爬取的关键步骤。我记得我仅仅一天就把主线视频看完,并且照猫画虎跟着敲好所有的代码。最终也确实爬取出准确的内容,这足以让我欣喜若狂,虽然不能完全理解所写内容,但是认识函数的使用原理,学会文件的保存和处理,激发我继续学习的兴趣。
我觉得完成一个项目确实是学习编程的良好学习方式。不论是照着写还是自己独立写出,都是。我目前爬虫采用的是xpath解析,现在回头看当时写的代码,感觉有些地方很难读懂了。
总之,我信心大增,但随后因为夏令营的准备工作,python的学习暂时放缓。
夏令营,战战兢兢。我自己能力其实是可以的,但是毕竟是第七名。而且我大三考试都稍微糟糕一些,全是靠大一大二拖住的。我个人很是胆怯。在夏令营报名之时,联系哈工大的老师。老师对我进行图集面试,我专业知识回答得不好,其他还行。老师可以询问我的编程能力,我怕老师不要我,但是也要实事求是,就说python还行,Mathematica学的好一些。实际上我的python肯定不行,写个水仙花数都得想好久。老师似乎对python不感兴趣,对我说以后研究生接触MATLAB和C语言要多一些。同时反问Mathematica不是符号计算语言吗,和代码又有什么关系?我解释道当时由于MATLAB被美国封禁,我就学了别的。老师听后突然来了精神,说我们哈工大确实因为这个被禁比较麻烦,但是MATLAB还是很重要的,回去好好学学。之后告知我去哈工大后再次单独考一考我。
我深感懊悔,应当早早复习一下轨道的知识的,唉。等接触两星期后,才算意识到就算提早复习了意义也不大,因为教授的内容不同,老师问的若干问题都是我没学过的。好在两星期重新学了半本书,疯狂背诵概念。我真是佩服我那时候的自己,勤奋刻苦,奋发有为,竟然手抄20页A4纸内容,提炼出半本书的重点,随后几乎一次不差的背诵出来。 也许,我适合读文科?当然书中好多推导和数学公式,我全部忽略,没时间看,而且我笃定老师不会问一些推导性质的问题。最后老师果然问了好多问题,我都背诵出来。但是遇到公式的时候,我完全没印象,只好坦白不会。老师倒也没有为难我,反而耐心地为我解答。
总之,两个星期的背诵卓有成效。老师对我很满意,也确定招收我,那个时候的我兴高采烈,岂能想到三个月后老师又不要我的迷茫和落魄。然而,那又是一个故事了。
我想说的是在那两个星期里,我不仅背书,而且还在努力学习编程,就怕到时候老师问我一些编程的内容。我把小甲鱼的课程从头到尾又看了一遍。全程二倍速,跟着敲一遍代码,一直看到函数之前。在巨大的压力之下,我竟然觉得痛快无比。在有项目以及之前学习的基础,再来一遍感觉很是轻松,逻辑也慢慢清晰。诚如孔子所言:温故而知新,可以为师矣。
紧张地夏令营结束,我本来是不想回去的,无奈离开校园后不允许返回,无奈回家。回家倒也无妨,痛快玩耍。唉,以后还有时间玩耍吗?唉!
在家期间,坚持写代码,我先学的MATLAB。没错,又不得不重新学习MATLAB,老师右言:MATLAB是以后科研道路上最为重要的软件和编程语言。我这次在B站和知乎反复搜索,做好调研,一致推荐郭彦甫的 MATLAB 课程。我在B站上发现其也最为热门。然而收效甚微,很是气馁。随后我想画图使用matlibplot这个包也是可以的呀,“matlibplot”的全程可就是 “matlab library plot” 。我一直无法理解MATLAB里面的handle,所谓句柄为何物。想着python里面先学学,也算是把我的python学的更加全面和扎实。同时numpy,scipy也是python很常用的包,我决定用心学一学。
不知如何下手。在知乎关注过“量子位”,偶然看到学习 python 的 numpy, scipy, pandas, matplotlib看GitHub上的这一篇 就够了。我赶紧打开链接,找到这篇“Python-100-Days”。于是便跟随大佬学起来。
看完readme后,依据提示跳转至numpy部分的学习。numpy竟然只有两张文档,意味着仅需两天即可学会。我打开文档,大概浏览一遍。条理清晰,章节明确,段落紧凑,代码丰富,注释详实,我大为赞叹。
安装说明安装好numpy等包,随后新建文件夹,迈出学习的第一步。脱离视频,跟着文档学习又是一次全新的学习方式。GitHub这个复制代码很是实用,但是我希望可以增添学习熟练度就一点点敲下代码。学习过程很简单。感觉就是数学符号化描述罢了,不是很难。