摆脱肤浅的学习

学习必然是一件苦差事,没有捷径可走,不要妄想在非常短的时间内有非常大的提升,学习必然是一点一点积累起来的,唯独勤奋可以达成目的。

想要达到专家水平需要非常长的时间,预计是十年,而且这十年的学习不是简单的重复而是刻意练习(deliberative practice)。刻意练习的关键在于:不仅仅是一遍遍重复去做,而是用刚好超出你当前水平的任务来挑战你自己,尝试它,在做的过程中和做完之后分析你自己的表现,然而修正错误。这样重复,然后再重复,直到生命的尽头。这其中并没有什么捷径。

真正的专业是需要一生的努力,想要在任何领域做的出色只能通过一辈子的劳作;没有更低的代价。在绝大多数领域即便是最有天赋的人也需要非常多的时间来达到最高水平的表现。

具体到编程领域

  • 对编程感兴趣,做这件事是因为乐趣,确保这件事足够有趣以至于我们愿意花10年的时间来做这件事;
  • 真正地去编程:学习最好的方式是做中学(learning by doing),只有精心设计的努力才能提供一个人的技能水平,最有效的学习方式需要合适难度的良好定义的任务,有效的反馈和试错以及修正的机会;
  • 与其它程序员交流;读其他人的程序,这比任何书以及训练课程都重要
  • 单单只学习书籍是远远不够的,“计算机科学教育不能让任何一个人称为编程高手,这就像学习刷子和颜料不能让任何人成为画家“;
  • 与其它的程序员一起做项目。在某些项目上做最好的程序员;在某些项目上做最差的程序。当你是最好的,学着去领导一个项目,用你的视野去鼓舞他人。当你是最差的时候,看看其它人是怎么做的,并且直到别人不愿意做的事(因为他们让你为他们做);
  • 在其他程序员之后工作,理解别人写的程序。看看当最初的程序员不在时,程序是如何被理解和修复的。想想如何设计你的程序,从而让别人在你不在时更容易维护;
  • 学习多门编程语言。其中包括一门强调类抽象(Java 或 C++)一门强调函数抽象(Lisp 或 ML 或 Haskell),一门支持语法抽象(Lisp)一门支持声明式规格(declarative specifications)(像 Prolog 或 C++模板),以及一门强调并行计算(如 Clojure 或 Go);
  • 记住”计算机科学“中有“计算机”这个词,直到你的计算机需要多长时间来执行指令,从内存中获取字(缓存命中或没有命中),从硬盘上读取连续的字,以及在硬盘上搜寻新的位置;

所谓将自己的大部分生命奉献给刻意练习,就是无畏(fearless);

尽管去买这种编程书籍;它们也许对你有一点用,但是这不会改变你的人生,或者让你在24小时或21天成为编程高手。如果是刻意训练24个月呢?你也许已经开始理解我说的了…

投入时间去真正深入学习计算机科学基础,最新的技术和日常使用的语言。开发者是以软件技能进行区分的而不是开发者的其它能力,虽然我们的沟通技巧很好,但是我们的代码是一团乱麻。

每个人都应该投资自己的专业未来(professional future),我们没有这样做的原因并不是因为我们缺少知识而是我们缺少热情(lack of desire),那句愿望和方法的老路是怎么说来着(where there is a will, there is a way)。

你不知道你所不知道的

”我会在我需要的时候学习”的问题在于你无法学习你不知道它存在的东西。你无法没有意识到一个算法或它的能力时学习一个算法,你无法用一个你根本不知道的技术来解决问题。

你意识到你所不知道的东西是通往扩大你的知识边界的门票。快速的过一遍尽可能多的东西,我们就可能在遇到问题想起它们然后更深入地去学习。然而事实并不是这样,快速浏览并不会让你记住任何东西,我们的大脑不是这样工作的。如果我们没有在一个概念上加强并且深挖我们很快就会将这些信息标记为不重要并且忘记,这简直就是浪费时间。

深入去学习会导致知识面的扩大。

而有些东西就是需要很长时间去学习。

与高手一起工作

与高手一起工作是一件非常开心的事,你也许有这样的经验,他们说的每一件事都事新的并且有趣,你从每一行代码里边都能学到新的方法,你几乎感觉你的大脑扩容了。你想要从这些专家那里学习。

智慧在于这里:你想要和高手一起工作,但是高手也想和高手一起工作,那么你要做的就是确保高手愿意跟你一起工作。

软件工业非常大,我们不可能学习每一个知识点,所以就某一个点开始,深入去学习直到了解它的方方面面,如果你有足够的好奇心,那么你最终会发现你对很多其它的知识也有非常好的理解。如果正在做一份足够好的工作,其它的高手也想要和你一起工作,因为他们能够从你身上学习,你也能够从他们身上学习。


我自己

我花了很多时间去看各种编程语言的书,学习了很多,但都是浅尝辄止。没有实际用它们写过多少代码。甚至我很长一段时间都处于比较放松的状态,只要完成好工作就行,业余时间也没有花费精力去钻研,我浪费了自己大把的时间。今年意识到我应该将绝大多时间花在专业知识上面,深入编程的书,新的技术,以及深入去学习基础,并且花时间多写代码。别的很有诱惑的东西如兼职、外包、网店和别的各种赚钱的渠道以及金融和政治,我都应该少花时间去。甚至于娱乐电视更加不应该花时间了,我要将我绝大部分的时间投入到编程上。

亡羊补牢为时未晚,迷途而知返。