编程笔记丨程序员如何持续吸取知识?教你提高99%的学习效率!

在软技能的知识体系中,对于咱们程序员来讲最重要的莫过于学习方法了。咱们应该如何释放本身的内在潜力去像海绵同样地吸取知识呢?在本篇文章中咱们将深刻探讨如何成为一个顶尖的学习者。前端

1、如何成为一个高段位的学习者?

一、建构式的学习模式

对问题的好奇、对答案的渴望,是驱动咱们学习和探索的主要动力。java

「知识不是简单的记忆,而是由咱们主动地去建构而来的」。咱们必须充分利用现有的知识,在主动性目标或核心问题的引导下去积极地进行探索,只有这样,咱们才可以把获得的新知识与旧知识糅合在一块儿,并在头脑中建构出新的知识体系。程序员

「一个好的长时程问题,能让咱们成为“构建者”,由于咱们不只在学习知识,还在“建构答案”,在努力回答问题的过程当中,咱们筛选、评判与整合新旧知识,并把它们融汇而成一个知识体系。」面试

「一个好的长时程问题,能让咱们成为“探索者”,主动地去探求未知的领域,扩宽“未知的未知”的边界,而不是仅仅知足于对现成的、边界明晰的知识的掌握。」算法

所以,「提出一个深刻的探索性问题是一种学习效果很是好的方法」。在问题牵引下的学习,会帮助咱们接二连三地构筑着知识之间的联系,最终便会造成针对于该问题的思惟导图之解。编程

「提问是将咱们引向深度学习的起点。一位优秀的学习者,必定同时也是一个优秀的提问者,他会从阅读、观察、思考的过程当中产生问题,先解答表层的、容易的那部分,留下深度的、探索式的问题给本身,并在由此问题招致的持续困扰和折磨中开启卓越的心智旅程。」json

二、经过解码,深刻事物的深层

咱们不要只作信息的搬运工,而应该经过解码,去深刻事物的深层。设计模式

一个高段位的学习者,一般都是一个适应性专家,他们能够有意识地构筑一个信息解码与知识扩展的良性循环—不断地从一些高质量的学习资料中经过「学习、思考、实践」去获取深度知识以扩展与修正咱们现有的知识体系。最多见的一些高效的解码方式有以下三种:性能优化

1)、「不只要去寻结论,更要去寻过程」:不言而喻,过程比结论更加剧要。微信

2)、「不只要去作概括,更要去作扩展」:概括的同时,咱们应当注重保留其中的核心知识与关键细节。

3)、「不只要去比较类似,更要去比较不一样」:不一样才有知识,才有新意,才有新的发现,才能实现真正地自我提高,在差异中咱们首先应当选择最受强调的东西,这不只仅是由于它们最引人注目,并且是由于它们也最富有启发性。

而这,大概就是解码的要法了。

三、技能—才是学习的终点

只有最后可以做用于现实的学习,才是惟一有效的学习。最有效的学习方式,即「作中学」,它是学习真正为我所用的关键一步。

目前「最有效的两种通用学习方式」

1)、「不断地测试练习」:即高频次的重复练习。

2)、「分散练习」:分散练习即在一个较长的时期内使用较长时间间隔的分布式训练,,例如「1小时、1天、1周、1个月、3个月」的时间间隔。

得到技能也就意味着咱们拥有了改变世界的能力,哪怕一开始这种能力很是弱小。

「高效实践的方式有三种」,以下所示:

1)、写做式练习

写做是一种「典型的知识建构或重构活动」。一篇文章若是要被人读懂、要把人说服,须要缜密的思惟、清晰的表达和翔实的依据,这些都须要咱们对知识的编码与组织达到一个相对较高的水准。

而写做的另外一个优点在于能「得到外界的反馈」,咱们能够「根据读者的评论去提取出对咱们有用的信息,以此来完善或修正咱们的知识体系」

2)、游戏式练习

咱们能够「使用“思想实验”来实现一个虚拟的游戏式练习」,思想实验就是构造一个现实中并不存在的假想情境,而后运用所学的知识,来设想事物在这个情境中的变化。在这样的练习中,咱们每每能够获得比原先更为深入的洞见。

