在嵌入式学习困惑:做驱动开发还是做应用开发更有前途

在嵌入式学习过程中,很多人都有这样的困惑!

意思就是说,“你告诉我哪个更有前途,我就好好学哪个,另外一个就不用学了”。问这种问题的同事往往会同时问另外一些问题:我以后就想做驱动开发,你教我这些应用开发的技术有什么用?C++用得多吗?学了有什么用?我以后不想做GUI,你教我Qt有什么用?

学习最忌讳的就是“有用的就学,没有用的就不学”这种功利的态度。两个问题:第一,在你还没学进去、还不了解这种技术时,要如何判断这种技术学了有没有用?只能是根据道听途说,看各种论坛上都怎么说的,岂不知论坛上参与这种讨论的100%都是菜鸟,有的水平还不如你。第二,就算你学的技术没有用上,有什么损失吗?从嵌入式工程师可以从事各种各样的开发工作,有做驱动的,有做系统编程的,有做GUI的,有做Web开发的,只要确定了做一类工作,就不可能把嵌入式所学的知识都用上,但至少也用得上3/4的知识,假设剩下的1/4你一辈子也没机会用上了,那也就损失你一个月的学习时间而已,相比于你的收获,这算是很大的损失吗?请注意,上面的假设是不成立的,没用上的那1/4也只是暂时没用上而已,程序员要换工作或者换项目是很常见的,任何人都不可能只涉及一类开发工作,只要有扎实的基础、完备的知识体系,任何工作都能轻松上手。

扎实的基础,完备的知识体系,我们在安排课程体系的时候,正是以这两点为依据的。有的课程内容很少有学员在以后工作中会用到,但是缺了这一环就不成为一个完备的知识体系,例如通过C++来讲面向对象编程,通过Qt来讲面向对象、事件驱动和状态机编程,这些编程思想是程序员必备的基本素质,而C++和Qt可能有些学员以后工作用不到,那这种课该不该上呢?毫无疑问该上。至于还有些人争论说C++不如Java用得多,Qt不如GTK用得多,其实这种争论是无意义的,有工夫争论谁优谁劣,不如把两种都学了,会更有收获。

回到做驱动开发还是做应用开发更有前途的问题。我只能说,做好了都有前途,做不好都没有前途,只会做一样而完全不懂另一样是最没前途的。不要以为内核开发者就不写应用程序,Linus写了一个源代码管理系统git来维护内核,因为觉得现有的源代码管理系统都不好用。牛人都是这样,需要什么就写什么,才不管是kernel space还是user space。同样,做应用开发如果不懂内核,也没有办法很好地利用内核提供的服务写出性能最优的程序。做内核难,因为调试难,要跟踪大量的并发线程,因为入门难,要写一个hello world都需要学很多知识。做应用也难,回头去看1,计算机科学从理论到实践大部分都在上面两层做文章。所以不存在哪个更难哪个更有前途的问题,任何关于哪个更难的讨论都是too naive的。

我一开始看什么书都看不懂,怎么才能理出一个学习顺序?

以前有个学员在学C语言时说,“C语言很多地方都很奇怪,都得用内核的知识去解释,可是你又不先教我内核,我没法学C语言。我只好自己看操作系统的书,看内核代码,可是看不懂。”当然看不懂了,内核代码都是用C写的,如果不学内核就没法学C语言,那不学C语言又怎么可能看懂内核?看来这是一个鸡生蛋还是蛋生鸡的问题。

懒真的是人的本性,就连学习的过程都希望是一条路顺利地走下去,不用动脑就能学会的:身后走过的路都是“已知”,每走一步就把眼前新的“未知”变成“已知”,如此一路走来,把所有的“未知”都变成“已知”就算学成了。可惜,知识不是一条路,而是一个圈,你从任何一个地方跳进这个圈开始走,身后都是“未知”,眼前也都是“未知”。有的人就是不能容忍自己的身后是“未知”:看一本书,一个新的概念A是用我不了解的概念B、C来解释的,我连B、C都不懂怎么学A?没法学了!

不是人家书写得不好,而是没有任何办法能把一个圈扯成一条直线的。学习的过程本质上就是一个循环往复的过程,唯一的办法就是“存疑”:在本子上记着,有B、C这样两个概念是我暂时不理解的,然后就不再去想这回事,而是相信自己已经理解了B、C,基于自己的理解和假设去学习A,由A再去理解X、Y,这样学下去,走完一圈之后再回来,自然就明白当初对B、C的假设正确不正确了,理解了这两个概念,就从本子上划掉,这时需要再走一圈,把原来的一些错误认识纠正过来。所以,任何书都要至少看两遍,第二遍看的时候你会对很多概念有新的认识,因为你看过这个概念后面的章节,在此基础上产生了新的认识。古人早就明白这个道理,所以提出了“温故而知新”。

时间: 2025-01-16 02:21:52

在嵌入式学习困惑:做驱动开发还是做应用开发更有前途的相关文章

新手入门嵌入式学习单片机?stm32?树莓派?4412开发板资料大汇报-基础了解

ARM+Linux是目前比较吃香的嵌入式软件开发组合,4412开发板是目前嵌入式入门很好的选择,但很多新手对于如何入门嵌入式感觉不知从何下手,本文学习嵌入式软件开发需要具备哪些基本知识 Linux基础 Linux的源码和架构都是开放的,在嵌入式系统中应用尤为广泛,学习Linux对于系统的开发会有很大的帮助.详细了解Linux下的目录结构.基本命令.编辑器VI.编译器GCC.调试器GDB和 Make 项目管理工具,Shell Makefile脚本编写等知识,以及嵌入式开发环境的搭建. 赶快加入吧

