上篇谈了新手如何学习一门新的语言话题;那么对于已经掌握一种或一种以上的程序员如何学习一门新的语言呢?由于程序员已经有一定语言基础,形成了自己一套学习方法和思维定式,所以这个问题还是和新手学语言是有些差别的。
但是在现实中,我还是发现不少程序员因为工作的需要而学习新的语言问题。他们心怀恐惧、不知道自己如何能否学好,而且学习方法非常传统,象新手一样:首先去买本这方面的书(或者借本书,或者网上阅读),看完以后再动手。但是,我不知道他们是怎么看书的!是从头到尾地看?还是挑选着看?他们关注书中的什么内容?第二种情况是程序员动手能力特强,先把语言安装起来,先编起来再说,但是他们不知道这个过程有多长,何时是个头。无论那种程序员你去向他讨教如何学习一门新语言时,大都是仁者见仁,智者见智的,而且几乎没有人能从头到尾说得清楚的。若不信,读者可以自己去回答这个问题。
其实,程序员学新语言是有讲究的。学习不同类型语言难度最大,相同类型的语言难度就小些。当掌握过程语言(例如:C语言)的人去新学面向对象的语言(例如:C++)时,难度就非常之大,因为两种语言的思想是完全不同的,用过去的定式去思考新的语言,那种痛苦是难言以表的。例如VB程序员去学VFP、BP等同是C/S类开发程序相对就容易得多。又例如,VB程序员去学ASP就很困难,因为一个是C/S,一个是B/S,虽然语法上相差不大,但是构架差距很大,很难一下子去适应。所以,学习新的语言第一个要分析这个语言的类型是否是自己已经掌握了的,如果已经掌握,那么学习的时间会很短,一般在一个星期到半个月就行了;如果没有学过,则学习时间会很长,一般要2-3个月已上,而且非常痛苦。
对于程序员而言,学习新的语言,绝对不要去买什么书籍,买了书籍也不要花时间一字一句地去看。主要的学习手段就是动手编程序,通过编写范例程序的过程中学习!第二,一定要找到一个懂这个语言的人,如果能够找到人问的话,一定要找人去问。这个时候和新手找人问是完全不同的,因为新手会听不懂别人所说一些基本概念,会引起高手的不耐烦的。第三,程序员千万不要自己去“刻苦钻研”!因为,程序员有一定的语言基础,心中只要记住“流程”、“语法”、“调用”(见《程序员需要那些具备最基础的知识和技术》一文)就可以了。
程序员在掌握编程的流程之后,可以通过编写以下三个程序:
1) 显示“hello world!”程序
2) 打印日历程序
3) “学生学籍信息”处理程序。
来掌握新语言中语法和调用的方法了。 当然程序员自己也可以选择编写自己的程序以达到学习目的。
与新手不同的是:
1) 要特别注意语言的语法差别。一般来说,语言的语法差别很小,但是很烦人。程序员学过之后往往会混淆不同语言的语法。例如,有的语句是以分号为结束符的,有的语言中的语句是以回车为结束符的。如果混淆的话,你就一会加分号,一会不加分号的。尤其是程序员对原先语言特别精通的话,这种惯性是很大的,因此也特别烦人。
2) 要特别注重程序的调试方法。因为除语言本身之外,如何调试也可能是不太相同的。调试对于程序员来说太重要了,必须加以关注。
3) 要特别注重程序运行环境。程序编出来了,生成exe了,但并不意味着这个程序就能执行。例如,C语言的生成出来的程序一般是不需要额外的环境的,直接运行就行了。VFP生成出来的程序,则需要系统中安装VFP系统DLL,因此,VFP程序要做安装盘。
C#则需要跟多的环境才能执行等等。
4) 要特别注重程序中的各种调用。由于新学的语言往往功能更强,涉及调用功能更多,程序员要关注新语言如何调用的问题,调用也是今后程序编写的最重要的内容。
程序员按照这种方法去学习新的语言,开始时候一定会感到寸步难行的,会遇到很多困难的。但是,我相信只有程序员知道整个学习的流程,知道下一步工作的目标,我想学习进度会越来越快的。我最不希望看到程序员在学习上表现出自发、盲目、恐惧的精神状态。