写在前面

本来应该继续写API的。但是最近跟同事讨论了一下到底应该如何学习一门编程语言。考虑到之前的几篇文章可能对初学者没什么帮助,而大神又不需要看。所以感觉这篇文章说一说如何学习编程语言还是挺有必要的。


首先给初学者推荐一本书:《Java面向对象编程》第2版–孙卫琴
这本书结合面向对象思想讲述了Java的基础,比较详细,特别适合初学者学习;看完了一遍之后还可以当做工具书用;而且有网站支持。这一点还是比较靠谱的。


编程语言

先上一张图

我记得当时收到这个表情是在微信上,为了给保存成图片折腾了一下。然后就凑巧发给了一个同学(非编程专业)。然后他就问了一下说HTML是不是编程语言;然后我反应了一下,还查了一下百度才确认。身为一名程序员也是非常惭愧呀。


HTML是XML的分支或者可以看成是XML为了解决互联网页面领域问题而衍生出来的语言。所以说到底,HTML是一种标记性语言,跟XML一样用来标记数据。而非编程语言。

可是编程语言比如java,不也是要到底层由编译器将代码转换为机器码么。所以java的代码也有标记的性质。
那么两者之间有什么区别呢。

经过跟同事的讨论得出了一个结论:
标记性语言标记的是数据,而编程语言标记的是过程(动作)。
换句话说,你要把一个箱子从A搬到B,那么这个箱子就用标记性语言来描述,从A搬到B的过程用编程语言来表示。这样就比较容易区分了。

下面主要介绍一下模型的作用和如何使用。


为什么要使用模型

在学习一门新的语言的时候无非就两条路,一条是从基础学起逐渐对接实际应用,另一条是从应用学起在需要相应的基础知识的时候再去补基础。两种方式各有优劣,如果你希望系统的学习一门编程语言那么就选择第一条路;如果希望快速解决手头的问题,那么根据实际需求选择对应的语言,分析出需要的模块然后选择对应的基础补充即可。
但其实这两条路都有自己的弊端。如果从基础学起,一定会经历一段不能跟实际应用对接的迷茫期。如果从应用学起,那么就会有一种基础怎么补也补不全的情况发生。
模型其实就是个学习地图,或者说是个通用的学习计划。用来解决上面的两种情况的弊端。在学习编程语言期间快速定位自己的阶段,并能为未学到的阶段做一定的准备。


配图

使用思维导图的形式呈现的学习模型。
编程语言学习模型 ProcessOn
点上面的链接看图,有账号的麻烦给点个赞。
如果直接把图贴在这里上下翻看费劲,所以建议点连接打开。这里科普一个快捷键win + 方向键
打开后把图的标签页拖转出来变成一个单独的窗口,然后按上面的快捷键,左方向键就在左半屏;右方向键就在右半屏。这样看起来能方便点。

从图中可以看出,我把学习一门变成语言分为三个阶段。下面先从概念入手,然后逐渐分析三个阶段应该做的事情。如果这三个阶段都完全掌握并实践了。那么恭喜你,你已经是一名软件工程师了。


如何学习一门编程语言

此模型的定位是一个通用的基础的抽象模型。就是说它并不能直接用来对应学习莫一种编程语言,而是必须通过此模型,根据学习者的实际需求,和选择的编程语言来制定一个合适的自定义学习模型。
如果你学过java,那么肯定知道接口和实现类的区别。这个模型其实就是个接口,而学习的第一步就是实现这个接口。

一些约定

在这里约定几个概念,这样之后讲述和交流的时候可以方便一些:

阶段: 学习模型的第一层子节点,在此模型中对应的就是基础、语言特性和实战拓展了。
模块: 阶段的下一层子节点,比如实战拓展阶段中包括常用API、框架和语言的特殊问题三个模块。
模型填充: 将学习专项技能的过程比作模型填充的过程,那么模型填充就可以简单的理解为学习过程。
填充内容: 对应模型制定学习计划,每一部分的学习结果就是要往模型中填充的内容,所以填充内容可以简单的理解为学习结果。


模型中将语言学习的过程分为三个阶段。下面先大概说说每个阶段需要做的事情。
(这里说明一下,不一定非要按照模型的三个阶段逐一进行,模型学习提倡将模型按照实际需求拆分,组合。这样才能做到完全理解模型,把它变成你自己的东西。)

第一阶段:掌握语言基础

这里先按照第一种从基础学起的方式介绍。每种编程语言的基础看上去不一样,但是他们都逃不出模型第一阶段的范畴。即:
1、变量与常量
2、变量对内存的访问方式
3、运算符
4、语句
5、程序结构
6、注释
其中1、2、3部分尤为重要。因为每种编程语言都是由这三部分为原子单位组成的。
有了变量、数据类型和运算符之后才能组成语句,语句组成程序结构
当然注释是尤其重要的一部分,这一部分是为之后做大型编程留下的一个良好编程习惯。
这6部分组成了编程语言学习模型的基础阶段。
此阶段的目的是接触并熟悉一门编程语言,也就是所说的入门。有一些地方也可以体现语言的指导思想。比如java的String变量和对应基本类型的包装类就可以体现出面向对象的思想和java语言的设计目的。(关于这一点可以翻看我之前的文章: java基本语法)不过整体的了解语言的指导思想的过程还是要在第二阶段完成。

