做驱动开发还是做应用开发更在前途?
时间:10-02
整理:3721RD
点击:
做驱动开发还是做应用开发更在前途,意思就是说,“你告诉我哪个更有前途,我就好好学哪个,另外一个就不用学了”。问这种问题的同事往往会同时问另外一些问题:我以后就想做驱动开发,你教我这些应用开发的技术有什么用?C++用得多吗?学了有什么用?我以后不想做GUI,你教我Qt有什么用?
QQ 黄工 2685896890
学习较忌讳的就是“有用的就学,没有用的就不学”这种功利的态度。两个问题:
第一,在你还没学进去、还不了解这种技术时,要如何判断这种技术学了有没有用?只能是根据道听途说,看各种论坛上都怎么说的,岂不知论坛上参与这种讨论的**都是菜鸟,有的水平还不如你。
第二,就算你学的技术没有用上,有什么损失吗?从嵌入式工程师可以从事各种各样的开发工作,有做驱动的,有做系统编程的,有做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的。
QQ 黄工 2685896890
学习较忌讳的就是“有用的就学,没有用的就不学”这种功利的态度。两个问题:
第一,在你还没学进去、还不了解这种技术时,要如何判断这种技术学了有没有用?只能是根据道听途说,看各种论坛上都怎么说的,岂不知论坛上参与这种讨论的**都是菜鸟,有的水平还不如你。
第二,就算你学的技术没有用上,有什么损失吗?从嵌入式工程师可以从事各种各样的开发工作,有做驱动的,有做系统编程的,有做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的。