踏入职场

2005年中,通过了博士毕业论文预答辩。在学校里已经没有多少事情了。于是在拿到毕业证书之前就开始找工作。

刚毕业的学生,没有任何经验,踏出工作的第一步确实是比较难的。共面试了有十几家公司,最后给offer的只有寥寥几个。最后选择了丽台科技。选择这家是因为他所涉足的领域不错,所涉及的技术主要是“多媒体网络流媒体”这个方向,具体是IP可视电话与机顶盒的产品研发。这是个比较新的方向,也比较热门。感觉发展前景应该不错。

入职职位是嵌入式软件工程师。角色从学校的学生转变为职场里的工程师,心理上也经历了一段适应的过程。刚开始工作的三个月,还住在学校的宿舍,可是每天却要到外面公司去上班。

开始的几个月学习了一段时间的WinCE。由于刚走向工作岗位,工作热情很高,因此学习效率很高。几个月下来对WinCE基本了解了,也实际动手体验了S3C2440开发板上运行的WinCE系统,并编写了几个小程序。

但是后来由于项目变动,改变了方向,开始转向负责Linux及DSP方面的软件开发。

多媒体的处理离不开DSP处理器。产品中用到了TI的DSP DM640。我的工作中涉及到了DSP的编程,但是没有很深入。工作内容更侧重于Linux应用程序的编程。

计算机图书

工作后阅读过的主要计算机图书

我第一次接触Linux是在读博士期间。那时第一次装的Linux系统是Red Hat Linux 6.0。从那以后,对Linux的学习就基本没有停止过。在丽台的这段时间,由于工作中要用到Linux了,所以更加深入系统地学习了Linux。包括Linux系统的操作,应用程序编程,TCP/IP Socket网络编程,以及QT/E图形界面编程等。把Unix/Linux系统编程的经典著作《Unix环境高级编程》看了一遍。这本书真是一本宝典式的著作,厚厚的一本书,覆盖方方面面,没有废话,每一段文字都有知识点。

我很喜欢Linux系统应用程序的那种简洁的风格。一个程序虽然不大,但专注把一个任务做好。不像Windows下GUI程序那样的臃肿。

对嵌入式系统的认识也是从这时候开始的。从bootloader到存储器地址空间,从系统硬件配置到调试串口,从交叉编译到Makefile,各种嵌入式系统的基本知识都得以学习并加以实践。

这段时期工作的另一个收获,是学习了很多流媒体传输方面的知识。主要包括两个方面,一是网络协议,二是音视频编解码。流媒体技术涉及很多网络协议,包括RTP/RTCP, RTSP, SIP, STUN等,工作中都要用到。音视频编解码也是必须的,诸如MPEG4, H.264, PCM, G.729等。这个领域很新,在接触之后我也很感兴趣。甚至在业余时间和一个同学合作完成过一个小项目。

由于对Linux嵌入式系统很感兴趣,我不满足于工作中接触的那些知识,于是利用业余时间继续更深入全面地学习这方面的知识。我买了一块ARM芯片s3c2410的开发板,有空就研究ARM Linux系统移植。我的目标是:要完成从“没有任何代码的裸板”到“能够运行的完整Linux系统”的整个过程。

断断续续地差不多经历了一年时间,终于完成了这一目标。主要依靠网上搜索相关技术文章来学习。这一过程收获是巨大的!构建一个完整嵌入式Linux系统的各方面知识都系统的学习了一遍,包括制作编译工具链,移植Bootloader(u-boot),编译内核,制作文件系统,移植驱动程序等等。我在电脑上整理出了一份140页的学习笔记,是这一过程的总结。

在ARM Linux移植的过程中,不断地接触Linux内核的知识,特别是启动阶段的那一部分。于是,我又想进一步了解Linux内核的知识。主要是从Linux设备驱动开始着手。后来,读完了《Linux设备驱动开发技术及应用》,这本书非常适合于初学者,一步一步由浅入深,讲解的很浅显易懂。终于让我了解了Linux驱动开发,其实也就是Linux内核开发的相关知识。

在丽台科技的工作是我的第一份工作。总的来说,在这里学习到了很多新知识,让我走上了嵌入式系统软件开发的道路。但同时也感到丽台的研发能力不是很强,产品开发的管理也不规范。感觉在这里的工作并没有完全发挥出我的潜力。