当前位置: 首页 > 科技观察

黑客新闻热议:包那么多,程序员还用学习算法吗?

时间:2023-03-19 14:58:20 科技观察

各种算法实现和开源软件包,算法对程序员还重要吗?如果你是几十年前的程序员,你一定精通算法,经常需要自己写算法。但在今天,算法已经成为“商品”,从业者都是使用现成的软件包,购买算法。甚至有人提出这样的观点:“机器学习不需要数学,很多算法都是封装好的,调整封装就好了”。时代真的变了吗?近日,一篇相关话题的文章在HackerNews网站上引发了讨论。以下是文章的主要内容:当我刚开始做软件开发的时候,开发人员要自己实现大部分使用的算法。硬件厂商会提供一些库,但当时整体的发展氛围是自己写算法(技术性强、复杂的数学函数除外)。大多数开发人员会阅读DonaldKnuth的《计算机程序设计艺术》,这是逐步实现算法的可靠阅读资源。我还记得看到一份图书馆的副本,其中算法更新是用小字母手写的,并粘贴到页面上的前一页文本上。当时,算法非常重要,因为计算机速度不够快,无法以可接受的速度解决常见问题。常见指令的执行时间和指令时间,以及给定CPU上可用的寄存器数量,是开发人员经常讨论的话题。内存容量通常以千字节为单位,每个字节都被计算在内。那是算法的时代。随着内存容量从兆字节增加到千兆字节,开源商业算法和计算机的存储速度得到了极大的提高。今天的开发人员在算法实现方面有很多选择。既然有那么多其他问题要解决,为什么还要浪费时间实现一个算法呢?算法现在就像桥梁的螺栓,非常重要但被忽视。今天的开发人员更愿意讨论故事点、功能、业务逻辑等。给定一个明确定义的问题,许多开发人员现在更喜欢查找现有的包,而不是从头开始编写代码。新算法仍将被开发,研究人员将继续改进现有算法。但这是相对小众的。有些公司的算法不是商品。以谷歌为例,以谷歌的规模,即使是看似很小的改进也能为公司节省数百万美元(纯粹是因为巨大数字中的一小部分是很多)。对于一些公司来说,算法开发可能是其核心竞争力的一部分。算法的非商品性让这类公司在竞争中占据优势,而算法在非核心竞争力中被视为商品。Gartner的《计算机程序设计艺术》有助于使算法普遍可用。虽然这本书经常被引用,但我怀疑现在很少有人读它了。几年前突然发现自己看的软件工程书竟然没有专门的算法章节。今天,我们正处于软件开发生态系统时代。算法还没有完全走向默默无闻,一定要等到人们只需要告诉计算机需求,而不需要关心实现细节(或者遗传算法编程发展的更好的时候),它才能真正退出阶段历史。开发商怎么看?“算法还重要吗?”这个问题由来已久,也一直是开发者讨论的焦点。每个人对它的态度都不一样。即使有一天,计算机能够以语音到代码转换的形式编写算法,那么程序员的工作可能就是读取要为计算机实现的算法。与80年代相比,如今编写算法的开发人员的绝对数量更多,尽管更高比例的开发人员从未编写过任何算法。但如果说有一个“算法时代”,我想就是现在。今天我们拥有比以往更多的算法。有人将算法比作摄影,阐述了算法行业正在发生的变化:在这个时代,我们可以在几分钟内找到任何符合我们想象的图片。所以从商业的角度来看,摄影作为一门纯艺术,已经失去了价值。但为什么还有人会聘请摄影师呢?摄影师的回报不是“交付最好的图像”,而是定制客户想要的照片主题和效果。我想这也是软件行业的现状。我们不是在算法的“艺术层面”上登峰造极,而是针对特定的业务和需求提供定制化的解决方案。这不是宏观层面的创新,而是微观层面的创新。时代变了,这也意味着程序员必须调整自己的目标。“对很多人来说,写一些纯粹的、通用的、漂亮的东西会更有吸引力。不幸的是,我们可能没有机会写出像谷歌的开源软件包一样好的东西。”有人说,你要自己写吗?写出最合适的算法是你的选择,但如果不影响最终的实现结果,何必浪费时间做这么简单底层的工作呢?有些人认为封装封装确实让他们免于做一些底层繁琐的工作,但是在实际工作中还是需要编写一些算法,因为总有一些未封装的算法需要开发者自己去实现。算法技能永远不会过时。事实上,一些高质量的算法实现现在已经广泛可用,可能不再需要手动实现这些算法。但是开发人员不仅需要了解数据结构支持的操作,还需要了解它们的复杂性。只有这样才能满足应用本身的复杂性要求。“知其然,知其所以然”目前还是好的建议吗?易于使用的软件包会降低算法的性能吗?这是值得思考的。