原文:https://www.oreilly.com/radar/rethinking-programming/
我们正处在计算产业结构的巨大变革边缘。如果我们往后看二十年,Mike Loukides考虑的是计算的未来有些什么,现在的我们如何抵达未来,以及这一切对于现在的产业结构意味着什么?
我们应当重新思考程序员的角色
当这个产业走向更直接或者更专业化两极的时候,这意味着编程的世界也会越来越被分成高度专业的程序员及没有很多计算机背景但是擅长建造的人两个群体。前者搭建工具、框架、语言、平台;后者负责为事物建联,他们搭建网站、移动应用程序及其他。实际上,这两类程序员一直存在,经常混在一起。我们只是没有足够认识到两者之间的差别,而这种情况即将改变。下水工程是一个不错的类比。如果你想找人装修一个浴室,你会找水管工,因为他们知道怎么接管子。当然也有人负责设计水管,但你不会想让他们来你的浴室工作的。
我们需要思考下编程是如何被教授的
类似阅读,有的人经过一些训练来学习编程,有些人则不。但也和阅读一样,我们不应该接受一个无编程能力的小学阶段教育,而非得等到高等教育阶段。我们需要专业的编程老师,可以教低年级学生如何编程。我们已经有现成不错的编程环境给到孩子,像Scratch,Alice之类。并且,千万别低估游戏能带来的影响。Minecraft已经潜移默化地教授了许多低年级学生如何写Java。
我们也需要为那些有很强的编程技巧,但是欠缺很深计算机科学背景的水管工一个通畅的渠道,以进入职业市场。事实上,我们已经有一些这样的渠道,例如一些训练营以及职业院校,比如General Assembly和Holberton。这些渠道和传统计算机科学专业不同,也有不一样的教学目的。他们更像是假期配穴计划,更关注于实践,而较少关注理论。他们会教授如何在一个职业的编程环境种工作,比如一个平台,一个数据库,甚至是AI训练平台,但是不会教授如何开发这些平台或者数据库本身。这些训练是为一部分服务,他们会说:“我为什么要学怎么写快排?如果我想做排序,我只要调用一个类库方法就行了。” 这是对的,而我们也不应该假装那有什么错。
于是相对的,计算机科学专业应当继续于理论、算法长期奋斗。那不是因为说他们需要写快排,而是因为我们需要人来研发新的算法,而最佳的学习手段是学习现有的算法。编程不要求程序员擅长数学,但如果想推动计算机科学在某些方面的发展,比如数据科学、AI等等,那数学就不可或缺了。
我们需要更新更强大的编程工具
“机器学习系统种的隐形技术债”,一群Google的研究者和工程师强调说,机器学习只占一个应用中相当小的一个部分。其余大部分的工作是如何把模块串联起来,搭建数据管道,在基建上部署应用,以及提供监控方案。这不是什么高大上的工作,但是这些工作必不可少且必须被做好。我打赌大部分的服务不可用是因为水管工作,而不是机器学习哪里实现得有问题。比起妥协地使用现有的语言,我非常好奇有没有更好的语言来满足这部分工作。长期以来,我都十分奇怪为什么编程语言自上世纪的60-70年代以来就没有太多的发展。他们都是面向行的,字母加数字,固定长度类型的。函数式语言可以追溯到上世纪50年代,最早的面向对象编程也不会晚太多。何不尝试下看看有没有其他类型的语言呢?应该说这个方面还是有些进展的吧。现在市面上有许多可视化语言,用户可以用一些符号或者图形来编程,但大部分并不成功。但就算是其中相当成功的Scratch,我们也只是简单地把图形和一些传统语言做了映射,夹子就是循环,箱子就是变量等等。有没有可能更进一步呢?专为水管开发的语言是怎么样的?我们有没有更好更丰富的方式来处理如何联结系统吗?