3)、设计式练习

调用已有的知识,「设计某一种解决方案,来解决某个特定的问题」。这种练习咱们一般会在架构与系统设计方面应用的比较多。

能够看出,「知识的练习迫使咱们对现有的知识进行更加深刻的审视,对现实的情境和问题进行更加细微的观察,而且致力于创造二者之间的关联。它使咱们再也不固守书本,再也不去作僵化的记忆,而是让咱们赋予知识以灵性,以更好地适应这个变化莫测的世界」

四、调整努力的姿式

具有成长性心智的人,会比日常人成长地更快,它们都坚信——「只要够努力,就能变得更好」。以大多数人的努力程度之低,根本轮不到拼天赋。根据当前的神经科学的研究代表,「人的大脑具备至关大的可塑性,所以后天的努力对人的改造做用能够是惊人的」

咱们在不断地学习和思考的过程当中,其大脑内部会产生剧烈的神经活动,这迫使脑神经之间创建了更多的链接。随着神经元之间链接愈来愈多,咱们对问题的认识也就愈来愈深入,遇到相似的问题反应也会愈来愈快。不只如此,甚至还能举一反三,触类旁通,乃至和其余的领域结合,产生创新性的想法。

「努力,不是一场意志力的较量,而是一种须要学习的策略」。努力自己是一种具备策略性的活动,这体如今以下「三个方面」

1)、「我的资源的调配。」

2)、「行动方向的选择。」

3)、「执行进度的把控和调适。」

而这种策略是须要咱们不断地学习与优化的。

五、专一在一个领域走到最后

在这个互联网上,信息是爆炸的,知识是过载的,观点是鼓噪的,热点是速朽的。而反过来,「专一在一件事上,精益求精、锲而不舍的态度和行动,则是最为稀少与珍贵的。」

我一直都相信一句话——「具有突出的优势比没有明显的弱点要重要的多」。对此,我天然而然地就想到了业界常说的“T”型人才,要高效地成长为“T”型人才,咱们得先作出那一竖,即「应先在某一领域深刻钻研后再去涉猎其余领域,这样更能举一反三,对提高那一横的含金量也颇有好处。」

而很多事实也证实了,「浅尝辄止的人极可能将一无所得,而专一投入走到最后的人将会得到超额收益。而且,每一个人的精力都是有限的,若是你不专一,就颇有可能永远在多个“缓慢起步期”徘徊。」

而且,人是没法作到十全十美的,由于可提高的方面实在太多,在有限的精力与时间之下,咱们只能竭力发挥本身的优点,将其发挥到淋漓尽致。对此,咱们须要「学习齐白石先生那种长期专一和一丝不苟的精神,去把一件事情作到极致。」

六、花费20%的时间去涉猎不一样领域的知识

「学习高手一般都会有意识地把不一样领域甚至不一样学科的知识摆放在一块儿,而后尝试去分析、比对它们之间的潜在关联,甚至当那异质的素材堆叠在一块儿时,仅仅是潜意识的推进,就可让这种隐藏的关系浮出水面。」

在当今,有不少医学的难题长期没法解决或者没有进展的一个主要缘由就因为大多数的医学研究者由于多年专业教育塑造的知识壁垒致使缺少足够的知识广度而形成的。

所以,咱们须要须要去花费20%的时间去涉猎不一样领域的知识。在学习时间的分配上,我一般会采用「二八分配」的原则,即把80%的时间专一在主业上,把剩余的20%的时间用来去接触各类不一样领域的知识或补足本身的知识短板。

知识短板会严重阻碍咱们进步。准确识别它们的最佳方式之一就是「看看本身在哪些工做上花费了大量时间,或者一直进行重复性的劳动」。例如没有掌握键盘快捷键可能就是一个知识短板。

七、构建呈阶梯式难度的关卡

人是须要一些挫折、失败或者高难度的挑战来刺激的。若是老是一路顺风,就会一直待在本身的“温馨区”里不愿出来,潜能就没法被充分地激发。

所以,咱们应该「为本身的学习适当地增长必要的难度,例如在学完知识后延迟一段时间再作练习,而这种稍可贵考验正好能强化咱们对这些知识的存储和构建。」

