如何学习一门编程语言
简介
未来的应用必然是异构的,绝对不会限定在一门语言上,这就要求我们能根据需要快速的掌握一门语言。
本文就个人经历谈一谈如何快速的学习一门编程语言。主要面向已经掌握了一门语言的人。
学习目的
当你决定要学习一门语言的时候,请先问问自己为什么要学习这门语言? 如果答案是这门语言现在很火,那么可以洗洗睡了。生命苦短,好好玩乐吧,少年!
个人认为需要学习一门语言的动机有如下几个:
- 工作需要:工作需要使用这门语言,而且你还得靠这份工作养活,那么无论你怎么不情愿,硬着头皮学吧!
- 提高效率:目前你使用的语言效率不高,而另一门语言能显著的提高效率(公司对语言的使用没有限制)。或者能作为工具语言提高你的工作效率。
- 拓宽思路:你使用的面向过程语言,想了解了解被吹得天花乱坠的面向对象语言。或者你使用的面向对象语言,想看看函数式编程语言是什么鬼!
而第一种目的和第二,三中目的所要学习的程度则有差别。工作需要当然是越深入越好。提高效率则更偏向实用。拓宽思路则理解其思想即可。
确立了目标后才能更好的学习语言,比如你只是想拓宽思路,那么没必要死抠语法,理解其思想即可,语法忘了就忘了。如果是使用,那么后期需要频繁的使用,在使用的过程中反馈学习,才能有更好的效果。编程嘛,无他,唯手熟尔!
无论什么目的,都需要从基础开始!
环境与语法
首先是要摸清你要学习的语言的环境和基本语法。这个耗时不会很长,一般半天左右即可。
目前大部分语言都提供了傻瓜式的安装包,所以环境基本不是问题了。
语法的话,基本语法其实很简单。只要你有一门编程语言的基础,基本语法的学习也就是分分钟的事。无外乎:
- 常量
- 变量
- 逻辑判断
- 循环/递归
等等,这些最基本的东西,只是各个语言在语法表达层面上的差异罢了!
语言的思想
基本语法只能说达到了Hello World的级别。而语言的思想则是核心重点。
当然,如果你会过程式语言,再学一门过程式语言,这个坎就比较小了(只涉及到一些小的语法层面的学习, 比如Java使用接口来实现多重继承,而ruby使用的是mixin)。但是如果你学过过程式语言,现在要学面向对象语言, 或者你会面向对象语言,要学习函数式语言,则需要重点越过这个坎。
比如:
- 过程式语言考虑的是数据结构和算法,封装级别到方法
- 面向对象考虑的是如何构建对象及对象之间的关系。封装级别是类
- 函数式则考虑如何构建函数。封装级别是函数(函数和方法的区别请自行google)
每种语言思想的不同也就导致了在使用语言解决问题时的思考重心的不同。就像上面说的:
- 过程式语言思考的是如何设计数据结构和算法
- 面向对象语言思考的是如何构建对象及对象之间的关系
- 函数式语言思考的是如何构建函数
这一部分算是比较难搞定的地方,需要一定的时间去学习与思考。
库
语言思想这一部分搞定后(如果一时搞不定,可以结合此部分反馈学习 ),后面其实就是对库的学习了。几个比较重要的库:
- 字符串处理:这个不用说,字符串是我们打交道最多的,搞定相应的操作库是必须的
- 集合操作:这个也是必须的
- IO操作:不搞定IO,如何和计算机或其他系统交互呢?
- 并发库:计算机早就进入了多核时代,不搞定并发怎么好意思说是现代化编程语言?(连js这种单线程语言,都可以通过多进程的方式进行并发)
在学习库的过程中,可以进一步体会所学习的语言的思想!
代码组织
学习了思想,学习了库,其实你已经可以编写功能完善的代码了。但是如何编写出最适合该语言特性的代码呢?
这里就相当于是最佳实践了。
- 比如面向对象里类的封装与继承。最经典的设计模式啦!面向对象语言中一堆的模式需要学习!
- 函数式编程里函数的定义,lazy seq的使用,偏函数等等编写出更函数式的代码
打包,部署及三方库
编写完代码就是打包部署了,这里就涉及到了语言的生态环境了。即如何管理自己编写的库。
比如:
- java里的Maven管理
- node.js的npm
以及对需要使用的第三方库的学习。
总结
经过如上过程,基本上就能将一门语言应用到实际使用中了!
后续将针对Java,Groovy,Scala,Clojure,Shell等语言做详细的教程!