我是如何学习一门新技术的

作为一个自己技术一般的人,写这个难免会被人拍砖。不过写下来,记录一下自己的学习方式也好,他人可以作为参考和借鉴。

经常有很多新入学的学弟学妹们问我该如何学习一门知识,比如如何学习一门语言、如何学习数学建模、如何学习Android开发、如何做一个完整地项目等等。我在这些方面并没有什么卓越的建树,当然自己参与过这些过程,因此总是有些可以传授的经验,这些经验并不是灵丹妙药,毕竟不是复制粘贴就能完成所有事情。自己参与的这些过程,有时候有人带,有时候自己摸索,也走过很多弯路,但是自己最终都坚持走下去了。有时候过程很难,但是结果很美妙,比如你努力学习终于找到一个称心如意的工作,是不是也会对过去遇到的困难一笑而过。

这里主要谈的是如何学习一门新技术,新技术也泛指某种编程语言。有时候学习一门语言,是因为项目需要,有时候学习,是自己的兴趣。兴趣这东西说不准,尤其对于接触比较少的新生来说,我遇到过一些大一的和研一的新生,他们有自己大学的梦想,就是不知道怎么努力,不知道怎么确定方向。每次我对他们说,最重要的是找准方向,找准定位。有时候方向甚至比努力更重要。为什么呢?选对了方向,就可以少走弯路,节省不少的时间,省去了很多试错的过程。很多同学就是在研究生两年多的时间内一直没有弄清楚自己想要什么,等到快要毕业了,就着急起来,像无头苍蝇,然后就过来问我,我该学硬件啊,还是适合做软件呢?

说一说我自己的情况。2013年研究生保研到通信专业的国家重点实验室,实验室方向为高性能网络与交换,具体研究的是OSI七层模型中的数据链路层的分组转发和路由,说白了就是拿FPGA做交换机的交换单元。保研的到这里不是因为我喜欢这个方向,一部分是因为之前带我的师兄推荐我过来,后来我就来了。但是来了之后发现,我并不是很喜欢做硬件,因为本科接触过一些硬件相关的东西,但是后来转向了软件,现在回过头来又接触硬件,我心里是有抵触的。但是好在实验室老板人特别好,并且能知道我喜欢做软件这方面,因此给我们很多自由的空间,也只分配硬件的软件仿真和一些硬件相关的软件项目,这就能让自己把心思花在软件上,做自己喜欢的事。可能有人说这样研究生不就白学了,但是我不认为,我觉得我学到很多做工程的方法、经验,也对通信网络和硬件有了一定的认识,并且还能够坚持自己的兴趣,我觉得够了。但是唯一不好的一点是没有人带你,自己摸索软件的那些东西,很难系统和深入地对一些知识进行学习。

很多人读研是因为本科就没能确定自己想做什么,能做什么。我遇到过几个学弟学妹,他们问我同样的问题的时候,我告诉他们需要做出一些尝试。既然不知道自己喜欢什么,那就趁现在时间还充裕的适合,几个方向都尝试一下,时间不用太久,目的就是通过尝试来了解这个行业的一些状况,了解这个领域需要什么样的知识,需要什么样的人,招聘的时候有什么样的要求。当然时间很短不能看到整个领域的全貌,所以尝试的时候能全身心投入最好了,这样还能够知道自己的工作状态,了解自己是否真的喜欢这种工作状态。我有很多认识的同学,以前本科也没用了解到自己真正的兴趣所在,直到研究生,通过某些机会或者主动的尝试,发现自己喜欢前端开发、适合Android开发,抑或对大数据有很不错的感觉,然后坚持一路下来,在毕业的时候找到了称心如意的工作。

说了这么多,还是没有说到正题,我是如何学习一门新技术的。方向找对了,学习新技术就比较容易。因为你知道自己需要什么样的知识,或者在学习的过程中知道了自己的不足,然后去填补自己这部分的空白。我接触Android一年左右,最开始是因为朋友知道我做技术,找我做个APP,想一起尝试着在校园里面创业。那时正是我处于研一的阶段,还在犹豫以后能够做什么样的工作。想到自己平常时间也还充裕,于是就尝试干了起来。对于Android自己是从0开始。然后我并不觉得有什么难度,毕竟自己以前有过那么多学习的经历。说到这,我觉得对于一个新事物,不应该有胆怯的心态,而是抱着好奇心,去探索它,去拥抱它。经常有同学很害怕接触新事物,害怕自己很难掌握。其实探索新事物的未知性有很多的乐趣,你总是会有很多惊喜,还伴随着一些成就感,只要方法正确。胆怯的心理反而会暗示自己没有足够的能力去掌握新事物,潜意识会认为自己办不到,如果暗示多了,可能就会变成现实。