咱们应该学会去「构建适合本身的“我的挑战阶梯”」,拿学英语来讲,一个比较好的”英语学习挑战阶段“以下所示:

背单词 => 考托福 => 考 GRE => 听英语电台(VOA、BBC)=> 听各类地方口音的英文 => 英语脱口秀复制代码

遇到的挑战越大,得到的快感也越强。好的挑战阶梯的设计可以给与咱们足够的挫折与失败,而这将会大大加速咱们的成长速度。

「咱们应该作一个主动探索的学习者,不断地为本身设计出有难度的”非标准动做“,在挑战中得到才能的提高与飞跃。」

八、如何更加高效地读书?

要想真正掌握一本书的核心内容,须要读三遍。

第一遍:「细读,目的在于完整阅读全书,而且划出重点,写上读书笔记。」

一个月后读第二遍:「扫读,主要快速翻阅第一遍阅读时作的笔记和划的重点,目的在于加深记忆。」

半年后第三遍:「忆读,读的时候只看目录,而后去回想内容,若是回想不起来,再去进行扫读。这样三遍下来,基本上一本书的核心内容就可以很好的吸取。」

九、切忌完美主义

学习不是要么0分,要么100分的。80分是收获,60分是收获,20分也是收获,「有收获才是最重要」。可是由于着眼于本身的不完美,最终放弃了,那就是完全的0分了。

「不完美实际上是常态,根本不会影响咱们学习更多更深刻的内容」。可是在自学过程当中,不少同窗却要求本身在本身制定的每一步计划中都达到“完美”,才进行下一步。最终结果,一般都是“放弃”。

而不要“完美主义”,不表明学习能够草率前行。「每一个人都必需要找到适合本身的学习节奏」。若是在本身又由于本身的学习进度而沮丧的时候,问本身一句:是否是本身又犯“完美主义”的毛病了。

十、不要过分“学习路径依赖”,学习要冲着本身的目标去。

例如想学机器学习,就去直接学习机器学习。学习过程当中发现本身的数学不够用,再回头补数学便可。

十一、不要迷信权威的“好”教材、不要看不起“薄薄”的“傻”教材

每一个人必需要去探索学习如何寻找适合本身的学习材料。适合你的教材不必定是权威的,「可能有一些你看不起的学习材料,就是是你入门某个领域的关键。」

「先用薄教材入门,再找“厚”教材,是我百试不爽的学习方法。由于“薄”的教材能让你以最快的速度看完,对整个学科有一个全盘的认识,薄会将你入门这个领域的难度降至最低,短时间学习完以后会让你产生更多的兴趣与成就感。这一点每每更加剧要,由于学习,不是100m短跑,而是加长版的马拉松。」

十二、不要迷信单一教材。

在大多数状况下,学习不是一本固定教材能够搞定的。非要找到一本“最适合本身的”教材,而后就一头扎进去,实际上是不科学的。

建议每个技术点都须要「筛选多个优秀资源去进行 学习、实践、思考、总结。由于不一样的做者对同一个事物会从不一样的角度作解读,这可以帮助你更深入的认识一个概念。」

1三、学会复盘

「在天天晚上睡觉的前半小时以内,咱们须要复盘当天的学习状况,哪些完成哪些没完成的须要记录,为明天作一个衔接的准备,以确保当前的学习进度是可控的。」

1四、量变到质变

仅仅对着一个问题思考,不少时候都是死胡同。由于咱们见识的还不够多,就不足以帮助咱们去总结出更加“广泛”问题解决的规律。

咱们不要企图经过一个问题就理解问题的本质,这其实和企图经过一本教材就精通一个领域的想法是同样的,是不现实的。

其实大多数问题,都是须要“回头看”的。对一个领域理解的越深刻,回头再去看那些曾经的问题,都会产生新的视角,对于不少曾经想不明白的问题也豁然开朗。这也是“进步”的根源。「不少时候,你发现对一些问题“百思不得其解”,或许不是由于本身“笨”,而是由于“还不够努力”。」

2、如何分析问题?

一、分析问题的重要性

只有「挖掘出问题的核心和根本」,才能针对性地剔除改进或者完善流程,来避免相似的问题再次出现。

