又到了一年一度立flag的时候,每次这个这个,虾神都:
但是结果往往都是:
去年立下的50+文章的flag,到现在为止完成了26篇……
刚刚过了一半,感觉就像
好吧, 虽然是这样,flag也还是要立的。
首先是今年第一个flag:
乃至于:
四……代……?
这个还要从很久很久以前说起——最早,在虾神接触计算机的时候,还在用在DOS6.22操作系统,学习编程的时候,看过一本经典的计算机教程,叫做《C程序设计》,著名计算机教育学家谭浩强老师编著的:
虽然今天看起来,里面浓浓的中国教材特色的编排风格+各种错误的示例……大部分代码甚至编译不过去,但是客观上谭教授这套书,为推广中国的计算机编程起到了里程碑的作用。
在这本书里面,第一次看见了关于计算机语言分代的观点,里面是这样说的:
第一代计算机语言:机器语言,用二进制进行编写的,机器直接执行,人类无法阅读
第二代计算机语言:汇编语言,用编发符号代替二进制,编译之后机器执行。
第三代计算机语言:高级语言,面向过程和对象的语言,也就是我们至今在使用的语言,如C\C++、JAVA、Python这些。
第四代计算机语言,仅有一个简单介绍:SQL,也叫做自然语言什么的,完全没有介绍,感觉就很高端的样子,包括后面学了数据库以后,也还是觉得这个四代就是个水货,干啥啥不成,吃啥啥不剩……
看到这里,大家可能和虾神一样会有些奇怪,说SQL就说SQL吧,说啥四代语言呢?欺负俺们不是计算机专业的么,告诉你,俺们虽然不是计算机专业的,但是写的代码比你多多了……
再说了,SQL有啥好学的,会用就行,俺们又不是专业去做数据库管理员,还有,俺们做了十年项目了,不会写SQL,还有JDBC、游标、ORM等等技术呢,学个SQL也讲得如此高大上……
话说回来,前面一二三代,都有非常深刻的编程思想在里面,先不说任何一种语言,都能独立完成一个项目工程,就说每种语言里面提出的编程思想,都是计算机夜空中璀璨的明星,那么SQL这种“简单”且无法“独立”的语言,怎么混进这个队伍里面去的?难道有啥内幕交易?
不要急,SQL是四代语言,并不代表四代语言里面只有SQL。今天我们就一起来聊聊第四代的前世今生。
这个疑惑一直跟随了我很多年……直到我开始转职为全职Spark码农之后,突然有一天,在开始研究Spark SQL的时候,才焕然大悟:
第四代语言,代表的是一种思想,正如上面那张片子给出的特性,编写第四代语言的时候,给出了大量的高级封装,这些封装,甚至封装了计算机的传统编程思想,让使用者不再考虑这些问题。
下面通过一个简单的例子给大家看看。
比如,我现在有这样一批数据:
2013年前半年全球地震数据:
那么我先知道,这半年震级最大的地震是什么时候发生在什么地方,那么这个代码怎么写呢?用Python,最简单写法应该是:
结果可视化之后,如下:
首先读取数据,然后对比震级,最后将震级最大的数据取出来。
这种面向过程的编程方法,就是三代语言最大的特点:由分支语言(if)和循环语言(for)为主的程序构建方式。
这种思想,实际上是以计算机的运行机制为核心的,虽然较一代二代语言,已经高级了很多,但是依然还是有明显过程逻辑思维,也就是你需要在实现的过程中,模拟计算机内部运行的原理。
现在来看看四代语言的编写方法,使用Python的Pandas包:
你仅需要告诉计算机你需要什么就行,比如,我现在要等级最大的一类数据,没有if,没有for,直接得到答案。
同样,如果使用SQL,一样可以直接得到结果:
这就是四代语言最核心的思想表现。
if和for这种结构,构成了三代语言最具有代表性的结构,那么以DataFrame和SQL这种结构化处理语法为代表的,就是四代语言的主要思路了。
看到这里,有的同学又会有疑问,并非所有的数据结构都是结构化的表格数据啊,比如在数据结构里面,就有链(链表、链队、链栈)、树(有序、无序、二叉)、图(有向、无向)等结构,这些结构如何使用四代语言来处理呢?
虽然所有的结构,如果不考虑冗余,不考虑访问效率,那么都可以构造为表格,但是确实还是挺复杂,四代语言里面如何解决这个问题,答案就是对数据结构的封装。
比如下面这个无向图:
或者是下面这棵二叉树:
在数据结构上,都可以视为“图”。在三代语言里面,都采用父子节点来进行关联。在四代语言里面,如何来处理树结构呢?
在Spark里面,新一代框架里面,包括了Spark SQL和Spark Graphx两大块,其中Spark SQL专门用于处理DataFrame,而Spark Graphx就是专门用于进行图计算的,这个问题,以后有机会再说。
所以,今年立下今年第一个Flag,好好学习DataFrame结构,如果有机会,将把以前的代码和项目用第四代语言结构进行重构,一些有代表意义的学习内容,会以笔记的方式发布。
待续未完。
联系客服