几十年前,如果你每天都和朋友在聊天室里度过,你会被认为是书呆子。而今天,如果你做同样的事情,你只是一个普通的 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、维基百科、亚马逊、Twitter、Google 和 Reddit 都提供 API,以便他们的用户可以自动化他们与网站的交互。绝大多数用户不使用这些 API——甚至不知道 API 是什么——因为编程是他们留给专业人士的事情。但是,当编程变得普及时,网站应该不仅可通过浏览器访问的期望也会变得普及。
API,而非应用
这是一个需要 API 而非应用的世界。仅限于应用商店的选择是不够的。不是每个人都会制作自己的 Facebook 应用,但每个人都会对 Facebook 数据库和服务有自己的个性化需求。仅仅接受 Facebook 网站提供的内容是不够的。用户将希望按照自己的意愿,在自己的程序中使用网络服务。
如果说我从读者那里学到了什么,那就是实现这一点并不像大多数人想象的那么难。
API 而非应用的未来是开源运动的自然延伸。编程不仅仅是从头开始编写软件或 fork 现有项目。许多用户对一些功能有锦上添花的想法,这些功能将有利于他们个人的工作流程,但又太小众而无法考虑。使软件的编程接口成为普遍期望,开启了许多可能性。这种形式现在已经存在,尽管 API 提供的访问权限通常是不完整的,并且受到许可协议的约束。这与开源精神相去甚远。
就像与我们人类有关的大多数事情一样,这个问题更多的是政治问题,而不是技术问题。目前,公司和政府热衷于限制计算机的权力,而不是扩大其权力。维持这些围墙花园的诱因太多了,而消费者并没有要求推倒围墙。正如 Cory Doctorow 所写,一场针对通用计算的战争正在进行,其目的是通过 DRM、间谍软件和专利滥用限制所有计算机。随着最高法院最近拒绝介入 Oracle 诉 Google 案,即使是 API 本身现在也可以受到版权保护。
一个普遍具备代码读写能力的未来并非不可能,但我们必须作为一个社会来选择它。学习编程不仅仅是一种爱好或提高工作效率的方式,而是一条通往成为更积极参与和更有能力成年人的道路。
学校
本文是 返校季系列文章的一部分,重点介绍面向各级学生的开源项目和工具。
8 条评论