对编程的再思考

2020-05-19 23:13:30

在本期的雷达专栏中,我们来看看编程工具和技术将如何发展。

我们正处在计算结构大变革的边缘。在我们展望新的十年之际,迈克·鲁基德斯思考着未来是什么,我们将如何实现这一目标,以及这对行业结构意味着什么。

期待这个行业变得更加分层和专业化。编程世界将越来越多地被分成训练有素的专业人士和没有深厚背景但有丰富构建经验的人。前一组构建工具、框架、语言和平台;后一组连接事物并构建网站、移动应用程序等。这两种类型的程序员一直存在,流畅地混合在一起。我们只是没有意识到这一区别,而这一点将会改变。管道就是一个很好的比喻。如果你需要安装厕所,你可以叫水管工:他们知道如何把东西连接在一起。有一些工作提供给设计管道装置的人,但是你不希望他们在你的浴室里工作。

和阅读一样,有些人很少受过训练就学会了编程,有些人没有。但就像阅读一样,我们不应该接受这样一个世界,在这个世界里,有些人会读小学编程,有些人不需要等到高中。我们需要受过编程教学培训的教师--特别是在早期年级教编程。我们已经有了为教孩子们而优化的编程环境,包括Scratch、Alice和他们的亲属。而且不要贬低游戏可能起到的作用。“我的世界”在不知不觉中教会了一代小学生如何用Java编程。

我们还需要为那些拥有出色编程技能但没有深厚计算机科学背景的人-水管工-进入专业市场搭建桥梁。其中一些桥梁已经存在,包括许多新兵训练营和像General Assembly和Holberton这样的学校。这些与大学学位授予项目(传统的计算机科学专业)不同,服务于不同的目的。它们更像是职业教育项目:它们侧重于实践,对理论的强调很少。它们是关于学习在专业环境中编程-使用Web平台、数据库,甚至是AI平台-但不是关于开发这些平台或数据库。他们是为那些说,“为什么我应该知道如何编程快速排序?如果我想要排序,我会调用库函数。“。这很好,我们不应该假装不是。

相比之下,CS专业的学生应该继续接触和使用理论和算法-不是因为他们要写自己的快速排序,而是因为我们需要能够开发和实现新算法的人,而学习的最好方式是实践我们已经理解的算法。你不需要精通数学就能编程,但你确实需要数学来推动计算-特别是当你对数据科学或人工智能感兴趣的时候。

在“机器学习系统中隐藏的技术债务”一书中,作者-来自谷歌的一群研究人员和工程师-认为机器学习在任何应用程序中都是相对较小的一部分。其余的大部分工作都在连接在一起:构建数据管道、将应用程序连接到服务基础设施、提供监控。这不是很有魅力,但它需要做,并且做得正确。我敢打赌,糟糕的管道造成的停机时间比ML算法的糟糕实现造成的停机时间要多得多。与其依赖我们目前的语言,我想知道是否有更好的语言适用于企业的这一部分。长期以来,编程语言与20世纪60年代和70年代的编程语言并没有太大的不同,这对我来说似乎很奇怪:面向行的字母数字文本,通常是固定宽度的文字。函数式语言可以追溯到20世纪50年代,面向对象编程的最早根源也不是很晚。想象其他种类的语言意味着什么呢?这方面的工作已经在做了。已经有了数量惊人的视觉语言,它们让用户可以使用符号或其他图形元素而不是文本来创建程序-尽管大多数都没有成功。但是,即使在Scratch这样的流行语言中,我们也在处理视觉对象到传统编程语言的简单映射:“夹子”是“循环”,“变量”是“盒子”,依此类推。是否有可能进一步超越传统编程语言?为管道设计的编程语言会是什么样子?它会给我们提供更好、更富有成效的方式来思考系统之间的互连吗?--迈克·洛基德斯。

O‘Reilly会议将业界领袖的专家见解与关于当今最重要技术主题的实践指导结合在一起。