其实在这一阶段是相对比较无聊的。因为第一阶段所了解到的东西,很少部分能直接与实际工作对应起来。所以如果你的时间比较紧迫,这一阶段可以相应的缩短时间,但是不代表可以滤过或者削减模块。基本功如果不扎实,之后肯定要补回来的。


第二阶段:语言特性

第二阶段主要描述了所学习编程语言的特性,包括指导思想、实现相关、语言定位和核心API
这一阶段的主要目的是了解语言的设计思想和目的。

了解指导思想的实现相关是为了更好的了解指导思想,而了解指导思想则是为了熟悉这种语言应该用何种方式去编程,以便最大程度的发挥语言的优势。

了解语言定位,是为了准确掌握此种编程语言应该用在那个领域,比如java用作互联网开发,c用作底层,python用于解决数据问题和便捷开发。在了解了指导思想和语言定位之后,就能根据实际应用需要的场景来选择对应的编程语言进行开发。这样就能最大程度利用语言的优势将开发成本降低。

最后一步学习语言的核心API,了解此种编程语言在数据处理上是如何操作的。这一部分也是最能体现语言指导思想的一部分。注意此部分在模型中只包括基本运算和字符串处理;因为只有这两部分是每种编程语言必须包含的核心API。

这一阶段做完,就可以简单的做一些像计算器、猜字符小游戏什么的。可以发挥自己的想象力。我在学习java的时候,在这个阶段做了一个霸屏的“病毒”。其实就是无限循环在控制台打印就行了。 这样做虽然和实际工作确实也衔接不上,但是可以极大的提高你的学习兴趣,不至于出现没有使用模型之前的那种迷茫和恐慌感。


第三阶段:实战拓展

到了这一阶段就可以利用编程语言搞一些事情了。注意一定要在实战中学习此阶段的内容。因为此阶段的内容大部分都是人为封装出来的,有些是官方的有些则不是,所以严谨性照第二阶段的核心API会差一些。此阶段的目的是将学习的语言投入实际应用。

学习编程语言对文件系统的操作以了解语言对系统上的数据是如何控制的;(注意这里不包含数据库)
学习对网络通讯或者叫系统间通信的操作以了解如何让两个系统之间通信,小到线程大到服务器间的网络通信;
学习当编程语言需要处理并发的请求时是如何操作的,同时也有助于理解操作系统的工作方式。
这些都是编程语言中比较实用的API,所以将这三个部分归为常用API

其实到了这里基本上一个编程语言的基础就全部学习完成了。利用这些基础就可以去写一些服务器、软件、工具包甚至是一些框架了。不过后两个难度还是比较高的,同时我们工作中都是直接使用框架和工具包,那么了解一些市面上主要的流行框架和工具,就可以让你快速的将学习成果投入到工作中了。

接下来就是框架的学习。分为三个小阶段,第一个是表现框架的学习,就是如何将数据表现在用户面前,对于互联网语言来说这一部分基本上就是前端的框架。不过这里要根据具体需求来确定主要学习哪些框架。后面例子中会具体说明。
第二个是数据逻辑处理,比如java的spring 和 springMVC框架,就是在内存中或者说在服务器中对数据做逻辑处理的框架。
第三个就是跟底层数据的交互了,上面的常用API已经掌握了跟文件做数据交互和跟其他系统做数据交互,所以这一步主要的工作就是了解对数据库的交互。一是因为数据库种类较多,框架也多,而且在实际应用中数据库还是占主流的。二是跟数据库的交互一般都用框架来实现,所以才将数据库放在框架部分了解。
这三个模块完成之后基本上就可以试着开发一个完整的项目了。

而对于最后一部分语言的特殊问题则是实际开发中需要解决的问题,比如java互联网开发需要解决的高并发问题。此部分是在学习了一门编程语言之后用来强化语言应用的。即使同一种语言在不同领域,问题也会不同,所以此阶段需要学习者根据需求自行确定。


分割线,到这里模型基本就介绍完了。



写在最后

此学习模型只能用于确定要学习某种编程语言的前提之下。如果在实际工作中遇到了某些特殊的问题,需要寻找一种新的编程语言来解决。可以将模型中的第二阶段的第三部分直接拿出来用。

前面不断强调的话在这里最后强调一次。千万不要被这个模型束缚住思想。
如果觉得某个阶段应该提前(延后)使用,那就把这个阶段提前(延后)。
如果觉得模型不适合自己,那就修改成一个适合自己的模型。
把这个模型当做java中的接口来看待,仅仅是一个参考,不是具体实现。而且接口也是可以修改的。
不可能会有一个所有人都能用的统一的模型,根据自己的需求灵活运用模型才是王道。

最后祝愿使用此模型的人早日走上成神之路,然后回来拉我一把。

更多推荐

如何学习一门编程语言