大数据的发展,伴随的将是软件工程师的渐退,算法工程师的崛起

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介:

大数据的发展,伴随的将是软件工程师的渐退,算法工程师的崛起

大数据在人类历史长河的各个时期一直存在着,只是要等到技术发展到一定阶段,它才开始崭露头角。而它的未来又在哪里?来自 Intercom 的工程师 Cathal Horan 表达了他对大数据的看法,他认为,未来属于算法,而不是代码。

“大数据时代”的称号并不能为当今世界所独享,数据充斥着人类文明历史长河的各个时期。纵观这些历史时期,通过从离散到抽象的转换,我们就会明白为什么算法比代码重要。

说到大数据……

如果我们把整个人类历史看成一天,那么我们只能从晚上 11 点 7 分开始说起。这是安静的一天。但是在随后的一丁点时间里,我们积攒了很多知识和故事,并打算将它们传达给其他人。你可以想象最开始人类通过对话的形式将知识代代相传,从父辈传给子辈,从老师传给学生。但是整个社会的知识量增长迅速,以至于最初的对话形式无法传达这么多的信息。

我们需要将这些信息编撰成册进行保存和传播。通过书写的方式将知识编撰成册代表着这些时期在技术上的重大转变。事实上,苏格拉底(柏拉图“斐德罗篇”里的角色)认为这种技术转变比不上最初的对话形式,担心它会降低我们开发智慧和知识的能力。所以很自然地,我不认为苏格拉底会喜欢电视。

问题的核心是,对话代表了一种离散的沟通手段。你知道你的交谈对象是谁,而且参与对话的人通过论证和反证的方式进行直接的互动。反过来,书本是一种抽象的沟通手段,作者和读者之间不存在直接的互动。作者并不知道谁读了他的书,也不知道有多少人、在什么时候、在哪里读了他的书。有时候,我们可能知道潜在的读者群体是谁,然后根据读者群体进行内容裁剪。不过大多数时候,书本都只是一种抽象的传播知识和学习新技能的手段。

等腰三角形的大数据

当我们从简单的计算形式转变为由定理、符号和算法组成的抽象形式(我们现在称其为数学),就开启了另一个大数据时代。第一批有记载的计算发生在公元前 2500 年的美索不达米亚。当时,美索不达米亚人需要计算出一谷仓的粮食能够养活多少人。

美索不达米亚人有具体的问题关注点,他们很清楚需要解决的问题是什么。他们的计算都是很离散的,因为每一次计算只能解决一个问题。这也就是为什么评论家们认为它们不是数学。直到公元前 500 年的古希腊,毕达哥拉斯学者们(可以把他们认为是早期的 Google 使用者,哈哈)开始针对三角形提出了一些奇怪的问题。比如,他们想知道等腰直角三角形的三个边能否都是整数(这听起来像不像一个 Google 风格的面试题?)。

如果你想通过离散的方式来解答这个问题,那么可以像美索不达米亚人那样做。不过,随着数字的增加,这种方式会显得很笨重。要证明这个假设,你需要进行多少次计算(其实这个假设是错误的,三个边不可能都是整数)?等腰三角形问题的不同之处在于,它不存在具体的关注点。我们不知道三角形的大小,也不知道它们的边长,而且它们的大小可能是无限的。如果我们在数字上应用推理,那么就进入了数学领域,大数据也就接踵而至。毕达哥拉斯式的思维方式体现了数学的抽象特征,在今天,我们使用符号、规则和推理来解答这类抽象的问题。

或许你想知道人类历史上的其他大数据时期,不过我想直接跳到 20 世纪,看看代码如何成为现代技术领域的重要组成部分(如果你有其他大数据时期的资料,可以联系我 @cathalhoran,我相信它们会很有趣)。

代码的崛起

1945 年,当 Grace Hopper 开始在 Harvard Mark I 计算机上工作时,编码(或者说编程,不过我们不打算在这里区分它们有什么不同)这项工作的重要性就开始凸显出来。在这之前,电脑(如果可以这么叫它的话)充其量只是个计算工具。以二战为例,当时的大炮需要借助矩阵进行辅助瞄准。矩阵是一些方程式的计算结果,这些方程式使用数百种不同的计算因子,比如距离、海拔、风速、温度、湿度,等等。电脑(computer)这个名字的由来也是很偶然的,人们用它描述在二战中操作计算机的女性,她们被称为“computer”。操作员们必须使用打孔卡和曲柄来处理方程式。一个打孔卡需要 170 个人月才能完成。

