生产力的增长是靠牺牲性能换来的。这篇文章不再讨论asyncio(异步IO库)在Python中的运用,而是谈谈最近我一直在思考的一个问题:Python的运行速度。同那些不了解Python的人相比,我属于Python的忠实粉丝,而且我使用Python的频率非常高。目前人们抱怨Python最多的是它的运行速度慢。通常,大部分人拒绝使用Python是因为它比某某语言还慢。尽管如此,我还是建议你使用Python,理由如下:
速度不再重要
以前,运行程序需要花费很长的时间。CPU和内存的售价是比较昂贵的,衡量这两个硬件的一个重要标准是程序运行所花费的时间。电脑和运行所需的电力的价格也非常昂贵。要想优化这些资源,需要基于一条永恒的商业法则:
优化最贵的资源
从历史上来看,最昂贵的资源无疑是计算机运行时间。这就导致了计算机科学注重研究不同算法的效率。然而,随着硅变得便宜,一切都不一样了。运行时间不再是最昂贵的资源。企业目前最为昂贵的资源是雇员的时间。或者换种方式来讲,最重要的是让雇员在规定时间内将程序完成,而不是让程序运行速度更快。事实上,这是很重要的,我再次将它放在这里来引出下面的内容(对于那些仅仅想浏览一下文章的人来说):
程序的开发时间比运行速度更重要。
你可能会说,“我的公司只关心速度,我开发的web程序的所有响应速度都比其他语言快几毫秒”。或者,“我们的客户取消订单是因为觉得我们的程序太慢了”。我并不是想说速度不重要,而是想说,它不再是最重要的问题,同时也不再是最昂贵的资源。
速度!是唯一重要的事情
你认为的编程环境中的速度,其实指的是性能,即CPU周期(机器周期)。而你的BOSS说的编程环境中的速度指的是公司运营的速度,其最重要的标准就是上市时间。最终,无论你的产品还是web应用运行多快,无论它是用什么语言编写的,无论它的运行费用是多少,在一天结束的时候,决定你公司生存与否的是何时上市。我谈的不止是一个创业想法最终盈利需要多长时间,而是整个时间架构——“从想法到最终交付”。企业生存的唯一方法就是比你的竞争对手的创新速度更快。无论你想出多少好的主意,一旦你的竞争对手比你更先“落实”,一切都付之东流。你必须第一个进入市场,至少也要保持领先。一旦你的创新速度变慢了,那么你就可能要完蛋了。
唯一能在商业中存活的方法便是创新速度要快过你的竞争者。
过早的优化包括调用一个更快的方法,甚至使用一个更快的数据结构。计算机科学显示如果两种方法或算法有着相同的渐进增长速度(或者叫大O)那么他们就是相同的,即使在实际使用中速度相差两倍。计算机的计算速度太快了,以至于由数据量增长导致的计算量增大要比它实际的计算速度更重要。换句话说,如果我们有两个大O(log n)即log n级的函数,但是一个比另一个慢两倍,这没什么影响,因为随着数据量的增加,它们会以相同的速率减慢。这就是为什么“过早的优化是万恶之源”,这种优化浪费了我们的时间, 也从未真正地提高运算速度。
从大O的角度考虑,你可以认为所有的编程语言都是大O(n)级的算法,其中n是代码或者指令的行数。一种编程语言或者程序运行时间慢并不是问题,从渐进增长速度的角度考虑,所有的编程语言生而平等。从这个逻辑出发,你可以认为,凭借“速度”因素为应用程序选择一个编程语言完全属于过早的优化,你实际选择的是“据说”很快的编程语言,而没有去测试、没有理解影响速度的瓶颈是什么。
凭借“速度”因素为应用程序选择一个编程语言完全属于过早的优化。