前言
学习任何技术,我们都可以用WWH方法,即从What、Why、How三个角度去了解.学习编程语言也是,我们要了解语言的类型、特征(What),接着了解它的适用场景范围,优缺点,这也是我们为什么要用它的原因,最后是具体该如何使用的方法(How)。
我们往往重视H,不太重视两个W,很多同学一上来就一头钻进了语言的细节,比如保留字,语法、一个一个的API。这是典型的只管埋头干活,不抬头看路的作法。
其实抬头看路才更重要,不懂得为什么要用这个语言,就无法在解决实际问题时正确选择语言,也不知道该如何发挥该语言的优势。
对于How,我想说两点,第一点,就是编程语言尽管现在有很多,但是基本的分类并不多,也就是说编程语言有很多共性和通用的知识,一旦学会了,可以适用于很多语言。第二就是学编程和学游泳一样,需要不断实践,积累经验才能学会,光理论是不行的。
一、抽象共性知识
1、了解该语言的类型与特征
比如搞清楚,这个语言它是编译型的还是解释型的、或者是两者兼之。是声明型的还是指令型,如果是指令型的那是面向过程,还是面向对象;其静态语言还是动态语言;其本语法是基于c语言发展的还是基于basic发展的等
不同的语言类型和特征,它代表的编程范式、编程思想不同,在设计程序方法和技巧也不尽相同,要根据这些不同重点学习其设计方法和技巧,在使用时也可能扬长避短。
2、了解该语言的适用范围
每种语言除了提供基本的关键词和语法规则外,也会提供应用编程接口(API),它是一个比较大的集合。每一个语言在设计之初都是需求驱动,都是想解决某一些领域的问题,比如c语言主要用于系统级编程,如编写操作系统和驱动程序,Cobol主要用于实现商业逻辑,Perl主要用于字符串处理,Fortran主要用于数学计算,Pascal主要用于教学等。了解它的适用范围,有利于评估不在不同的项目中最适合用哪种语言。
3、认识该语言的单词(关键字、保留字)
每一门语言都有一些关键字或叫保留字,这些单词有特定的用途,不能在定义变量时采用,一般并不多,几十个的样子。所以要快速了解一下,每一个保留字的用法,这些用法基本上就体现了该语言的语法特征。
4、掌握基本语法
一般的高级语言都会有一些基本的语法,如定义变量、常量,数据类型的种类、给变量常量赋值、各种运算符(算术、关系、逻辑)、程序流程中的分支、循环、异常处理等,如何定义函数、如何定义类、如果实例化对象,如何调用函数等等。
5、了解该语言的特色语法
特色语法是相对于基本语法来说的,一般是该语言的独特的支持特性,有可能是这种语言特有的,也可能是新版本特有的。比如java的流计算、多线程并发的支持、新的IO接口等。
6、重视API背后的知识
如果你了解过多门语言的api设计你会发现他们的共性,不管用的类、函数的名称和参数略有不同,但是它实现的功能非常接近,比如都会有文件操作,网络接口、图形界面接口、内存管理接口、数据库操作接口,多媒体处理接口等。针对这些完成不同功能的接口,其背后都有对应的相关知识,比如网络协议、文件系统的知识、图形界面设计思路,操作系统知识,声音,图像、视频的格式与处理压缩的算法等等。其实这些才是最应该学会的知识,有了这些知识作为基础,在学习新的语言时,你就不必把这些API死记,其本上用到的时候,你再去查一下文档,就可以很快上手,相反,如果你没有这些知识,那么你主会很茫然,不知道要解决的实际问题,到底该如何用这些API来实现。记住语言永远只是工具。解决问题的思想方法才是核心。
7、背下API目录大纲
API一般都很多。所以他的用法你是背不下来的,但是我觉得你需要把API的目录大纲背下来,或者你很熟练的可以复述下来,这个语言提供了多少API、都可以干什么。以便你在解决实际问题时,知道它是否支持,大致是什么在哪里找详细的信息。这样会对你工作带来很高效率。我的建议是你不要在学习时一个api一个api的去记,你只要记目录大纲就好,然后在实战时去一个一个熟悉。
综上所述,学语言要有整体概念,先要学习这个语言的类型特点,适用领域,从整体上有个把握。这样方向就搞清了;其次要明白语言只是工具,重要的是学习它背后支持的理论和思想;最后要总结一下语言的共性的知识结构,按这个结构去逐个了解。
二、以用促学
学习编程语言的时候,一定要先搭建基本的编程环境。因为编程是一个象游泳一样的活动,不亲自下水是学不会的。尽管语言的语法规则就那么多,但在实际的编程环境、工具下还是出现很多问题,是书上不可能一一列举到的。往往在解决这些问题时,你的经验就得到了积累。所以一开始学,你就应该搭好环境,边学边练手。一是这样学起来不枯燥,二是印象深,有利记忆。
在搭建开发环境时,我非常建议选搭建语言提供方自有的工具,一般都是命令行工具。看着比较low,但是功能是最全的,也是最灵活的。先要学会熟知它们的工作机制,然后再使用一些第三方提供的图形化的IDE工具,IDE工具是在实际工作中提高工作效率的,但前提是你对底层工具的了解上,只有对底工具的机制熟悉,才能举一反三解决一些你没有碰到过的问题。IDE象一个黑箱,如果你不了解它里边的机制,有一些问题你就会束手无措。
另一个有用的工具是《API速查表》,就是一个方便检索和查找的电子文档,在你实际开发时,想到用哪一方面的API,可以快还在这里找到具体如何用,不要指望你去记住这些用法,因为它太多了,也没必要。现代的IDE一般都有API的输入自动完成和提示功能。在一定程度上实现了api速查表的功能。
脑科学家研究表明,学习最高效的方法是使用这些知识,或者是与他人讨论,用这些知识解决实际问题,比如参加一些项目,或者自已立一个项目来做,最高效的是试图去整理这些知识,写成文章,教会别人。这都会极大帮助你巩固已学的知识。所以这也可以用到学习编程语言上。可以梳理成教程分享给它人,回答别人提出的问题。或者自已策划一个你感兴趣的产品,开发一下试试。不用在意是否成功,这个过程会让你更加专注,更加深入的思考,发现你学习中的缺陷和漏洞并且得以弥补。
最后,就是一定要多多看一下开发社区的信息,一些论坛,一些一源组织,了解针对这门语言有没有一些第三方的开源类库与框架,看看大家对它的评价如何,使用的人多不多,版本成熟度如何,有时候这些类库和框架会大大担简化和提高你的开发效率。但这不是必须。