硕士阶段顺利拿到国家奖学金,获得上交读博机会和大疆offer。现把经验和建议分享如下:
1:早日明确自己感兴趣的研究方向和工作重点,因为找工作或者读博大概率都是以硕士阶段的研究内容为基础,不会偏离得特别严重。因此越早明确自己的方向,便能够越早的积累相关的知识和项目经验。本人硕士三年大方向是智能机器人,但智能机器人研究方向里面具体的工作又可细分为:结构设计、硬件设计(学生一般不自己开发,都是购买现成的产品)、软件设计(学生一般集中在上层应用软件和代码的开发)、算法设计(包括控制算法、图像算法、规划算法等等)。硕士阶段本人的工作重心集中在嵌入式软件开发和控制算法的设计这两方面,当然不可避免的也会有一些结构设计、图像处理算法、规划算法的开发工作,但是我的大部分时间都在补充前面的知识。
2:确定好研究内容和以后大概的工作方向后,充分利用时间学习相关的知识,循序渐近,完善自己的知识体系。研究生入学的时候我便大概确定了自己想往软件和控制算法相关的方向发展,在嵌入式软件方面我在入学前先补充了C/C++相关的知识,然后研一阶段学习了Arduino/STM32单片机以及里面涉及到的串口/IIC通信/CAN通信/FreeRtos操作系统/ROS操作系统等的相关知识,研二阶段学习了树莓派/Jetson nano机载计算机、Linux操作系统等相关知识,研三开始完善arm驱动开发,系统移植裁剪、应用开发等相关知识。总之要有一个循序渐进、由浅入深的学习过程,扎实地完善自己的知识体系。
3:研究生阶段多参与与自己学习和研究内容相关的项目和比赛。上面我提到了自己的学习路线,但是如果单纯地填鸭式学习难以充分掌握相关的知识点,最好能够把自己的学习内容应用到项目中,在不断调试与完善的过程中加强对相关知识点的理解和掌握。对于我来说,我在硕士还没有入学之前就开始参与实验室的各类项目和国家比赛,而且基本上是多线程运行,当然参与的项目中我所从事的工作内容基本上都是和我的学习和研究内容相关的,充分的项目和比赛经验为我申请读博和找工作提供了很大的帮助。
4:除了上述比较实际的建议外,当然还有一些生活、精神和思想层面的,比如:和导师保持良好的沟通和交流(这样你更有机会得到自己感兴趣的项目和研究方向),少一些抱怨,学会调节自己,保持一个平稳的学习心态,为自己每一步制定适合的目标,感恩,严于律己,宽以待人等等,这些我觉得需要自己去体会。总之我觉得需要时刻记得自己硕士阶段的终极目标:找到一个好的工作或者获得继续深造的机会。处理好上面的事情能够更好地为自己的终极目标创造合适的环境和条件。
附上本人嵌入式软件开发相关知识学习路线:
研一:
①补充并巩固C(先C后C++)基本知识。http://c.biancheng.net/c/,http://c.biancheng.net/cplus/
②学习STM32单片机开发知识,主要掌握教程前半部分的基础知识以及自己所需要用到的相关知识,包括但不限于:GPIO、时钟系统、定时器、NVIC中断、串口通信、外部中断、PWM、输入捕获、ADC、I2C通信、SPI通信、485通信、CAN通信。根据使用的开发板不同看相应的视频教程:《【正点原子】 手把手教你学STM32 系列视频之 STM32F4-基于探索者》或者《【正点原子】手把手教你学STM32系列视频 之 STM32F4&F7 基于阿》
③学习Linux基础操作知识 http://c.biancheng.net/linux_tutorial/
④学习ROS机器人操作系统相关知识,《【古月居】古月·ROS2入门21讲 | 带你认识一个全新的机器人操作系统》
研二、研三:
①巩固C/C++基础知识。
②巩固STM32单片机开发,把上述视频再看一遍,把寄存器版本也看一遍。
③巩固ROS机器人操作系统开发知识。
④学习常规操作系统相关知识,可以先学习《正点原子FreeRTOS手把手教学-基于STM32》,进行入手。
⑤学习Linux之ARM(MX6U)裸机开发《正点原子【第二期】手把手教你学Linux之ARM(MX6U)裸机篇》,买一块正点原子alpha/mini Linux进行开发。
⑥学习Linux编程基础(研一大部分都学过了,简单过一遍,把没有掌握的再掌握好)以及Linux系统编程和Linux网络编程(掌握必要的知识就行)。我参考的教程是:https://space.bilibili.com/14627753
⑦补充ARM驱动开发相关知识,《正点原子【第三期】手把手教你学Linux之系统移植和根文件系统构建》《正点原子【第四期】手把手教你学 Linux之驱动开发篇》
⑧学习一些基本的数据结构与算法。
这里面的知识主要涉及的是我嵌入式软开的学习路径,不包含一些其它知识的学习(比如PID控制、多旋翼无人机运动学动力学、先进控制理论、自动控制原理、数据滤波等等,可根据项目需要自行查找相关资料进行学习),其中大部分知识需要反复学习才能掌握好,最好有相应的项目进行练习,在项目中熟练运用各种单片机(STM32)、开发板(树莓派、Jetson tx2/nano/nx、正点原子阿尔法Linux)。掌握以上知识相信能帮助你找一个较好的嵌入式软件开发岗位的工作。