程序员如何更有效得学习

一、 定位自我

对于程序员,我们对自己以及自己从事的工作,应该给一个准确清晰的定位,至少你要清楚,你是一个程序员,在你拿着高薪工作的时候,你要为这份工作付出很多,包括时间、经历和金钱,最主要的是,你需要不断学习,不断更新自己的技术栈。定位,意味着,你要认识到当前自己的优势和不足,并制定好未来的规划和技能需求,你要确定你是去大公司镀金还是去小公司独当一面,然后沿着这个方向不断学习和武装自己。

二、有效学习的步骤

对于国内大多数人来说,从小到大我们接受的都是应试教育,填鸭式教学。当你进入职场,离开了当初的教育环境,成为一个名副其实的程序员,你还在不断要求自己学习吗?

  1. 针对学习,不同的人的认知能力是有差距的,而不同的学科也会呈现不同的特点。就像技术更新迭代一样,人的学习过程也是一个迭代的过程,用已知的知识去认识未知世界,当两者之间有关联时,就会很快被理解并接受,否则就表现出不理解和不接受的特性。
    所以关联是人类认识的本质,我们要刻意去强化这个过程,使得关联产生的越多、越直接,你理解和接受的认知也越多。类似于,当你在会Java编程语言基础上,再去学习Python编程语言时一样,你不需要再从HelloWord写起,而你应该去了解Python和Java在句法等上的不同点,并在熟知的必要条件下,你就直接可以开始写代码了,遇到不懂得地方,再去查查说明文档,很快你就掌握Python编码,笔者当初从Java开发做起,随着人工智能发展,学习Pyhton就采用的这种学习方式,一个月时间就很熟练了。但这种方式的优势的学习快,缺点就是不容易学习到第二门编程语言的精华,比如从Java到Python,采用上述方法写出的Python代码是Java风格,而不是Pythonic风格,所以笔者推荐Python的学习者看《编写高质量代码改善Python程序的91个建议》这本书。
    因此,学会迁移学习让知识关联,你将学的更快,这种关联,不仅仅是代码与代码之间,包括代码和生活中的场景,这样更有助于我们理解业务知识。

  2. 学会简化知识,让繁杂变得简洁,你的大脑将更容易理解和接受。简化让我们对学习的知识印象更深刻,人的认知也是一样,复杂的东西是不利于大脑记忆和处理的,我们认知的第一感觉,更倾向简洁的东西。所谓一图胜千言,大概说的也是这个道理。
    在《代码整洁之道》中,作者提出了一个观点:代码质量与其整洁度成正比,干净的代码,既在质量上可靠,也为后期维护、升级奠定了良好基础。
    就好比在开发过程中,假设我们模拟下五子棋,如果所有代码都面向过程开发,这样整个下棋流程为:开始游戏->黑子先走->绘制画面->判断输赢->轮到白子->绘制画面->判断输赢->返回步骤2->输出最后结果,你需要把个个步骤一步一步实现;如果你采用面向对象的开发过程,整个下棋流程为:先定义黑白双方,这两方的行为是一模一样的,再定义棋盘系统,负责绘制画面,最后定义规则系统,负责判定诸如犯规、输赢等。
    采用上述2种方式开发的代码,我相信,如果大家选择的话,更愿意选择面向对象的代码,因为更简洁,大脑更容易接受。

  3. 学会知识分层,将知识系统化和层次化,存储在大脑合适的位置。这样我们在对知识使用时,大脑更容易搜索到。类似搜索引擎或需要模糊匹配,亦或需要精准匹配的过程。
    我们的大脑存储知识,就类似与工作中常用的数据库一样,对于数据库而言,越是简单的结构,就越容易存储和处理,对于复杂的数据结构,不仅需要分库分表存储,还需要创造NoSql等来存储。
    当你遇到大量知识和信息时,永远先分层,先抓重点。

三、没有人轻易告诉你的学习途径

