posts - 843, comments - 4092, trackbacks - 26, articles - 3
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

公告

程序员的思维修炼 - 从新手到专家(2)

Posted on 2012-06-01 08:21 Jackei 阅读(...) 评论(...) 编辑 收藏

两个重要的概念。
  1. 经验。不仅仅是我做过什么什么,做了多少多少次,多少多少年,更重要的是在一次次重复的过程中,发生了思维的改变。直白一些说就是在做的过程中不断的思考、学习、改进。否则就只是重复了N次,而并没有对等的经验。——这个问题在一直以来的面试中经常遇到,很多声称有4年经验的 tester,其实只是重复了很多工作,而经验只能相当于2年。
  2. 情境。区分从新手到专家各个不同等级的重要标志,直白的说,就是一个人对当前所需要解决的问题认识的是否准确。这个不太好量化,牵扯到一个“怎么知道自己认识的是否准确”的问题,所谓的“决策失误”之类的,就是这么个事情。作者的一个观点是“新手通常乐观而无畏,而专家就谨慎的多”。

进入正题了,说说从渺小变强大的过程吧,在讨论的过程中需要反复的引用“经验”和“情境”这两个概念。

NOTE: 新手 和 专家 不是绝对的。你可以在某个领域是专家,而在另外一个领域是新手。

1.新手:对所需要处理的问题毫无经验。
  • 作为一个新手,最大的期望是有一个 list 让他照着做就顺利的把事情搞掂,而不是给他一些建议让他自己去尝试——悲观点估计,他会因为无法理解复杂的概念体系以及受挫而变得烦躁易怒、痛苦不堪,并可能随时放弃。所以对待新手的最好方法就是前面那个。
  • 当新手手执一份 list 时,表现的会像个专家,因为你可能会发现他的思路很有条理、很靠谱——这个典型的例子就是呼叫中心的座席,典型的 if...else...else...else...then...end 的模式
  • 新手的最大特点,就是 无法处理任何异常/例外的情况,哪怕是跟 list 上稍有差别——当然,也有些胆子大的敢胡乱折腾。
  • 专家可以写出完美的 list 供新手化装成专家,但如果专家自己用这个 list 来工作,则可能表现的还不如那个新手化装成的专家。很绕口,不过的确是这么个意思。
  • 在公司里,常见的新手是应届生/实习生。
2. 高级新手
  • 高级新手与新手的最大不同,在于有了一点经验(注意前面对“经验”的定义),并开始尝试着通过学习来独立解决一些局部的、具体的问题,但通常属于依葫芦画瓢,画得有点费劲,并且可能不太像。
  • 高级新手开始有了一些碎片化的知识和经验,但对需要解决的问题缺少系统化、结构化的认识。
  • 例如一个 tester 能在文档的帮助下独立完成对环境的搭建和 test case 的执行以及 bug 提交等工作,并且最重要的是他 开始能够借助 Google 解决一些技术上的例外情况;或者,一个初级开发人员能通过 Google 或 API 的学习编写一些小段的功能代码。
  • 在公司里,通常我们把高级新手称为初级工程师。
3.胜任者:团队中的中坚力量
  • 对于自己所从事的工作,胜任者已经掌握了现有的一整套工作思路/方法,并能用来解决相同领域的各种不同问题。例如,一个测试工程师可以理解不同系统的需求,并根据用例设计方法设计出测试用例;同时,他能够与不同的项目团队进行沟通,完成项目的各项测试工作。既是对于不同的业务领域,也能较快的学习上手。
  • 胜任者掌握了处理解决类似问题的多种方法,并且有能力区分当前哪个方法更适用。
  • 胜任者拥有完全独立工作的能力,而 新手 和 高级新手 通常需要 胜任者 的监督和帮助。
  • 在公司里,通常胜任者是 中级工程师。
4. 精通者
  • 相比 胜任者,精通者做到了“知其然,知其所以然”,不单单能根据当前的情境(参照上面对情境的定义),更有能力思考如何改进原有的解决方法/方式,以更高效的解决问题——这依据的是其对技术、业务、过程的结构化、系统化的理解和思考。
  • 精通者 能够理解一些抽象的信息,甚至从中吸收一些新的东西——但未必一定要通过动手实验,进而提出新的抽象模型/模式。
  • 对于精通者来说,具体的技术/工具已经不是其完成工作的障碍。
  • 对新手和高级新手的容忍度很低。
