光阴荏苒,岁月如梭,不知不觉在华清远见四个月的培训结束了,感受颇深。
在这四个月中学到了很多学校学不到的知识,个人认为最重要的就是基础知识的学习和掌握,首先要打好C语言和数据结构的基础。我刚来培训的时候C语言也掌握得不是很好,关键就是多多练习,多看别人写的代码,从模仿开始然后再自己独立写代码,这一步很重要。因为仅仅看书或者看别人的代码而不去自己练习是肯定不能很好的掌握基础知识的。然后还有更为重要的一步就是总结,总结自己当时为什么没有编写出来,是算法有误还是逻辑有误,找到自己错误的原因下次遇到同样的问题就会有思路了。另外课上听老师讲课要认真记笔记,好记性不如烂笔头,这样以后就算某部分知识有所遗忘也有据可查。听懂看懂和自己真的懂了也是两回事,技术都是在自己亲自实践中学到和提高的。遇到不会的问题不要觉得面子上不好看而不问,华清远见的老师都很有耐心都很无私,当时很多问题我都是问了一两遍才搞懂的,老师们都是不厌其烦的给我讲解。问问题之前自己要多思考,带着自己的见解去请教老师收获会更大。学习的过程中遇到困难是正常的,但绝不能轻言放弃,尤其上课有听不懂的知识也不要自己做自己的事情,应该坚持听下去下课再请教老师。既然选择了嵌入式这个行业就要对自己的选择负责,更要对自己四个月的机会成本有个交代。
我们培训的内容包含了:C语言 (15天) 、Linux和C高级 (6天) 、数据结构 (6天) 、IO、进程线程 (6天) 、网络编程 (7天) 、C++ (9天) 、QT (8天) 、ARM接口技术 (7天) 、系统移植 (5天) 、驱动编程 (8天) 、python人工智能 (9天) 、项目实战 (20天)。对各个培训内容也有自己的感受与体会。如下:
C语言:
c语言是在国内外广泛使用的一种计算机语言。其语言功能丰富、表达能力强、使用灵活方便、既具有高级语言的优点,又具有低级语言的许多特点,适合编写系统软件。其功能强大,不仅用在计算机上广泛用在电子,机械等方面上,而且,很多新型的语言如,c++,java,c#,j#,perl... 都是衍生自c语言。掌握了c.24语言,可以说你就掌握了很多门语言。
根据我现在学的总结为要学好c语言必须了解的四点:
1、课前认真预习,把下一节要上的内容先自己看一遍,把不懂的地方打个标记,等上课的时候可以请教老师。理解书上的例子,搞懂每个语句的含义,用法。看完后尝试着不看例子自己编写程序,编完以后再跟书上进行比较,看自己的程序还有哪方面的不足,再进行改正。想要真正学好c语言光看书是不够的,一定要自己多动手。
2、上课认真听讲积极思考,提高上课效率。老师上课讲述的都是课程的重点和难点,听好课程可以达到"事半功倍"的目的。
3、课后复习。把每天的上课内容回家再温习一遍,独立完成课后的作业,如果有时间,最好能找点课外书籍、课外习题什么的来巩固所学的内容。
4、主动上机,多多实践,提高动手能力。通过上机实践来验证所学的理论,通过在机器上查找错误来巩固概念,通过提高上机能力来促进理论学习,开阔编程思路,提高反映速度,提高分析问题解决问题的能力,锻炼心理素质,提高心理承受能力。
Linux和C高级:
首先是我对Linux系统的了解。Linux系统是一个开源的计算机操作系统,被广泛用于工业控制和嵌入式设备开发,能满足绝大部分控制要求。通过Ubuntu安装了Linux虚拟机进行学习,我目前主要学习了Linux系统中终端的使用,运用终端进行C语言编程学习和Shell脚本语言学习。现在我能熟练使用Linux终端的一些简单指令,能熟练使用终端建立文件并进行C语言编程,学习中还了解到了makefile等高级指令的使用。
其次是C语言高级部分的总结。通过近两周的学习,我学会了许多C语言更加高深的知识点,掌握了指针的概念和使用方法,也加深了数组与指针的关系以及二级指针的概念。能熟练使用指针来传递变量并建立函数,并且掌握复制字符串、比较字符串、开创空间、清空空间等许多函数的原理和使用技巧,能熟练的在编写程序过程中使用这些函数。对于结构体、共用体、枚举等高级指令原理和使用方法也有所了解,目前能熟练使用结构体,但共用体和枚举还欠缺练习和加深。
Linux系统基础的掌握和C语言高级编程的熟练,是决定后面深入学习嵌入式系统的必要条件。所以认真学习这些基础知识是非常重要的,只有打下了坚实的基础才能走的长远。
数据结构:
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。 一般认为,一个数据结构是由数据元素依据某种逻辑联系组织起来的。对数据元素间逻辑关系的描述称为数据的逻辑结构;数据必须在计算机中存储,数据的存储结构是数据结构的实现形式,是其在计算机内的表示;此外讨论一个数据结构必须同时讨论在该类数据结构上执行的运算才有意义。一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率。 在许多类型的程序的设计中,数据结构的选择是一个基本的设计考虑因素。许多大型系统的构造经验表明,系统实现的困难程度和系统构造的质量都严重的依赖于是否选择了最优的数据结构。许多时候,确定了数据结构后,算法就容易得到了。有些时候事情也会反过来,我们根据特定的算法来选择数据结构与之适应。不论哪种情况,选择合适的数据结构都是非常重要的。
IO、进程线程:
文件IO又称低级磁盘IO,遵循POSIX标准。标准IO又称高级磁盘IO,遵循ANSI C标准(标准C库)。linux中使用的是glibc,它是标准C库的超集,包含POSIX。所以linux下既可以使用标准IO,也可以使用文件IO。使用文件IO可以直接读写实际文件,但是频繁的系统调用会增加系统开销。
标准IO可以看作在文件IO的基础上封装了缓冲机制。先读写缓冲区,必要时再访问实际文件,从而减少了系统调用的次数。
对进线程的概念有了较为清晰的认识。进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.线程与进程的区别:1.进程至少有一个线程;它们共享进程的地址空间,而进程有自己的地址空间。2.进程是资源分配和拥有的单位,同一个进程内的线程共享进程资源。3.线程是处理器调度的基本单位,但是进程不是。4.二者均可并发执行。
C++:
刚开始的时候很新鲜,学习起来也有激情,但在学的过程当中,感觉到又是另一番感受,首先并没感觉到很强的吸引力,面对枯燥的字母,唯一能给我带来乐趣的是其想法的奇特性,后来才知道是算法,众所周知,程序是由算法和数据结构组成的,老师常说,编程重在编程思想,此话很短,但很深刻,数据和数据结构都是死的东西,只有算法才能让这些东西灵活起来,解决实际问题,充分发挥人的潜质,所以学编程重在学习其程序当中解决问题的方法,与计算机进行交流,告诉你想让计算机干什么,且不违反计算机处理数据的原则,这是编程考虑的两个重要因素,而前者是最重要的。我认为在学编程,一方面要勤敲代码(尽量自己敲,别看书,不会在看),另一方面,就是分析程序的运行机制(一是从计算机角度考虑,一是从编程者的角度来考虑)凡此种种,最终要落实到行动上,在实践中排除自己的各种迷惑!(尽量自己解决问题,如果不行,老师是我们的很好的帮手,可以向老师寻问,任何能帮助你的人都是对你有利的,发现你身边的人)。
QT:
学完QT后,只知道怎么去使用Qtcreator设计界面,怎样用assistant手册查询自己需要的知识解决项目上需要完成的问题,并没有去真正的去了解这个qt底层是调用什么;在window和linux、android、ios等操作系统都可用他开发出想要的东西,感觉强强的。
arm、驱动、系统移植这几块内容对我而言难度有点大,所以没甚体会,唯一的感官就是太难了,只学了个片面。
最后,在华清这四个半月的学习,教会了我想学习的知识,过程也是让我感到充实,温暖。感谢华清远见给了我这次重新跨越专业的学习机会。这段时间的旅途,不仅教会了我知识,也教会了我解决问题的思路,我会牢牢记住。希望华清远见可以越办越好,在未来的日子里,希望我和华清远见都可以各自奔赴,各自精彩,希望华清远见越办越好!