也许每个人都有自己的学习方法,但是技术的学习还是有一些共性的东西。

  1. 学会搜索知识和代码。遇到困难或者代码报错,解决问题的快速办法就是先赶快定位你的问题,并通过搜索引擎查找关键字词,看是不是已经有人遇到过该问题,并且在博客或者论坛有解决办法,此外,CSDN博客、开源中国、极客学院、菜鸟教程、W3School、知乎等都是程序员学习的好去处;还要学会在GitHub上搜索代码,本着“避免重复造轮子”,要学会站在巨人的肩膀上看世界,尽管GitHub被微软收购,但是丰富的开源软件和代码有很多价值,要学会利用。
  2. 学会利用培训机构的课程大纲。很多人一提到培训机构的速成课程觉得都不靠谱,其实这是一种偏见。对于程序员要学习一个系统的知识,笔者有一个经验,就是去市面上找几个比较好的培训机构官网,然后在官网上找到你想学习的知识的课程大纲,对照课程大纲,通过不断利用搜索引擎来把知识点各个击破,你也就掌握了要学习的知识。
  3. 想系统全面的学习知识,一定是要静下心来看书。移动互联网和知识付费的快速发展,碎片化学习,成为越来越多人工作之余的选择,比如,微信公众号阅读、得到、知识星球、GitChat等。尽管碎片化学习,每一篇文章或者观点都会尽力把知识表达的完整和清楚。但是,笔者认为,碎片化学习效率高、速成,但是还是有断章取义的嫌疑,让阅读者缺少更加系统与深层次归纳思考和总结,而阅读一本书就不一样了,根据上下文和章节内容联系,阅读的过程中要不断总结和思考,这样的学习虽然慢,但是一定比碎片化学习更系统全面。
  4. 拒绝懒人模式只看不练。俗话说,眼过千遍不如手过一遍,对于学习编程来说非常实用,实践才能出真知。学习编程时,在新手阶段大多数人都有这样一个感觉,看视频或者资料时,一目了然,感觉自己都掌握了,等到亲自动手写的时候,却迟迟下不了手。原因何在?那就是缺少练习,你仅仅是只看不练。新手先从模仿做起,跟着教程自己亲自敲写一遍代码,这样知识点掌握的更透彻,然后在这个基础上,你才能根据自己的思路去修改和写出相应的代码。
  5. 没有永久的记忆,只有不忘的博客。都说鱼的记忆只有七秒,那人的呢?大家都知道,每天面对各种各样的事情,我们大脑的记忆存储处理也是有限制的,不可能把全部的东西一点不漏的记忆下来。也许随着时间迁移,当初你觉得记得非常牢固的东西,说不定哪天你就忘的一干二净了。所以说,没有永久的记忆,只有不忘的博客。不妨经常抽空把自己曾遇到过的问题和好的原创内容编辑在博客里,这样既帮助自己总结和记忆,又能利于别人搜索学习,利人利己,何乐而不为呢?对于好的原创内容要积水成流,说不定哪天,一个编辑就会敲开了你的创作之门,一本经典作品将流传于世,为后来者学习提供更好的资料。

四、如何快速学习新技术?

  1. 找到兴趣点。当下整个IT技术圈,技术从硬件到软件,更新迭代的速度是非常惊人的,作为程序员,不仅要依靠现有技能出色的完成工作任务,还需要不断学习新技术,不断提升自己。如果能把兴趣和技术结合起来,迅速找到自己想突破的领域将是一件非常幸运的事。我特别喜欢雷军说过的一句话,“站在风口上,猪都能飞起来”。学技术同样也是,要根据技术潮流和自己现有技能,选择一个自己感兴趣的细分领域,在好奇心驱动下,坚定的专注,这是你学习新技术的必要条件。
  2. 搞定环境你就对新技术入门一半了。面对越来越复杂的软件开发环境,在兴趣驱动的必要条件下,学习的第一步就是先配置好环境,其中虚拟机和Docker技术工具任何时候对你来说都是必备的,它们是你在未来工作包括开发或者测试装机必备的工具。很多情况下,当你想学一门技术的时候,你的资源是有限的,这个时候虚拟机和Docker你就派上用场了。比如,部署Hadoop大数据分布式环境需要几台机器,这个时候你就可以选择虚拟机。当你通过几台虚拟机,把Hadoop分布式环境部署好之后,在此基础上,继续部署Hadoop生态的其他组件,等顺利完成了环境部署和通过小数据量的demo测试,你发现你对新的技术有了一定了解,可以算是入门了。
  3. 想要深入,必须找到圈子。不管是工作还是学习,任何时候你都要明白,你不是一个人。对于学习,当你完成初级入门继续深入学习的时候,如果你还是一个人在孤军奋战,后面遇到更大的阻力,你可能会因此放弃。
    要有团队意识,要找到自己兴趣的圈子,避免孤军奋战,学会让能力1+1>2的产出。学习也是,找到你的兴趣圈子,避免让自己的努力前功尽弃,学习的同时,找到相同爱好的小伙伴和兴趣圈子,比如通过QQ群、微信群、知乎等一些知识社群,和大家一起成长,要知道人外有人天外有天。
  4. 拒绝懒惰,持续输入时间和精力。任何时候学习都不是一件速成的事,通过速成你可能很快掌握技能型的东西,但是一些精华思想是需要岁月来沉淀的。要鼓励自己克服懒惰,对于学习要不断输入时间和精力,才能获得更大的输出。

建议:先找到兴趣点,然后把该技术涉及的环境搭建好,其次找到该领域的圈子,最后不断持续的输入才能获得更大的输出。

你可能感兴趣的:(程序员如何更有效得学习)