1. Kernel is not difficult, it's just different 这话不是我说的,忘了是哪位大牛说的了。这里借用这句话,kernel泛指底层开发。说实话,要一辈子吃底层饭,绝对比一辈子吃应用开发的饭简单多了。原因在于底层开发是个收敛系统,应用开发是个发散系统。底层受限于硬件,虽然有不断的新feature,但相比应用层技术的革新,那真是慢太多了。在底层开发,时间越久经验越多,可谓一艺通,百艺精,你在一个子系统的经验很容易扩展到其它子系统。应用开发就不一样了,很多需要专业知识,例如你multi-media搞的再精,也扩展不到语意网搞搜索。此外说底层开发收敛,是说在一个code base的基础上,你要的东西都可以找到。例如你在内核中看到一个函数,就可以在内核中找到实现。而应用开发发散,当你看到一个没见过的函数时,很可能就意味着你要学习一个新的库了。
最后举个我老大的例子,当年我还啥都不懂时他带我出道的。我老大现在移民美国,在硅谷发展,走之前是世界最大存储公司的principal engineer。他底层搞得很深,简历里写“A lot of knowledge in system architecture, such as x86/ia64 architecture, MMU, cache, PCI, power management, ACPI, BIOS, RAS, SMP, IOMMU, NIC and VGA etc..”,上次听在美国的朋友说他感叹说自己的知识面太窄了。由此可以见底层的知识面和应用的知识面纯粹是两个范畴。