浅谈编程语言的本质

file

前言

最近博客和公众号文章差很少有二个多月没有更新了,相比以前每个月一篇文章的更新频率,最近确实懒散了许多,一来年末收尾之际手上的工做繁重抽不出时间,二来本身最近的空闲时间的学习计划也排的紧密,长此以往就把写博客是事情落下了html

可是也得益于本身以前坚持写博客的习惯,累积了一些读者,咱们知道人都是有惰性的,但每次想偷懒不写博客的时候,看到订阅栏里面读者就以为心生愧疚,我想这也是开放分享的一个好处,就是经过的外部力量去督促你去坚持下去,通过实践,这确实是一种很是好的方式程序员

为何会想写这篇文章?主要有以下几个缘由算法

  1. 我最近利用空闲时间学习了一门新的编程语言,学习过程当中有不少不一样的体验和你们分享
  2. 我发现不少文章只有当下才能写出来,因此我想把握好时机(例如我曾经写过红黑树的文章,可是因为近期工做缘由疏忽了算法的练习,因此我当下的状态确定是再也写不出红黑树的代码了,甚至连反转双向链表都写不出来)

今天想写下关于编程语言的本质,这个命题很大,因此只是从浅显的层次上谈一谈,从应用层面聊聊不一样语言的差别,由于我不曾有时间深刻学习过《编译原理》(也是你们俗称的龙书),因此并未深刻到编译原理等层次上,还请见谅数据库

正文

先抛出个人我的观点:编程语言的本质就是规则编程

经历是我上两周花了周末两天的时间,学习了一门新的编程语言,而且在第三天就写了一个相似购物商城的简单程序,学完后我就在反复思考,为何能够在熟悉一门编程语言后,再去学习其余的编程语言,能够仅仅花费几天时间就能够掌握,而我在学习第一门编程语言的时候却足足花费了半年时间才以为本身仅仅入门?架构

带着这个疑问我开始思考问题,个人学习路径是这样,我入门编程语言学的是 Java,后面自学了 JavaScript,Groovy,Ruby, 自我计划后续还继续打算深刻学习 C 和 GO 语言,想学习 C 和 GO 主要是有如下几个目的:并发

  1. 主要是但愿对操做系统底层能有更深刻的理解(操做系统,数据库等基础软件都是 C 写的)
  2. 目前的计算机世界是创建的 C 的基础之上的,不论是什么牛逼的软件,深刻到底层都是 C 的源码
  3. 学习 C 语言是为了更好的理解 GO 语言(GO 的创始人也就是 C 的创始人,没错就是 Ken Thompson
  4. 学习 GO 语言主要是但愿对 PAAS 层有更深刻的理解(Docker 和 Kunbernate 就是 GO 语言的表明做)

file

(图片来自 Medium:Why should you learn Go?编程语言

关于语言的应用场景,这方面咱们就不继续展开讨论了,回到文章的主题,浅谈编程语言的本质,通过思考后我认为,任何一门编程语言其实是包含了两种内容工具

  1. 知识(编程语言的共性,可迁移)
  2. 规则(编程语言的特性,不可迁移)

知识说是共性,是由于它面向全部编程语言通用,例如知识包含对如下内容的理解:学习

  1. 数据类型
  2. 流程控制
  3. 逻辑控制
  4. 异常处理
  5. 集合容器
  6. 并发模型

因此以上内容解释了,为何入门学习编程语言这么慢?是由于你在刚刚接触第一门编程语言的时候,其实你面对的是两个知识体系的内容,既共性内容(知识)+ 特性内容(规则),例如你刚学习 Java 你除了须要去学习什么是布尔值 Boolean,整型 Integer,浮点 Float,字符串 String,这些通用的“知识”外,你还须要去学习它的规则,常见的 Java 语言规则就包含如下:

  1. 继承,接口的使用规则
  2. 多态,面向对象的使用规则
  3. 类和内部类的使用规则
  4. 等等……

若是明白了编程语言的本质后,你会发现共性的知识只要学习一遍就能够了,当你理解知识再去学习其余语言的时候,你会发现你学习一门新的语言并非从零开始,你熟悉的共性知识都出如今你要学习的新语言里面,万变不离其宗,由于任何编程语言都没法跳过这些基础知识,正是这是知识加速你对新语言的学习理解,因此你只须要学习新语言的规则就能够了,了解下它的逻辑控制,异常怎么玩,有什么新特性,适用于什么场景,这都为你节省了大量的时间和精力

例如 Ruby 我只须要大概了解它的 Meta Programing 怎么玩,逻辑和流程控制符的规则,Java 我只须要大概知道它的异常体系,接口,继承和封装怎么玩,泛型和相应的工具类怎么用就能够上手了

总结

今天写这篇文章本身在学习新语言中的体会,也恰好解释了一个问题,就是为何不少程序员能够同时掌握多门语言?他们是怎么作到的?他们为何会那么多的精力?

其实答案就是,首先能区分和抽离 不一样编程语言的基础共性(知识) + 不一样编程语言的特性(规则),先把编程语言的共性练习的足够扎实,再去学习不一样语言的特性规则,其实新语言学起来就容易得多,而后就是随着使用实践增长熟练程度,最后对总体架构的掌握,就能够作到熟练的切换和玩多种不一样编程语言的程序

这虽然是看似很 coooool 的事情,可是背后都是付出的都是持续关注和投入时间,精力的过程,因此不要以为很简单,也不要以为很困难,不少事情若是喜欢,作就是了。

相关文章
相关标签/搜索