杂想笔记--编程语言的趋势

编程感悟

  • 编程语言的发展趋势
    • 编程语言的语言会越来越向着人的方向看,而不是机器方向看
      • 去除分号开始
      • 去除和逻辑无关的语法
      • 自动垃圾回收机制
    • DSL(Domain Specific Language ):
      • 理解what和how
    • 整体而言,越来越多的DSL的出现,也是编程语言发展的一大趋势

编程语言的发展趋势

随着计算机行业的发展和技术积累沉淀,越来越多的算法被封装和直接使用;今天的我们不是站在巨人的肩膀上,而是站在几百万个巨人的肩膀上;能够实现多复杂的功能,决定性因素不是多聪明而是会借助使用更多的调用算法;

编程语言的语言会越来越向着人的方向看,而不是机器方向看

去除分号开始

我们都知道在C语言中,分号是一个语句结束的标志,是一个必须的语法规则,是给机器编译看的,让他明白这是结束句;但是现在的Python:通过强制规定缩进,既保证了语法的可读性又去除掉了与业务逻辑无关的分号;

去除和逻辑无关的语法

编程语言的另一个发展趋势,就是摒弃和业务逻辑无关的语法规则 最典型:现在的编程语言都不再有:反人类的指针了;
在学习C时,我们会经常看到: int*, int**, int&这些指针和引用语法规则;

int a;
scanf("%d", &a);
// 我们先不提 %d 是怎么回事,a 前面为什么一定要有个&????

// 但是,如果a是一个char[]的话…
char s[80];
scanf("%s", s);
// 咦?怎么s前又不需要&了?
但是对于嵌入式,通信,芯片等设计结束底层的人,了解指针,什么时候使用,什么时候使用& 是必须的*
这段代码中,这个 & (C/C++中是地址符),就是和业务逻辑无关的语法规则
对于高级语言Java和C++
Java:
Scanner myScanner = new Scanner(System.in);
int a = myScanner.nextInt();
String s = myScanner.nextLine();
C++:
int a;
cin >> a;

string s;
cin >> s;

显然来说:这些高级语言在努力摒弃掉诸如 %d, %s, &, 等等语法规则。因为,这些语法规则和具体业务逻辑无关。这对于编程者来说,将会把更多的精力,集中在逻辑表达式上,而非语法细节上

自动垃圾回收机制

在现在编程语言中,不再手动处理垃圾回收逻辑,但是垃圾内存回收是和我们要表达的逻辑无关;用C尝试过手动内存垃圾回收的项目,会发现:你很有可能会花费 50% 的时间,来保证整个系统的垃圾回收是没有问题的。但是,使用“现代”编程语言,根本不再专注垃圾内存回收,这些时间都可以用来精进你所要实际表达的代码逻辑

DSL(Domain Specific Language ):

上面举的例子,不论是分号、大括号、三目运算符、指针、地址符、垃圾回收,等等等等,这些功能在编程语言中的演化,本质其实都是:编程语言在逐渐剔除和业务逻辑无关的语法,从而让开发者更多地关注在业务逻辑自身上,而不是机器怎么执行这些逻辑上。简单的总结,可以理解成:现代语言的发展趋势是:编程的主要任务越来越多的是告诉机器要做什么(what),而不是怎么做(how)

理解what和how

就是使用到DSL:特定领域语言;DSL语言以牺牲广度为代价来换取某一领域相关极度简洁性的原因;DSL 的意义——可以更快地,更简洁地,去让哪怕是“计算机科学的外行”,用编程的方式,去做特定领域的事情,而不用去纠结过多“计算机科学”相关的内容

  1. 例如SQL;
    实现挑选得分为100的学生名字
    SELECT name FROM Student WHERE score = 100
    但是使用其他语言:
    names = []
    for student in students:
    if student.score == 100:
    names.append(student.name)

return names
以上这两段代码,就是以什么为中心,用DSL语言只要告诉你的目标,使用普适性编程语言,需要告诉哦逻如何实现,什么叫告诉机器 what(目标),而不是 how(逻辑)。对于 SQL 语言来说,我们的代码近乎就是用自然语言说;

  1. HTML+CSS+Js莫衷成都也是属于DSL语言
    学习过 HTML 和 CSS 的同学一定了解,这两种语言都是上手极快的(当然,上手和精通是两回事儿)。我们可以很快地就使用这两种语言来做出页面,而且看上去还不错。
    越来越越发现对于领域使用特定语言DSL,会更容易上手和获得效果

  2. Python和R比较
    在这个年代,做科研工作,近乎一定要编程,而大多数科研相关的编程工作仅仅局限是和大量数据相关的。因为各个领域的前沿研究,都需要在领域相关的大量数据中,寻找新的突破和发现。
    Python 和 R 是现今最主流的两种用于数据处理的语言;大多数非计算机专业的研究工作者,更常用R语言,而非 Python 语言。因为,相较 Python 语言,R语言更像一个 DSL。当然,R语言本身也很强大,但是远没有Python 强大。R语言本身近乎就是为数据科学设计的语言,大多数数据科学所需要的功能,R语言或者本身从语法层面支持,或者在标准库中内置好了。
    所以符合DSL语言的认知:对于非计算机专业的人士而言,R语言是更加友好,上手更快的。使用R语言,可以尽量少地去接触和“计算机科学”相关的知识,就能上手复杂的数据处理任务。

相较于 SQL,正则表达式,CSS,HTML,R等等这些DSL,计算机专业的同学通常需要努力学习的,诸如 C++, Java, Python等语言,被称为 GPPL,是 General Purpose Programming Language 的简称。也就是所谓的“通用目标语言”
GPPL:通用目标语言没有把功能限制在特定领域中,相较 DSL 更灵活,可以完成更多的事情,甚至可以说是任意逻辑,但代价就是:语言本身操作起来更灵活,也相对复杂一点。

整体而言,越来越多的DSL的出现,也是编程语言发展的一大趋势

当然,对于 GPPL,也有很多发展趋势。比如动态性,比如对函数式编程的支持,比如对并发的支持,等等等等

最最最后:对于致力于计算机专业的同学来说,语言只是一种工具而已。学习语言的目的,不是对细微的语言特性和语法糖如数家珍,关键还是要应用语言,解决实际的场景问题。

你可能感兴趣的:(人工智能AI,编程语言)