专注和游离

最近一些读者的提问,包括与团队成员的交流,都涉及到了一个问题,如何才能快速的提升自己的能力,或者说为什么我提升的这么慢呢?

这里面其实存在一个误区,世界上基本不存在什么快速提升的神奇方法,什么21天学通 Linux C 编程,7天自学 Java 语言,17天搞定 GRE 单词,等等,都特么是骗人的。小时候书在我的眼中是非常神圣的,看到类似的标题我砰然心动,就像看到初恋情人,还没入手就开始幻想自己21天之后拔剑四顾满腹经纶的嘴脸,结果买了书之后,一个月之后,发现自己只看了第一章节,而且每次都看第一章节,所以别提学通和搞定了,门都没入。

根本就没什么快速的提升,如果你在某段时间觉得自己提升的很快,那是因为你身边的大部分人成长的更慢,或者,他们安于现状,没有提升。提升从来稳定的,持续的,渐进的。在大部分领域,围棋、绘画、写作、编程、球类等,没有十年的持续学习和自我提升,基本上很难达到专家级别的水准。

既然明白了这一点,我们「不期速成,日拱一卒」就好了嘛,每天坚持在某个领域学习和实践两小时,那成功不就指日可待了么?有这么简单就好了!事实上,在这个到处充满诱惑力和信息碎片满天飞的时代,能够做到「日拱一卒」的人,少之又少。基本上,由于人的天性,大部分人不可能像苦行僧那样去学习和生活,我们常常是在需要专注的时候,游走在朋友圈、微博、美剧、游戏和各种无聊的垃圾信息之间;在需要游离放松的时候,我们却极度专注,打游戏或刷新朋友圈到深夜或凌晨。

一小部分天才和异人可以非常顺畅的在专注和游离状态之间切换,你看他们在刷微信,其实他们在阅读,你看他们在看美剧,其实他们在编程,这些人具备异乎常人的多线程处理能力,而且能做到「品学兼优」,玩得开心,学得也好。

这叫天赋,我们普通人是学不了的。我直到三十岁以后,才慢慢找到了适合自己的方法和平衡点,等我想明白了这一切之后,十年的差距已经过去了,还是挺悲哀的。为了给自己打气,我就想,你们这些少年天才也就那么回事,不就是比我们早十年想明白了很多事吗?不就是我们还在摸索的时候你们已经还是奔跑了吗?跑得再快能有刘翔快吗?能有乔布斯和盖茨看的远吗?也就那么回事,都不是神,道哥饿几顿眼里照样没神,说话照样有气无力!我们当北京的程序员,杭州的产品经理,一样能大器晚成!

有了这样的信念,我得以坚强的活到了今天。我的方法很简单,就是把每天晚上完整的时间归一堆,然后用刀切成两半,一般用来专注,一般用来游离。

状态好的时候我就会先专注的干一些事情,这段时间里我会屏蔽掉电话、微信、微博、美剧等一切干扰噪声,把相对完整的时间留给写作、编程、读书,或专心研究点什么,坚持一段时间,你的效率就会大大提升,你会发现自己的提升好像比以前快了那么一点点。

状态不好的时候,我就会处于游离的场景里,刷朋友圈,看微博和推特,看订阅的 Blog,读一些闲书,看美剧,拓展视野,寻找信息,彻底放松。这段时间就是用来消耗的,同时寻找有价值的东西,记下来,留在专注的阶段细细阅读和理解。

专注和游离状态交替进行,对我来说,似乎是最好的选择。一旦专注,你的效率就会比别人高那么一点点。一旦游离,你的视野就会比别人广那么一点点。假以时日,你的高度和广度上就会大大超越常人,把那些稀里糊涂过日子的人抛在脑后,同时可以远远的看见那些天才们的后脑勺或脚底板,这叫大器晚成。

写到这我想起了著名程序员、计算机博士徐宥的一篇文章,叫做「十年学会程序设计」,结果去翻他的博客,居然不能访问了,颇为伤感。还好我摘录过他的一些文字,在这一并分享给大家。

关于编程上一些建议:

  1. 对编程产生感兴趣并因为乐趣而写程序。确信你自始至终都能乐在其中,这样你才愿意将十年光阴投入编程事业.
  2. 与其他程序员交流;阅读别人的代码。这比任何书任何培训都重要。
  3. 不断地编写。 最好的学习方法是在实践中学习 。从技术角度说,”在特定领域的个人最高效率并不因为经验够多就会自动获得;但若有意识的通过努力去提升经验,个人效率会变高”(第336页)而 “高效的学习一般需要明确的任务和因人而异的适当难度,以及及时的反馈和重复或者修正错误的机会”(20~21页)Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life (实践中认知:心智、数学与日常文化) 是这个观点的一本有趣参考书籍。
  4. 跟其他程序员一起完成项目。在一些项目中成为最好的程序员;在一些中则充当最差的一个。当你是最佳的,你要测试自己领导项目的能力,并以你的能力鼓励他人。当你是最差的,要看看高手做些什么,他们不喜欢做什么 (因为他们会叫你去帮他们做).
    接手别的程序员完成项目。全心投入并理解别人的程序。当原作者不在的时候,看看在理解与修改时有什么要注意的。想想如何设计你的程序使得后来维护的人容易上手。
  5. 至少学会六门编程语言。一种要支持类/对象(class abstractions)的语言, 如Java或C++; 一种函数式(functional abstraction)语言, 如 LISP 或 ML; 一种支持语法抽象(syntactic abstraction) 的语言 如 LISP; 一种声明式语言, 如Prolog或 C++模版; 一种支持协同式(coroutines)编程, 如 Icon 或 Scheme; 还有一种支持并行(parallelism)的语言, 如 Sisal.
  6. 并具备良好的判断力,也别老纠缠在语言标准化上.

共勉。

发表评论