嵌入式科普:基本概念,设计流程,开发特点,如何学习

本文涉及的内容较多,个人知识水平有限,如有不当之处欢迎指正. 特别鸣谢:嵌入式大神 @tofulee ,@woshizmxin 对本文给出了一些很好的意见. 何为嵌入式 嵌入式是一个比较模糊的概念,也没有很准确的解释,其实也没必要一定找出个准确的解释来,并不影响学习. 参考了网上的资料,根据我的认识,可以认为嵌入式系统是一种完全嵌入到设备内部.解决特定问题的专用计算机.我们常用的电脑被认为是通用计算机,能安装各种软件,从而解决各种不同问题:而嵌入式系统是专用计算机,只负责解决特定问题,例如控制洗

想学嵌入式开发怎么学?看这份超详细的嵌入式学习路线

嵌入式学习是一个循序渐进的过程,如果是希望向嵌入式软件方向发展的话,目前最常见的是嵌入式Linux方向,关注这个方向,大概分3个阶段: 嵌入式学习的几种线路图 1.嵌入式linux上层应用,包括QT的GUI开发 2.嵌入式linux系统开发 3.嵌入式linux驱动开发 嵌入式目前主要面向的几个操作系统是,LINUX,WINCE.VxWorks等等 Linux是开源免费的,而且其源代码是开放的,更加适合我们学习嵌入式. 你可以尝试以下路线: (1) C语言是所有编程语言中的强者,单片机.DSP.

学习嵌入式linux开发板之iTOP-4412 开发板如何操作GPIO

本文转自迅为论坛:http://www.topeetboard.com 平台:迅为嵌入式linux开发板 Exynos4412 所有的 GPIO 都有固定的地址,为了方便操作这些 GPIO,Linux 内核 在 gpio-exynos4.h 里面定义了一些 GPIO 的宏,例如: #define EXYNOS4_GPA0(_nr)  (EXYNOS4_GPIO_A0_START + (_nr)) #define EXYNOS4_GPA1(_nr)  (EXYNOS4_GPIO_A1_START 

转: 嵌入式linux下usb驱动开发方法--看完少走弯路【转】

转自:http://blog.csdn.net/jimmy_1986/article/details/5838297 嵌入式linux下的usb属于所有驱动中相当复杂的一个子系统,要想将她彻底征服,至少需要个把月的时间,不信?那是你没做过. 本人做过2年的嵌入式驱动开发,usb占了一大半的时间.期间走了不少弯路,下面将我的血的经验教训总结下,为要从事和正在从事的战友们做一点点贡献吧:) 首先,扫盲: 要做的是阅读usb Spec(英文的哦,其实很多文章.书籍和资料真有水平的还是原创的好,就像食品

【纯干货】教你如何学习嵌入式开发,嵌入式学习路线

很多学习嵌入式设计同学都会发出这样的感慨,"学嵌入式好难啊"!! 这是因为你对学习嵌入式没有掌握一个好的方法,当你掌握了,就会发现其实也很简单,今天我就总结了一些自己的学习方法给新人们参考.其实只要用心,真的很简单! 可能以下的说法您觉得听得次数太多了,但是没什么用,其实真的没用吗,你真的按照你的规划区做了吗? 学好嵌入式的前提: 一.保持良好的心态,不能急于求成.学习嵌入式并不是一朝一夕能够完成的,要一步一个脚印的坚持. 二.要有清晰的学习规划,明确学习步骤,做个计划表,明确先学什么

嵌入式开发要学什么_必备嵌入式学习路线_高手速成方法

最近遇到很多处于迷茫中的新手,在纠结要不要去学嵌入式,主要问题在于嵌入式的门槛非常高,经验少.或者非电子专业投身嵌入式行业能否发展下去.学习嵌入式可以说是比较困难的,但是也是有方法的,要增加自己Linux的技能,只有通过实践来实现了.所以,一定要在学习中勤于实践,你会收获更多. 在实际的学习过程中,嵌入式软件工程师需要学什么?相信是困扰所有嵌入式初学者的难题,大致可以总结为:嵌入式首先懂得熟悉C语言,而后可以从系统编程入手,再深入到裸机开发.系统移植.驱动开发等.嵌入式需要懂得的一些基本诸如Li

嵌入式学习-4412开发板学习-迅为4412开发板can测试技术分享

迅为CAN 测试 详情了解:http://topeetboard.com  更多了解:https://arm-board.taobao.com 本文档适用的范围 ① 硬件平台 :4412精英版以及全能版开发板.(4418/6818开发板以及imx6q开发板测试的道理是一样的可能细节有些不同,在这里我没有做实验,感兴趣的可以按照这个文档测试一下) ②软件平台 :Android4.0.Android4.4.QT.ubuntu 测试程序: 这个在网盘上有提供,另外我也会上传 一.硬件连接 can 通信

嵌入式学习步骤及方法(精典)

嵌入式门槛虽然较高,但也跟其他事物一样,并不是牢不可破.只要我们用心去对待,冬雪终将化去,春风定会吹来.具体步骤如下: 1.<C语言>第二版 谭浩强 : <C程序设计语言>第二版 徐宝文译 机械工业出版社 你能区分开指针数组和数组指针吗?你知道函数指针吗? 你能区分开定义一个变量时系统给它分配的空间与用malloc()函数给一个变量分配的空间有什么不一样吗? 2.<数据结构>C语言版 黄国愉.叶乃青编 清华大学出版社 你能合上书本,用C语言实现书中的单链表.双链表数据结