acm-header
登录

ACM通信

BLOG@CACM

黑客时代结束了


在上世纪70年代,当微软和苹果成立时,编程是一门艺术,只有为数不多的狂热爱好者真正知道如何正确地执行。cpu相当慢,个人电脑的内存非常有限,显示器是低分辨率的。为了创造一些像样的东西,程序员必须与实际的硬件限制作斗争。

为了在这场战争中获胜,程序员必须在计算机科学方面既受过训练又有天赋,而计算机科学在当时主要是关于算法和数据结构的。这本名著的前三卷计算机编程的艺术由斯坦福大学教授、图灵奖得主唐纳德·克努斯所著,于1968-1973年出版。这本编程圣经获得了比尔·盖茨的一句著名评论:“我花了难以置信的自律和几个月的时间才读完它。”

这句话说明了这样一个事实:创建一个简单的软件是一项复杂的工程任务,即使软件工程只是在20世纪80年代后期才“作为一门学科独立出现”,正如Ian Sommerville在他1982年的书中所说软件工程

大多数程序员都称自己为“黑客”,即使在20世纪80年代早期,根据史蒂文·列维的书,这个词也是如此黑客:计算机革命的英雄,“已经获得了一个具体的和消极的含义。”语言学家Geoff Nunberg说,自20世纪90年代以来,这个标签已经成为“一种将一个人标识为部落成员的陈词滥调”指出

在很长一段时间里,能够同时入侵软件和硬件都是一个优点。然而,在过去的十年里,计算机编程的世界发生了巨大的变化。

首先,计算能力的成本每年都在下降。例如,在2000年,1g的计算机内存的价格约为1,000美元。2018年,它的价格不到5美元。这在短短18年的时间里就便宜了200倍。对于硬盘驱动器、显示器、cpu和所有其他硬件资源也是如此。正如詹姆斯·萨默斯在分析行业问题时所注意到的即将到来的软件末日:“计算机的性能每18个月就翻一番
近40年了。”

第二,开源的增长是巨大的。现在,大多数软件及其源代码都是免费的,包括操作系统、图形处理器、编译器、编辑器、框架、加密工具以及任何我们能想到的东西。程序员不再需要写很多代码;在大多数情况下,他们所需要做的就是将已经可用的组件连接在一起。

第三,尽管世界上程序员的人数不断增加,但该领域仍然处于短缺状态。在一些欧洲国家,对高技能IT人才的需求是其市场人才供应量的两倍。根据Iamexpat.nl在荷兰,“高达76%的人力资源员工表示难以找到足够多的具备这一资格的候选人。”

第四,程序员现在远程工作,而不是在办公室或小隔间。由于高速互联网、Zoom和Skype这样的会议软件、Slack和Telegram这样的通讯工具、GitHub和Bitbucket这样的分布式存储管理器以及许多其他创新的发展,远程工作比在传统办公室环境中工作更舒适。

最后,程序员的工资在过去几十年里直线上升。2000年,当1g内存的价格仍为1,000美元时,硅谷高级程序员的平均收入约为80,000美元。2018年,他们的产量是现在的三倍,而RAM的价格是现在的200倍。

考虑到这五个变量,似乎专业和成功的程序员所需要的技能与20世纪90年代所需要的有很大的不同。这个职业现在对数学和算法的要求更少了,而是在“社会技术”这个术语下强调更多的技能。苏珊·朗在她的书中解释道社会分析方法:发现组织和社会系统中的隐藏"社会技术系统"这个词是由Eric悲哀的这是基于他们在伦敦塔维斯托克研究所对英国煤矿工人的研究。这个术语现在似乎更适合现代程序员所需要的新技能和技术。

他们需要知道如何与开源社区沟通,以找到所需的组件,请求特性,并从开发人员那里学习bug修复。此外,他们必须准备好通过提交pull请求甚至创建自己的程序来为开源软件做出贡献。那些过去只使用商业和私人软件的人很快就会远远落后于其他程序员。

