0%

编程学习浅谈

我与编程-Matlab

编程是一件让人可以偷懒的能力,这是我最开始学习编程的原因。大概是2018年,我进入现在的课题组开始研究生的生活。什么让我最困扰呢?大量等待着处理的数据,这些数据的格式都是差不多的,前期处理方法也是千篇一律,按道理来说是很简单的任务,但是量实在是太大了,往往一天的数据足够一个人处理两三天,而且是重复着的机械般的动作。这个时候我就想能不能把这些固定步骤的计算交给计算机做呢,于是开始了我的编程之路。

首先进入我眼中的是Matlab,因为大学的时候简单的学习过它,对它有一定了解,所以首先从Matlab入手了。我记得当时遇到的第一个困难是如何将大量的txt 文本数据读进Matlab的工作空间(当时实在是太菜了)。

示意图

然后按照一定的顺序将每个文本的数据内容做一些加减乘除运算,然后对目标数据进行一个单指数拟合,最终得到系数。就是这样的一个功能,我写了大约3天。

示意图

不过当时我可自豪了,产生了想将课题组的数据处理方法整合起来的想法,也就是构建一个的数据处理软件。为了让大家更好的使用,我必须要考虑图形界面,于是我开始了Matlab GUI的学习(花费了2个星期左右)。从啥也不明白到了解了每一个控件就是调用一个函数,要想设置控件就必须要得到控件的句柄,得到句柄后查看帮助文档了解如何对控件进行操作,即属性和回调函数的设置。到这里我写了一个简单的计算器,一个处理气溶胶数据的简单运算的图形界面(从没见人用过)。

示意图

后面因为我自己的实验就中断了编程的学习,直到光学部分已经看到部分成果后,我决定开始二维光谱图像的处理,也就是编写一个光谱仪信息采集处理软件,首选平台Matlab(因为我就会这个)。于是找了相机的教程,把教程的代码段抄下来,勉勉强强完成了设置相机参数、打开光谱仪、采集数据、显示数据等。但不是程序一会死机了(现在明白了是内存溢出了),就是运行着程序越来越慢。于是我开始网上搜怎样才能同时做到这几件事呢?我认为的答案是多线程技术,可是Matlab只支持并行计算,并不支持多线程编程,没办法我只能另求出路,java、python、C++,我选择了C++,因为它是最难的。

我与编程-C++

开始的我不知天高地厚,天真的以为自学了Matlab,那么C++也同样不在话下!真的好傻啊。最开始我买了本c++ primer直接开啃,慢慢的我学习语法两个多月后,看了忘,忘了看,连网上随随便便一道算法题都完不成后,我开始思考我是不是学错了,到底怎么学习?当时恰逢春节,我回家之后和我表弟打赌,比的是谁能完成一个c++课程设计,是一个公司管理系统,一个总公司管理着下属的20个子公司。我先完成了,用的手法就很low啦,这是我第一次在c++平台上完成一件事,对我的激励还挺强的。

示意图

不过现在看来还是写的很差的,不过好歹实现了不是。

对学习编程来说,真正第一次有所感悟是学习Stanford CS106B,因为这门课是将算法、数据结构和语法放在一起讲的,循序渐进,从一个一个问题中,我慢慢理解到了数据结构的美,算法的精妙之处,如何实现模版类之类的知识让我对STL之类的类库再也没有那么害怕。