学习知识|如何学习嵌入式开发


如何学习嵌入式软件开发? 嵌入式学习路线图
原文链接:
我是1999年上的大学 , 物理专业 。 在大一时 , 我们班里普遍弥漫着对未来的不安 , 不知道学习了物理后出去能做什么 。 你当下的经历、当下的学习 , 在未来的一天肯定会影响到你 。 毕业后我们也各自找到了自己的职业:出国深造转行做金融、留校任教做科研、设计芯片、写程序、创办公司等等 , 这一切都离不开在校时学到的基础技能(数学、IT、电子电路)、受过煅炼的自学能力 。
所以 , 各位正在迷茫的在校生 , 各位正在尝试转行的程序员 , 未来一定有你的位置 , 是好是坏取决于你当下的努力与积累 。
我不能预言几年后什么行业会热门 , 也不能保证你照着本文学习可以发财 。 我只是一个有十几年经验的程序员 , 给对编程有兴趣的你 , 提供一些建议 。
1.程序员的三大方向程序员的方向 , 一般可以分为3类:专业领域、业务领域、操作系统领域 。 你了解它们后 , 按兴趣选择吧 。
对于专业领域 , 我提供不了建议 。
业务 , 也就是应用程序 , 它跟操作系统并不是截然分开的:
①开发实体产品时 , 应用程序写得好的人 , 有时候需要操作系统的知识 , 比如调度优先级的设置、知道某些函数可能会令进程休眠 。
②写应用程序的人进阶为系统工程师时 , 他需要从上到下都了解 , 这时候就需要有操作系统领域的知识了 , 否则 , 你怎么设计整个系统的方案呢?
③做应用程序的人 , 需要了解行业的需求 , 理解业务的逻辑 。 所以 , 当领导的人 , 多是做应用的 。 一旦钻入了某个行业 , 很难换行业 。
④而操作系统领域 , 做好了这是通杀各行业:他只负责底层系统 , 在上面开发什么业务跟他没关系 。 这行很多是技术宅 , 行业专家 。
⑤操作系统和业务之间并没有一个界线 。 有操作系统经验 , 再去做应用 , 你会对系统知根知底 , 碰到问题时都有解决思路 。 有了业务经验 , 你再了解一下操作系统 , 很快就可以组成一个团队自立门户 , 至少做个CTO没问题 。
1.1 专业领域它又可以分为下面2类 。
1.1.1 学术研究
比如语音、图像处理、人工智能 , 这类工作需要你有比较强的理论知识 , 我倾向于认为这类人是“科学家” , 他们钻研多年 , 很多时候是在做学术研究 。
在嵌入式领域 , 需要把他们的成果用某种算法表达出来 , 针对某种芯片进行优化 , 这部分工作也许有专人来做 。
1.1.2 工程实现
也有这样一类人 , 他们懂得这些专业领域的概念 , 但是没有深入钻研 。 可以使用各类开源资料实现某个目标 , 做出产品 。 比如图像处理 , 他懂得用opencv里几百个复杂函数来实现头像识别 。 有时候还可以根据具体芯片来优化这些函数 。
“专业领域”不是我的菜 , 如果你要做这一块 , 我想最好的入门方法是在学校学习研究生、博士课程 。
1.2 业务领域换句话说 , 就是应用程序 , 这又可以分为下面2类 。
1.2.1 界面显示
做产品当然需要好的界面 , 但是 , 不是说它不重要 , 是没什么发展后劲 。
现在的热门词是Android APP和IOS APP开发 。 你不要被Android、IOS两个词骗了 , 它们跟以前的VC、VB是同一路货色 , 只是、仅仅是一套GUI控件的实现 。
希望没有冒犯到你 , 我有理由 。
一个程序需要有GUI界面 , 但是程序的内在逻辑才是核心 。 Android、IOS的开发工具给我们简化了GUI的开发 , 并提供了这些控件的交互机制 , 封装并提供了一些服务(比如网络传输) 。 但是程序内部的业务逻辑、对视频图像声音的处理等等 , 这才是核心 。 另外别忘了服务器那边的后台程序:怎样更安全地保存数据、保护客户的隐私 , 怎样处理成千上万上百万的并发访问 , 等等 , 这也是核心 。

推荐阅读