我个人理解的职业规划,就是根据自己的现有水平和自己的最终目标,做短期、中期以及长期过程中自己要实现的梯度目标。职业规划简单步骤如下:
- 选择一个最终目标,这个最终目标可以使中期或者长期目标(尽量简短,如嵌入式Linux驱动)。
- 搜集和归纳整理这个最终目标需要掌握的知识点和技能,以及系统学习的线路图,一般技术书籍的目录就是很好的参考。比方说,嵌入式Linux驱动需要学习哪些基础知识,先获取大流程分支,再细化小流程分支并逐个击破掌握它们。 例如:
- 首先搜集到嵌入式Linux驱动需要学习主要专题:Linux操作系统基础、Linux系统编程、裸机开发(bootloader设计与开发)、Linux驱动开发。
- 然后这些专题都有相应的专业技术书籍,书籍的目录就是更加细化的参考流程,这些流程根据自己的需要进行对比和筛选。
- 最后就是需要时间和实践来学习并掌握这些知识点。
- 清楚上面的流程之后,就可以根据自己的现有水平,把自己安插在相应的位置,制定短期、中期以及长期目标,坚持不懈完成掌握这些技能。
- 上述这些所提及到的专业知识块或者说技能点,都是实际项目或者解决实际问题中的砖瓦和基石,当一个知识点熟练到一定程度,它就变成你的工具了,因此,上述这些基础技能掌握多少,就相当于你有多少可用工具,解决实际问题的时候可选的工具变多了,自然思路也就拓宽了。同样,没有它们,将会限制解决问题的思路,因此上述这些基础知识很重要。
- 加油吧,骚年!
- 罗辑思维(重复地做你不会做的事儿,重复地做你不会做的事儿,重复地做你不会做的事儿)
- 给自己足够的精神面貌和形象,这些可以在外界因素上给你提供一定帮助。
- 重新组合后的问题本身会以一种新的方式呈现出来。
- 找出彼此之间的关系,将不类似的事物联系起来.
- 做新组合,不怕与别人不一样或不合常理,将所有的看法、想法和想象以不同的方式重新组合.
- 当爱因斯坦遇到一个难题时,他总是使用尽可能多的不同方法来展示问题,包括使用多种图表。他坚信在他的思考过程中,一万句话或数字所起的作用远不如一张图表给他的启发能形象地说明问题。
- 亲自动手,天才们最大的特点是高生产率。
- 亚里士多德认为比喻是天才的一种象征,一个能够看到两种不同领域的相似之处的人是天才,再能把这些相似之处联系起来是需要特殊天赋的。
- 研究表明得到足够运动的人,其大脑也更好。
- 欧米咖-3油是在胡桃、亚麻仁尤其是鱼体内发现的,很长一段时间都作为有益心脏的保健品销售。但是最近的研究表明,它也是脑力提升者,这不仅仅在于它帮助循环系统向大脑输送氧气。它还可以改善大脑细胞的细胞膜功能,也许这可以解释为什么吃了很多鱼的人比较不容易有抑郁,智力衰退,甚至注意力紊乱的问题。科学家已经注意到脂肪酸对于儿童大脑正常发育是必须的,而且已经把它加入婴儿饮食配方中。你的脑力,甚至你的智力有可能因为摄入足够的这种油而提高。
- 科学家告诉我们笑有益健康;它可以促进体内释放内啡肽及其它有积极力量的化学物质。事实上我并不需要科学家来告诉我们笑会带来良好感觉。笑可以帮助我们减压,还可以打破旧有模式。因此笑可以看做是对大脑的快速充电。
做嵌入式驱动的,你一定要挺住! (建议如下)
-
- 为了今后的发展,你除了考虑广度以外,更重要的是注意知识的深度。
譬如,做过网络驱动,那么是不是只停留在会写驱动的表层上,有没有对Linux内核的网络结构,TCP/IP协议作过深入的了解。
- 为了今后的发展,你除了考虑广度以外,更重要的是注意知识的深度。
-
- 现在所作的这些驱动还算不得非常核心的东西。如果你想有更好的发展,可以考虑往audio,video,net方面发展,你应该多注意这个行业需要什么样的人才,上述每一项都需要很厚的底蕴,譬如video,需要了解MPEG4, H264等,怎么也要个1到2年才能算个入行阿,所以我建议不要只顾闷头做东西,要适当关注目前的一些应用。
-
- 对硬件知识的补给,做嵌入式Linux这一行不可能不读硬件的Spec,如果你对硬件的工作机制理解的比较透,会有助你写出性能好的驱动程序。
-
- 顺便提一点,适时的提高你的英语水平,对你的职业生涯绝对有帮助(不要等需要的时候再补,来不及)。
-
- 如果有时间,平时注意对Linux应用程序编写的了解/积累,也将有助于你写出很好功能很好的驱动程序。
此外,其实如这位网友做的这些东西,在不懂的人看来,好像很高深,不能逾越,但是任何东西都一样,你要不断的进步,第一次做某个驱动和第二次再做这个驱动,你应该获得更多,如果你没有这种感觉,那你就是白做了。
- 如果有时间,平时注意对Linux应用程序编写的了解/积累,也将有助于你写出很好功能很好的驱动程序。
-
- 比如,你第一次写Linux驱动和你第十次写Linux驱动,你应该有不同的感觉,更甚者,也许你有了一套很好的框架,无论任何驱动,你只要套用框架,然后针对不同的datasheet做点修改就可以了。
你在做驱动的时候,肯定会用到与内核相关的东西,或者需要和内核中的某些模块配合,这样你也要理解内核的某些部分是如何实现的,最后,你应该可以很好的掌握linux的内核整体框架是什么。这些都是进步,都是在你一次又一次的开发中需要总结的东西,如果你不总结,永远都是从头开始(或者说永远都是还没看懂别人代码为什么这么做的时候,就去改它,然后可以工作了),就完事了,这样你永远也不可能提高,最后你就有了现在的这种感觉,觉得自己什么都不是,什么都不懂。
- 比如,你第一次写Linux驱动和你第十次写Linux驱动,你应该有不同的感觉,更甚者,也许你有了一套很好的框架,无论任何驱动,你只要套用框架,然后针对不同的datasheet做点修改就可以了。
- 如果你能自己总结这些框架并把它分享给大家,那么你的价值又高了不少。
简单搜集了相关岗位的职责需求,提取出其中相对通用的技能清单:
- 熟悉ARM体系结构
- 具备一定硬件分析能力,数据手册阅读能力
- bootloader的移植和裁剪
- Linux内核的移植和裁剪(内核裁剪方法)
- rootfs系统构建及裁剪维护
- 熟悉嵌入式系统常用硬件接口:GPIO、按键、以太网、串口、CAN、LIN、SDIO、I2C、SPI、MMC、USB、NAND、eMMC、PCIe、HDMI、MIPI等
- 熟悉 proc/devtempfs/sysfs/dev 虚拟文件系统
- 了解主流内核/虚拟化技术Xen、kvm、qemu、libvirt等的实现,阅读过相关源代码
- 熟悉Linux内核主要模块:内存管理、进程调度、文件系统、IO、VirtIO模块
- 熟练内核分析工具,比如kdump/kexec/crash/systemptrap/ftrace等,熟悉Crash Dump、驱动调试方法
- 系统调优的方法及工具使用,如perf/vmstat/iostat
- 精通C语言、熟悉常见数据结构和算法、多进程、多线程、网络编程、熟悉TCP/IP协议
参考文章:嵌入式工程师的真实现状,有人月薪 8 千,有人年薪快 40 万!
嵌入式驱动工程师:编写和移植各种芯片驱动(如音频芯片),优化硬件设备驱动(如温湿度传感器),得精通各种硬件接口协议(如I2C协议)、系统调度、信号量、锁机制等等,开发难度最大。
嵌入式系统工程师:主要是编写固件,根据不同平台移植操作系统,根据应用场景来优化系统,需要熟悉整个操作系统组成与调度,对固件的稳定性高求很高,如果系统不稳定,驱动和应用也是白做的。
嵌入式应用工程师:编写业务逻辑程序,调用驱动工程师提供的接口控制设备,软件开发过程所涉内容范围非常广,主要使用C语言开发,但经常会涉及C++、Java、python、JavaScript、PHP等各类语言以及各种脚本语言、数据库、前端后台、各种通讯协议、甚至一些从来没听过的协议或概念。
这需要很强的学习能力,该职位也是各大公司需量最大的,一般10人的开发小组,驱动开发与系统开发与应用开发的比例是1:2:7。
根据我的经验,世界上可以分成两种嵌入式工程师,一种是大公司的嵌入式工程师,另一种是小公司的嵌入式工程师,我知道这样分类很不妥,但并非毫无道理。
大公司:大公司的特色是什么?答案:人多!人多导致的后果是什么?答案:项目分工非常细,都遵循“术业有专攻”这一哲学道理。例如职位是嵌入式驱动开发,那么大公司可能还会细分嵌入式显示屏驱动工程师、嵌入式音频驱动工程师、嵌入式电源驱动工程师等。这就是大公司一贯的作风,它希望去培养某一方面的人才;说白了就是如果你分配到的是一个显示屏驱动项目,那么有可能你这一年内都是在开发显示屏驱动,一年后你将是显示屏驱动方面的一个小专家。在大公司记住一点,你做的东西都是很“精”的;同时,大公司的薪资水平和福利也是相当可观的,有完善的晋升路线,离职率一般不高。
小公司:小公司的特色是什么?答案:人少!人少导致的后果是什么?答案:项目分工不明确,什么都得干,它给你灌溉的思想是“小陈,我们培养的是综合性人才,在这里你就是全栈工程师”。估计很多人都没听明白,意思是说这里人少活多,你什么都得干。小公司才不会管你是嵌入式驱动工程师还是嵌入式应用工程师。反正是活你就得干,分分钟前端后台服务器你都得给我干,不要跟我说什么没学过,没学过就去学呗。小公司还有一个特色就是:“节奏快”,大公司里面可能开展一个项目会花上几个月的时间或者更长,在小公司是不存在的,领导都是指望着你几天或者两三周完成,那你也只能说呵呵了。的确,在小公司你可以得到飞速的进步,很强的综合性技能,前提是比人家花出更多的时间,把每一个项目理解清楚,而不是应付心态。坚持下来,两年后必能独当一面。小公司提供给应届生的薪资水平相对与到大公司来说要低,其福利不完善和晋升路线也一般比较模糊,所以小公司的离职率会比较高,经常出现两年三跳的情况。
还有一个经验分享给年轻人:无论哪种语言,程序代码只是一个简单的工具,最后真正留下的只有原理、协议、框架、思维。