前两天看到一篇文章,大意是说技术上的东西,6个月必能掌握.看到这句豪语,心里颇有感触.6个月确实能够掌握解决温饱问题的技术,但真正的技术却是6年,乃至10年都不一定能够融会贯通.
以手机驱动开发举例,最早公司的要求是新招未有相关经验员工6个月入门;而后是和应用一样要求,3个月;而当前,组内要求往往只有1个月而已.而从实际效果看,当前1个月实际掌握的技能和原先6个月掌握的技能从开发应用角度来看是基本相等的.
6个月学习周期安排:
第1-2周学习操作系统:熟悉OS基础,了解相关概念;
第3-4周学习调试手段,熟悉将要调试的驱动基本概念;
第5-6周逐步解决简单驱动问题,实际锻炼调试技能;
第7-8周加强驱动基本开发过程的流程操作,注意软件开发管理规范;
第9-12周,逐步独立负责驱动模块,能够进行相关内容的改善;
转正
第4-6月,在实际问题中逐渐感悟驱动开发流程规范;
1个月学习周期安排:
第1周,学习操作系统和基本调试方法;
第2周,学习将要负责的驱动;
第3周,开始解决简单问题;
第4周,逐步独立解决其负责模块问题;
第一个问题,6个月确实能够掌握任何技术.个人比较幸运,采用的是第一种学习周期安排,刚开始学习别人不太了解的USB系统,以前从没接触如此频繁中断,从没接触USB规范,从没接触状态机,从没接触任务创建与切换,6个月后,对操作系统,手机系统架构确实有一些感悟;条件或者说机会毫无疑问确实非常好;但真正对我后面帮助极大的,只有一个,自我分析学习能力.自从有了这6个月经历,后面无论遇到如何技术难题,即便都是没有见过,都能很从容的进行分析和解决.
第二个问题,当前很严重的问题,1个月等于6个月问题.回过头想想,学习周期从6个月到1个月固然是由于技术成熟度在不断提高,但不由的让我想到一个巨大的问题,中国人的浮躁;尤其是程序员的浮躁.程序员考虑的不仅仅只是功能,而且要兼顾性能;在现实的基础下,很多时候,实现功能已经要谢天谢地,因为功能的实现就会有数百个bug,哪来时间考虑什么性能.于是1年1年过去,发现周围很多人还是只是为了混口饭吃而已,把自己的命运主动的交给了别人.
一个简单实验,读几句内核代码吧;高通花了几年的开发人力,洋洋洒洒数千行代码,最后被这几句定义打败,希望大家能够理解.
typedef long long Align; /* for alignment to long long boundary */
union header { /* block header */
struct {
union header *ptr; /* next block if on free list */
unsigned size; /* size of this block */
} s;
Align x; /* force alignment of blocks */
};
typedef union header Header;
#define round_up(address, size) ((((address) + (size-1)) & (~(size-1))))
功能只是个实现,理解高效实现,这才是一个真正的程序员.6个月,也就是被人牵着命运线的老牛而已.