IT行业的企业特点都是知识密集型企业。这样的企业的核心竞争力与员工的知识和技能密切相关。而如果你在企业扮演工程师的角色,那么你的核心竞争力就是IT相关知识和技能的储备。众所周知,IT行业是一个产生大量新知识的地方。以Web前端为例。在短短的5、6年时间里,Web前端已经经历了数次变革,而且变革将持续到现在。从之前的div+css网格布局到JavaScript的方兴未艾,再到各种JavaScript框架的角逐,HTML5和CSS3的落地,移动web、jQuery、AngularJs、ReactJs等DOM元素冲击带来的响应式设计完全不同的概念和方法,web组件的标准化流程……为什么现在企业到处招前端工程师?似乎一夜之间,前端工程师成了稀缺资源。这里的一个原因是很多前端工程师跟不上行业变化,不能满足当前市场前端工程师的能力和要求。在这种环境下,工程师掌握快速学习的能力至关重要。笔者根据自己的亲身经历和对身边同事的观察,对如何快速掌握一门新技术(这里的技术包括IT新技术、新编程语言或新程序框架等)提出自己的看法。遵循以下指导。要想快速掌握一门新技术,有两个先决条件。首先,我们要积极寻求思想上的转变,敢于跳出舒适圈,对任何技术都抱有开放的心态。求稳是人的天性。而这种天性往往会阻碍你的发展。一个人能理解的知识量取决于他的舒适区的大小。舒适区越大,与外界的边界越大,他就越觉得自己无知。程序员至少要做到两点,不要对自己不懂的技术抱有偏见,不要害怕自己不熟悉的技术。变被动学习为主动学习。中国大量的程序员每天都在被动地学习。什么是被动学习?它是被人和事逼着学习的。我今天开始了一个新项目。我不想使用新技术进行技术研究。我只有在开发过程中遇到困难时才会去查资料。我整天都在复制和重用其他人和我自己的代码。复制之后,需要大量的资金和长时间的结算。比如一个用了几年Spring的程序员,不知道Spring的核心概念,不知道Spring框架的结构,不知道Spring各个组件的功能,不知道新版本Spring的新特性。这是很可怕的,因为如果不知道这些东西,就无法采用Spring的最佳实践,如果不知道如何快速定位问题,就无法在某些需求中使用Spring已经封装好的功能项目(因为你不知道Spring仍然可以做到这一点)。主动学习需要你提前计划,而不是死记硬背。而且,学习应该看作是对自己的积累和提升,是对自己的长期投资,不能过于功利。有人说我就是喜欢安乐窝,就是不喜欢主动学习。改变这两点有什么好的途径和方法呢?老实说,我能帮到你的就这么多了。就像《后会无期》里的一句台词,“听了很多大道理,却还是过不好这一生。”这两点更多的是靠你个人去实现。而以下几点,相信可以帮到你。在学习一门新技术之前,首先要弄清楚自己为什么要学习它?在这项技术出现之前我们是如何工作的?拥有它后我们如何工作?它带来了哪些变化?其实问这些问题就是了解技术解决或简化了那个问题领域的问题,用什么方法达到这样的效果。以AngularJS为例。AngularJS最初旨在弥补HTML构建应用程序的不足。过去,HTML是为显示多媒体信息而设计的。虽然后来扩展了一些动态功能,但是在web应用的趋势下,HTML设计上的不足也越来越突出。例如DOM元素的操作过于繁琐,业务逻辑难以模块化,可测试性低,开发效率低等,AngularJS采用了全新的设计来解决这个问题。它提出了一系列概念,引入了数据绑定、标识符、路由、依赖注入等特性,大大简化了我们WEB开发的工作量。这样可以快速建立对该技术的宏观认识,了解其潜在的应用场景、应用方法和一些局限性。下一步是实际使用该技术的核心功能,以加强其理解。方法是参考技术官网的QuickStart章节,一步步来。现在的程序员越来越珍惜时间,文档的简单性、完整性、易用性成为是否采用某项技术的指标之一。特别是现在各种开源的组件,连文档都是开源的。所以很多文档完全是按照程序员的思路写的,读起来非常爽快。再拿Spring来说,如果想学习Spring4.0推出的Springboot组件,可以访问它的官网,页面上的按钮是QuickStart。点击学习吧。Pages是一个简单的示例,可能不会花费您五分钟的时间。如果你还没玩过,右边还有更多入门指南,一步步教你高级功能。可能有人会问,我英文不好怎么办?请学习英语。英语是优秀程序员的必备技能。可能还有人会说,看文档的时候出现各种杂音怎么办。比如看Springboot的入门指南,需要之前对Spring有一定的了解,需要知道tomcat和jetty是干什么的,需要有一定的gradle或maven使用经验……这些知识在练习Springboot的小程序时是需要的,但是由于这些杂音的干扰,学习过程会变慢。摆脱这些杂音的唯一方法就是花时间去学习那些你不懂的知识点。所以学习是一个良性循环的过程,学得越多,学得越快。前两步可以保证你入门一个技术,那么如何推进呢?这个阶段是阅读。从官网拉下该技术的详细文档,认真阅读。通读这些文档会让你进入它的实现细节,以及各种使用方法和场景,甚至一些最佳实践。比如Springboot的官方文档,详细到牙齿。您想到的或意想不到的一切都列在文档中。如果你想学习Scala,请访问http://www.scala-lang.org/documentation/,里面有各种各样的文档,大部分人看完之后就是Scala专家了。一个技术的最新文档一定是它的官方文档,如果不是,那么这个技术就不会流行起来。注意,在通读文档的过程中,一定要在项目中使用。如果项目中没有实践的机会,可以自己写一些小demo来实践。学习知识时实践与理论相结合的原则不变。完成前三个步骤后,您对这项技术的理解比大多数人都要好。您可以指望掌握这项技术。那么有没有更高级的方法呢?当然有,就是把自己的所学所想说出来,写出来,公开曝光,接受批评,从而发现自己的不足,促进自己的进步。如果有时间给你讲几节课,写几篇系列文章,那你就会成为大家眼中的这门技术的高手了。你有机会解决使用该技术遇到的各种难题,这反过来又加深和修正了你的理解。没事就上StackOverFlow,回答几个别人的问题,或者订阅这个技术的问题列表,经常看看。你可以更深入。加入国内/国际技术社区(国内没有社区怎么办,机会来了,自己建一个),进一步发挥你的影响力。翻译和撰写与技术相关的书籍;如果技术是开源的,有时间就提交修改,你就成了开发者。这是一个质的飞跃,从使用高级工具到创造工具。走完5步,你不再只是掌握这项技术,你已经是超神了!可能又有人会问了,这五步想必需要很长时间,不是一般人能达到的高度。当然,这个过程一定很艰难,但也没有那么难。至少我身边有很多这样的例子。其实只要完成前三步,你就比50%的程序员强。完成第四步,你就已经站在90%的程序员面前了。***快速总结。重要的事说三遍。主动学习很重要,主动学习很重要,主动学习很重要。公文重要,公文重要,公文重要。练习很重要,练习很重要,练习很重要。作者:黄博文@无敌北哆来源:http://www.cnblogs.com/huang0925