二、5WHY 分析法

核心是「追究根本缘由」。例如针对线上的屏幕适配问题,咱们能够提出五种对应的改进方案:

1)、开发者要吸收经验,尽可能采用普适性较强的写法。

2)、对一些组件进行封装,避免相似的适配问题。

3)、有新设备上市,要尽早采购。

4)、QA 的测试用例要多人评审,尽可能保证用例覆盖全面。

5)、经过一些自动化检测手段,对适配问题进行检测。

三、第一性原理

有问题时,运用第一性原理,多读官方文档或源码。阅读源码的本质:优秀框架背后的「设计模式与架构」

此外,对于一些难以用技术解决的问题,能够从需求的角度去解决。

3、学习十步法

对技术人成长最重要的三个因素一般都包含以下三个要点:

1)、「学习-不断提高自身深度与广度的能力」

2)、「思考-即解决问题的能力」

3)、「实践-大量的实践能让咱们真正地理解一个技术的本质」

而学习十步法的精髓就在于「学习-实践-(思考出问题-学习-实践)-掌握-教授」这一系列过程。注意()内的过程(这个过程也被称为探索)一般须要屡次反复进行直到最终掌握这个技术点。

「学习十步法充分利用了人天生的好奇心来帮助咱们吸取更多的知识,这将会持续不断的激励咱们经过实践向着目标前进,而不只仅是读书或者听教学视频。」

在开始使用学习十步法以前,首先须要明确的是,「学习计划最好能结合工做计划,理论结合实际,快速学以至用」。所以咱们应该「优先学习的是工做中会用到的或将会用到的技能」。在完成了本身的本职工做以后,咱们应该去尽可能地考量公司中各个系统和业务模块,看看有哪些不合理和能够改进的地方,而后尽力地提高本身相关方面的技术,并去识别和优化它们,在优化的过程当中咱们能够优先参考其它公司的技术方案。

一、了解全局

了解全局的做用在于咱们能够「快速甄别,决定哪些事情值得花费时间」,例如「作一些基础性的研究,例如网络搜索、查阅一下该主题的书的介绍性章节。」

二、肯定范围

咱们应该「聚焦学习范围,关注重点内容」。这儿须要充分利用本身在第1步中收集到的信息,找出本身的学习范围,也能够借助本身的学习理由来决定学习的范围。

选择一个专一而聚焦的范围,「明确学习范围的时候须要尽量地充分考虑时间因素与衡量时间成本的性价比。」

那么,如何衡量时间成本的性价比呢?

1)、「评估掌握一项技能在短时间和长期内对咱们的重要性。」

2)、「咱们应该对需求和时间成本评估,决定需不须要学,以此肯定学习的目标。」

3)、「一些简单、仅仅须要了解的知识点利用碎片时间去完成便可,但若是是须要掌握甚至“精通”的一些知识点,咱们须要为它划分出一整段的时间。」

此外,在这一步中,有两个点须要注意:

1)、有些知识的获取是须要「循环渐进」的,除非你已经有了很是扎实的基础,不然跳级进阶只能是吃力不讨好。

2)、有些知识点例如「源码、晦涩的一些概念」等等,只要它们是足够「重要」的,弄明白它们就是「很是值得」的。

三、定义目标

好的成功目标应该是「具体的、无二义性」的。例如在学习 ASM + Gradle 时,我定义的目标是:使用 ASM + Gradle 完成一个全局的 Bitmap 监控组件。

四、寻找资源

目前,我学习的主要信息来源包括以下「九个渠道」

一、「官方文档」:第一手资料。

二、「源码」:第一手资料。

三、「Github 开源项目」:按期查看 GitHub 的热门榜,看有没有须要的优质项目(至少每周一次)。

四、「Awesome-Android-NoteBook &&豆瓣读书 - 计算机科学经典书籍」

五、「开源的权威资料」

六、「极客时间」

七、「慕课网」

八、「百度云盘」

九、「WanAndroid 优秀文章」

在这一步,记得也要寻求一些好的薄教材/入门文章,在咱们刚开始学习这个主题时,便会从它们开始。

五、建立学习计划

