本文主要讨论两个问题:
- 为什么新的语言在不断地产生?
- 怎样评价产生的新的语言的好坏?
History Of Ideas
曾经用下面几个标准来评价语言的好坏:
- 抽象化
- 类型化
- 可复用
But
最后没有准确的评判语言好坏的标准,Java带着一身的疾病,仍然挡不住其开发人员不断投身其中。所以有这样一句话:有人乐意使用的语言就是一门优秀的语言。
不过我们还是来看一下所谓抽象化、类型化、可复用到底是什么意思?
抽象化:分离具体的细节。
Andrew Koenig——抽象就是选择性地忽略。
抽象化:对于构建复杂的系统,抽象化是必要的。
重点是信息的隐藏——只暴露重要部分。
不同角度的抽象:
- anguages/compilers——Higher-level code, few machine dependencies
- functions and subroutines——Abstract interface to behavior
- modules——Export interfaces; hide implementation
- classes or abstract data types——Bundle data with its operations
类型化的好处:
- 使开发人员能够应用抽象化的思想编程。
- 使编译器能够发现更多的错误。
- 保证程序的安全。
类型化的应用:
函数式编程
可重用:利用软件设计中的模式。
- 目标:产生大量组件
常用的方式:泛型、继承。
编译器的趋势
语言方面:
会有更多的专用领域的语言
流行的语言会继续流行
编译器方面:
需要更复杂的编译器。
会因为新语言的产生和新架构的产生使编译器迥然不同。
我门设计一个编译器要做到
- 能够在短时间内实现编译器。
- 要实现:抽象化、静态类型、可复用、内存管理 ……
总结
- 学习编译原理的重要性
我在大学的专业是软件工程,在高考报考志愿的时候六个平行志愿中都首先选择了软件工程专业。来到大学首先接触的是C语言,第一节C语言下课之后带着疑惑问老师:“老师,我们电脑和手机上的程序是用的C语言这样做出来的吗?”,当然我是看到了C语言输出的是Hello World!故意去问的,可惜得到的老师答复是:“先把C语言学好,什么都不会,还想那么多”。
从此之后,心里留下了两颗种子:1、C语言怎样输出的Hello World!2、怎样做我们平常使用的程序?
后来随着知识的丰富,来到了JS,Java的世界,终于知道了怎样做我们的日常程序。但是仍然不知道电脑输入程序为什么就能有逻辑地打印出一个个字符串。而且又增添了很多的疑问。比如:
- JS是一门语言,Java是一门语言,我这一天天学习语言,制作程序,从头到尾来看不就是在学语法,应用功能吗?而且应用功能的时候还要上网搜索才能知道怎样写,标标准准的CTRLC,CTRLV啊,那些年薪很高的人都是这样?不可能,至少造Java,JS的那个团队肯定不是这样;
- JQuery、SpringBoot是框架,分别用JS,Java编写的,将来还会有更好用的框架,我现在在使用他们的过程中,用到一点查一点,离不开网络,将来会出现更好的框架,就这离不开网络的水平,旧的都学不会,又来新的了,怎么受得了?不仅框架会变,语言也会被替代,就我这只会语法的水平,只会写crud的水平,将来指定就是个码农,等着三十后被淘汰吧。
- 人家说Java是一门面向对象的语言,JS是一门基于对象的语言。Java的三大特征是封装、继承、多态。我都能把书上的细节背下来了,怎么就指导不了编程呢?既然指导不了怎么那么多人说封装继承多态很重要呢?我怎么就品不出来面向对象和基于对象的区别呢?你看,都是Object.method调用方法,都是Object.attribute查询属性,怎么就一个是基于,一个是面向呢?
- 关于问题一:是学习方法的错误。
- 关于问题二:如果出来一门语言,抓住语法去看,抓住功能乱写,最后的结果终将竹篮打水一场空。在一门新的语言出来的时候应该抓住其设计的数据结构(内存中实际操作的单位)去学习,而不是学习语法写功能。Python简单,简单的语法。但是想要学习其内存中的数据结构,又要学习编译原理,因为编译器经过词法分析、语法分析、AST、generate Code阶段,我们的代码已经不是我们的代码。想要一探我们到底写了什么?为什么会出来这样的结果,就要知道编译器做了什么。如果出来一个框架,只感叹功能方便实用,这样永远不会成长,要学会看到背后的OOA、OOD、OOP、设计模式、设计原则,但是如果Java都看不懂,就不要去看SpringBoot源码,如果JS运行时内存图都不清楚,就不要看Vue源码,否则理解的程度仍然片面。
- 关于问题三:需要站在更高的思想上才能理解很多为什么。多谢在工作中,老师将我多年积攒的疑惑一一清除,带我走进正确的学习路线,在我步入知识的海洋。