这个与我们之前讨论的事情有什么相似之处?美索不达米亚人使用黏土矩阵来进行计算,而到了 20 世纪,计算媒介变成了编码。虽然已经有了长足的进步,不过编码仍然是一种离散的操作,因为它执行的是具体的计算任务,只是效率上有所提升而已。编码解放了人工操作,让我们可以处理更多的数据。

算法与代码

算法:一系列用于描述一个问题解决方案的步骤,符合正确性和有限性的标准。是与具体实现相互独立的抽象计算步骤。代码:一系列计算机指令。它们是计算的具体实现,使用一种特定的编程语言,运行在一个特定的平台上。

人们可以借助这种直接向计算机发送编码指令的方式来实现更为复杂的指令序列,并以算法的形式呈现出来。算法比编码的出现要早得多。穆斯林数学家 Al-Khawarizm 早在公元 820 年就对解决线性方程和二次方程式的算法进行了描述。算法一词来源于这位数学家的拉丁文名字“Algoritmi”,而“algebra”则来源于“al-jabr”,Al-Khawarizm 用它来解决二次方程式问题。算法由一系列有限的计算或指令组成,并产生一个结果。正如我们所知道的那样,代码是向计算机发出指令的一种方式,很适合用于实现算法。它们只不过是一系列按照一定次序执行的操作。

与早期的大数据时期一样,我们这个时代的信息量也在增长。根据摩尔定律,我们在编码的设计和使用方面所作的改进换来了性能的提升,从而能够应付不断增长的数字化需求。你可以继续编写代码从数据库查询相关的资源列表。这些操作的离散特征仍然被保留了下来,因为人们仍然在通过编写代码告诉硬件应该做哪些事情。就算操作变得越来越复杂,它仍然只是人类的编码指令。不过,算法已经开始展露头角,正在创造一个抽象的新时代。

算法的崛起

所以说,算法和代码之间有很大的不同。代码可以用来实现算法,而且代码的实现方式会影响到性能。例如,如果你要从一个序列里找出最大或最小的元素,那么二叉堆的性能相比其他的数据结构要好很多。不过,你已经没有必要通过编写代码来实现一个算法,就像没有必要通过听音乐来写歌一样。

虽然每个人都知道摩尔定律的魔力,驱动数字经济发展的性能改进遵循的就是摩尔定律,但鲜有人知道,在很多领域,算法所产生的性能改进已经超过了硬件所带来的性能提升。实际上,2010 年的一份官方报告表明,算法已经为很多领域带来了显著的性能提升,比如语音识别、神经语言处理和物流。

“更加令人感到吃惊但同时又令人难以理解的是,在很多领域,算法为性能带来的提升已经远远超过了处理器速度提升所带来的性能改进。”——面向总统和国会的报告:设计数字的未来

抽象算法

我们现在拥有大量的数据,这意味着我们不能再用离散的思维来思考问题。大数据促使我们转变思维。它促使我们向后退一步,去寻找能够处理数据洪流的方法。按照传统的方式,你可能会根据一些指定的模式或参数编写代码来查询数据。例如,你可能想从数据库中查找在过去两周买过 2 件商品并且支付超过 30 欧元的顾客,因为你想联系到这些顾客,并向他们推荐一些优惠活动。你使用这个模式来查找匹配的数据。不过大数据却正好相反,你先有了数据,然后查找可以匹配这些数据的模式。

想想看,有这么多的数据,但是我们却找不到匹配的模式,所以我们要回退一步。我们通过集群、分类、机器学习和其他新的支撑技术来寻找模式,而能够帮助我们做到这点的是算法,不是代码。要找到隐藏在暗处的模式,跨出这一步是必需的。与光谱一样,有一些波长的光线我们是看不到的,而超过一定数据量之后的模式我们也是看不到的,它就是大数据。

我们不仅可以从中搜索到模式,它还能够生成做这些事情所需要的代码。Pedro Domingos 在“The Master Algorithm”一书中描述了如何使用“学习者算法”来创建新的算法,这些算法可以反过来为我们编写我们所需要的代码,“通过机器学习,计算机可以自己编程,我们就可以解放了”。为了实现这个目标,我们需要更好地理解这些算法的原理,以及如何让它们与我们的需求相匹配。否则,我们就无法向抽象转变。

