API,而非应用:当人人皆可编程,未来将会如何

尚无读者喜欢这篇文章。
code.org keynote address

Opensource.com

几十年前,如果你每天都和朋友在聊天室里度过,你会被认为是书呆子。而今天,如果你做同样的事情,你只是一个普通的 Facebook 用户。因此,在学习编程的浪潮中出现淘金热心态也就不足为奇了。随着科技行业的蓬勃发展及其产品在我们生活中如此普及,六位数的科技薪资的诱惑吸引了许多人收拾行装西进(字面意义上的)。

就像 19 世纪的淘金热一样,有很多人不指望通过挖矿致富,而是通过为矿工提供装备来致富。编程学院网站、训练营和技术书籍作者(比如我自己)都提供了获得这些编程技能的途径。我认为其中一些团体过度宣传了他们产品带来的互联网财富的承诺。在获得“21 世纪的读写能力”的过程中,有大量的炒作成分。

尽管存在这种炒作,但我确实认为,在未来几年,编程将成为一项更普及和更常规的技能。可编程技术将继续渗透到我们生活的更多领域,计算机将继续变得更普及,世界将继续变得更加复杂。理解编程(和调试)将自然而然地随之而来。

我对此深信不疑,以至于我辞去了软件开发人员的工作,转而全职编写编程教程。我的最新著作《用 Python 自动化枯燥的东西》(No Starch Press 出版社)以知识共享许可发布,并且可以在 automatetheboringstuff.com 上免费完整阅读。我在这本书中采用的方法侧重于编写小型实用的脚本,以自动化笔记本电脑或台式 PC 上的任务。所有基本的编程概念都涵盖了,面向没有经验的人,并且跳过了计算机科学部分。

