1#


以一个没有接触过程序设计、零基础的学习者为例。


一、学任何知识的先决条件


    先不谈具体的学习方法,就学任何方面知识的先决条件来发表一些我自己的看法。


       第一点就是主动性。


  当然主动性需要建立在兴趣的基础上。主动学习与被动学习,两者的效果可以用天地之隔来形容。就好像主动去玩游戏与学习自己不喜欢的科目一样,两者的happy程度与效果也无法相提并论。追女生都要主动去追,更何况学习呢?


       第二点就是自信。


   自信,从外在来说,决定了你走路的姿势,说话的音量与魄力,眼神是否专注,等等。我了解别人的一个很重要的途径就是眼神,我觉得眼神可以看出一个人做事的态度与性格。不需要说太多,我已经太多次从自信地做事中得到益处。我觉得,做任何事都需要一定的自信,即使是面对自己不擅长的东西,只要需要去做,就应该自信。自信与自负最大的差别就在于能力,能力强,那自然是自信地"艺高人胆大"。


       第三点就是自学能力。


  我记得刘未鹏在《暗时间》中提过:“一个人的知识积累,百分之九十都来源于自学”。做技术的人,是从书本中,从老师,同事,从各种资料,等等途径自学;不做技术的人,是从人际交往中,人员管理等等方面自学。我觉得,自学就是在创造机会,而不仅仅是等待机会。由此可见自学能力的重要性。


二、"后知后觉"


       上大学之前,我对程序一无所知。那时对电脑的印象就是"魔兽世界","星际争霸",等等。大一上期学vb,体验了程序设计,直到大一的寒假,才真正开始了我的程序之路。我看到网上很多人都是在高中之前就接触了程序设计,或是Pascal,或是vb,等等。我把这些人称做"先知先觉"者。我们这些"后知后觉"者,比"先知先觉"者晚了大概3年时间认识到程序设计。而我认为,这3年的差距,最重要的表现就是编程的思想。不要小看这3年,在大学之前,3年是段不短的时间。就我个人来说,我现在是大三,仅仅就两年时间,就让我从计算机或程序的角度把生活中的很多事物都再认识,再思考。比如,以前查字典的时候,只会按照字母和大概的页数去找,当要找f开头的时候,经常是在e和g的页上耽误时间。如果当时我学了程序,就可以很自然地想到折半查找法,可以把时间稳定在对数级,再延伸一些,以前查字典的方法可以算是一种简单的随机算法,虽然有时可能比折半查找快很多,但是在稳定性上,折半查找显然好与随机算法。这也就是我认为的,"后知后觉"者在编程思想上与"先知先觉"者的差距。


三、从个人的学习历程中总结出"后知后觉"者的学习方法


       上面已经说到,我是一个在计算机专业上的典型的"后知后觉"者,但我觉得我很幸运,上大学的两年以来走过的路恰好是我目前所认为的最好的路:大一上期体验程序设计,大一下起进阶学习程序设计,大二尝试各种不同的领域,在大二的暑假基本确定了方向。下面我来仔细说说这几个阶段的学习方法。


       1.大一上学期。之前对程序一无所知,这时需要接触一门比较简单而且可以较快做出作品的语言,比如python等脚本语言。在这段时间内,可以尽情地发挥自己的想象力,去操纵python,来感受程序设计。


       2.大一下学期。需要学习C语言。C的语法简单(往深了学,C语言可不简单),在少用指针,内存分配的情况下可以较少出错。我推荐在这段时间内,尽量多地用数组来代替指针,防止运用指针出错,然后去实现常用的数据结构和算法,然后做一些简单的ACM题来练习基础与思维。这段学习历程对于我至关重要,让我养成了很好的思维的习惯和一定的编程思想,简单点说,就是将大问题拆分成小问题,然后用最简单的办法去解决小问题。这段时间内先不要去学面向对象。在期末的时候,可以写一个基于链表的信息管理系统,综合运用一下所用知识。


       3.经历了以上时期,代码量应该有了3万左右(注:一定得独立编码,绝对不能照着书抄代码,那样没有丝毫作用)。大二,要去尝试各种不同的领域,比如底层开发,linux下的C/C++程序设计,较上层的应用开发,比如android开发,j2ee等等。我在大二这一年,学过android开发,做过一个记单词的小软件;学过jsp,servlet,做过一个小的bbs;啃过C ++ primer plus;学了汇编,写了一些小程序。最终,我决定了linux下C/C++,网络编程的主要方向。这是一个选择的过程,每个人的兴趣不同,选择也就不一样。


      4.选定方向后,先深入学习该方向,然后再适当广泛的学习,采取"先精后泛"的策略。在时间上,也就是大三,这一年至关重要。在之前的基础训练的前提下,这一年可以让技术有一个比较大的飞跃。


      5.贯穿在整个学习历程中的总结与思考。"学而不思则惘,思而不学则殆"。"思"对应思考与总结,"学"对应看书与编码实践等等。"学"与"思"应该同时交替着进行,二者的地位同样重要。但要注意克服一个心理上的障碍:我在看书学了一天后,总是不愿意去总结,就像是对总结有恐惧一样。我觉得这可能是一个普遍性的问题。这时,需要强迫自己去进行总结,去反省,在这个时候的总结与反省,往往能起到非常大的效果。


      6.注意身体健康,最好在每学习1小时就站起来休息5分钟。我觉得即使在工作中,这个习惯也应该保持。挤5分钟出来,会对自己的身体有很大的好处。经常面对着电脑,颈椎的压力会很大,网上有很多颈椎保健操,差不多也就5分钟。每学习一个小时,就站起来做5分钟颈椎保健操。我高中时颈椎就因为玩游戏而经常不书许,而这个习惯我已经坚持了差不多1年了,感觉有比较大的改善。


       当然,这些方法不只使用于学生。如果是想要入职程序员而没有任何基础,可以将体验程序设计与选择方向的时间尽量缩短,但是用C去实现数据结构和算法以及做练习题的时间必不可少,因为这是基础中的基础。


       以上是我的个人断点,如果您有不同的见解,欢迎提出来。



     原文:http://www.cnblogs.com/NeilHappy/archive/2012/12/10/2810501.html