5. 专家
  • 已经不再受任何规则/指南的约束,解决自己领域的问题对他们来说似乎不需要思考,如在上一篇中提到的,专家使用的是“直觉”,这种 通过长期大量反复的实践、总结和思考/冥想以后,已经由意识层面进入了潜意识层面的东西。
  • 专家可以把自己的解决思路/模式梳理成 list/指南,但是他深知无法将所有的细节和例外都包含其中,而这些细节和例外,就是“情境”中最重要的部分,甚至各种细节变化的累加,足以使一件事情变成了另外一件事情,而专家总是能从容的处理这一切。另外,因为专家深知这一切,在他未表现出来的内心中会对问题保持谨慎的态度,而相对的,新手或高级新手有一种盲目的乐观。
  • 如果你要专家使用自己编写的 list/指南去工作,他将无法施展出自己的才能,甚至表现的像个高级新手。所以,对于专家不要要求他像其他人那样工作。
  • 如果你见过真正的太极高手,就能体会到什么叫“行云流水”一般,一切显得从容不迫,而这就是专家给人的感觉——可以做到完美,并且感觉不到他是在处理那些胜任者无法想明白的难题。
  • 据说人群中能成为专家的,只有1%-5%,所以貌似不用强求自己一定要成为专家,做个精通者也挺好的。

讨论完了从新手到专家的过程,早来说点其他有趣的东西。
  1. 专家应该尝试编写指南供新手和高级新手操作,并为胜任者和精通者提供培训和指导,但应该避免直接培训新手和高级新手。
  2. 精通者同样无法忍受新手和高级新手,所以最好去帮助胜任者把事情做得更好。
  3. 胜任者是培训和指导新手和高级新手的最佳人选。但是,如果缺少了精通者和专家的指引和帮助,胜任者想突破自己将是一个非常痛苦和漫长的过程。
  4. 新手需要“被驾驭”,别理解错了,他们需要在有明确指引的情况下快速的完成任务,快速收获成就感,否则很容易被挫折打败。
  5. 高级新手需要更多的激励和实践,以帮助他正确的理解当前所从事的工作,并尽快成长为胜任者。
  6. 合理的人力结构并非金字塔结构,团队中新手和专家都不要太多。据统计,大概是这样的(书中只有图例,我大概的估算了一下):高级新手 40%,胜任者 30%,精通者 10%,新手 15%,专家 5%。
  7. 但如果是一个 agile 团队,新手和高级新手都不要太多,因为 agile 中充满着各种“隐喻(oracle)”和“经验之谈”,这将大量依靠精通者和专家来解读和运作。
  8. 在推动团队前进方面,精通者与专家有同样的价值。

说完了有趣的,再来点枯燥的。

其实人作为一种生物与其他生物(或者人与人之间)的最大差别,在于“认知能力”。 认知能力是一切能力的基础, 这其中包括对自我的认知和对外界事物(包括对“他人”和对所谓“客观规律”)的认知理解; 认知 过程输出的结果或许没有所谓的“正确”或“不正确”,但是有“相对准确”或者“相对不准确”----越是无限接近“客观”,基于此认知结果作出的决策和行动就越靠谱。例如, 一个问题我该回避,还是该应对?对于一个反复思考都不明白的问题,我该放弃,还是该继续思考? 面对一次争吵,我是该退一步,还是该拼到底?对于一个不理想的环境,我是该随大流, 还是继续追求自己心中的理想?——或者,这上面的每个问题都有第三个选择?

近代西方的各种科学以及管理学的基础,也是基于“ 如何将认知过程和认知能力变成方法论和 可操作的具体步骤”,由此也进一步产生了各个行业领域自己的知识、原理、方法论, 使得人们可以快速学习和复用前人的积累,不用任何事情都从头开始,西方科学也是因为这些基础而不断进步,并最终形成了目前我们所能接触到的关于这个世界的庞大的知识体系。

不过这套体系最终还是有些局限,那就是它更多的适用于自然科学领域的各种"发现"和"发明",以及社会科学的"积累"方面,使知识体系的自我完善变的更容易,让人类对于知识的获取也变得更加容易,但具体到某个人类个体,对于这一切知识的学习、理解、领悟和使用,却依然要依靠自己从头开始。这里的关键,就是所谓的“元认知”能力,也就是“自我认知”的能力。例如,你可能继承了父母外向的性格,并参加过类似如何与人沟通的培训,但最终与人沟通的能力仍然需要你自己去不断的摸索和完善;而你对彼得林奇的投资经验背的如何滚瓜烂熟,都无法直接变成股神。再说的具体一点,你适合做技术,还是做管理,就必须基于你对自身能力的正确认知。
这就像克隆人,可以克隆出一个性格智商与你类似的人,但却无法克隆出经验、情感、悟性。而人对自身的认知的过程甚至还远远比这个更加复杂,谁也无法教会并传递给你这种东西,对于每一个人来说,都只能从头来过。

或许这才是人类社会中唯一的"公平"。

(未完待续)