NOTES 十一月 01, 2019

如何高效学习编程

文章字数 8.6k 阅读约需 8 mins. 阅读次数 0

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

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

锁定目标,风雨兼程

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

选择目标

如果你的目标是前端开发,前期的学习道路是比较明确的,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. 改掉不好的习惯和心态 - 有好的习惯才能更轻松的学习和成长

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

0%