专栏首页机器之心Hacker News热议:封装包那么多,程序员还用学习算法吗?

Hacker News热议:封装包那么多,程序员还用学习算法吗?

机器之心报道

参与:小舟、蛋酱

在各种各样的算法实现、软件包开源可用的当下,算法对于程序员而言还重要吗?

如果你是几十年前的程序员,那你一定精通于算法,并经常需要自己编写算法。但在今天,算法已经变成了一种「商品」,从业者都在使用现成的软件包和购买的算法。甚至有人提出这种观点:「机器学习不需要数学,很多算法封装好了,调个包就行」。

时代真的变了吗?近日,一篇相关主题的文章在 Hacker News 网站引发讨论。

以下是文章的主要内容:

我刚开始做软件开发时,开发者必须自己实现大部分用到的算法。硬件供应商会提供一些库,但是当时整体的开发氛围就是自己编写算法(除了技术性较强且复杂的数学函数)。

开发者大多都会阅读高德纳(Donald Knuth)的《计算机程序设计艺术》,对于一步一步实现算法,这本书是很可靠的阅读资源。我还记得看到过一个库的副本,是用很小的字母手写了算法的更新,并将其粘贴到页面的上一页文本上。

那个时候,算法非常重要,因为计算机的计算速度不够快,无法以可接受的速率解决常见问题。普通指令的执行时间和指令时间,以及给定 CPU 上可用的寄存器数量,是开发者经常讨论的话题。内存容量通常是以千字节为单位的,每个字节都算在内。

那是算法的时代。

随着内存容量从以兆字节为单位变成了以千兆字节为单位,开源商业化算法和计算机的存储速度提高了非常多。

在算法的实现方面,现在的开发者拥有大量选择。有那么多其他问题需要解决,为什么要浪费时间来实现算法呢?

现在,算法就像一座桥上的螺栓,非常重要但无人问津。今天的开发者更愿意讨论故事点、功能、商业逻辑等等。给出一个定义明确的问题,许多开发者现在更倾向于查找已有的包,而不是从头开始编写代码。

仍然会有新的算法被开发出来,研究人员持续对现有算法进行改进。但这是相对小众的。

有些公司的算法不是商品。例如谷歌,以谷歌的规模,即使看似非常小的改进,也可以为公司节省数百万美元(这纯粹是因为巨额数字的一小部分也是很多的)。而对于有些公司,算法开发可能是其核心竞争力的一部分,算法的非商品性让这样的公司在竞争中占据优势,而在非核心竞争力中算法被看作商品。

高德纳的《计算机程序设计艺术》在使算法变得普遍可用方面发挥了重要作用。尽管这本书经常被引用,但是我猜想现在很少有人会读它了。

几年前,我突然发现自己正在看的软件工程书籍竟然没有专门的算法章节。

今天,我们处在软件开发生态系统的时代。

算法还没有完全走向默默无闻,它必须等到人们只需将需求告诉计算机,而不需要关心实现细节时(或遗传算法编程发展得更好时),才能真正退出历史舞台。

开发者们怎么看?

「算法还重要吗?」这个问题由来已久,早已成为开发者讨论的焦点,大家对此的态度也各不相同。

即使有一天,计算机能够通过语音转代码的形式来编译算法,那时程序员的工作可能就是为计算机朗读待实现的算法。

如今与 80 年代相比,在绝对数量上,有更多的开发人员在从事算法编写工作,虽然,更高比例的开发人员从不编写任何算法。但如果有「算法时代」,我认为就是现在。今天我们所拥有的算法比以往任何时候都要多。

有人将算法与摄影类比,解释了算法行业正在经历的变革:

现在这个时代,我们可以在几分钟内找到任何符合自己想象的图片。所以从商业的视角来看,摄影作为一门纯艺术,其价值已经被消解了。但为什么还有人聘请摄影师呢? 摄影师收取的报酬不在于「交付最好的图像」,而在于为客户定制想要的照片主题及效果。我认为这也是软件行业的现状,我们不是在算法的「艺术水平」上登峰造极,而是要针对特定业务和需求给出定制解决方案。这不是宏观层面的创新,而是微观层面的创新。

