我大学学的专业就是计算机,之前就接触过c,c++等计算机语言。在大学期间,上课的方式就是老师在讲台上讲,学生在书本上划重点,做笔记等,很少有实操的机会,学的东西基本都停留在理论状态,独立敲代码的能力基本没有。来到华清之后,刚开始的预科C的课程将C语言的基本知识都梳理了一遍,主要是基本的数据类型,感觉收获很大,接下来的数组,指针,函数,数据结构等内容学下来也感觉比较轻松。后面的文件IO,多进程线程的课,我理解的本质上是讲解各种函数,函数的功能,原理,用法等等。不管代码有多长,函数有多复杂,一层层分析抽丝剥茧,其实都是从最基本的知识点出发的。老师上课的方式也挺好,只要有没听懂的知识点,提出来老师会当场解决,直到弄懂为止。
个人总结的学习方式就是要多敲代码。只有在敲代码的过程中,敲不下去了,或者出错了,才能找出问题在哪,是什么原理,为什么要这么写,,一个个去解决问题,后面就会越来越顺,出错越来越少。
由于自己对软件硬件开发十分感兴趣,感觉物联网、芯片是当下以及未来最热门的方向,因为生活、工业生产等方面几乎处处应用了这些技术,只有掌握了相关知识技能,才能跟住时代的脚步。前些年一直想提高自己的编程能力,因为忙于毕业和论文,一直没有大块的时间对编程进行系统的学习。读大学和工作是没有人督促的,完全凭自己的自觉,上自习也是一个人,这种环境容易使人变得懒散,失去斗志。来到华清学习,让我突然感觉回到了高中时代,找到了些许当年奋斗的激情和热血。华清的学习氛围和管理模式很好,老师们都很专业,对学生提出的问题都会耐心解答,老师们通过实例代码突出书中最重要的内容,这比起自己花大把时间阅读书籍效率要高的多。感觉华清老师的讲课思路真的很清晰,即使有时候第一遍听的不太懂,再看一次回放就可以彻底把知识点搞懂,老师们对授课进度和节奏把握的也很好,会留给学生充分的自习时间编写代码和回顾知识点。到目前已经学习了Linux与C高级、数据结构、进程线程、网络编程、C++等内容,再把后面几个月的培训学完,基本可以比较系统和全面的掌握嵌入式开发知识,为以后的工作打下坚实的基础。华清的培训模式也有助于学生们养成良好的习惯,自从来到华清学习以后,我养成了每天早起,按时吃饭,按时睡觉的习惯,这样使我每天精力充沛,不像从前的我经常熬夜,吃饭不规律。
华清的官网上有大量的学习资源,老师们的讲课视频,同时还配备了很多教材,如果有培训课程以外的需要,也可以学习华清官网上的其他教学资源,我感觉这对于已经工作的人是很有帮助的。华清在培训的最后一个月还会教同学们制作简历、传授面试经验和进行模拟面试,这也可以为正在找工作的同学提供很多经验,少走弯路。所以如果你想提高IT相关专业技能、学习计算机互联网知识,或跨入互联网行业的门槛,又苦于找不到方法和途径,我会向你推荐华清。
我相信经过在华清的学习,未来我可以更好的胜任工作。培训以来,感谢老师们的耐心传授,班主任的悉心指导和同学们的相互鼓励与协作。最后希望同学们能够勤学苦练、共同进步,也希望华清越办越好。
由于很少了解嵌入式系统,感觉蛮难的,很多的概念都比较模糊,真是茫然无从下手。但是在每位任课的老师的带领下,从最基础的东西学起,最终渐渐的了解了很多关于这方面的东西。
嵌入式系统本身是一个相对模糊的定义,一个手持的MP3和一个PC104的微型工业控制计算机都可以认为是嵌入式系统。总体来说,嵌入式系统是“用于控制,监视或者辅助操作机器和设备的装备”。一个典型的桌面Linux系统包括3个主要的软件层---linux内核、C库和应用程序代码。内核是唯一可以完全控制硬件的层,内核驱动程序代表应用程序与硬件之间进行会话。内核之上是C库,负责把POSIX API转换为内核可以识别的形式,然后调用内核,从应用程序向内核传递参数。应用程序依靠驱动内核来完成特定的任务。
在了解了基础知识之后,我开始进行编写操作,当然,其中遇到很多的难题,很多东西都是第一次接触,而通过最近的学习,我感觉收获还是蛮多的。可能我对于嵌入式的知识学习的还是不太多,但是这之外的东西收获颇丰。它让我学会了如何通过自己的努力去认知一个新事物,更重要的是端正自己的学习态度,只有真正下功夫去学习,才能有收获,正所谓“一份耕耘,一份收获。”我也学会了如何去分析问题,如何找出自己设计中的不足,继而去排除解决问题,这就是一个自我学习的过程。当我们通过实验去学习理论知识时,自己动手得出的结论,不仅能加深我们对嵌入式的理解,更能加深我们对此的记忆。
当然在每个阶段之后,自己也要好好的复习前面的内容,加深对学习内容的理解和使用,把所学的知识联系起来。当然在上期课程结束之后也是有一些小项目,通过自己的编写能够很好的去掌握前面所学习的知识点。最最重要的还是动手能力,必须得自己动手才能成长起来呀。
当然,在这其中,我也发现自己的许多不足之处,编写代码逻辑不清晰,还有上课听懂,但是不知道怎么动手。我相信在以后的学习工作中,我一定会端正自己的学习态度,一丝不苟的去对待每一件事。只有做好足够的准备,才能事半功倍!
华清远见的嵌入式课程在我看来主要分为三个部分,基础,提高,深入。基础学完可以应聘纯C的开发工作,提高学完可以应聘应用层的C++/QT开发,深入学习完可以应聘驱动开发。
嵌入式基础课程
嵌入式基础课程所使用的大都为C语言,分为6个课程
C语言基础:为期两个星期的C语言基础补习,里面讲述了,C语言基本特性,数据类型,运算符,结构语句,GDB调试,位运算,修饰符,函数,main函数传参,动态内存。
Linux C:一个星期的课程,以Linux为主体,主要讲述了:Linux基础知识,体系结构,虚拟机下Ubuntu使用,软件包管理,网络基础,目录体系,vim编译器使用,相关命令,Makefile ,Sheel脚本。
IO:两天的课程,分别讲述了文件IO,系统IO,相关的函数和使用。
数据结构与算法:一个星期的课程,讲述了:数据结构基础知识,线性结构,树状结构,网状结构,算法,复杂度,项目演示。之后又给了我们两天的时间做项目。
进程,线程:一个星期的课程,讲述了:进程,线程,进程间通信,线程间通信。
网络编程:一个星期课程,讲述了:网络基础,通信流程,服务器模型,IO模型,网络属性设置,SQLit数据库
嵌入式基础部分,总共六周左右的时间,六个课程又分为三个阶段,
第一个阶段:语言和环境的使用,这一阶段较为轻松代码量少,概念也不难
第二个阶段:学习了数据结构和IO,代码量一下就上来了,概念中等,只要学习就不难理解,这时候也接触到第一个项目,通过项目熟练前面所学的内容,练习自己的敲代码能力。
第三个阶段:涉及到了进程线程,网络,概念相对复杂,需要反复理解,但是这一阶段代码量不大,反复敲经典代码,可以掌握。
在这一部分,如果细分,还可以分成两个阶段,C语言到数据结构,算是基础,文件,进程,网络,这三个课程算是Linux内核部分。后者的概念较多,但是不建议太过于深究,一切还是需要代码练习。
嵌入式学习提高课程
嵌入式提高课程开始引入面向对象语言:
C++:为期两个星期的课程,主要讲述了:初识Cpp,面向对象,运算符重载,模板,STL,继承,多态,项目讲解,另外给了两天的时间让我们做项目,并且答辩。
QT: 为期两个星期的课程,主要讲解了:QT概述,QT软件的安装,创建QT项目,信号和槽机制,QT窗口系统,QT信号机制和事件,绘图和绘图设备,文件系统,QT的Socket编程,多线程,数据库,另外给了两天的时间让我们做项目,并且答辩。
Python:为期一个星期的课程,主要讲述了Python的基础,这个课程作为了解课程,只要会编写基本的Python程序,会看Python即可,因为现在有些岗位需要会Python
STM32/NBiot:为期一个星期的课程,老师会发一个STM32的开发板,和一个NBiot开发板,会讲解如何使用,如何编写项目,如何通信,采集传输数据。
嵌入式提高的课程,总共6个星期,其中的重点在于C++和QT,作为初次接触面向对象来说,这一步是艰难的,需要大量的时间来学习,理解,并且敲代码,后两个个课程。并不是很难,所以可以空出时间来复习C++和QT,学会合理的安排时间。学习完这个阶段,其实以及可以找应用层的开发了,这时候如果有想从事这应用层开发的同学,可以开始复习并且刷题了,并且完善项目。
嵌入式课程深入
由于这一阶段的课程我还没有学习,所以只是,放上学习内容,不过这一阶段主要是偏向底层,涉及内核,在学习的时候,会发放ARM开发板,并带着做项目,ARM一个星期学习时间,系统移植一个星期学习时间,驱动两个星期学习时间。总共一个月的时间,这个阶段学完可以找驱动开发的岗位。
最后的项目实战,为期一个月的时间,这个时间,是自己做一个完整的大项目,然后同时复习,准备建立,并且练习面试,找心意岗位。
学习软件
VNC: 用来上课时观看老师桌面,听课使用
VMware:虚拟机,用来安装Ubuntu操作系统,进行Linux下环境操作
feiQ: 飞秋用来传输文件,上课笔记,提交作业
QT: 在QT阶段时,使用该软件开发
visual studio:在C++阶段时,c++语言的编辑编译
VSCode:编辑器,用来敲代码,配合插件使用,提升学习效率
BowOad: 轻量级代码编辑器,一般用来查看上课代码,方便高效
XMind: 用来编写思维导图,在上课时通过思维导图记录笔记
Source Insight:代码阅读器,用来看源代码,内核代码
WT+WSL: win终端和wsl,实现在终端内运行Linux系统,配置麻烦,但是使用起来方便快捷。
学习资料
教科书:《嵌入式 Linux C语言程序设计》,《嵌入式操作系统Linux篇》,《嵌入式应用程序设计综合教程》,《嵌入式体系结构与接口技术 Cortex-A9》,《嵌入式Linux驱动开发教程》
内部PDF:《第一期讲义》,《第一期实验手册》,《第二期讲义》,《第二期实验手册》讲义是基础概念的讲解,实验手册是项目实操的详细步骤与重点。
参考书籍:《嵌入式系统软件工程 方法、实用技术及应用》,《嵌入式c语言自我修养:从芯片、编译器到操作系统》,《C语言解惑:指针、数组、函数和多文件编程》,《明解C++》,《面向对象是怎样工作的》,《计算机是怎么跑起来的》,《网络是怎样链接的》,《程序是怎样跑起来的》,《跟我一起写Makefile》
老师上课笔记:老师在上课时会同步的写笔记,会把上课的知识点写到word文档里。每天课程结束的时候,会发给我们。
演示代码:老师在上课的时候写的代码,会打包好,每天一发。
课程回放:每天上的课程,老师会再华清远见专门的网站上录制直播,下课时,班主任会发当天的视频链接,可以点击在浏览器中观看
笔记整理
这些笔记是根据上课时的讲解,老师的笔记,自己参考的网上资料自我整理的Markdown文档,和通过上课时记录的思维导图。
Markdown
C语言提高.md
计算机操作系统.md
数据结构.md
C++.m
C语言基础.md
QT.md
预处理命令.md
进程.md
XMind
C语言高级.xmind
C++.xmind
进程.xmind
Linux OS.xmind
C语言基础.xmind
数据结构.xmind
IO.xmind
网络编程.xmind
笔记只是自己学习过程中的总结,对于详细知识的学习,还是要看对应的书。笔记记录和整理最为忌讳的就是,过于注重笔记的整洁美观,而忽略了记录笔记本身是为了什么,当每天你花费大量的时间去整理笔记而没有时间练习代码,这时候你就需要停下来了。
个人学习心得
在学习了这么久的时间里,自己或多或少都有一点点的学习心得,首先需要明确的是,不管我们因为学到了新的知识而高兴,或者是终于改好了代码中bug而兴奋,还是在做了一整天的痛苦,这些都是这个过程中的感受,不要忘记最初的目的,找一个很好的工作。
找到一个很好的工作,才是我们最开始的目标,那么在学习这条路上,就要以这一目标为基准,6个月的高强度学习,每天获取大量的知识,从早上8点到晚上九点,这每一天的时间,辛苦是肯定的,全部掌握知识点是不可能的,一定要有取舍,要有安排,哪些是一定要牢记的,哪些是要掌握的,哪些是要了解的,这都不一样。
哪些知识点重要或者不重要,对于每一个人来说都是不一样的。因为大家想做的岗位不一样,岗位的需求不一样,虽然说不至于在学习的时候就心猿意马的找工作,但是在学习的时候了解一下,岗位需求,自己想做哪一方向的工作,通过这种目的指向的学习,会让自己合理的做出安排。
在学习过程中,有很多的学习方法,对于个人来说,练习,代码复现,通过自己亲自敲一遍的代码,是完全不一样的。上课听老师讲完课,这时自己是一种水平,听完课自己过一遍笔记,自我整理完笔记这又是一种水平,自我打一遍代码又是一种水平。所以不要害怕敲代码,越是害怕,说明这一方面你越欠缺。
学习资料有很多,现在最大的问题不是资料太少,而是资料太多,所以在学习的时候,不要去疯狂的查询资料,先耐下性子,拿手头的资料慢慢的学进去,再说其他额外的资料。网络上很多资源良莠不齐,计算机书籍也有好有坏,不要在这一方面花费太多时间。
上课的回放重要吗?重要,但是十分不推荐当天上完课就看。笔记重要吗?重要,但是不要花费太多的时间花费在笔记上面,让他变得精美。最好是先看老师的笔记,根据上课同步记录的思维导图学习,等时间慢慢空闲了再去整理自己的笔记。
最为推荐的,就是自我建立一个代码库,把学习阶段中,所学习的,要练习的代码整理到文件夹中分类,注释多一些,再给每一个练习配合一份简单的文档,通过建立自我的代码库,是我感觉最为高效的学习方法。
另外,由于学习内容多,资料也多,所以应该建立一个合理的文件结构用来存放所有资料,练习的代码,笔记,资料...,按课程分别存放,清晰明了,最忌讳的就是全部放桌面,自己都不知道文件在哪里。
在学习过程中如果遇到问题,首先自我解决,这一阶段可以在网络上查找资料,如果自我解决不了,那就和同学一起讨论,如果还是解决不了就询问老师,在学习的过程中,一定要注重讨论,把自己想说的,想问的表达出来,不要自己一个人闷着学习,闭门造车。
在学习生活中,有什么困难,有什么想法困惑,甚至是抱怨,担忧,焦虑,这些都可以和班主任聊聊,不得不说,班主任都是小天使。班主任真的十分的负责,遇到问题咱们就去解决问题,而不是让他留存下来,成为一根刺。
最后要说的是,学习工作是生活的一部分,在这条路上奔波的时候,不要忘记自己的身体健康,和心理健康,注意好身体,好好吃饭,每天下课了,运动运动,走一走,心情烦躁了和同学说说,和老师交流交流。这样我们才能越来越好,不是吗?