当前位置: 首页 > 科技观察

如何高效学习和掌握新技术

时间:2023-03-19 18:29:43 科技观察

最近学习和实践了React,又掌握了一项新技术。学习过程虽然艰辛曲折,但掌握后感觉还是不错的。多了一个选择,技术思路也开阔了很多。回顾这些年的编程生涯,2001年开始学习Asp,2002年开始学习Javascript,2003年开始学习Asp.Net/C#,2009年开始学习Objective-C,2013年开始跳前端坑,从Nodejs到jQuery现在从Angularjs到React。一路走来,走过了一些弯路,积累了很多学习经验。最重要的是要有积极和开放的心态。学习新技术就像探索一个新领域。一般来说,典型的心态有两种,一种是恐慌抗拒,一种是积极开放。心态可以有所作为。比如对于我自己来说,编程技术一直是我的最爱,所以新的编程技术总能主动学习并快速掌握。至于英语和写作,自从上学以来,一直是我不喜欢也不擅长的领域,所以即使学了很多年也没有明显的进步。直到工作之后,我才逐渐意识到英语和写作的重要性,调整好心态,积极面对。现在我终于进步了很多。学习新技术的另一个障碍源于已经熟练的技能。好不容易非常熟练地掌握了一门技术,虽然有助于在以后学习新事物的时候少走很多弯路,但同时也可能成为一个障碍。好几种语言我都已经相当精通了,我什至自以为精通了。比如以前的asp,在当年的技术条件下,可以熟练的完成复杂的BS系统。虽然按照现在的标准,无非就是用vbs对数据库进行增删改查。那时候交互并不复杂,一些简单的javascript让体验更好。当时我想,如果我会Asp,我就可以搞定所有的BS系统开发了。后来Asp.Net出来了,我的心理很复杂。一方面,我觉得Asp什么都能搞定,为什么要学Asp.Net呢?另一方面,我觉得这是未来发展的趋势,我们应该学会掌握,否则以后可能跟不上时代的发展。结果就是硬着头皮学习。只是每次遇到困难和挫折,我都会放弃,回去写ASP。感觉如果用ASP写这个,早就搞定了。为什么要费心学习新技术?当我终于有一天熟练掌握了Asp.Net的时候,我才意识到自己原来的无知。Asp过去一直停留在脚本编程。到了Asp.Net,我可以用面向对象的思想来设计架构,甚至发表。打开网页后,还可以开发后台服务。对我来说,这相当于打开了一扇新的门,可以从更广阔的角度看问题。从心理学的角度来看,我们对外部世界的认识可以分为三个区域:舒适区、学习区和恐慌区。我们熟悉的技术领域是舒适区,而新技术则处于学习区或恐慌区。随着新技术的掌握,新技术会进入舒适区,但学习区甚至恐惧区总会有更新的技术等待学习和掌握。要想高效地学习和掌握新技术,心态一定要开放积极。边做边学(LearningByDoing)如果没有邹鑫老师的《构建之法》,我可能无法准确地总结出这种边做边学的方法。对于软件技术的学习,最有效的方法应该是“Learningbydoing”。如何通过“learningbydoing”学习和掌握新技术,我大致分为以下几个步骤:总体概述,定义阶段性目标,选择实用项目收集整理相关文章和开源项目,模仿so-所谓磨刀霍霍,从整体上看,做之前需要做一些准备工作。在开始学习一门新技术的时候,需要对新技术有一个整体的了解。你需要知道它能做什么,它有哪些关键知识点。接下来的步骤还取决于对整个技术的掌握和理解。对于这份工作,如果有条件,可以买一本薄一点的,通俗易懂的书,整体看一遍,基本就能看懂。但是不建议买大件的书。一般大件的书适合查字典。但是现在新技术推出的太快了,往往要等几个月才能出书,所以很多时候,还是要到它的官网去查看相关的技术文档。就像这次学习React一样,真的很难找到一本合适的书,所以我直接上了它的官网(http://facebook.github.io/react/),快速浏览了GettingStarted里面的文章。基本上,我有一个大概的了解。而且现在网上也有很多相关的文章。通过搜索还可以找到很多相关的文章和资料。明确阶段性目标,选择切实可行的项目。通常,一项新技术涉及的方面非常广泛。从一开始就完全掌握是不现实的,但是从一点突破到另一点相对来说要容易得多。所以一般来说,我会通过一个或多个项目实践,把它分成几个阶段,逐渐掌握每个知识点,最终从整体上学习和掌握技术。比如以前学习一些服务端语言的时候,我会尝试通过写留言板或者博客系统来学习,但是这次学习React,主要是用React重构了一个之前用Angularjs写的聊天室应用学习和掌握React。通过之前对React的概览学习,结合自身情况,我将本次项目实践简单分为几个阶段:1.用React搭建基础框架React的应用基于Flux架构,没有统一的标准对于Flux架构,需要选择使用Flux架构实现,并以此为基础搭建基础框架。2.实现基本的界面组件React是基于组件来编程和运行的,所以需要将整个应用拆分成几个基本的组件。这个阶段主要是将界面的元素和交互拆分成几个基本组件。3、与服务器的连接通信一个完整的程序离不开与服务器的交互。对于React程序来说,它与服务端交互的方式与传统应用并不相同,而对于与服务端通信的结果数据,则必须与界面进行整合。4.发布、测试和改进。对于完成的作品,发布给自己和他人进行测试,然后不断完善。在这个过程中,进一步学习和掌握技术细节。当明确了实际项目和每个阶段的目标后,下一步就是如何去做实现这个目标,边做边学。收集整理相关文章和开源项目,模仿借鉴书籍或文档中各个知识点的讲解,与最终的项目产品还有很大的差距。最终项目需要充分利用各种知识点并合理组合,才能写出高质量的代码,而对于新技术,一开始很难把握住这些细节,一味依赖过去的经验,很有可能你会跟猫画虎,最后做出不伦不类的东西。第一次学习和练习新技术时,模仿非常重要,就像孩子学说话从模仿开始一样。幸运的是,通过github这个开源项目托管服务,你可以通过搜索找到很多优秀的开源项目。早年学习Asp.Net时,在开源项目AspNetForums上有过很长一段时间的二次开发经验,受益匪浅。以我当时的水平,不可能设计和开发出这么优质的产品,甚至有点难以理解,但正是通过对它的二次开发,不仅让我快速学习和掌握很多天冬氨酸。Net开发的知识点和细节,也养成了很多良好的编码习惯。以后在做其他的项目,可以模仿并应用到很多设计实现中。有些程序员编写程序多年,但代码质量不高。一个原因是他们很少去参考和学习那些优秀的开源项目,因为他们看到的太少了。如果没有见过好的代码长什么样,自然很难写出高质量的代码。这次开始实践React项目之前,我也试着找了很多开源项目。由于React技术比较新,没有可以直接完整参考的项目,所以只能参考多个项目进行比较。以下是我研究和参考的部分项目列表:emmenko/redux-react-router-async-example·GitHub,服务端交互示例quantabule/redux-example·GitHub,集成示例withImmutable.jsRebuildingHipChatwithReact.js是一个和我想做的项目类似的应用程序HipChat。它是用React开发的,不是一个开源项目。但是,通过ReactDevTool,你可以参考很多组件的设计思路。前期搭建基础框架的时候,直接借鉴前两个项目的框架,这样程序可以快速跑起来,然后后期设计基础组件的时候,更多的是参考组件设计聊天。边做边学(LearningByDoing)在看书和资料的时候,每个知识点看起来并不复杂,但是当你真正去实践的时候,你会遇到各种各样的问题(pitfalls),而这些问题只有反复思考,查找资料才能解决,问人能不能解决最后的问题。做中学听上去很酷,但过程总是艰辛曲折的!学习往往是这样的。只有经过种种磨练,我们才能真正掌握这些知识,并将这些知识转化为自己的能力。我这次用React重构聊天室的经历,和我以往学习其他新技术的经历一样,充满了艰难险阻,两个月来也付出了很多。但是当它最终完成的时候,却是满满的成就感。我觉得我终于掌握了新技术。虽然还有一些知识点没有应用到,但这只是时间问题。回顾以前的一些编程,有很多新的想法。经验教训以下是一些经验教训。虽然新技术推出的很快,但是很多技术的本质并没有改变。在对其他技术有“基础好”的前提下,掌握一门新技术不需要花太长时间,但“基础好”就像学习武术的内功一样,确实需要花更多的时间去修炼.所以在学习一门新技术之前,先看看自己是否掌握了手头的技术。如果还没有掌握,还不如先学好,否则每一项技术,尝一口就止步不前了,就很难取得成功。目标不能太大,要有阶段性的成绩,积极激励自己的人。学习的热情是周期性的。一开始热情满满,过一段时间热情就没了,很容易半途而废。因此,在设定阶段性目标时,最好把目标定得更小,更切合实际,并有更多的积极反馈,这样才能走得更远。比如写程序的时候,可以优先写单元测试和接口部分,这样很快就会有明确的反馈,比如看到所有单元测试都通过了,就可以看到接口了。学习没有白费有时候,你辛辛苦苦学习的一项新技术可能在不久的将来就会过时。这时候难免会有要不要白学的想法,但其实,学习永远不会白费。我读了一句话,觉得很有趣原因:你所学的一切都在帮助建立你头脑中的神经元网络,这会帮助你建立一定的联系,让你以后学习其他东西更容易,知道一种的知识可以使你与其他知识进行比较和比较。所以,学习总是有用的,不管学的是什么。来源:如何克服JavaScript框架疲劳?就像我十多年前把Javascript学得很熟练一样。当时觉得没什么用,现在看来很有用:)