是不是光有坚持,我们就能做成一件事了?

这是我上周三贴在微公号里的一张图片,内容来自于我正在重看的一本书《程序员的思维修炼:开发认知潜能的九堂课》的一段内容。

记得上初中的时候,我们的班主任常会开一些如「学习经验交流会」这样的交流活动,会叫上平时成绩好的同学,上台分享一下平时学习上的经验和方法,我也是其中之一。在上台之前,会先叫我们做下准备,无非就是先想想,然后再写下来。当然,这种光荣的事,我们一般都会很认真的对待,就会花些时间来思考平时自己如何听课、如何复习,遇到问题如何办之类的问题。现在想想,那应该是自己最早去思考「关于如何学习」的问题了。

工作之后,与业务相关的内容,如何教学、如何管理之类花的精力比较多些,而对于自身知识水平提升的学习就变得很少了。个人认为,学习就是学然后再实践的一个循环过程,通过这样一个过程来不断的提升自己的知识水平。后来在和一伙朋友搞网络社区的时候,我对「做中学」这种方法又挺认可的。光一味的学,就太过于缺乏目的性,有可能为了学而学。而做中学由于目标清晰,在做的过程中,根据需要进行学习。

应该是07年吧,我由于使用电脑的时候很多,觉得学点什么总会是好的,就开始学习Python。方法就是读一些书,主要是网络上下载的那些扫描的PDF版书。跟着做一些小程序之类的。但一两年后,仍然感觉自己什么都不会,还是就是一个新手的阶段。时间花出去了,但却看不到效果,我仍然不能算是懂Python的。也没做出实际的、可用的东西来。期间回到过Windows的世界时,玩了两年网络游戏,当发现时间和金钱都出去了,而自己却感觉到那莫名的空虚却又挥之不去,于是再次回到Linux里,又拾起Python,一切从头再来。这次不一样,开始去学习一些常用的库,但很快在Python的邮件列表里被大家给否定了,因为他们也并不是什么都知道,不是先学好所有东西再去做产品的,依然是做的过程中去查,这样做得多了,自然就了解的更多了。在我看来,知道的多少并不是最重要的,如何将未知变成已知,再将已知变作熟练的能力才是最为重要的。

后来,我开始用自己所知道的Python和Django的相关技能,尽量去做一些可用起来的产品,哪怕还只是一个玩具。遇到问题,就是看文档,查看种资料,问个种问题。开始的时候问题很多,但随着时间的推移,问题一点点变少了。最后还真的做出了一个可以运行的产品了,可能它仍然很脆弱,但对我来说已是很了不起的事了。

之所以在这个公号里贴那张图,我觉得那是一种很好的、可操作的学习方法。再一起回顾下:

  • 需要一个明确定义的任务。
  • 任务需要有适当的难度——有挑战性但可行。
  • 任务环境可以提供大量反馈,以便于你采取行动。
  • 提供重复犯错和纠正错误的机会。

回想学校里教学过程,对于 1,目标是有的,但不清晰,更多情况下是老师定的,而非学生本人。对于2,学习新的东西难度是存在的,不过这种难度仍然是相对的,成绩较好的觉得容易,而中等以下的会觉得有难度了,这种难度的制定,貌似已抛弃了半数的学生。对于3,反馈有课堂、课后的作业评讲,以及考试。对于4,大量类似问题的练习,练习之后的改正。但以我自己的观察和经验,在执行上似乎是不好的,教师对学生的要求毕竟还是在一种外力,而学生本身能做到这几点的,似乎是比较少的。不是说学校教育就完全不可取了,但我们过于重视对知识本身的讲解,而忽略了对学习方法​​​传授,对学生的教育的确是不好的。

对于个人而言,可以根据以上四点去构建一个自我学习的空间。如我现在正在学习的iOS开发,我想可以这样来做:

  • 目标每个月做一个App并上传。平时记录上想做的App,开发时根据这个想做的清单进行筛选,做前列出最想要实现的功能。
  • ​根据已的技能确定做哪一个。所需要技能中,即有已解决的,也有不可知的内容,权衡一下App的难度及自己的水平。
  • 反馈方面,我想通过写开发日志的方式去做,记录解决问题的方法,放到网络上去,与其他开发人员一起交流讨论。
  • App做好放出之后,遇到问题及时修改。

在目标和交流反馈方面我是一直做得不足,可以通过开发者社区及QQ群之类的工具,与人交流,帮他人解决问题,也去讨论自己在开发中遇到的问题。

坚持很需要毅力,但人本身就是懒惰的、好逸恶劳的,得让人看得到希望才会更有希望。我们一定要向前走,但光别顾走,而忘了往哪里走,该怎么走的问题,时不会的停下来的反思一下,我们才能走得更远,走得更好。