我在进入Android的世界时,还用的是windows phone手机,于是自己果断换了一部Android,从APP开始了解起。当时刚研一期末考试结束,已经是1月放寒假的时候。于是开始从书籍开始看。找一本比较好的入门书籍,系统地对某个领域的知识进行大致全貌的了解是有一定必要的。整个一个多月的寒假,在家里把Android相关涉及到的点都摸了一遍,基本的组件等都自己练习实践了一下,并开始自己做一些非常小的项目来测试学习的效果。等到3月开学的时候,项目正式启动,我一个人负责Android端的开发,另一个好朋友负责服务端后台,另外还有产品、UI、交互以及运营等小伙伴一起。对于一个新手开始一个新的项目,多少是有点紧张的。开发过程就是不断学习的过程,跟着产品需求,挑选最适合实现的技术和方法,这个过程比较艰难。但是经过之后,很多之前书籍上的知识点过后都能有一定的深入理解,毕竟项目实战过程中会遇到各种各样的问题,有些问题很常见,容易解决,有些问题却并不是那么轻易就能找到解决方案。查找资料在这个时候是必须的,尤其是查找英文资料。我在这里不想挑起搜索引擎或者网站之内的口水战。我只是觉得,很多英文的博客和论坛对于一些问题都有深入的解释,并且科技方面的用词也比较简单,只要过了四六级再加各种词典肯定能够应付得来。当然国内也有很多优秀的博客值得学习,但是我不建议学习的过程中拷贝源代码,而是最好能有自己的理解之后再自己实现出来。尽管这样会多花一点时间,但是我觉得是有价值的,也是会产生一定的回报的。

项目实践对于学习有很不大的促进作用,我在陆续做了两个Android的APP之后,对Android领域或多或少有了一定的了解,不会是一知半解。另外我在学习其他技术或者语言的时候,也经历找到一个项目作为依托,做完项目之后再去总结和沉淀,我觉得这是一个升华的过程,你会发现自己有了很大的提升。这时候又会有同学问,哪里去找那么多项目呢?其实项目不需要多,少而精即可。关键是要把这个项目吃透,而不是只作为项目的旁观者。你需要的是自己在项目中产生尽量多的价值,做项目的推动者。学生找项目的途径其实很多,比如老师的项目,比如朋友的项目,比如自己找实习或者兼职的项目,抑或是自己找的外包的项目,创业的项目。我自己平常喜欢做点小东西娱乐一下,也在实验室中得到过锻炼,也接过外包项目赚过外快,也自己投钱参与过创业的项目。只要自己真心想做想参与,都不是难事。

学习的过程中一定要有沉淀和总结,不管学的多还是学的少。我们总是希望所有东西都能记到脑海里,下次再用的时候回忆一下就可以了。其实不然,毕竟要学的知识太多,我们需要对知识进行整理。如果你真的能记住所有曾经学过的知识,你也许并不需要我写的这些废话。写博客是一个好的记录和整理知识的过程。我看过刘未鹏写的《暗时间》,他对写博客的好处讲的比较透彻,那本书我送人了。写的过程也是重新学习的过程,会对你学的知识进行一次考试,看你是否真正地掌握了这个知识点,和你给别人讲自己学的东西有同样的效果。我们并不是经常能找到能够听自己讲技术的人,但是写博客是一件很容易办到的事,成本很小,但是价值却很大。

除了从书籍、从博客、从视频中学习,我们还可以从源码中学习。技术圈子中开源的东西很多,都是很丰富的学习资源。看看别人怎么做技术,用到了什么好的方法,有什么好的习惯,都可以从源码中看出来,再择其善者而从之。

学习技术的过程中,还要学会思考。思考什么呢?思考为什么会有这样的技术,是为了解决什么问题才产生这样的技术,思考这样做的好处是什么,不这么做又有什么坏处。为什么会有不同的技术去解决相同的问题,到底它们的优劣是什么……这是一个深入挖掘的过程。多问一问自己为什么,这是我在阿里实习期间一位很厉害的师兄教导我的。我们学习的时候,不能只是看到事物的表面,而不知其所以然。这样我们只是学会了一门工具,而不是学会了一门技术。要做的比别人好,就需要有更多专研的精神,这样才能逐渐形成自己的核心竞争力和不可替代性。

其实写了这么多,我自己也只是做到了一部分,但是很多都是自己努力的方向,自己尝试过这些方法,也获得了很多好处,也希望那些在迷茫中的学弟学妹们找到一些好的学习方法和途径。但是并不是说知道了这些方法就一定能学好一门技术,还是需要用心、专注和坚持。作为一个即将毕业工作的研三学生,我也走过不少弯路,把一些经验教训留下来也好。

你可能感兴趣的:(Essays)