咱们须要「根据本身我的的时间去制定适合本身的学习计划」。这一步咱们能够把它看做本身写书时候的大纲,这里一般能够经过查阅图书的目录进行。

六、筛选资源

计划学习前要考虑清楚,一旦开始执行学习计划,就应尽可能保持少的变动,除非后续发现计划有问题。所以这里咱们须要多加一步去「选取品质最高的资源覆盖学习计划,对于一些购买性的资源能够经过查看评论的方式进行评估。」

七、开始学习,浅尝辄止

这一步的关键在于「过犹不及」。你会很容易就失去自控力,开始消化计划学习中列出的全部资源。可是,你会发现,若是你能经受住这样的诱惑,你会取得更大的成就。咱们应该要「专一于掌握本身所需的、能在下一步动手操做的最小量的知识。」

「好记性不如烂笔头」,在学习的过程当中,学习的东西至少要作好笔记(印象笔记、有道云笔记),而且后续须要「按照必定的间隔时间去反复复习」

八、动手操做,边玩边学

万事无他,惟手熟尔。教育的首要目标,并不在于”知“,而在于”行“。

对于计算机领域的学习来讲,教材的意义其实远远小于实践的意义。真正动手实践去编程是异常重要的。这就比如学游泳,必须下水去游泳;或者学开车,必须亲自上路。不然你说的再头头是道,一个小学生文化水平的人,只要他开过车,游过泳,都能在这两个领域瞬间秒杀你。

真正的学习上的提升,就发生在实践的过程之中。例如,「debug 就是一种高效的实践方式。它不只仅是找到代码错误,解决错误的手段,其实更是一个重要的学习手段。」

所以,咱们应该「经过探索和实践进行学习,在实践中碰到的问题会引导着咱们走向真正重要的方向。当回过头寻找问题的答案时,不仅是这些问题迎刃而解,并且你记得的东西比你学习到的东西多得多,由于你所学到的都是对你很重要的东西。」

此外,在实践中,「在某些关键动做上刻意练习,也会取得事半功倍的效果」。由于不停的练习和思考能够改变大脑结构,大脑像肌肉同样,挑战越大,影响越大,学习更高效,而且也会产生突破性。

九、全面掌握,学以至用

咱们「没有必要吧收集到的全部资源所有仔细看一遍,而应该以解决在动手操做中发现的问题为主要目的」。试着把本身正在学习的内容与最终目标关联起来。「你掌握的每一个模块,都应该以某种方式推进着你向着终极目标前进。」

在这一步中,咱们能够将测试练习与分散练习这两种学习方式结合起来使用,以达到最佳的学习效果。同时,咱们最好能给本身设置一系列的挑战阶梯,例如对于学习音视频的同窗能够给本身设置以下的挑战阶梯:

使用 Android 音视频 API实现一个播放器 => 使用 FFmpeg 与 OpenGL 实现一个播放器 => 定制 FFmpeg 的源码、掌握 OpenGL/Vulkan 的高阶用法实现功能更增强大的播放器复制代码

学习某一个技术其实到最后会造成一颗「技术树」,咱们能够使用「思惟导图 => XMind || 幕布」进行描述。而对于一些涉及「流程」相关的技术点,咱们能够使用「ProcessOn」来画流程图。

十、乐为人师,融合贯通

若是你能将本身所学的东西都教给别人,那么你不只可以记住,并且还可以理解得更加深入。

重点在于,咱们须要花时间将本身所学到的东西从大脑中提取出来,以别人可以理解的方式组织起来。「在经历了这整个过程以后你会发现,有不少你觉得本身明白了的知识点,其实并无摸透。这一步对保持信息以及深刻理解知识而不只仅只是流于表面相当重要。」

在教学的过程当中,有一些内容是必不可少的,例如:

「是什么?」

「为何?即它解决了什么问题。」

「优缺点。」

「对比同类技术的不一样/相同点。」

「如何使用?」

「如何解决问题的?即内部的实现原理。」

「概括时注重核心知识与关键细节,并尝试去类比不一样领域或不一样学科之间的知识。」

「重要的过程、结论。」

分享就是一种很好的教学方式,并且它的时间成本也相对较低,目前常见的有「三种分享方式」

