新年第一flag:第四代编程语言篇

又到了一年一度立flag的时候,每次这个这个,虾神都:

640?wx_fmt=jpeg

但是结果往往都是:

640?wx_fmt=jpeg

去年立下的50+文章的flag,到现在为止完成了26篇……

刚刚过了一半,感觉就像

640?wx_fmt=gif

好吧, 虽然是这样,flag也还是要立的。

首先是今年第一个flag:

640?wx_fmt=png
了解、学会、熟练使用第四代语言和编程实现。

乃至于:

最终将其融入血液、刻入骨髓里面。

四……代……?

640?wx_fmt=jpeg

这个还要从很久很久以前说起——最早,在虾神接触计算机的时候,还在用在DOS6.22操作系统,学习编程的时候,看过一本经典的计算机教程,叫做《C程序设计》,著名计算机教育学家谭浩强老师编著的:

640?wx_fmt=jpeg

虽然今天看起来,里面浓浓的中国教材特色的编排风格+各种错误的示例……大部分代码甚至编译不过去,但是客观上谭教授这套书,为推广中国的计算机编程起到了里程碑的作用。

在这本书里面,第一次看见了关于计算机语言分代的观点,里面是这样说的:

语言分代
  • 第一代计算机语言:机器语言,用二进制进行编写的,机器直接执行,人类无法阅读

  • 第二代计算机语言:汇编语言,用编发符号代替二进制,编译之后机器执行。

  • 第三代计算机语言:高级语言,面向过程和对象的语言,也就是我们至今在使用的语言,如C\C++、JAVA、Python这些。

  • 第四代计算机语言,仅有一个简单介绍:SQL,也叫做自然语言什么的,完全没有介绍,感觉就很高端的样子,包括后面学了数据库以后,也还是觉得这个四代就是个水货,干啥啥不成,吃啥啥不剩……

看到这里,大家可能和虾神一样会有些奇怪,说SQL就说SQL吧,说啥四代语言呢?欺负俺们不是计算机专业的么,告诉你,俺们虽然不是计算机专业的,但是写的代码比你多多了……

再说了,SQL有啥好学的,会用就行,俺们又不是专业去做数据库管理员,还有,俺们做了十年项目了,不会写SQL,还有JDBC游标ORM等等技术呢,学个SQL也讲得如此高大上……

话说回来,前面一二三代,都有非常深刻的编程思想在里面,先不说任何一种语言,都能独立完成一个项目工程,就说每种语言里面提出的编程思想,都是计算机夜空中璀璨的明星,那么SQL这种“简单”且无法“独立”的语言,怎么混进这个队伍里面去的?难道有啥内幕交易?

640?wx_fmt=jpeg

不要急,SQL是四代语言,并不代表四代语言里面只有SQL。今天我们就一起来聊聊第四代的前世今生。

这个疑惑一直跟随了我很多年……直到我开始转职为全职Spark码农之后,突然有一天,在开始研究Spark SQL的时候,才焕然大悟:

640?wx_fmt=jpeg

第四代语言,代表的是一种思想,正如上面那张片子给出的特性,编写第四代语言的时候,给出了大量的高级封装,这些封装,甚至封装了计算机的传统编程思想,让使用者不再考虑这些问题。

下面通过一个简单的例子给大家看看。

比如,我现在有这样一批数据:

2013年前半年全球地震数据:

640?wx_fmt=jpeg

那么我先知道,这半年震级最大的地震是什么时候发生在什么地方,那么这个代码怎么写呢?用Python,最简单写法应该是:

640?wx_fmt=jpeg

结果可视化之后,如下:

640?wx_fmt=jpeg

首先读取数据,然后对比震级,最后将震级最大的数据取出来。

这种面向过程的编程方法,就是三代语言最大的特点:由分支语言(if)和循环语言(for)为主的程序构建方式。

这种思想,实际上是以计算机的运行机制为核心的,虽然较一代二代语言,已经高级了很多,但是依然还是有明显过程逻辑思维,也就是你需要在实现的过程中,模拟计算机内部运行的原理。

现在来看看四代语言的编写方法,使用Python的Pandas包:

640?wx_fmt=jpeg

仅需要告诉计算机你需要什么就行,比如,我现在要等级最大的一类数据,没有if,没有for,直接得到答案。

同样,如果使用SQL,一样可以直接得到结果:

640?wx_fmt=jpeg

这就是四代语言最核心的思想表现。

if和for这种结构,构成了三代语言最具有代表性的结构,那么以DataFrame和SQL这种结构化处理语法为代表的,就是四代语言的主要思路了。

看到这里,有的同学又会有疑问,并非所有的数据结构都是结构化的表格数据啊,比如在数据结构里面,就有链(链表、链队、链栈)、树(有序、无序、二叉)、图(有向、无向)等结构,这些结构如何使用四代语言来处理呢?

虽然所有的结构,如果不考虑冗余,不考虑访问效率,那么都可以构造为表格,但是确实还是挺复杂,四代语言里面如何解决这个问题,答案就是对数据结构的封装。

比如下面这个无向图:

640?wx_fmt=png

或者是下面这棵二叉树:

640?wx_fmt=png

在数据结构上,都可以视为“图”。在三代语言里面,都采用父子节点来进行关联。在四代语言里面,如何来处理树结构呢?

在Spark里面,新一代框架里面,包括了Spark SQL和Spark Graphx两大块,其中Spark SQL专门用于处理DataFrame,而Spark Graphx就是专门用于进行图计算的,这个问题,以后有机会再说。

640?wx_fmt=jpeg

所以,今年立下今年第一个Flag,好好学习DataFrame结构,如果有机会,将把以前的代码和项目用第四代语言结构进行重构,一些有代表意义的学习内容,会以笔记的方式发布。

待续未完。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虾神说D

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值