经常查资料查到博客园,真正的注意博客园大概是五个月前,也注册了博客园,装了客户端,手机上也装了一个客户端,每天晚上睡觉之前和早上起床之前都会浏览一下博客或者新闻,由于文笔不是太好,所以很少写一些随笔,一般也是在自己的博客里写一些学习笔记。看到很多前辈、朋友都在写年度总结,我也有些按捺不住,也总结一下自己的2012,作为一个准毕业生,我也算是第一次来总结自己的年度学习、工作,也希望以后的每一年都会这样进行总结过去,规划新的一年。
我的大学在省内算是一本大学,我所在的也算是一本专业,但是在农科类院校学计算机类专业,本身就有些条件有限。不管怎么样,相对其他同学来说,我还算是比较幸运的。三年的勤工俭学经验都是与计算机相关的,尤其是在后来的一年半在学校网络中心,学到了很多服务器、网页制作方面的知识,也给学校内很多单位、个人做了很多网站,不过更多是对网上开源代码进行整合,只做静态页面部份,经常会用到DEDECMS、wordpress这些开源网站,很多老师也会介绍一些外面的公司网站来让我做,这样也算是在大学后半段满足了自己的日常开支。甚至也实现了很多愿望,升级了电脑、更换了手机、买了移动硬盘等等。但是一个工科学生对美学方面不是特别敏感,经常会遇到页面设计排版上的问题。后来慢慢自己学习代码编写,ASP、PHP都做了一些,由于更过的是解决问题,所以没有系统的学过,有时候会感觉特别吃力。后来由于学校升级换代,留下了一批旧的服务器,我也开始去整合,学习服务器环境搭建、优化、由于之前对Linux很感兴趣,所以学习起来也比较轻松,也算是根据很多资料,把很多服务器都配置了测试,并且做了笔记。再后来边发简历做了一个小IDC的兼职技术客服,每天处理一下web服务器上客户的小问题。那个时候开始自学计算机网络,虽然学校有相关课程,但是由于是个新女老师,讲的不是很条理,我也就跟着一个西安某网络工程的培训视频学习了两个月,一直以为自己的路就是Linux运维了。直到后来的两次校园招聘笔试和一个前辈的邮件让我又茫然了,两次笔试都是C语言的问题,一个前辈听了我比较复杂的经历说我比较适合开发。那个时候已经今年的五月份,我纠结了好久,后来决定去参加一下就业实训,初步计划是java或者C开发。虽然很多老师都建议说我可以出去找下一份实习工作,但是我还是比较固执的和家里要了钱参加了嵌入式开发实训。选择嵌入式的理由是:
- 1.相比于java开发,我更倾向于从底层做起;
- 2.个人比较喜欢Linux,一直想有机会能够去深入学习;虽然嵌入式并不代表Linux;
- 3.实训地点就在太原,离家和学校都不远,另外就业意向刚开始也是定在太原。
总结之前的教训就是:没有选择一个方向专一的走下去;但是经历过实训之后,路也慢慢的清晰起来,虽然嵌入式也会面临很多选择,但我相信一定不会重复之前走过漫无目的路。
从2012年7月份开始到12月份初,我开始接受了嵌入式开发实训,由于之前基础比较好,前一个月的课程,包括Linux应用等很多基础课程,我都得心应手。接下来学习Linux下C语言高级编程过程中,我也体会到从底层学习的好处,慢慢的我之前很多用过的Linux命令、运行机制有了更深的理解。特别网络编程相关,加上网络中心一年多的勤工俭学经验,也算是轻松学习,学习过程中,我也买了史蒂夫先生的《Unix环境高级编程》《网络编程卷1》《卷2》会尽量抽时间翻一下。
但是从9月底开始以后,ARM体系结构与编程,让我犯了难,刚开始对硬件、电路感觉特别吃力,没有数电、模电的基础,遇到不懂的概念,只能先记下来,回头通过谷歌查找解释。课程进行到一周以后,我慢慢的翻了很多相关的书,也会把老师敲的代码,反复练习,才对ARM体系结构这块有了一些简单的认识。这里应该特别感谢一本书,是杜春雷老师写的《ARM体系结构与编程》。
接下来嵌入式系统的移植更多的对整个硬件体系的了解,自己也试着编写了一个简单的bootloader,对vboot、uboot等bootloader做了比较详细的阅读,不过更多是与我所使用的芯片S3C2440以及相关硬件部份代码的阅读,内核移植让我学习了对内核进行裁剪、修改内核配置来适应我们需要的嵌入式系统,文件系统制作更多的是移植许多日常的应用程序,包括sqlite3,madplay,ftp,www,tftp,nfs等。这里也算是对ARM9嵌入式系统进行认知。
最后一部份就是Linux设备驱动程序,由于时间关系以及我们个人经验关系,我们只了解了字符设备驱动编写相关以及设备驱动开发流程等,当然我也曾自己按照资料编写了USB驱动。
在嵌入式图形界面,主要是在C语言的基础上,学习了C++的基本机制,然后学习Qt图形开发技术,这在后来的几个项目,包括Linux下局域网聊天软件,电子点菜器,视频监控系统等界面编写有了实际的应用,在这里也了解了一些GTK界面相关的知识。
回顾自己这五个月所学的知识,也就是以下几部份:
- C/C++编程语言
- TCP/IP协议,掌握socket网络编程。
- Mysql、sqlite数据库编程
- QT图形开发技术。
- 嵌入式系统移植,包括Boot loader、Linux内核、文件系统、应用程序。
- 了解ARM体系结构以及Linux设备驱动开发
五个月期间,个人或者带领小组也完成一些嵌入式小项目:
- Linux下C模拟售票系统
- 基于Linux下Framebuffer电子相册+libmad音频播放
- 基于Qt+unix socket的Linux下局域网聊天软件
- 基于ARM手持点菜器+Qt+Mysql的酒店管理系统
- 基于V4L2接口的ARM平台下USB摄像头远程监控系统
其中酒店点菜管理系统,我也发挥之前积累的网站建设经验,采用mysql数据库进行数据库设计,用C语言编写mysql数据库操作接口,同时实现了“双击热备份”对酒店数据进行备份。
加上之前给厦门和深圳两个公司建设的网站,这就是2012年的计算机项目收获。
下面是这一年学习的不足之处:
- 对于算法和数据结构方面做的不够好
- 学习面依然比较广,不是太专一,希望找到工作以后能够认真对待自己的职业。
- 学习ARM相关以及嵌入式系统时,只是对需要用的做了解,没有去完全了解相关部分知识
- 看书时不是特别细致,有些毛糙,偶尔会漏掉一些细节问题
总结完了学习方面的知识,就是总结一下自己的面试了。到目前为止了经历了正式的面试三次,也许是太原的嵌入式行业不太好,也许是自己还没毕业,很多单位一听是2013年7月毕业直接就会拒绝。下午给两家公司打电话咨询时,对方总是直接跟我说,不考虑没毕业的。
第一次面试经历是到公司之后,经理会跟我们说很多项目方面的需求,是做一个无线短波电台方面的,可能会用到DSP、FPGA方面的知识,我回去查阅了解相关方面的知识之后,和我一起去的朋友说不想去,我当时也有点盲目的感觉就没有去第二次面试,这里给我更多的教训是,应该自己跟着自己的想法来,不能冒昧跟从大众。
第二次面试是在和面试官交流时,听到我是未毕业的,谈话就没有在继续下去。
第三次面试是因为公司是储备人才,刚开始两个月只能提供500的补助,我选择放弃。
去了一次山西省的招聘会,由于IT企业比较少,大多数企业一听没有工作经验,甚至连简历都不会接收。
总结这段时间找工作接连碰壁的原因,客观也好,主观也好,仔细想想,大概就是以下几点:
- 客观方面:太原IT环境的确不如北上广热门,所以下一步计划元旦之后到北京或者其他IT热门城市看有没有机会
- 年底找工作不好找,找实习工作貌似更难找
- 主观方面,我对于就业的要求有些偏执,一直总想找嵌入式的工作,放弃了很多VC++的相关的工作机会。
看到身边的同学在北京、上海不管是测试还是开发的工作都已经实习就业了,我已然有些不淡定了。我之前以为的找工作简单在我心里已然有些很大的改变。
总结2012年,规划2013年,希望自己在新的一年里能够找到一份安稳的实习工作,摆正心态,努力学习专业知识,锻炼社会能力。