时代变了,也意味着程序员必须要调整自己的目标所在。「对于许多人来说,编写纯粹、通用、美妙的东西会更有吸引力。遗憾的是,我们可能没有机会写出像谷歌开源的软件包那么好的东西了。」

有人表示,要不要自己编写最合适的算法是自己的选择,但如果不影响最后的实现结果,为什么还要浪费时间去做这样简单低级的工作呢?

也有人认为:封装包的确让他们不需要再做一些低级繁琐的工作,但是实际工作中仍然需要编写一些算法,因为总有一些没有封装好的算法需要开发者自己实现。

算法技能永远不会过时。的确,目前一些高质量的算法实现具有广泛可用性,可能不再需要手工实现此类算法。但是开发人员不仅需要了解数据结构支持的操作,还必须要了解其复杂性。只有这样,才能够满足应用程序自身的复杂性需求。

「知其然,知其所以然」在当下还是金玉良言吗?便捷可用的封装包是否会使算法衰落?这值得我们思考。

参考链接:

https://news.ycombinator.com/item?id=23746534

http://shape-of-code.coding-guidelines.com/2020/07/05/algorithms-are-now-commodities/

本文分享自微信公众号 - 机器之心(almosthuman2014)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • NeurIPS 2018提前看:生物学与学习算法

    Joni 目前是日本国立产业综合研究所的研究员。在中国大陆本科本行是自动化,后来对机器人研究有兴趣,在香港就读了电机工程的 Mphil 学位。博士时开始着迷生物...

    机器之心
  • 深度 | 谷歌和OpenAI新研究:如何使用达尔文进化论辅助设计人工智能算法?

    选自QZ 作者:Dave Gershgorn 机器之心编译 参与:吴攀、黄小天、李亚洲 现代机器智能建立在模仿自然的基础之上——这一领域的主要目的是在计算机中复...

    机器之心
  • AAAI 2018 | 阿尔伯塔大学提出新型多步强化学习方法,结合已有TD算法实现更好性能

    机器之心
  • 纽约时报 | 专访数学家Hannah Fry:算法的时代,人类从未如此重要

    算法时代,似乎一切都可以有新的组织方式:有的算法能告诉我们读什么书、跟谁约会,甚至告诉警察应该逮捕哪个人。

    大数据文摘
  • 2.1 C语言程序的灵魂

    广义地说:为解决一个问题而采取的方法和步骤,就称为“算法”。计算机算法可以分为两大类:数值运算算法和非数值运算算法

    C语言入门到精通
  • 大数据之机器学习常见算法分类汇总

    机器学习无疑是当前数据分析领域的一个热点内容。很多人在平时的工作中都或多或少会用到机器学习的算法。这里IT经理网为您总结一下常见的机器学习算法,以供您在工作和学...

    CSDN技术头条
  • 算法系列1 初识算法 算法复杂性模型 算法复杂度的计算

    定义:由若干条指令组成的有穷序列,且满足:输出输入,确定性,有限性 输入:有零个或多个由外部提供的量作为算法的输入 输出:算法产生至少一个量作为算法的输出 ...

    一只胡说八道的猴子
  • 原创 | 初学者友好!最全算法学习资源汇总(附链接)

    在计算机发展飞速的今天,也许有人会问,“今天计算机这么快,算法还重要吗?”其实永远不会有太快的计算机,因为我们总会想出新的应用。虽然在摩尔定律的作用下,计算机的...

    数据派THU
  • javascript 算法初识

    最近有空,想学习下算法。一直感觉它很高深的样子,尤其我数学又不好。 但我还是想学学看,万一能学到点东西呢,,, 先来了解下算法的定义:是指解题方案的准确而完整的...

    web前端教室
  • 极客算法训练笔记(一),算法学习方法篇

    付完款那一刻我忍不住吐槽“哇塞,我可真有钱”,一看余额“我去,伤心的人那么多~我变成了其中一个~”(这首歌叫啥来着,好像有点应景)。

    阿甘的码路

扫码关注云+社区

领取腾讯云代金券