如何快速掌握一门技术

         在我们自己的现状和想要达成的目标间,总是横亘着一条名为[先决条件]的大河,似乎除了花费巨大的精力游过这条大河外,别无他法。很不幸,大部分人还没能够接近目标,便被湍急的水流冲走了。然而,还是有少部分人似乎坐上了阿拉丁的魔毯,毫无迟滞地直达彼岸,好像学什么技术都不那么费劲。这是怎么回事?

          学一门新的语言,或者新的技术,与其说是一种能力,不如说是一种方法。学习一种技术最实用的方案就是,模仿,试错,

获得反馈,不断地累积自己直接能用的[知识]。

         这是实用主义者的学习方法:绕过障碍,直奔主题,专注那些你马上需要学的。而不是把从入门到进阶再到专家的书籍全部买回来把他们垒在书桌前当画去看。过后才明白,不能被所谓的【学习要先系统地打下扎实的基本功】坑了------不断地陷入【基础知识】的泥诏,越陷越深,越学越苦,只能苦苦挣扎。这挣扎的结果,80%的情况变成了放弃。

         其实大可不必去担心这些【基础知识】,把它们先放在一边,用到多少,便学多少。比如说,我要学rails,那就直接从rails开始,遇到有关ruby的语法障碍,回过头来看看ruby文档中相关的内容,扫清障碍立刻回到rails本身,而不是先从ruby啃起。要知识,rails里用到的ruby特性,可能占ruby总体语言和类库特性的20%都不到!从ruby学起,便是走了岔路。

        软件开发是个手艺活,它的学习不是各种可能很少用到的知识一股脑的堆积,我们没法在一切理论知识准备就绪以后在开始学习。scala的作者批评java的低效时曾经说过,java把写程序变成了做仪式,因此毫无乐趣可言。那么,当我们在桌前堆满了从入门到专家的各种书籍,是不是也把学习变成了一场盛大庄重的仪式?重要的不是堆砌了多少知识,而是学以致用。

        仅仅专注并直奔主题还远远不够。学习过程中你需要大量练习和获得反馈。婴儿并没有在累计了3000个词汇之后才开口说话,而是当身体和大脑准备好后的第一天就张口说话了,并且,尽管说的错误百出,他们依然越挫越勇,屡战屡败。同样的道理,当你学习python而不使用ipython在REPL环境下尝试各种使用技巧,当你学习django而没有从搭建一个可运行的web项目开始,那学习效率肯定不高,效果也必然马马虎虎。在健身房里,就算观摩教练的动作一百遍而不是自己亲自尝试,并接受对方的纠正建议,你还是无法掌握正确的动作要领。我见过有人把书中的例子一个个敲到编辑器中,全部运行正确,然后就心满意足地认为自己【掌握】这门技术了。殊不知,这种【练习】并非有价格的练习。我们需要试错,就想婴儿学步那样,模仿,迈步,摔倒,爬起来,再迈步。犯错是学习的一部分,当你看完教程掌握了里面所述的内容后,可以自己构思某个应用或者某个使用场景,然后从头写起。你会发现很多问题,也会加深对教程的理解。这样不断地练习和获取反馈,你的开发功底会很快提升。很多非系统的知识和能力(甚至洞见)就是这样通过不断练习和试错在下意识间学到的-----它们来的如此悄无声息,以至于除你之外,别人都将其视为你的以后总天赋。

           那么,什么时候需要系统地学习呢?当你有了实战所需的技术和经验,需要宏观上对自己所学的内容做一个升华时,或者当你的实战能力遭遇到了瓶颈的时候。有句话说的好:你不需要称为一个优秀的ruby工程师才能用好rails,但如果你想成为一个优秀的rails工程师,则你必须很好地掌握ruby。遗憾地是,很多初学者的问题是:想对一门技术快速入门,却使用了系统学习的方法,还未入门,便倒在了艰苦修行的路上。

猜你喜欢

转载自569687842.iteye.com/blog/2140027