精华内容
下载资源
问答
  • 如何高效学习编程技术?

    千次阅读 2018-11-20 20:10:00
    通过这段时间的看书学习和对编程的思考,结合自己的亲身的学习经历,今天想和大家聊一聊如何高效学习编程技术。 我们可以把学习编程技术的人分为下面四种情况。 第一种是既懂方法又努力的,学的又快又好,但大家会...

    通过这段时间的看书学习和对编程的思考,结合自己的亲身的学习经历,今天想和大家聊一聊如何高效学习编程技术。

    我们可以把学习编程技术的人分为下面四种情况。

    第一种是既懂方法又努力的,学的又快又好,但大家会觉得这是他们有天赋,甚至称他们是天才,而并没有看到他们的方法和努力。

    第二种是不懂方法但努力了,这类人学的不快但愿意花时间学,不过由于学习编程技术所需的时间一般比较长,一些人没有坚持下去便放弃了,而一些人则坚持了下来,最后学的很好。

    第三种是知道方法但并不是一直都很努力,这类人学习的持续性比较差,一些技术学的比较好,而另外一些技术学的不好。

    第四种是既不懂方法又不肯努力的,这类人自然是学不好编程技术的。

    注意我这里说的只是对于学习编程技术的,并不代表编程学的不好的,学习其他事情也是这样,切莫以偏概全。比如在实际生活中,一个编程学的不好的,但唱歌唱的却特别好。

    我公众号读者,大都也是和编程专业有关的学生或者是已经工作了的前辈,群里也经常把那些技术比他们好的人称为大佬或大神,除了羡慕外,也能看到他们对于成为大佬的渴望。按照上面的情况划分,他们可能是属于第二种或第三种情况。一个人的努力是看自己,这个别人也教不了,所以我这里和大家聊的是学习编程技术的一些方法,这是对我学习编程技术的总结,这些方法可能并不一定对你有效,所以你大可作为一种参考。

    学习编程技术,最开始都是从某一门编程语言开始学起的,拿我来说,之前我也不知道学什么语言好,听别人说 Java 好,才学的 Java(现在看,觉得 Java 真的很好,至少现在来说,在企业级的项目开发中,Java 还是应用最广泛的)。所以往往我们对于一门语言并不知道他们能干什么的时候,或者说是他们的优势在哪,就急于开始学习了,很可能到最后才发现原来有更好的语言做这个,当时花了那么大力气,反而效果并不好。对于语言是这样,对于框架也是这样,就像我之前并不知道 Shiro 的优势是什么,自己手动写权限控制,最后发现还是框架好用(这里先不谈该不该自己造轮子的话题)。

    所以学习一门语言或者框架时,第一步并不是上来就扎进去学,而是应该站在”远处“,用客观的眼光去看待它,找出它的优点和缺点,看看是不是符合自己的需要。比如说,你要从事人工智能方面的研究,目前来说 Python 是最好的选择(这里先不谈 Python 的性能问题)。对于语言的认识,对于新手来说,并不简单。看网上的文章,肯定也是各执一词,因为没有哪一种语言是完美的,没有缺点的,知乎上的大牛还是比较多的,你可以去那里看看他们对该语言的评价,好的坏的都看看,相信你应该可以得出自己要不要学的结论。而对于框架,我觉得认识它的最好方法是去它的官网,看官方文档,因为这是最一手的资料。但这些资料往往是英文的,所以英语对我们学习技术是至关重要的(老实讲,现在我们用的编程技术 99% 是来自西方,我们还停留在全面模仿和学习西方的阶段),所以在很长一段时间,我们都要接受英文文档,同时提高自己的英文阅读能力。实际上,文档中框架介绍的英文并不多,少的也就几个关键字就把框架的特点概括了,学习过英语的人借助字典翻译都是可以看懂的,只是需要你耐着性子看下去罢了。

    上面便是学习编程技术的第一步——认识它,就算你现在用不上,了解一下也是挺好的。现在每个人都订阅了不少的微信公众号,群消息和朋友圈也被公众号文章充斥着。我也订阅了不下几十个的公众号,大多是编程技术方面的,也有一些投资理财的(个人对这些也比较感兴趣)。而我看的更多的是介绍技术或者某个知识点的背景,除非我对某个技术比较熟悉,不然很少看涉及很多具体细节的文章。我的看法是,公众号是一种碎片化学习的一种方式,一些作者的实践总结和经验之谈,一些优秀的文章还是值得一看的。但倘若只靠看公众号文章学习,知识是成不了体系的。所以一些公众号文章作为认识技术的一种方式,是个不错的选择,当然一些优秀的博客也可以。认识了技术之后,即使时是向别人介绍时,也可以说出来一些。你也可以试着介绍自己学过的一些技术,看自己能否清晰的说出来你对它的认识,或者只是知道一些技术细节,对整体的认识并不够。

    学习编程技术的第二阶段就是学着使用它,如果已经有书籍和视频可以帮你学习它,那么这两种方式肯定是比较好的。学习语言和一些常见的框架,基本上都是有视频和书籍的,视频可以在网上找些培训机构(这里也不谈培训结构好不好),只要对你有帮助的资源你就应该利用起来学习,我学习使用某项技术时,也是看了不少视频。如果某个框架没有相关的书籍和视频,那么只能找些文档和去官网学习了,对于前端框架(库)来说,这是很常见的。学习需要一个过程,没有基础,看视频是最好的方式。有了基础后,我觉得看书是更好的选择,也可以节省你的时间,我就是买了很多书,现在学习也基本都是看书来的。当然没基础的时候还是推荐看视频,虽然要花很长时间,但是后面你就会发现自己学习其他技术会越来越快。在这个阶段遇到问题,也是很正常的,在网上一般都是可以找到答案的,自己解决问题的能力也会慢慢锻炼出来。在一些社区也可以发你的问题,CSDN、知乎、Stack Overflow 都很不错。

    学习编程技术的第三个阶段是掌握(第二阶段和第三阶段的分界线其实并不是很明显),能够用这个技术做出一点东西来,就说明你逐渐掌握它了,比如你学完 Java Web,自己可以动手做出来一个简单的管理系统网站,这就可以了,并不需要考虑复杂的业务场景,这些在工作时会学到的。这个阶段更多的关注技术本身的细节,比如 Java 中的多线程编程有几种方式,最好自己动手写写笔记或者博客,这些都是很好的学习方式。学习框架,也可以看看官方文档,部分技术文档也有中文版的,毕竟写官方文档的人一般都是这个技术的开发者,他们肯定是最懂这个的。学习编程技术就像铸剑一样,需要经过反复的淬火,剑才能变得更加锋刃,学习也是需要不断地回顾和总结的过程,这样才能强化和巩固所学的知识。每个人的记忆力都是不一样的,根据自己的情况,时不时的复习非常非常有必要的。

    学习编程技术的第四个阶段是深入,对于语言,可以看看实现的源码(这里又要提到 Java 的好处了),在第二个阶段学着使用它时,肯定会有一些概念和知识点,比如在 Java 中,ArrayList 对象中的数组是可以动态扩容的,但是你是否知道在 Java 中具体是怎么实现自动扩容的呢?如果你回答不了这个问题,那只能说明你还需要进一步的学习 Java,大部分的 Java 源码你都可以直接反编译查看,这里推荐 Intellij IDEA IDE,查看 Java 源码非常的方便(但 Java 也有一些本地化的方法,和操作系统关系密切,并不是 Java 写的,不能直接查看),而 Eclipse 还需要手动导入源码,不是很方便。学习框架,这个阶段要关注框架的设计思想和实现,也需要看源码,一些热门的框架,找几本经典的书籍来看也是不错的。还是推荐国外的书籍,毕竟很多框架都是从国外传入国内的,国外优秀的书籍会比较多些,当然我们国内也有一些,但总体还是国外多些。如果没有相关的书籍,那么就只能去相关的技术社区和看源码了。如果是开源的技术,一般都会推管到 GitHub 上,可以去 GitHub 上看看,不懂的可以提个 Issue,甚至学到一定程度也可以贡献你的智慧,到这个阶段,不用我说,你都知道该怎么做了。

    如果身边有和自己学习同一种编程技术的,可以多多交流,肯定可以碰撞出思维火花的。没有的话,也可以加一些群,比如公众号的这个群(后台回复 ”交流群“ 获取加群方式),大家可以一起交流。或者看一些优秀作者的书籍,我读了杨冠宝大牛(孤尽,也就是《阿里巴巴Java开发手册》的作者,下面称之为杨老师)的《码出高效——Java开发手册》,当一些观点和作者不谋而合时,那种感觉非常爽。比如在谈到面向对象时,杨老师说可以从哲学的角度看 Object 类中的方法,我是谁(getClass 方法、toString 方法),从哪里来(Object 构造方法、clone 方法),到哪里去(finalize 方法),之前我也这样想过,但是没杨老师总结的好。有时,你也可以从书中发现一些错误和不恰当的地方,比如刘欣老师在《码农翻身》一书中,举 Maven 和 Ant 对比的例子时说这是 ”约定重于配置“,而 ”约定重于配置“ 是在对比注解和配置时才会说的,是明显地举例不当,但这些都是很正常的,每个人都难免会有出错的时候。有时候读书发现这些,也是很有趣的。在读吴军博士的《态度》一书时,他给二女儿讲为什么要读非小说类的名著时,说阅读不能只看一些期刊和杂志,即使严肃杂志上的文章质量非常高,但作者观点的前因后果由于篇幅都被省略掉了。零星的观点也是形不成知识体系的,而书的知识完整性是比较高的。所以在学习编程技术时,读书是很有必要的。但是也不要因为学习编程技术,而只看相关的书籍,这样你的视野会受限制,这点我这段时间才感受到,也是最近才开始看些编程无关的书籍,包括金融和经济学相关的。读这些看似与编程无关的书,能开阔人的眼界,增长人的见识,码农只是程序员的下限,优秀的程序员绝对不只会写程序。上面提到的的书籍,如果你感兴趣也可以看一看,相信你会从中受益的。

    考虑到这篇文章的受众,所以写的是比较基础的,我这段时间也在思考如何写好公众号文章。我算是比身边的人多学习了点东西,不能保证这篇文章就是很好的高效学习编程技术的方式。所以这里谈谈到的一些做法,未必对你来说就是有效的。这段时间看刘欣老师的《码农翻身》,很佩服他能够将一些技术由来和关键点融入到故事中,并且还能讲的那么有趣。如何写好文章也是我今后的学习方向,也欢迎你在后台留言,提出你的建议和观点。

    本文转自我的微信公众号《编程心路》。

    展开全文
  • 6个高效学习编程的方法

    万次阅读 多人点赞 2020-03-07 19:04:04
    学习编程的重点就是懂如何学习

    如何高效学习编程
    编程确实不是一件容易的事情,除了要有较强的逻辑思维,还需要花大量的时间和集中力来提升或者维持一定的高度

    与其他的领域不一样的是,技术每日都在变,所以对于编程初学者是很难一直与时并进的。就算是技术大神和老司机们也是追赶的比较吃力的。在技术领域打滚的这些年里,通过经历和经验总结出一些高效的学习方式和方法,在这篇文章里与大家分享。让我们现在就在技术领域的学习之路上奔跑吧!


    锁定目标,风雨兼程

    锁定目标,风雨兼程
    在刚刚接触技术的时候,很多人都会比较迷茫。技术领域有前端后端并且各自有多种编程语言。选定前端后端后又发现越过一山还有一山高,面临更多的选择。甚至在技术领域打滚了多年后的技术人员也会迷茫,会开始质疑自己的前景,是否要换一门语言或者多学几门语言。所以锁定目标是高效学习的第一门课。


    选择目标

    如果你的目标是前端开发,前期的学习道路是比较明确的,HTML5+CSS3起步。但是如果你的目标是后端开发,还没有开始就已经有多扇门在你前面,让你瞬间选择困难了。所以这里我们就用后端语言选择作为一个例子讲解学习目标选择方法。

    陷入学习目标选择困难症是因为技术每日每夜都在变,方向和未来都在摇摆。但是我们首先要有一个对技术有很好的判定能力。

    大家应该很多时候都听过"JAVA才是世界上做好的语言","PHP才是世界上最好的语言"等等,这些在自己领域崇拜着自己所爱的语言技术爱好者。TA们并没有错,因为每个开发语言都在特定领域或者项目条件里是最好的语言。不过并没有世界上最好的语言,只有在某一个场景和条件下最适合使用的语言。每一种开发语言都有他擅长最合适的使用场景。

    • PHP - 更适合小型到中型网页端应用(大型应用就需要其他语言配合使)
    • JAVA - 更适合大型应用,企业级应用(中小型应用用JAVA就是大材小用,浪费资源)
    • PYTHON - 更适合用于爬虫,人工智能,脚本类应用

    目标寻找法

    所以在选择学习目标的时候,我们要有对技术的判定能力,不要轻易听取一些偏面的评价和定论而下决定。

    选择学习目标时重要的决定因素:

    • 在目前最实用的 - 学能用到的更容易上手,也更有价值
    • 难度跨度不要太高 - 难度跨越太大时间成本会越高
    • 感兴趣的 - 感兴趣才更能坚持,更有动力
    • 社区更大的 - 社区越大遇到问题时找答案的途径越多
    • 开源项目优先 - 开源的项目的技术更有未来

    🎯 一旦锁定一个目标就要能懂,能用,能变,再扩张你的学习领域到其他的技术。

    • 能懂  -  能懂的技术或者知识的理论和原理;
    • 能用  -  能把技术或者知识投入使用,投入实战项目;
    • 能变  -  能举一反三学到的技术或者知识,能变通,延伸拓展。

    不要蜻蜓点水

    这一点是很多初学者都会犯的错误。

    不要浅入浅出,得不到技能还失去了时间。

    学习要一步一个脚印,很多一开始学习编程往往会同时学习多个技术,其实这种学习方式不但没有效果反而还浪费时间浪费生命。锁定一个学习目标就要专注一个点上学习,重点学习。

    举个例子,如果你想成为一个Java开发工程师,你是不需要从C学起,然后C++,最后才开始学习Java。我看到很多开发者刚开始都是这样学习,其实根本不需要从底层技术开始学习。既然你的学习目标是Java,那就直奔重点不浪费时间。稳固了基础开发语言后,选择一个框架开始深入专业实战知识。当你稳固了更专业的实战知识后,就可以开始学习这个技术的周边工具(比如IDE)让开发更加高效便捷。

    📖 专研秘诀:

    • 学习每一个知识或者技术,一定要深入浅出,深入学习和挖掘,吸取重要知识和技术。
    • 专心,专注,专研是一个技术人才的基本素养!

    先专注于会用而不是能用

    很多开发者习惯性会过于专注于工具使用,写法,性能,可扩展性等等。初学者一般都会掉入工具使用和写法的坑,而资深的开发者会过于专注于性能和可扩展性。这时候往往会过度消耗学习时间,甚至忘记最初的学习目标。

    用一个简单易懂的例子,“一个机械工程师不会浪费时间想怎么更好的使用TA的扳手,而是怎么可以组装好一个机器的部件” - 很多人会想,学会用更好的工具不是可以更快地安装好吗?但是现实是,你都还没有弄懂怎么安装,再好再有效的工具对你来说都是无用武之地。所以还没有学会前行,就不要先想着怎么跑

    再举例,如果你是正在学习使用Vue框架,不要太过于执着怎么使用Vue的周边工具,高级写法,性能隐患问题等等。你的目标应该是创建你的第一个首页然后直接投入开发一个小项目小应用。这样你的产出才是最高的,因为这样做更加专注于学会怎么使用Vue来实现功能,而不是更好的使用Vue框架。

    在学习的时候要专注于会使用新的技术,而不是怎么用各种花式技巧来提高使用能力

    还有很多童鞋开始学一门技术时,会先开始看一大堆的知识和书籍,或者去看一些大型的项目用这个技术是怎么实现的。其实更有效的学习方式是小步快跑,学习的过程中开发一个小项目会让你更加有动力也更有趣。

    约定自己在限定时间内完成小目标,如能完成就给自己一点小奖励。例如,你对你自己说"如果我下周五完成这个功能,我就让自己去看个电影"。记住奖励不需要很大,小步快跑,小奖小利,这样才能维持发自内心的动力和驱动力。不过就算没有达成小目标也不用气馁,失败时成功之母,所有成功的人都是通过在失败中总结成长壮大。


    采用学习策略

    采用学习策略
    每一个人都会有一种最合适自己的学习方式方法,适合我的不一定对你就有效 - 所以找到一种对你有效的学习方法很重要。

    经历

    学习方式方法是通过你日复一日,年复一年不停地尝试和总结得来的一种技巧。我也尝试过很多种方式来学习技术,自从我开始进入技术行业到现在,我换了无数种学习方式才找到最适合自己的一种技巧。
    在一开始刚刚入门的时候,我尝试看很多"从入门到精通",“XXX语言101"等等,最终的结果都是"从入门到放弃”。后面开始走视频学习之路,发现视频里面的老师说话好像是机器人一样,本来有点失眠症的,没想到一看视频秒睡着,被治好了!我以为我的技术生涯就要结束在这里了~ ¯_(⊙︿⊙)_/¯

    建立策略

    前方无绝路 · 希望在转角 ~ 我迅速改变了策略,学习技术和其他领域不一样除了看书,撸视频还需要动手去敲代码。学习任何一门技术,可以遵循以下学习策略,可以让学习的技术和知识更加稳固。

    📖 学习策略:
    还是遵循我们之前说到的规则,能懂,能用,能变。

    1. 深入了解技术的原理 -  了解清楚才能更好的在不同场景下运用自如(可以通过看书,看文档)
    2. 通过代码理解运用方式  - 看懂基本原理,就可以看看别人是怎么在项目中使用的(在github找开源项目,看教学视屏等等)
    3. 实战,做一个小项目 -  能懂,能会了就要能用,用新学的技术实现一个功能,做一个小项目,把知识投入实战。
    4. 发挥你的想象力  -  能用后如果想进阶更高层次,就要发挥你的想象力,能举一反三,在你的小项目里面加功能。

    其实上面的策略无非就是学习的过程中必须有的理论,运用和变通。这三个学习维度要保持一个良好的平衡。这个平衡是非常重要的,只有理论那就是"纸上谈兵",只有理论和运用那只是个"代码搬运工",如果三个维度你都才是就是"大师"。

    当然所说的平衡不是说1:1:1,完全平衡是很难的。对于一个初学者的话可以先3:2:1,中级就可以开始维持2:3:1,到了高级就可以维持2:2:2了。(比例指的是 - 理论:运用:变通)


    时间管理,提高效率

    时间管理,提高效率
    番茄工作法估计很多人都听说过,但是真正用上可能就很少了,能坚持使用的就更少了。

    很多时候在学习中,或者工作中,我们都是被时间追着跑,这里看一下哪里看一下,不经意就已经过了几个小时,一天就过去了。其实真正有效的产出不大,那是因为你没有合理的管理时间。用番茄工作法就是可以让我们可以追着时间跑,让自己时刻有着时间感,急迫感。
    自然时间运用上就更加有效了。我现在工作中和学习中都已经在使用番茄工作法,有效管理时间效率。突然发现使用了之后,每个小时我的工作效率提高了很多。

    使用方式其实很简单,把学习或者工作时间拆分为25分钟一个小阶段,每25分钟休息5分钟,每4次小阶段休息15到20分钟。

    使用这个时间管理法后,你会觉得在25分钟的小阶段里面,你的时间很紧迫的,每一分钟你都觉得很宝贵。你会发现你没有时间去浪费,自然而然的在25分钟内提高了效率。无形中你的学习和工作的集中力就会提升。除了提高了你的效率以外,你会发现一天几个小时的学习或者工作都不觉得很疲惫。因为在25分钟的高度集中后,你合理的调整了休息,让自己非常平衡的控制好疲惫度。所以你会发现一天里面的学习和工作都变得轻松了。

    用番茄工作法提高了学习效率和疲惫度,自然你的学习成果就会更高。如果你觉得我说的这个方法太虚幻了,不妨试一下体验一下,实战说明一切!


    多思考,多教学

    多思考,多教学
    通常我们学习都用的是吸🌟大法 🌟ԅ( ͒ ۝ ͒ ),然后实战运用,其实还有很多细节和理论我们并没有理解透测。所以运用就不够自由,无法延伸一些创新的用法,或者举一反三。

    在我事业发展的过程中,从一个小开发,做到一个小组长,到现在技术总监。在我开始带领一个小组,到带领整个技术团队;很多问题和新知识都要通过讲解或者教学来带培养你的组员和队员。这个过程中会遇到各种不同思维程度和学习能力的人,每一个人的理解能力或者理解方式都不一样,甚至看待每一件事情或者知识的角度都不一。你会发现你教学或者讲解某一个知识的时候需要使用各种不同的方式和方法。往往就是这样触发了你自己去换角度思考和理解这个知识,而启发了你自己对这个知识新的认知。

    通过教学和讲解来把你的知识传承给另外一个人,需要重新整理思路,逻辑,切换N种方式和说法。这个过程中你会挖掘出新的知识,新的观点,新的思维方式,新的理解角度和深度。这就是自我思维切换而达到的知识深度挖掘和提升的过程。这种就是我们经常说的小黄鸭教学法。

    不知道大家有没有听说过,当你思路不清晰,或者有问题无法解决的时候。你可以找一只小黄鸭,你就开始讲解你的思路,逻辑或者问题。这个过程中你开始重新整理自己的思路。如果你把一只啥都不懂的小黄鸭也能让它听懂。那这个时候你的思路,逻辑,理解都更加清晰了,问题起码都解决了50%以上了。我给这个方法取了个名字叫小黄鸭教学法!初级学习的时候要用吸星大法,进阶到高级的时候就要用小黄鸭教学法。能教会一只小黄鸭技术,你就是大神了!


    记录,总结

    记录,总结
    除非你是过目不忘,要不看完一本书能记下所有是不可能的。就算记住了但是不可能完全明白透彻。一个程序员经常面对着反复又反复的任务,记录学习进度和总结学习知识很重要。往往你学到一个知识的时候,你会使用这个知识投入实战中。你沉迷在代码海洋之中无法自拔之后,你会发现你已经不记得你入海前学到哪里了。所以记录学习进度很重要。

    记录学习方式:

    • 把学习后的知识写成文档
    • 把知识写成博客
    • 总结重点,记录重点
    • 编写学习规划,就是所谓的todo规划表

    在学习中,如果要把知识记录,当你要使用它的时候能快速找到。那你就要有总结知识的习惯。把你学过的知识,技术,技巧都写成文档,写成总结。这样加强你的印象,同时也整理出了属于你自己的开发手册。当你遇到了某些问题的时候就可以通过你自己的开发手册找到答案。


    改掉以下习惯

    改掉以下习惯

    • 完美主义: 初学者经常会陷入的一个坑,从一开始就追求完美,完美的写法,完美的实现方式,完美的设计模式。其实有时候这些都不是最重要的,反而导致有延迟和延后的严重情况,导致进度一直无法推进。最求完美往往把简单事情变得复杂。不要总是为了完美而无限徘徊,为了最好的解决办法而纠结,为了对的方式而浪费时间。往往在开发中,时间是有限的,需求是无限的,连完成都无法保证,就更没有时间追求完美。
    • 对比心态:很多行业内的新人或者准备入行的,都会去和行业内顶尖的人做对比。有一句很火的话"没有对比就没有伤害",很多人用来对比好与坏,美与丑。其实另外层意思就是如果对比会对你自身造成打击又何必常常带着对比之心来对待自己和事情呢?对比不一定会有伤害,但是对比的心态才是真正造成伤害的源头。应该先认可自己的优点,接受自己的缺点,然后去找到别人的优点,发现别人的缺点。在别人的优点和缺点给自己带来成长。吸收别人优点,避免自己养成了同等的缺点。优秀的人不是天生比你优秀,而是TA们更懂的不自我透支,更懂得养成在无形之中让自己成长的习惯。
    • 复杂化:学会把复杂的问题和事情拆分成多个小问题小事情。复杂的问题和事情就会变得更加简单。因为问题和事情往往有多个点需要突破,把每个点拆开逐个突破就会更加简单轻松。从简到繁,如果太复杂,就拆开一个一个更简单的小点,逐个突破。
    • 过度透支:学习累了就躺穿上休息,吃饱喝足了就坚决不吃了。养好一种自律的习惯,不过度透支自己的时间和生命,这样才能有更好的精神和态度面对问题和困难。近年来有很多给程序员打上的标签,“加班狗”,“无日无夜写代码”,“生活邋遢”,"衣服全是同款黑色"等等。确实,做为一个程序员,我们花了大部分时间都在想问题,编写者神乎奇幻代码和程序。但是我们都往往忘记了自己的身体已经在一点一点透支。到了那一天你停下来了,你会发现,身体不行了,除了写代码其他个方面的能力都没有时间去提升。也没有劲学习成长了,整个人好像很颓废,生无可恋一样。所以学会不透支自己,才有更好的状态和精力学习和突破自己。

    总结

    无论你是在学习技术还是在学习任何其他领域的知识。在学习这条路上都会有坑坑洼洼,各种颠簸。所以我们学习要有技巧,要有方法才能在有效时间内收获最大化!

    学习法门:

    1. 锁定目标 - 选择有用的,对你现在阶段有价值的目标
    2. 采用学习策略 - 深入学习,投入实战,总结经验
    3. 管理好时间 - 把控好时间,提高效率
    4. 多思考,多总结 - 多思考问题,多总结和记录知识
    5. 改掉不好的习惯和心态 - 有好的习惯才能更轻松的学习和成长

    一个人一生是有学不完的知识和技能,然而人一生的时间是有限的。所以要把我们的时间和收益最大化才能比同年龄的人跑的更快,学的更多,能力更强!大家一起在学习的道路上继续加油吧!

    推荐阅读


    • 🔥 《学懂编程第一法则助你写出更好的代码》 — 无论新手还是资深开发者都会经常问一个问题,“怎么写好的代码?”,要知道怎么写好代码,首先我们要知道怎么样才是好的代码。要有明确的目标,才能知道如何达成目标。


    • 🌟《你真的懂怎么写服务层吗?》 — 其实很多系统架构里面都有服务层,但是服务对很多开发人员来说都有很多不同的定义和写法。甚至在我待过的公司里都有不同的写法和编写模式。每个人每个团队每个项目都有对服务不同的理解。那到底什么是服务,怎么理解才是对的呢?

    和你一起终身学习

    展开全文
  • 如何高效学习编程语言?

    千次阅读 2019-03-11 16:25:08
    学习编程语言是一种技巧:做好了,你会感受到掌握新事物之后的快感;做不好,就会接二连三的沮丧,甚至放弃。下面我将介绍一些技巧与方法,以便帮助大家高效地学习。 持续测试自己以抵抗胜任力错觉 最不济的学习...

    学习编程语言是一种技巧:做好了,你会感受到掌握新事物之后的快感;做不好,就会接二连三的沮丧,甚至放弃。下面我将介绍一些技巧与方法,以便帮助大家高效地学习。

    持续测试自己以抵抗胜任力错觉

    最不济的学习方法中的一种就是重读或者重看材料。这种重复会给你一种感觉——似乎不用花什么气力,你就理解了话题所涵盖的内容。研究者们把这种现象称作胜任力错觉。

    更好的一种方式(你可以掌握的最佳技巧之一)则是持续地测试自己。不要重读一个函数、类或者一个对象是什么,而是让自己定义这些概念或者把它们用到短小的程序当中——强迫你用某种方式显示自己的理解。这一过程常常很不舒服的,但是对形成长期记忆非常有效。更进一步,你可以在阅读材料之前先去行测试,举个例子,尝试在阅读一个章节之前做做练习。值得一提的是,这也被证明有助于记忆的形成。

    测试对于学习的显著影响被称为测试效用 ,下面是一些具体方法可以利用:在阅读章节或者看视频之前,尝试猜测你将要学习的东西,并写下来。

    在阅读章节之前先做做这个章节的练习题。一直做练习,即使是最难的那些。暂时(永远)放弃一个练习也是可以的,不过至少要尝试一遍。(下个章节会详细谈到)阅读短小的程序并且尝试不看源码重新写一个。或者,再小一些,写个函数也行。在学习了对象、类、方法或者高阶函数等新概念之后,立即编码做示例。创建阐述这些概念的图示,以及这些概念之间的区别和联系。把你刚刚学到的概念写成博客。尝试把概念解释给非技术的朋友听。

    这些技巧的大部分都要规约到编写代码上!说到编程,由于程序都是重文本和概念性的,所以很容易以为我们仅仅通过阅读(代码)就在学习。但是程序同时也是一门手艺,就像其它手艺一样你得操练才能娴熟。编码是暴露你对程序作有错误假设的最佳方式。你越快地这么做,就会越快地纠正错误和提升技能。

    花时间放空自己

    如果你纠结在一个问题上,或者对刚才读到的东西不能理解,就去散散步甚或洗个澡 —— 只要能进入一种舒缓、放空的状态就行。解除障碍的最佳方式之一就是歇一会儿,这可能听上去有点反直觉,但确实如此。

    问题是,当全神贯注解决问题时,我们很容易陷入思维障碍。我的意思是,这差不多就是“关注”(字面上)的意思。不过,全神贯注会导致我们只能一直探索解决方案空间的一小部分。一旦放空,我们的潜意识就可以探索并联结我们经验中的广泛领域。

    对我来说,这就像当你试图在纸质地图上找到一个目的地(是否还记得?)。你不用刻意就确信你想抵达的城市应该就在这里!在地图的左上角的区域,所以你看了一遍又一遍,都没有成功。然后你放下地图,做了深呼吸并让目光游离了一会儿。当你重新看地图时,确切的地点立马映入眼帘。我们曾经都有过这样的经验,在洗澡的时候突发灵感。现在你对于为什么这么做有了更好的了解,那么也就能刻意地使用这个技巧。个人来讲,如果纠结在某事上,我真的会洗个澡,这个技巧的功效显著。

    别浪费时间沮丧

    和上一个章节相关:别浪费时间为代码沮丧了。沮丧会让我们做一些愚蠢的事情,比如重新编译或者重刷浏览器,期望这次会有所不同。

    把沮丧看作你的知识有差距的信号。一旦你意识到自己沮丧了,它可以帮你后退一步,清晰地识别问题。如果你写的代码不起作用,坦率地向自己或者别人说明你期望的结果。使用科学的方法,就非预期行为的根因提出一个假说。然后测试你的假说。再次试验后,如果依然解决不了,就把这个问题放到一边,待会儿回来。在此我向大家推荐一个大数据技术交流圈: 658558542  突破技术瓶颈,提升思维能力 。

    在一些似乎没法解决的问题上,我不知有多少次恼怒地扔掉了自己的笔记本电脑。隔天再看,一个显而易见的解决方案立马跳入脑海。甚至上周就发生过。

    确认你正在处理语言的哪个方面

    个人观点,我觉得记住这些是有用的——当学习一门编程语言的时候,你实际上正在学四件事情。怎么写代码:语法、语义以及资源管理

    语言的范式:面向对象,函数式,逻辑等;产出物的生态圈:如何构建、运行可执行文件以及如何使用库;工具:编辑器,编译器,调试器,代码质量检测器;这四项很容易搞混,不幸的结果是,当你遇到问题最终完全找错了地方。

    举个例子,某些完全的编程新手,可能准备开始构建iOS应用。他们可能会试着让自己的应用在朋友的手机上运行,只看得到有关需要开发人员证书或其他信息的消息。这是产出物生态圈的一部分,不过小白可能将此视为编写代码的问题。他们可能会浏览自己写的每行代码来尝试解决问题,尽管问题和代码没有半毛钱关系。

    如果我系统地处理这些方面,我会发现学习一种语言会更加容易。我将在其它的博客文章中罗列一些待回答的宽泛问题的列表,应该能帮助你学习任何语言。

    明确目的,外部模型,内部模型

    任何时候你学习使用新工具,明确学习的目的,外部模型和内部模型都是十分有用的。

    当你了解了工具的目的时,你的大脑会加载有用的上下文细节,使你更容易吸收新知识。这就好比拼图:当你看到完整拼图之后,更容易把各部件拼到一起。这个道理适用于语言本身以及语言库。

    工具的外部模型就是它呈现出来的接口以及它想让你思考问题解决的方式。Clojure 的外部模型就是一个 Lisp,它想让你把编程当做大部分以数据为中心,不可变的转换过程。Ansible 希望你把服务器的整备工作想成定义最终状态,而不是定义抵达那种状态所要采取的步骤。

    工具的内部模型就是如何将输入到其接口转换成一些底层的抽象。Clojure 把 Lisp 转换成 JVM 的字节码。Ansible 把任务定义转换成了 shell 命令。在一个理想国中,你不需要理解工具的内部模型,但事实上,理解内部模型总是有用的,因为在某些看上去迷惑或者矛盾的部分,它可以让你有个统一视图。举个例子,当 DNA 双螺旋模型被发现的时候,它帮助科学家们了解更高层次的现象。从我的角度来讲,当然,这篇博文也是历来所有伟大科学成就之一。

    很多教程经常混淆工具的外部和内部模型,使学习者感到困惑。意识到这点可以帮你轻松辨别何时你会感到沮丧。

    间隔重复帮助记忆

    间隔重复被证明是长期记忆中新信息编码的最佳方法之一。 这个想法是以不断增加的时间间隔来测验自己,使用最少重复次数来最小化记忆衰减。

    睡眠和练习

    保重身体!身体可不仅仅是你脑袋的载体。如果你想保持专注和高效的学习,就要足够的睡眠和练习,而不是狂饮咖啡因和能量饮料。

    在此我向大家推荐一个大数据开发交流圈:

    658558542    (☛点击即可加入群聊

    里面整理了一大份学习资料,全都是些干货,包括大数据技术入门,大数据离线处理、数据实时处理、Hadoop 、Spark、Flink、推荐系统算法以及源码解析等,送给每一位大数据小伙伴,让自学更轻松。这里不止是小白聚集地,还有大牛在线解答!欢迎初学和进阶中的小伙伴一起进群学习交流,共同进步!

    最后祝福所有遇到瓶颈的大数据程序员们突破自己,祝福大家在往后的工作与面试中一切顺利。

    展开全文
  • 今天来给大家谈一谈如何高效学习编程。 无论什么时候,找到学习的目标,以及学习的套路都非常的重要。找不到的话,就只能事倍功半,付出了很多努力,却迟迟得不到最好的回报。 三四年前,我特别喜欢收藏文章,觉得...

    今天来给大家谈一谈如何高效地学习编程。

    无论什么时候,找到学习的目标,以及学习的套路都非常的重要。找不到的话,就只能事倍功半,付出了很多努力,却迟迟得不到最好的回报。

    三四年前,我特别喜欢收藏文章,觉得有些技术文写得真好,忍不住收藏了!等过了一段时间后,闲得无聊,就去翻收藏夹,想着学一波,谁知道竟然找不到——不是微信给我删了,而是收藏夹里躺的“尸体”实在是太多了,根本就找不到。

    后来,我就总结了一个小窍门——每周收藏夹里最多躺五篇文章,如果想进来第六篇,之前的必须得清一篇。别小看这个小窍门,它真的有督促我去学习,去消化。

    有句话说得好,学习的时候一定要把自己当成一台计算机,既有输入,也要有输出。只输入不输出会堵塞,只输入不输出会枯竭。

    我在网上看到有大佬列出 Java 工程师应该掌握的知识点,分了 5 个梯度,我觉得蛮有道理的。

    第一梯度:操作系统、计算机组成原理、计算机网络、数据结构、算法。这个我之前已经强调很多次了,也列了对应的学习资料。比如说《深入理解计算机系统》这本黑皮书是要必读的,不管什么时候读。

    这第一梯度的知识还是挺庞大的,需要花很多时间去消化。科班的比较适合一上来就啃,啃不动的可以放到后面再去补,反正是不要绕过去。

    第二梯度:Java 基础、JVM 内存模型和 GC 算法、JVM 性能调优、JDK 工具、设计模式

    Java 基础方面我写过《教妹学Java》,这部分内容目前处于断更的阶段,我在想后面的内容怎么继续下去,在“沉默王二”这个号上写感觉有点不太适合了,因为之前的反响一般;打算后面用我妹的那个号“程序员宝宝”来写,然后这个号次条转载一波。

    除了《教妹学Java》,我推荐过另外一个 GitHub 上标星 115k+ 的 Java 教程,我自己从 GitHub 上下载到本地整理了一份 PDF,我看百度网盘下载的次数接近 1 万次,还是挺受欢迎的。

    Java 基础里面有一块内容,就是并发编程,需要花大力气。我之前也推荐过这方面的资料,几个阿里的朋友写的,叫《深入浅出 Java 多线程》。

    至于 JVM,一本书搞定,就是周志明老师的那本《深入理解 Java 虚拟机》,不过这书和《深入理解计算机系统》差不多,都挺难吃透的,需要花时间去读,前后持续的时间会比较久。

    然后是设计模式,这块需要通过大量的实战经验才能有所感悟,设计模式玩得炉火纯青,写出的代码就更优雅,阅读起来也会更加舒服,可维护性、可扩展性就更强。推荐好朋友小傅哥重写的 Java 设计模式,全网下载次数应该有 3 万多次了。

    第三梯度:Spring 系列、MyBatis、Dubbo 等主流框架

    Spring 系列的话,我之前推荐过松哥的视频,在 B 站上有,大家可以去搜一下“江南一点雨”,质量我觉得还是挺不错的。听松哥说,今年还会录一些新的视频。

    至于 Spring Boot 和 Spring Cloud,木得说,大家直接搜“纯洁的微笑”,看他的博客就行了。虽然微笑哥现在不怎么写这方面的教程了,但它之前写的就足够用来学习了。

    MyBatis 其实很简单,学起来不复杂,就是怎么在 XML 文件里写 SQL 的事,不难,直接看官网就行。

    Dubbo 是阿里巴巴公司开源的一个高性能服务框架,使得应用可通过 RPC 实现服务的输出和输入功能,可以和 Spring 框架无缝集成。学习 Dubbo 的话,也推荐直接看官方文档。

    第四梯度:MySQL、Redis、RabbitMQ/RocketMQ/Kafka、ZooKeeper 等数据库或者中间件

    MySQL 的话,推荐先看《SQL 必知必会》,再看《MySQL 必知必会》,然后是《高性能 MySQL》。

    Redis 的话,推荐看老钱的《Redis 深度历险:核心原理与应用实践》,在业界的评价还是蛮高的。

    Kafka 和 RabbitMQ 是两款比较主流的消息中间件,具备消息传递的基本功能,但在一些特殊的功能方面存在差异,RocketMQ 在阿里集团内部有大量的应用场景。这部分的学习可以直接看官方文档,然后通过实战项目提升自己对这些消息中间件的应用功底。

    Zookeeper 是一个分布式的、开源的程序协调服务,可以到菜鸟教程上学习。

    第五梯度:CAP 理论、BASE 理论、Paxos 和 Raft 算法

    一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项——CAP 理论。

    BASE 理论是对 CAP 理论的延伸,核心思想是即使无法做到强一致性(Strong Consistency,CAP 的一致性就是强一致性),但应用可以采用适合的方式达到最终一致性(Eventual Consitency)。

    Paxos 算法是一种基于消息传递且具有高度容错特性的共识算法。

    Raft 算法是一种用于替代 Paxos 的共识算法,安全性更高,并能提供一些额外的特性。

    这些都是一些比较难以理解的知识点,需要通过大量的实战经验(海量数据的前提下)才能很好的掌握,属于中级、高级程序员应该掌握的内容。

    大家在学习编程的时候,一定要形成自己的知识体系,建议大家通过思维导图来梳理知识点。比如说并发编程这块的知识点如下图所示。

    最后,提几点建议吧。

    • 试着去造个轮子。虽然我们常说,不要重复造轮子,为了开发效率,可以不造轮子,但必须得具备造轮子的能力。
    • 多做技术分享。可以是写博客这种面向大众的,也可以是团队的内部分享,新人培训等。
    • 重视英语。学好英语可能和掌握编程语言一样重要,如果英语足够好,可以直接阅读一手的英语资料,接收知识的时间可能就比其他人早了不少。
    • 及时温习。网上说,人在一天后的记忆量只有 30%,所以我们上学的阶段各种考试,月考,周考,其实就是用来加强记忆的,很多题都是做过的,换汤不换药。

    加油~

    最后载送大家一本美团大佬手撕的 300 道 LeetCode 刷题笔记,纯 Java 版,对于算法薄弱或者需要提高的同学都十分受用(提起码:xs23):

    https://pan.baidu.com/s/1xe3r8qDuKE99p2ZD9w2XrQ

    我是沉默王二,我们下期见。

    展开全文
  • 高效学习-编程

    千次阅读 2017-09-05 22:16:27
    软件编程一日千里,知识更新日新月异;在繁忙工作之余,快速接触新知识,不落后于人,显得尤为艰难与可贵。编程和读书一样,需要一套有效、高效学习方法。
  • 关于高效学习编程,我又有了最新的几点思考!

    千次阅读 多人点赞 2020-03-20 01:17:11
    不同的知识,应该有不同的学习策略,你想知道嘛?
  • ROS机器人高效编程(原书第3版)高清版本带书签文字可复制,适合初学者也适合机器人编程相关的机器人开发人员。覆盖内容全面,特别是对于初学者来说,这本书可以很快的帮你入门。 快速学习ROS软件框架和整体机器人...
  • 在学习的过程中,效率是极其重要的。...一、很多人说程序员是吃青春饭,身体是革命的本钱,健康永远要放在首位,首先要调整好自己的状态,一定不要在头晕发烧的时候学习编程,不但学不进去浪费时间,还让自己产生
  • 【文章来源微信公众号:每天学编程】 随着互联网日趋迅猛,编程已经在我们生活当中无处不在了。众所周知,程序员的工资都很不错,于是越来越多的人,都想加入到编程的行业中来。那么如何加入到程序员的行业当中? ...
  • C++高级编程学习

    万次阅读 多人点赞 2019-03-30 21:29:00
    目录C++高级编程课程概述C++概述C++的第一个程序C/C++数据类型与变量引用与函数传参引用详解C/C++函数说明内联函数(inline)函数重载 C++高级编程 课程概述 面向对象的方法简介 对象----存在即合理 抽象性–...
  • 但也有部分同学反映,相比学校和公司,家里环境过于舒适,导致很难专心学习,因此,我为大家总结了 6 个在家也能高效率学习编程的小方法,帮助大家在这段时间里,事半功倍地学习编程。 1.列个详细清单 在学习前,...
  • 1小时掌握Python爬虫+高效学习法则

    千人学习 2019-06-14 11:12:40
    本次直播主要讲解Python爬虫相关案例,通过实战项目,手把手教你学会Python爬虫。PS:课程上会展示优秀学员的...另外老师会主要详细Python学习路线和高效掌握Python的学习方法,分享私家书单,让你学习效率提升一倍!
  • 第 PAGE 页码 页码 页 / 总页数 NUMPAGES 总页数 总页数 页 如何才能高效学习编程语言 编程语言种类繁多用途各异然而一旦掌握其中之一其他的也就迎刃而解那么?以下是我分享给大家的高效学习编程语言的方法希望...
  • 大学四年,我是如何学习编程的?

    千次阅读 多人点赞 2019-12-04 23:40:27
    大学四年,我专业是计算机专业...今天我分享下,如何在学校里免费学技术,沉淀一些编程技能。 编程书籍 这是我大学看过的书籍。 设计模式 这里简单介绍一下: 设计模式是软件设计中常见问题的一般可重复解决方...
  • 面向对象1 类、2 对象、3 封装、继承、多态、4 构造器、5super、this、6 接口、抽象类、7 权限修饰符、8 内部类、9 Random、ArrayList、String、Arrays、Math 这些基础必须滚瓜烂熟在进行下个阶段学习 不要想着基础...
  • Perl高效编程

    2013-08-11 18:26:51
    perl深入学习的较好的资源 入门后进一步实践领悟
  • 真的是让人满头问号,目前编程行业工资比较,很多人都想学一下编程,但又不知道从哪里开始学习,我觉得学习编程的过程用一句话来说再合适不过了,就是一个好的开始是成功的一半,你开始学了,那么你也就成功一半了...
  • 系统学习编程之学习计划

    千次阅读 2018-10-27 14:34:48
    虽然该课程的教学语言为 Python,但作为一门优秀的导论课,它强调学习计算机科学领域里的重要概念和范式,而不仅仅是教你特定的语言。如果你不是科班生,这能让你在自学时开阔眼界;课程内容:计算概念,Python 编程...
  • 机器码农:深度学习自动编程

    万次阅读 多人点赞 2017-06-03 19:03:10
    机器码农在获得新任务的输入输出数据后,根据训练阶段学习到的模型,可以预测出”领域特定语言”中的各种操作原语语句出现在代码片段P中的概率,可以认为出现概率较的原语是代码片段P中应该包含的语句。...
  • 普通人如何学习编程

    万次阅读 多人点赞 2016-09-01 06:53:58
    在计算机使用如此普遍的今天,编程似乎也快要成为基础技能,那么普通人如何学习编程呢?
  • matlab高效编程技巧

    2018-09-16 10:47:44
    高效编程matlab,案例分析详细,技巧完善利于学习,加快入门
  • 如何高效的自学编程

    万次阅读 多人点赞 2018-08-18 22:56:01
    现在的社会对于IT人才...就像几年前诺基亚还是行业霸主的时候,塞班程序员的薪水多啊,可是没几年的功夫就已经找不到搞塞班的了,所以如果你不学习新的技术,那么社会淘汰你的时候也不会和你打招呼的。 废话不多...
  • MySQL高效编程

    2017-10-12 15:42:35
    MySQL高效编程是一本学习MySQL的基础书籍,不错的一本。
  • 随笔-学习编程有没有必要做笔记?如何做笔记?

    万次阅读 多人点赞 2018-07-07 21:16:18
     对于刚刚学习编程或者已经学习了编程的朋友,难免会产生该不该做笔记的想法。是做好?还是多练习几遍比较好?下面将个人想法和大家分享一下,希望给正在迷茫的你能提供一点帮助 问题  1.学编程有没有必要做笔记...
  • 21个免费学习编程的网站

    千次阅读 2019-04-16 10:36:00
    您好,如果您是一个自己学习编程和编码并寻找一些很棒资源的人,那么您来对地方了。 在本文中,我将分享21个网站,您可以在舒适的办公室和家里免费使用该网站来学习代码。 freecodecamp.org 这是最棒的社区网站之一...
  • 如何深入和高效学习编程语言

    千次阅读 2017-09-22 00:28:33
    如何深入和高效学习编程语言
  • java程序员刷题知乎学习 ...如前所述,它是开始学习编程的好语言。 如果您了解 C 编程,您不仅会了解您的程序是如何工作的,而且您还将能够在脑海中描绘出计算机是如何工作的。 有关 C 语言的更多信息。 C
  • ASIO网络编程入门实战Socket编程系列之6:Libuv网络编程入门实战----------------------------------------------------Socket编程系列之6:Libuv性能异步IO及高效网络编程 Libuv是一个高效的异步IO开发库,Linux...
  • 非专业学生如何系统的学习计算机编程

    千次阅读 多人点赞 2021-06-16 12:43:25
    发完这篇文章后,有不少的同学私信我,问的最多的一个问题就是:非专业学生如何系统的学习计算机编程? 这个问题我在知乎找到一个描述,所以根据这个描述来回答。 去年刚毕业,专业是新闻传媒,实习是在一家杂志社...
  • 写给想学和在学编程的你们,学习编程的7个好处

    万次阅读 多人点赞 2020-03-29 19:20:41
    其实选择学编程是能变人生的。可能很多人学编程,报了一个编程培训班,为了就是拿到更的工资或者有更好的工作环境。最后坚持下来的都会发现编程给我们很多个人能力和技能的提升。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 373,782
精华内容 149,512
关键字:

高效学习编程