写在前面

本来应该继续写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中的接口来看待,仅仅是一个参考,不是具体实现。而且接口也是可以修改的。
不可能会有一个所有人都能用的统一的模型,根据自己的需求灵活运用模型才是王道。

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

如何学习一门编程语言相关推荐

  1. 语言输出奇树有多少总方法_如何学习一门编程语言?这些方法告诉你,不要再说你不会学习...

    前言 很多人喜欢争论什么什么编程语言好,我认为这个话题如果不限定应用范围,就毫无意义. 每种编程语言必然有其优点和缺点,这也决定了它有适合的应用场景和不适合的应用场景.现代软件行业,想一门编程语言包打 ...

  2. 在学习一门编程语言时要特别注意以下三个方面

    2019独角兽企业重金招聘Python工程师标准>>> 在学习一门编程语言时要特别注意以下三个方面: 这门语言提供了哪些Primitive,比如基本类型,比如基本运算符.表达式和语句 ...

  3. 如何科学的学习一门编程语言?

    一提到编程语言,很多人的直觉反应是,如果要当程序员,就学,否则,不想当程序员,学它干什么? 你为什么学习编程呢? 是打算要当程序员? 是因为自己工作需要? 还是因为自己就是喜欢? 或许这几个原因都有. ...

  4. 学python还是go会php_现在想再学习一门编程语言,应该选择go还是python?

    再学一门编程语言,选 Go 还是 Python ?这个问题需要从几个角度考虑! 一.现在掌握的语言是哪种类型 首先肯定是服务端开发,要不然应该不会说选 Go 还是 Python. 1.如果现在掌握的语 ...

  5. 如何系统学习一门编程语言? | 黑马程序员

    一.从认识编程语言开始: 语言有很多种,包括汉语.英语.法语.韩语等,尽管输出的形式不同,但可以达到同样的目的.同样,我们也可以通过「语言」来控制计算机,让计算机为我们做事情,这样的语言就叫做编程语言 ...

  6. 如何学习一门编程语言,从入门到不放弃!

    在学习前,如果能把以下几个方面的问题弄清楚,就能够比较顺利和高效的学习,拿到你所想要的目标.而不是从入门到放弃. 一.方向和目标 首先要确定为什么要学习计算机编程语言,为考试?为工作?为兴趣? 如果是 ...

  7. 怎样学习一门编程语言

    选择一门语言 确定你感兴趣的领域 你可以开始学习任何编程语言(尽管其中一些被描述地比其他的更加"易学"),你得去问自己自己想用通过学习这门语言完成什么样的工作.这将会帮助你确定你应 ...

  8. 池建强:如何学习一门编程语言

    http://developer.51cto.com/art/201307/404970_all.htm 关于学习编程这个主题,有各种读者多次要求写一写,而且要求文艺的写.抒情的写.充满社会主义特色的 ...

  9. 池建强:如何学习一门编程语言(1)

    关于学习编程这个主题,有各种读者多次要求写一写,而且要求文艺的写.抒情的写.充满社会主义特色的写,要做到:问题看起来巨复杂,读起来巨简单,学起来巨容易!看把你们惯成什么样子了,Mac 君你继续去面壁吧 ...

最新文章

  1. 系统高可用设计与实践
  2. C# 生成 MongoDB 中的 ObjectId
  3. win10 mysql5.7.11_Windows10安装与配置MySQL-5.7.11
  4. 大数据之-Hadoop_1.x和2.x区别---大数据之hadoop工作笔记0012
  5. android真实项目教程(五)——有时三点两点雨_by_CJJ
  6. ibatis返回数据集映射举例
  7. 设计模式 - (3)抽象工厂模式(创建型)
  8. Button switch..case 语句监听按钮点击的方法。。下面这方法好。
  9. Chrome驱动对应chrome浏览器版本
  10. RS232串口转USB驱动无法正确识别
  11. Web SQL本地数据库(SQLLite)
  12. word未响应解决方案汇总
  13. 机器人设计之软件设计
  14. 追踪系统分模块解析(Understanding and Diagnosing Visual Tracking Systems)
  15. 为什么那么都程序员不敢学Python?
  16. 车牌识别OCRSDK
  17. 富士康将和台积电联手 竞购东芝半导体业务
  18. 【Linux】大数据开发中常用的shell命令
  19. 三分钟学会数据库, UPDATE 更新
  20. 微信支付交易查询案例

热门文章

  1. 手机录音如何转换成文字?学会这个简单方法,让你事半功倍!
  2. 华为服务器gpu芯片,GPU服务器推荐
  3. 学生成绩计算的c语言,学生成绩标准管理系统C语言.doc
  4. 【22物联网国赛样题】zigbee点对点呼吸灯,按键长按双击效果,物联网竞赛今年历年国赛样题真题代码
  5. 谷歌11亿美元买台企手机团队 对硬件有长远计划
  6. 《自控》学习笔记一——自动控制的一般概念(一)
  7. YTU软件工程白盒测试
  8. Java应用程序安全框架
  9. 无法建立与远程计算机连接,解决“不能建立到远程计算机的连接,因此用于此...”的方法_常见问题解析...
  10. Gaze vector介绍