最近在看Rogers Cadenhead写的《21天学通Java(第6版)》,这个名字......老外也起这么俗的名字啊。虽然看得不多,却是受到了不少学习语言的启发,在此总结一下。
看一本书前我喜欢研究目录,从这本书的目录中可以看出作者基本上把这本书分成了三部分,分别是——学习Java语言、学习Java类库、学习Java编程。仔细捉摸,“语言、类库、编程”确实代表了学习一门语言的三重境界。拿Java举例,“语言”主要包括Java的语法要素和基本机制;“类库”包含了Java的众多特性和标准工具集(如对经典数据结构的实现);“编程”则是一个宏大的概念,旨在用Java的方法解决实际问题,完成特定任务。
举一个更形象的例子,语言就相当于矿石、木材等基础材料,类库就相当于用这些原始材料制造的武器,而编程则是要我们带着这些武器上阵杀敌。
相比于收集材料和制造武器,我们的真正使命其实是上阵杀敌,所以我们理应在这一点上花更多的时间和精力。
但是回想我以前学习C++的经历,其实有很多时间精力都只是花在了“语言”上,相当于收集了一大堆的原始材料,但是却没有转化成任何的生产力,更不要说拿出去杀敌了。其实观察我周围的同学,有很大一部分人都是这样,觉得掌握好一门语言就是要掌握好这门语言的全部语法要素,精通每一个术语的定义;或者是存在完美主义,总觉得要想使用一门语言完成好某项工作,必须先把语言的基础夯实,正所谓“工欲善其事,必先利其器”。其实这些都是大错特错的想法,首先编程语言是死的,但编程却是一个创造性的过程,我们的核心目的是要学习设计程序解决问题的方式,而不是牢记语言的格式。任何语言的诞生都是为了方便人们解决实际问题,从这个角度说,所有的语言一定都是有共通性的,因此我们应该摒弃那些细小的差别,坚信瑕不掩瑜,把握住一门语言的大的框架就可以了;其次,实践才是最好的学习方式,无数的先辈已经告诉过我们,编程是一门实践学,不要害怕犯错,要在错误中学习,错误是最好的老师。
回过头来看,任何编程语言的学习都可以分为“语言、类库、编程”这三重境界。“语言”固然是基础,但绝不是核心,从阅读法的角度,这部分知识是应该略读的;“类库”是语言要素的标准实例化,代表最标准的编程风格,同时也是我们不可或缺的工具,在学习类库的过程中遇到困难,反而可以促使我们更快更好的理解“语言”部分的内容,同时培养我们的编程思想,但是类库是死的,熟悉类库你还是不一定会解决实际问题;最后,一切的一切都是在做铺垫,真正的重头戏自然是“编程”了,真相只有一个:能否解决实际问题才是衡量一门语言学的好坏的唯一标准(黑猫白猫,能coding的才是好猫),不要在意这个也没学会,那个也没看完,你开始动手了,你开始思考了,你就开始真正进步了。
此时此刻,突然想到了“科研”二字,科研能力最重要的就是知识的快速获取和学习,究竟如何才能更好更快的学习呢,在此我觉得可以把上面的思想进一步推广。快速学习要学会抓重点、抓框架,采用从全局入手、逐步细化的方式了解一个陌生的领域,而不要在局部知识点上花费太多精力,迟迟无法前进(正如在“语言”层面耗费了大量精力,却忘记了自己的真正使命)。逐步细化而不是万丈高楼平地起是更有效率的学习方式,因为你将带着问题去探索。实践是最好的学习方法,所有对理论原理的不理解,都将在你遇到问题的时候迎刃而解,more than more——更深入的理解理论原理。
好吧,我知道我推广失败了。。。。。。
为了弥补。。。
最后送上Drew Houston的话:”不要追求生活的完美,而给你自己自由,把生活变成一段美丽的冒险,还有,不断向上。“
“我觉得自己从未真正准备好。”