嵌入式软件开发你需要学什么?
------前言------
题主本科双非,硕士普9,电子信息专业,研究课题生化相关。秋招投递的岗位是嵌入式软件开发工程师。以我专业出身而言,嵌入式软件开发并不是我的专业首选,但是我对嵌入式软件开发还是颇有兴趣的,所以就投了这个岗位(bushi,是因为我别无选择,投体外诊断这种岗位会被嫌弃,投试剂研发更会被嫌弃,还有比我更惨的研究生吗,有吗)。本菜鸡在这次秋招***拿了3个offer,还有两个在泡池子,不知道是感谢信还是发offer,反正等吧。
------一、入行嵌入式需要学什么------
我去寻找了一些大中型企业的嵌入式软件开发岗需要应聘者具备的能力,如图所示。
总结可以发现,公司需要嵌入式软件开发求职者具备的能力主要包括:
1.熟练掌握C/C++;
2.掌握数据结构与算法;
3.熟悉Linux操作系统,会在Linux操作系统做软件开发(即文件系统、进程调度、内存管理等知识);
4.熟悉多进程、多线程及进程间通讯的方法及编程实现;
5.掌握TCP/UDP原理、Socket网络编程及常见的通信总线协议,如USB、SPI、IIC、UART、CAN;
5.熟悉shell脚本;
6.熟悉常见的中小型数据库如Mysql、server;
之所以做上面的总结,是因为我想表达的是:公司需要求职者具备哪些能力,我们就去学习相应的知识,具备公司所要求的能力就行。
我在准备秋招的时候就犯了一个错误,我买了很多书,比如C++ primer 中文版、计算机操作系统、计算机组成原理、数据结构与算法、微机原理与接口技术、嵌入式开发技术等。买了这么多书,我没有一本看完的,有些就只翻阅了目录。虽然我承认,我看完这些书以后,可以掌握一些理论知识,可是这些知识还不足以让我去应付秋招,而且,我压根儿没有时间看完这些书!!!我买这些书是因为我非科班,在学校只学过C语言程序设计,很简单,所以很多东西得自己学。
------二、嵌入式软件开发怎么学------
看了上面的描述,相信友友们应该知道嵌入式软件开发应该怎么学了。友友们,千万别学我,看见我这篇文章的,赶紧避坑。准备秋招挑重点学就行了,多准备准备那些高频知识点和岗位要求的非课本技能。有些边边角角不会的知识点,咋们可以入职以后慢慢学,没必要现在花大量时间学。秋招的目的是要让公司给我们发offer,让公司看了我们的简历,面试以后就知道,我们就是他们要招的人。
另外,说说我简历上写的项目吧,给友友们提供一个参考。由于我硕士方向是生化相关的,所以我没往我简历上写我的硕士课题相关的东西(还有一个原因是,我课题进度太慢,真的是没法往简历上写)。我在网上找了三个项目(这么说吧,我既没有好的研究生课题,也没有竞赛项目加持,我只能求助于网络了QAQ),一个是纯C/C++,其余两个是基于Linux操作系统的应用开发。这三个项目,囊括了我上面提到的1、3、4、5、6点所要求的能力。这三个项目是我在众多项目中挑选出来的,虽然这三个项目很简单,但是它们涉及到的知识面广,可以在面试的时候让面试官有问题问我,不会冷场,给面试官一种我很符合该岗位的错觉(emm...我要自信放光芒,我本来就很符合该岗位,面试官不招我还能招谁,我,普信女本女!!!)
------三、嵌入式软开岗位的发展路径------
我之所以选择入行嵌入式,是因为我前期了解到,嵌入式岗位并不像互联网软件开发那样,有35岁年龄危机。嵌入式岗位的天花板是很高的,入行嵌入式十年与入行5年所拥有的能力是不一样的。
作为一个刚入行嵌入式的萌新,一般都是做嵌入式应用层开发,做一两年把应用层那一***懂以后,就可以往嵌入式底层转了,做嵌入式驱动开发。此时,工资也会有一个不错的提升。做驱动开发三到五年以后,就可以继续往下转,做嵌入式内核开发或者操作系统开发了,这时候工资会有一个大幅度提升。当然,从嵌入式应用层到驱动层再到内核开发,它们三者是分不开的,在工作中多多少少都会有接触。如果一开始就有机会做驱动或者内核开发,那是再好不过的了。但是像我们这种应届生,很少有实验室会做嵌入式驱动或底层开发,所以大部分人都是从应用层开始,拿应用层做一个过渡。
经验分享到此结束,我干饭去啦!