如何成为一个优秀的程序员(12)

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

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

推荐阅读