“工业的发展让手工劳动自动化,信息的发展让脑力劳动自动化,而机器学习则让它自己自动化。如果没有机器学习,程序员就会成为发展瓶颈。而有了机器学习,发展的速度就会加快。”——Pedro Domingos,“The Master Algorithm”

思考算法

不过,不管如何从离散转变成抽象,我们仍然需要程序员,但这不是重点。并不是说代码已经变得不重要了,也不是说代码就不会再带来任何改进。重点在于,我们要开始思考算法,这不仅仅是数学家或学者的事情。我们周边充斥着各种算法,以致于我们不需要知道如何编写代码来使用它们,或者理解它们。现在,有一些人通过新的算法对不同的领域进行优化和改进,他们使用了遗传编程(genetic programming)和大数据技术。人们甚至创造了更好的优化技术,他们观察金属的冷却过程,并通过算法对其进行建模(被称为模拟退火算法,这就是我们应该从算法角度开始考虑问题的一个最好的例子)。

编码作为新数字经济的关键技能,就像学习如何阅读一样,已经模糊了我们对算法的理解。算法正逐渐成为我们生活的组成部分,从电影推荐到新闻过滤和寻找合作伙伴。我们要更好地理解它们,这样才能更好地理解和掌控我们的未来。


本文作者:薛命灯

来源:51CTO

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
2月前
|
机器学习/深度学习 算法 搜索推荐
从理论到实践,Python算法复杂度分析一站式教程,助你轻松驾驭大数据挑战!
【10月更文挑战第4天】在大数据时代,算法效率至关重要。本文从理论入手,介绍时间复杂度和空间复杂度两个核心概念,并通过冒泡排序和快速排序的Python实现详细分析其复杂度。冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1);快速排序平均时间复杂度为O(n log n),空间复杂度为O(log n)。文章还介绍了算法选择、分而治之及空间换时间等优化策略,帮助你在大数据挑战中游刃有余。
61 4
|
2月前
|
存储 分布式计算 算法
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
63 0
|
4月前
|
机器学习/深度学习 自然语言处理 算法
【数据挖掘】金山办公2020校招大数据和机器学习算法笔试题
金山办公2020校招大数据和机器学习算法笔试题的解析,涵盖了编程、数据结构、正则表达式、机器学习等多个领域的题目和答案。
105 10
|
5月前
|
机器学习/深度学习 人工智能 算法
「AI工程师」算法研发与优化-工作指导
**工作指导书摘要:** 设计与优化算法,提升性能效率;负责模型训练及测试,确保准确稳定;跟踪业界最新技术并应用;提供内部技术支持,解决使用问题。要求扎实的数学和机器学习基础,熟悉深度学习框架,具备良好编程及数据分析能力,注重团队协作。遵循代码、文档和测试规范,持续学习创新,优化算法以支持业务发展。
233 0
「AI工程师」算法研发与优化-工作指导
|
20天前
|
缓存 算法 大数据
大数据查询优化算法
【10月更文挑战第26天】
42 1
|
27天前
|
机器学习/深度学习 数据采集 算法
大数据中缺失值处理使用算法处理
【10月更文挑战第21天】
38 3
|
26天前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
|
4月前
|
算法
测试工程师的技能升级:LeetCode算法挑战与职业成长
这篇文章通过作者亲身体验LeetCode算法题的过程,探讨了测试工程师学习算法的重要性,并强调了算法技能对于测试职业成长的必要性。
70 1
测试工程师的技能升级:LeetCode算法挑战与职业成长
|
5月前
|
机器学习/深度学习 算法 搜索推荐
从理论到实践,Python算法复杂度分析一站式教程,助你轻松驾驭大数据挑战!
【7月更文挑战第22天】在大数据领域,Python算法效率至关重要。本文深入解析时间与空间复杂度,用大O表示法衡量执行时间和存储需求。通过冒泡排序(O(n^2)时间,O(1)空间)与快速排序(平均O(n log n)时间,O(log n)空间)实例,展示Python代码实现与复杂度分析。策略包括算法适配、分治法应用及空间换取时间优化。掌握这些,可提升大数据处理能力,持续学习实践是关键。
125 1
|
4月前
|
SQL 开发框架 大数据
【数据挖掘】顺丰科技2022年秋招大数据挖掘与分析工程师笔试题
顺丰科技2022年秋招大数据挖掘与分析工程师笔试题解析,涵盖了多领域选择题和编程题,包括动态规划、数据库封锁协议、概率论、SQL、排序算法等知识点。
92 0
下一篇
无影云桌面