他们必须知道如何在办公室或项目团队之外获得帮助,当远程工作和独自工作时。除了堆栈溢出它主导着编程市场的问答平台,有专业程序员必须知道如何浏览的文档和代码库。那些以前只依靠同事和朋友的人,现在将输给那些知道如何从整个互联网学习的人。

程序员必须知道如何编写其他程序员能够轻松理解的可维护代码。由于雇佣人员的费用每年都在增加,企业强调代码库的可维护性,而不是开发异常复杂的代码。如果算法不够快,他们更容易购买更大的服务器,而不是在新团队或替换者出现时失去之前程序员创建的东西,因为他们不知道如何修改项目。由于计算机的成本持续降低,雇用程序员的成本持续增加,可维护性继续作为几乎所有软件的主要优点在编程领域占据主导地位。最终的结果是,这些花时间编写复杂、神秘代码的“黑客”很快就会发现自己被市场淘汰。

埃德斯格·迪克斯特拉在1984年说过的一句话——“简单是一种伟大的美德”,每年都变得越来越有价值。

编程的未来似乎更少依赖于数学,而更多地依赖于人与人之间的社会技术关系。

叶戈尔·Bugayenko他是软件工程和管理平台Zerocracy的创始人和首席执行官。


评论


Chenglie胡

我不确定我是否同意这篇博客中的观点。“黑客”是一个很容易理解的术语,它可以简单地理解为一个在编写代码方面非常老练的人,但不一定与社会技术关系隔绝。我相信“黑客”确实会遇到思维障碍,他们也会在“堆栈溢出”中寻找答案,或者高兴地提供一些答案来“炫耀”他们的“黑客”技能。“黑客”并不一定会使代码变得比需要的更复杂,它可能会产生相反的效果——使代码变得比需要的更简单,从而影响可读性。“黑客”也可能意味着“编码和修复”实践,这篇文章是对的。但是这个结论和术语“软件工程”一样古老——我们需要软件工艺,如果不是一个工程过程,来构建软件。无论我们如何定义“黑客”,他们总是存在的,我相信他们的生产力可以得到很好的利用。

编程的未来是否更少依赖于数学?编码更高效的算法(不考虑RAM价格下降)或编写更高效的代码需要数学思维。如果我们的开发人员知道Z-Specification(一种基于集合理论的正式规范方法),他们就会编写出比我们所经历的更可靠的软件。编程的未来可能由数据分析、机器学习和深度学习应用程序主导。开发人员不只是收集数据并按下按钮调用“商店提供的”模型;相反,他们要对模型进行调整,并通过各种方式开发新的模型,以便使用本地商业环境特有的数据集进行训练。相反,编程的未来更多地取决于数学。毕竟,计算本质上是一门数学学科。


杆哈

我也不同意。今天计算机的HW与早期相比已经发生了翻天覆地的变化,为了真正写出熟练/优化的代码,软件工程师必须真正理解HW及其作用……所以“黑客”生活。特别是在速度和效率非常重要的领域。一个人必须了解内存,缓存,核心和超线程,吞吐量和延迟,向量寄存器等…以及如何正确地编写代码来充分利用这些优势。

为了让你写的数学运算有效地运行,你必须知道计算机如何处理计算、获取、执行和存储结果的最佳和最快的方式。

今天,软件工程师比以往任何时候都更需要成为史蒂文·列维(Steven Levy)所指的“黑客”。


H劳森

这不是黑客与否的问题。事实上,我们的软件包含了太多不必要的复杂性。这在很大程度上是由于硬件和软件不匹配造成的。今天的微处理器当然不是软件友好型的,需要大量的努力(我称之为繁忙软件)来完成工作。
另一方面,许多大型应用程序(由团队完成)的范围和复杂性当然需要沟通技巧。
建议你准备好我的观点文章:进军复杂的黑洞在ACM通信5月刊上。


显示3评论

登录为完全访问
»忘记密码? »创建ACM Web帐号
Baidu
map