近在和团队成员一对一沟通的时候,聊到比较深入的地方,得知大家有一个担忧和想法:担心现在工作上的积累,包括对业务的深入了解和产品相关技术的深入学习,以后到了新的
近在和团队成员一对一沟通的时候,聊到比较深入的地方,得知大家有一个担忧和想法:担心现在工作上的积累,包括对业务的深入了解和产品相关技术的深入学习,以后到了新的项目上可能不适用,因而自己会变得没有竞争力。基于这样的想法,会刻意花不少时间去学习其他“有用”的技术,可能和产品用到的完全不相关。
刚开始听到这样的想法有点吃惊,但是想想大家有这样的担心也不奇怪,其实有这样的思考也是负责任的态度,毕竟现实中很少有人一直在一个项目中做非常久,也许只有Windows,Office这样的产品有工程师可以连续做个二三十年。担心自己的竞争力没有问题,但是这样的做法是有效的吗?
下面想说说我个人的观察和思考,希望能给大家一些参考。
首先这样的想法忽视了一个现象。那是个人的成功往往是和产品或者团队的成功联系在一起,这个不是关于团队的口号, 而是在我观察到的很多地方都是这样,包括我工作过的地方。分析下来,其实原因也很简单。
1. 只有产品或者项目成功了,整个组织才能获得发展和成功,才会从市场获得比较丰盛的回报。这个是大的环境和前提。
2. 在一个组织里面,成功的项目通常也对应着成功的团队,是因也是果。而成功的团队才更容易有的个人出来,同样,是因也是果。
所以从这个角度,如果大家不能一起努力把产品和项目做得更成功,其实在组织里面,大家的发展都会受到影响。
也许大家觉得上面的团队说得有点虚,那我们看个具体的。
观点很简单:不和实际需求和问题结合起来的技术学习和研究很难深入。
关于这个方面我可以举出很多的例子,任何人在任何一个技术方面稍微深入了解后都可以举出例子。
比如1:HTTP协议
这个如果是业余学习下,说起来很简单,看下Richard Stevens的书,然后学习下RFC,自己用Firebug等工具抓包看一下,了解一下各种返回码的意义。然后给自己一种错觉,真的是错觉,我对HTTP协议已经懂得不少了。
但是我相信大家在实际中都会发现,这样的理解相比我们这些在工作中要用到的人,远远不够,因为还有太多的重要的细节,比如1.0和1.1关于连接和请求的处理的不同, 各种header的意义和用法,如何做缓存,还有cookie,还有不同的HTTP代理/反向代理,还有如何做性能的优化,还有安全性的问题,等等。
一个只是业余看看的人,我相信很难在这方面专深,一方面是上面觉得自己懂了的错觉(真的很多人有这种错觉,像很多人因为看了几本C++的书,写了些课程作业,在简历里面说精通),另一方面是他没有遇到工作中这样的需求和问题,“逼”着他去做深入的学习和研究,以便高质高效的完成自己的工作。基于这样的原因,使得无法深入的学习。
类似的例子还有很多,比如电子邮件,对于很多人来说,是收,发,回复和转发等,学习了一下的人知道有SMTP协议的交互过程,还有MTA,MUA,MDA 等概念。但是做了几年的电子邮件的项目后,回头看看我发现里面的细节真的太多了,光一个MTA的核心参数都有上百。一个业余看看的人如何能够深入学习和了解呢。
编程语言也是一样,业界有一万个小时的说法,公司也有PHP相关的T4专家,如果和工作从来不相关,随便看看学学,两天能写代码了,也觉得自己“懂”了。其实这样的“懂”了,又有多大意义,这样浅的积累真的能让自己更有竞争力吗?至少在我看来,如果一个人和我说自学了下PHP,但是从来没在任何实际的工作中用过,我不会认为是加分项,充其量也只能算有点上进心。
如果大家认同业余学学,不和实践结合,很难专深,那么接下来的一个问题是这样的一个对比,那种人更有竞争力?
一个在少数的某几个方面比较专深 vs 在大量的地方有泛泛的了解但看不出重点
以我了解到的情况和面试的经验,对于工作年限越长的人,后面的那一种越没有竞争力,很少大家会愿意招一个这样的什么都懂一点,什么都不精的人。之所以不愿意,原因至少有三点:
1. 这样的人,工作好几年了,应该算了,但是在哪方面了呢,看不出来,所以没有竞争力
2. 关于招聘,有一个得到很多公司(包括我们公司)认可的STAR方法,简单的说是去了解候选人在特定的situation下,接到的具体task,他采取了什么action,后得到了什么result。某种程度上,是一种以过去的行为来推断未来的表现的方法,可能并不完美,但是很多时候靠谱。换句话说,一个在以前工作中泛泛的人在未来也是泛泛,而项目组应该不想要这种人。