1)、「博文文章/专栏」

2)、「慕课网技术视频」

3)、「部门/社区内的技术分享」

技术分享的真正意义在于,「总有一部分知识咱们并无真正理解透彻到能够向别人解释,而”教“的过程可以迫使你面对这一部分。在教别人的时候,咱们迫使本身面对课题中的难点,深刻探索,从只知皮毛变成彻底理解。学习知识暂时的,而理解是永久性的。」

「在咱们试图教别人的时候,会强迫本身从新组织大脑中的资料」。最好的思惟方法就是解释某样东西并将其记录在纸上,或者记录到 Word 文件或者幻灯片中,使你能够将这些互不连贯的碎片信息收集起来,并以一种有效的方法从新组织起来。「要想教人,咱们得先把本身教会。」

而在教别人的过程当中,最好的教学方式就是「心态谦卑,信心满满——以谦虚的视角来观察问题,以权威的口吻去诠释问题。」

最后,不要忘记进行隔期复习,对于一篇文章来讲,能够「先扩展出它的知识树,而后再尝试去描述其中每个知识节点的核心内容与关键细节。」

开源本身造的轮子也是一种很好的分享方式,咱们应该学会造轮子,去写一些框架或组件,建议设置简单到复杂的挑战阶梯。

最后,我就以最近正在学习的 Android 网络优化为例来实践一下十步学习法,其思惟导图以下所示:

4、重要问题解答专区

一、怎样由浅入深地学习一个技术点?

建议你们先选定一个本身最感兴趣的方向,后面一段时间就专攻这一个方向,拿 Flutter 作例子,能够先将全部 Flutter 相关的专业文档、优秀书籍、视频教程、文章等搜集起来,将其中涉及的知识大纲列出来,对其中涉及到的每个知识点(现在天或这几天要学的是布局类组件)须要的对应资料列出来。而后去学习、实践它的基本用法,接着能够再深刻一层看这个知识点涉及到的内部原理(如 Flutter 中经常使用布局的实现原理),最后总结出对应的学习笔记(供之后复习)。这样学习起来就比较有效果,并且刚开始能够根据自身的状态去调节计划时间的长短,建议开始计划定松一点,确保天天都能完成。养成习惯并彻底适应后,能够加大学习量。这就跟健身的原理同样,刚开始锻炼的人通常都体质比较差,因此须要从最基础的动做开始练,等将基础打好了,体质提高上来了,才能去适当地作一些力量训练,增长肌肉。

二、怎样才能很好地把安卓零碎的知识点串起来?

这可能说明学习的时候没有注重体系化地学习与思考,而是东学一点西学一点,那这些知识天然而然地会零散地遍及在咱们脑海的各处。为了解决这个问题,咱们须要首先须要把目前所学的知识列出来,而后可尽量地找到这些知识点的联系,把它作成思惟导图。因为可能有不少联系点咱们以前学习的疏漏而没有把它归入咱们的脑海中,可是,这并没有大碍,后面咱们能够围绕这张 1.0版本的安卓知识思惟导图 不断迭代,最终,它就会日渐完善,发挥出想象不到的威力~

三、对将来很迷茫,每天都在学习可是技术就是提高不上去?

其实,对于你们来讲,最重要的事情就是 如何去从最本质、最底层的层面去打磨本身? 如何培养兴趣、深刻钻研某一个领域从而成为专家?如何具有快速、高效、不断深挖某一技术的核心能力(即一通百通的能力)?这些问题的答案很难在短期让你们去明白、理解。其实,我「今年的整个文章路线」就是围绕这些内容而定制的,其共分为几个核心路线:「软技能、高效构建算法知识地图、性能优化领域专家、NDK 高手之路(偏向于 Native 层的性能优化、Hook 实现)、Flutter(从最重要的核心点 自上而下打通 Flutter 的整个架构体系)」,明年上半年的路线:架构师成长之路(从易到难具有强大的架构设计能力) 。可能有的同窗认为我学的好像很杂,其实否则,我一直都专一于一条路线,就是「基础架构研发」,它涉及的主要工做内容就是「架构设计、性能优化、前沿新技术预研(Flutter、JetPack」)。建议你们选定一条路线,也不必定要是上面的路线,专一于音视频、图形处理 或 AI 移动、大前端 的路线均可以,今年你们一块儿加油,但愿年末能给本身一份满意的答卷~

