不少人喜欢争论什么什么编程语言好,我认为这个话题若是不限定应用范围,就毫无心义。前端
每种编程语言必然有其优势和缺点,这也决定了它有适合的应用场景和不适合的应用场景。现代软件行业,想一门编程语言包打天下是不现实的。这中现状也形成了一种现象,一个程序员每每要掌握多种编程语言。react
学习任何一门编程语言,都会面临的第一个问题都是:如何学习 XX 语言?jquery
我不想说什么多看、多学、多写、多练之类的废话。世上事有难易乎?无他,惟手熟尔。谁不知道熟能生巧的道理?webpack
我以为有必要谈谈的是:如何由浅入深的学习一门编程语言?学习全部编程语言有没有一个相对统一的学习方法?程序员
曾几什么时候,当我仍是一名小菜鸟时,老是叹服那些大神掌握多门编程语言。后来,在多年编程工做和学习中,我陆陆续续也接触过很多编程语言:C、C++、Java、C#、Javascript、shell 等等。每次学习一门新的编程语言,掌握程度或深或浅,可是学习的曲线却大抵类似。web
下面,我按照我的的学习经验总结一下,学习编程语言的基本步骤。shell
首先固然是了解语言的最基本语法。npm
控制台输出,如 C 的 printf,Java 的 System.out.println 等。编程
普通程序员的第一行代码通常都是输出 “Hello World” 吧。数组
基本数据类型
不一样编程语言的基本数据类型不一样。基本数据类型是的申请内存空间变得方便、规范化。
变量
不一样编程语言的声明变量方式有很大不一样。有的如 Java 、C++ 须要明确指定变量数据类型,这种叫强类型定义语言。有的语言(主要是脚本语言),如 Javascript、Shell 等,不须要明确指定数据类型,这种叫若类型定义语言。
还须要注意的一点是变量的做用域范围和生命周期。不一样语言变量的做用域范围和生命周期不必定同样,这个须要在代码中细细体会,有时会为此埋雷。
逻辑控制语句
编程语言都会有逻辑控制语句,哪怕是汇编语言。
掌握条件语句、循环语句、中断循环语句(break、continue)、选择语句。通常区别仅仅在于关键字、语法格式略有不一样。
运算符
掌握基本运算符,如算术运算符、关系运算符、逻辑运算符、赋值运算符等。
有些语言还提供位运算符、特殊运算符,视情节掌握。
注释(没啥好说的)
函数
编程语言基本都有函数。注意语法格式:是否支持出参;支持哪些数据做为入参,有些语言容许将函数做为参数传入另外一个参数(即回调);返回值;如何退出函数(如 Java、C++的 return,)。
枚举只有部分编程语言有,如 Java、C++、C#。
可是数组和集合(有些语言叫容器)通常编程语言都有,只是有的编程语言提供的集合比较丰富。使用方法基本相似。
比较经常使用的类(固然有些语言中不叫类,叫对象或者其余什么,这个不重要,领会精神)请了解其 API 用法,如:字符串、日期、数学计算等等。
语言特性这个特字反映的就是各个编程语言自身的"独特个性",这涉及的点比较多,简单列举一些。
编程模式
比较流行的编程模式大概有:
面向对象编程,主要是封装、继承、多态;函数式编程,主要是应用 Lambda;过程式编程,能够理解为实现需求功能的特定步骤。
每种编程模式都有必定的道理,我从不认为只有面向对象编程才是王道。
Java 是面向对象语言,从 Java8 开始也支持函数编程(引入 Lambda 表达式);C++ 能够算是半面向对象,半面向过程式语言。
语言自身特性
每一个语言自身都有一些重要特性须要了解。例如,学习 C、C++,你必须了解内存的申请和释放,了解指针、引用。而学习 Java,你须要了解 JVM,垃圾回收机制。学习 Javascript,你须要了解 DOM 操做等。
一个程序通常都有不少个源代码文件。这就会引入这些问题:如何将代码文件组织起来?如何根据业务须要,选择将部分模块启动时进行加载,部分模块使用懒加载(或者热加载)?
最基本的引用文件就不提了,如C、C++的#include,Java 的 import 等。
针对代码组织、模块加载、库管理这些问题,不一样语言会有不一样的解决方案。
如 Java 能够用 maven、gradle 管理项目依赖、组织代码结构;Javascript (包括 Nodejs、jquery、react 等等库)能够用 npm、yarn 管理依赖,用 webpack 等工具管理模块加载。
程序总不免会有 bug。
因此为了代码健壮性也好,为了方便定位问题也好,代码中须要有容错处理。常见的手段有:
这块知识比较繁杂。建议提纲挈领的学习一下,理解基本概念,好比输入输出流、管道等等。至于 API,用到的时候再查一下便可。
每种语言实现回调的方式有所不一样,如 .Net 的 delegate (大量被用于 WinForm 程序);Javascript 中函数自然支持回调:Javascript 函数容许传入另外一个函数做为入参,而后在方法中调用它。其它语言的回调方式不一一列举。
首先须要了解的是,序列化和反序列化的做用是为了在不一样平台之间传输对象。
其次,要知道序列化存在多种方式,不一样编程语言可能有多种方案。根据应用的序列化方式,选择性了解便可。
如下学习内容属于进阶性内容。能够根据开发须要去学习、掌握。须要注意的是,学习这些特性的态度应该是不学则已,学则死磕。由于半懂半不懂,特别容易引入问题。
对于半桶水的同窗,我想说:放过本身,也放过别人,活着很差吗?
并发编程:好处多多,十分重要,可是并发代码容易出错,且出错难以定位。要学习仍是要花很大力气的,须要了解大量知识,如:进程、线程、同步、异步、读写锁等等。
反射:让你能够动态编程(慎用)。
泛型:集合(或者叫容器)的基石。精通泛型,能大大提升你的代码效率。
元数据:描述数据的数据。Java 中叫作注解。
学习一门编程语言,不免须要用到围绕它构建的技术生态圈——库和框架。这方面知识范围太庞大,根据实际应用领域去学习吧。好比搞 JavaWeb,你多多少少确定要用到 Spring、Mybatis、Hibernate、Shiro等大量开发框架;若是作 Javascript 前端,你可能会用到 React、Vue、Angular 、jQuery 等库或框架。
总结以上,编程语言学习的道路是任重而道远的,将来是光明的。
最后一句话与君共勉:路漫漫兮其修远,吾将上下而求索。