具备代码读写能力并不意味着要理解排序算法或面向对象设计模式的细节。编程可以帮助完成的任务是典型的办公室工作人员会遇到的任务

  • 阅读大量 PDF、Word 文档或其他文件,查找特定信息。(第 13 章
  • 以编程方式更新许多办公室用于组织数据的 Excel 电子表格。(第 12 章
  • 通过复制、重命名、移动或删除文件来整理硬盘驱动器上的文件夹。(第 9 章
  • 网络抓取,以抓取互联网上更新的信息。(第 11 章
  • 发送自动电子邮件或短信通知,使您无需自己查看计算机。(第 16 章
  • 基本调试技能,以找出如何修复代码。(第 10 章

在这些领域,非程序员可以通过学习编程来显着提高工作效率。这与每个人都成为软件工程师不同。当我说学习编程时,我不是指专业地开发软件。几乎每个成年人都持有驾驶执照,但只有少数人是出租车司机或 NASCAR 赛车手。

业余程序员的涌入会降低开发人员的需求和薪资吗?我对此表示怀疑。过去也曾对开源软件提出过同样的论点。拥有像 Linux 这样的免费操作系统不会摧毁就业岗位吗?拥有像 Apache 这样的免费 Web 服务器不会摧毁就业岗位吗?开源实现的 Python、Ruby、PHP、Perl 和 JavaScript 不会摧毁就业岗位吗? 这些都没有发生。事实上,恰恰相反:开源软件的可用性为科技行业创造了大量的机会。具备编程能力的消费者也是如此。

编程作为一项生活技能

Jeff Atwood 在 2012 年在他的 Coding Horror 博客上发表了一篇文章,请不要学习编程,他在文章中感叹“每个人都应该学习编程”的运动。在他看来,编程应该留给专业人士,因为世界上更多的代码只会意味着更多的错误代码。我完全不同意。这就像说应该减少识字人口,因为更多的写作会导致更多的拼写错误。与 Jeff 不同,我确实将编程等同于像阅读、写作和数学一样的生活技能——即使现在不是,将来也会是。Jeff 的文章并非完全在论证我在编程流行之前就喜欢编程,但他坚决认为,普遍的编程素养将带来净负面影响。

我承认,从 21 世纪初的角度来看,实现普遍的编程能力似乎像 20 世纪初实现普遍识字一样荒谬。但是今天,即使在发展中国家,识字的人也比不识字的人更常见。

我认为批评家没有考虑到的是,普遍的编程技能将如何改变文化。更多的程序员不仅仅意味着应用商店里有更多的应用或现有网站的克隆。普遍的编程素养与其说是增加了网络服务的供应,不如说是提高了网络服务的使用复杂程度。编程——我的意思是能够指导计算机访问数据、组织数据,然后根据数据做出决策——不仅将开启一种流行的能力,使人们能够更多地利用在线服务,而且还能要求更多。

几乎每个主要的网站都有应用程序编程接口 (API),这是一种用于软件检索数据和发出类似于人工指导浏览器的请求的正式规范。Facebook维基百科亚马逊TwitterGoogleReddit 都提供 API,以便他们的用户可以自动化他们与网站的交互。绝大多数用户不使用这些 API——甚至不知道 API 是什么——因为编程是他们留给专业人士的事情。但是,当编程变得普及时,网站应该不仅可通过浏览器访问的期望也会变得普及。

API,而非应用

这是一个需要 API 而非应用的世界。仅限于应用商店的选择是不够的。不是每个人都会制作自己的 Facebook 应用,但每个人都会对 Facebook 数据库和服务有自己的个性化需求。仅仅接受 Facebook 网站提供的内容是不够的。用户将希望按照自己的意愿,在自己的程序中使用网络服务。

如果说我从读者那里学到了什么,那就是实现这一点并不像大多数人想象的那么难。

API 而非应用的未来是开源运动的自然延伸。编程不仅仅是从头开始编写软件或 fork 现有项目。许多用户对一些功能有锦上添花的想法,这些功能将有利于他们个人的工作流程,但又太小众而无法考虑。使软件的编程接口成为普遍期望,开启了许多可能性。这种形式现在已经存在,尽管 API 提供的访问权限通常是不完整的,并且受到许可协议的约束。这与开源精神相去甚远。

就像与我们人类有关的大多数事情一样,这个问题更多的是政治问题,而不是技术问题。目前,公司和政府热衷于限制计算机的权力,而不是扩大其权力。维持这些围墙花园的诱因太多了,而消费者并没有要求推倒围墙。正如 Cory Doctorow 所写,一场针对通用计算的战争正在进行,其目的是通过 DRM、间谍软件和专利滥用限制所有计算机。随着最高法院最近拒绝介入 Oracle 诉 Google 案,即使是 API 本身现在也可以受到版权保护。

一个普遍具备代码读写能力的未来并非不可能,但我们必须作为一个社会来选择它。学习编程不仅仅是一种爱好或提高工作效率的方式,而是一条通往成为更积极参与和更有能力成年人的道路。

返回
学校

本文是 返校季系列文章的一部分,重点介绍面向各级学生的开源项目和工具。

User profile image.
Al Sweigart 是旧金山的一名软件开发人员和技术书籍作者。他撰写了几本 Python 书籍,这些书籍以知识共享许可在 https://inventwithpython.com 上提供

8 条评论

我喜欢你的文章。这是一篇需要广泛传播的宣言。你清晰地阐述了每个人都应该学习编程的令人信服的理由。我已经通过 Twitter 与教育技术领域的同事分享了这篇文章。我还想感谢你撰写了《用 Python 自动化枯燥的东西》,我目前正在阅读这本书。我上周在 Barnes & Noble 书店购买了这本书,后来发现你已在互联网上以知识共享许可提供了文本和精彩的 YouTube 视频。太棒了!我决定将我购买的书捐赠给当地图书馆,并在网上学习你的课程。:)

在他看来,编程应该留给专业人士,因为世界上更多的代码只会意味着更多的错误代码。我完全不同意。这就像说应该减少识字人口,因为更多的写作会导致更多的拼写错误。

这真是掷地有声。

好文章,我同意你的观点 Al Sweigart

好文章。我认为未来的编码不仅仅是 API

普遍具备代码读写能力,我喜欢这个说法。直观的用户界面,例如触摸、手势、3D 也可以增加人们对编程的兴趣。API 不仅使编程对各种人都有趣,而且还可以在开源之上培育新的商业模式。非常感谢这篇非常有趣的文章和想法!

很棒的阅读体验。我认为不久前有一家分析公司表示,我们正处于 API 的黄金时代,但我也要重新考虑对于更平凡的任务(例如编程电子表格)是否需要编程技能。如今,更精通数字技术的员工已经开始使用 Quickbase、Mendix 和 Outsystems 等低代码平台来完成那些开发人员或 IT 人员乐于从他们的积压工作中摆脱出来的事情。

这是一篇好文章!你的想法和文字与即将到来的 IOT 设备时代相符,在这个时代,每个人都在为只有他们自己才能更好地理解和解决的问题提出解决方案。一直以来都是你作品的忠实粉丝。还没有机会阅读你的新书。我会尝试一下。

大家好,我是作者。我刚刚发现这篇文章在 9 月份被发布到了 Slashdot。很多评论似乎与我在 Reddit 上看到的评论类似:普遍不赞同文章的前提。这本应是一次学习经历,但我一遍又一遍地看到评论者指的是他们认为文章所说的内容,而不是文章实际所说的内容。(例如,我可以从文章中复制粘贴确切的句子。)

为了澄清这些误解,让我简单地回顾一下一些更常见的批评

* “每个人都不会成为软件工程师。”
我同意,并且在文章中明确地说了这一点。

* “大众编程不会取代软件工程师。”
我同意,并且在文章中明确地说了这一点。

* “编程超出了大多数人的能力范围。”
我不同意,几百年前人们也会对识字能力说同样的话。如果说有什么不同的话,那就是今天的编程比 80 年代更容易。计算机科学将永远是困难的;编写小型脚本来自动化任务很容易,而且正变得越来越容易。

以典型的办公室工作人员的事情为例,比如电子邮件:您不必成为计算机科学家就可以设置 Outlook 电子邮件规则。它们是一系列“如果发件人是某某并且包含单词 foo,则将其标记为已读并放入此文件夹”的规则。将此(非常有用的)功能扩展到其他应用程序和 Web 服务。这不是编写一个包含复杂数据结构的 10,000 行应用程序。这是一种非常有效的方式来专门配置应用程序。

* “人们宁愿花 5 美元购买一个应用程序,也不愿编写自己的应用程序。”
我同意,我也没有声称普通人会编写自己的 Facebook 应用程序。但是,个人将对他们的 Facebook 应用程序、他们的电子邮件客户端或他们的电子表格程序有自己的需求和工作流程。 “应用程序已经可以做到这一点,我只是希望它能用另一个东西来做到这一点。” 这些“最后一公里”功能对于专业人士来说市场太小,不值得开发,但对于单个用户来说,足以让他们拼凑出一个脚本来实现。

* “每个人都有汽车,但并非都是机械师。”
从“损坏”状态到“工作”状态的转变是不同的,而且比希望配置计算机来执行某些自定义操作要狭窄得多。正是这种巨大的可能配置范围使计算机与汽车或冰箱等电器或房屋布线等技能不同。如果计算机没有这种巨大的、灵活的用途潜力,那么计算机将与汽车没有什么不同,只需要少数“机械师”。

我必须添加一个发布后的澄清:当我在文章中说人们将学习调试时,我的意思是他们将调试自己的代码。而不是他们将调试其他人编写的代码或为专业软件提交拉取请求。

* “业余程序员将编写糟糕的、充满错误的、存在安全漏洞的代码。”
尖刻的回答:那么它将与专业编写的代码相同。
真诚的回答:他们编写的程序范围要小得多。大多数情况下,这些将是用于自动化简单任务的有限脚本,而不是控制核反应堆。

* “业余爱好者将编写不优雅的代码,这些代码无法维护。他们从小处着手,但随后公司变得依赖它,最终不得不花费大量资金来替换它。”
尖刻的回答:那么它将与专业编写的代码相同。
真诚的回答:很好。显然,这种粗制滥造的脚本是有需求的,并且是对以前存在的东西的改进。如果它不值得替换的成本,那么公司根本就不会替换它。但是,正是这种粗制滥造的代码发展壮大了公司,并使这些成长的烦恼成为可能。如果这很糟糕,您不妨争辩说我们根本不应该发展农业,因为它导致了现代问题。

* “在 70 年代,如果你拥有一台计算机,你必须为其编写代码。但是计算机正变得越来越像电器,不再需要编程。”
与过去相比,编程要容易得多,计算机与文化的相关性也高得多。这使得编程有可能成为一种休闲技能,而不是与工作相关的专业技能或仅供铁杆爱好者使用。与此同时,由于互联网,您现在可以使用计算机做的事情比几十年前要多得多。另请参阅我上面的“最后一公里”部分。

* “我们已经在 Visual Basic 和 COM 中尝试过这种方法。它们并没有流行起来。”
首先,这发生在 90 年代,当时互联网还没有使计算机作为一种社交工具与主流用户相关联,而 Google 也没有使学习这些工具变得更容易。其次,HTTP 比 Microsoft 独有的 COM(或其他 API 方案)更通用地用于 API 设置。我不知道未来的编程语言和协议会是什么样子,但我知道它们会比我们今天的语言和协议更相关、更易于使用,而不是更少。否则我们就不会切换到它们。

Creative Commons License本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.