四、如何更高效地学习技术视频?

学习视频的时候建议「开 2 倍速看,对于 不熟悉/偏难 的知识,每看一个小的技术点以后,就实践一遍,而后把实践的成果写入 笔记/你的初稿博客 中,对于 比较熟悉/简单 的知识,通常是看一小节/两三个技术点以后再实践、写入 笔记/你的初稿博客。」

五、如何选择第三方库?

1)、肯定这个库是不是必需的。

2)、这个库可否带来开发效率的提高,下降代码的维护成本。

3)、这个库的学习成本如何 好比 rxjava 其实学习成本会相对高一些。

4)、这个库的质量如何,不要仅仅看 star,更要看 issue 的处理状况。

六、怎样练习算法题?

1)、每道算法题都先本身去实现,理清思路后本身去实现一遍。(超过5分钟没思路跳下一步)

2)、而后再看看答案,记住答案的思路,手写一遍。

3)、次日再从新按照答案的思路再手写一遍。

4)、等到要面试的时候再系统地将全部的题型按类别进行手写便可。

七、如何阅读源码?

1)、准备

一、Java设计模式(模板方法,单例,观察者,工厂方法,代理,策略,装饰者)。

二、Java高级相关(泛型、反射、IO)。

三、在官方文档上了解软件的总体架构设计、主要功能。

四、熟练掌握这个库。

五、搭建系统,把源码跑起来。

2)、开始阅读

一、根据你对系统的理解,设计几个主要的测试案例,定义好输入,输出。(Debug一

遍确定是不行的,须要Debug不少遍)

二、第一篇抛弃细节,抓住主要流程,第二篇,第三篇,再去看各个部分的细节。

三、阅读的时候同时使用 UML 画出系统的类图。主要的测试案例明白了,丰富测试案例,考虑一些分支。

四、这一步会很是很是地花费时间,可是你作完了,对系统的理解绝对有质的飞跃。

3)、流程小结

一、准备。

二、网上搜索针对该开源项目进行分析的优秀文章。

三、对开源项目提出本身的疑问,并带着疑问阅读源码。

四、阅读源码过程当中多添加注释、笔记.

五、作阅读总结/写文章,吸取和再创造

八、新技术频繁出现,咱们应该采起有效的针对性措施?

一项新技术的出现,咱们应该先去了解它,看它是否对自身的技术成长有比较大的帮助,有的话按优先级加入学习计划表,而不是立马去学习或否认它。

5、总结

对于大多数人来讲,可能关键不在于学习方式的优劣,而在于「如何不痛苦地坚持下去」。而要解决这个问题,最大的利器即是兴趣。「只有真正深刻到一个领域,才能培养出对其的真正兴趣。若是对一件事的了解不深、不透,老是浅尝辄止,那天然体会不到这件事的妙处,也天然不会产生持久的兴趣。这让人容易滑入一个死循环:了解不够致使兴趣不足,而兴趣不足又没法加深对它的了解。」

「若是我能长期地坚持去作一件事,必定是这件事带给个人丰盈感和知足感超过了个人全部付出,必定是这件事日日夜夜萦绕在个人心头让我欲罢不能,必定是这件事唤起了我心里深处最强烈的兴趣」。也就是说,赐予我力量的,是激情的驱动,而不是意志力的鞭策。可是,热情很难一直存在,所以,在热情黯淡的时期,须要咱们有必定的自控力去作支撑过渡。所以,如何练就强大的自控力也是须要咱们去不断深刻探索的一个问题。

做者:掘金丨jsonchao

原文连接:https://juejin.im/post/5eb168e9f265da7bb65fb27a



自学C/C++编程难度很大,不妨和一些志同道合的小伙伴一块儿学习成长!

C语言C++编程学习交流圈子,【点击进入】微信公众号:C语言编程学习基地

有一些源码和资料分享,欢迎转行也学习编程的伙伴,和你们一块儿交流成长会比本身琢磨更快哦!

相关文章
相关标签/搜索