湘云在我前面一篇日志下留言说 list.files(.libPaths()) 比 .packages(TRUE) 快。码农界总有比天比地比空气的习俗,比速度更是家常便饭。窃以为在谈速度的时候当考虑下列问题,不要独孤求快:
-
二者做的是同一件事吗?很多时候速度慢不是因为代码实现太低效,而是要照顾严谨性。看一下
.packages()函数的源代码(并不长)就知道为什么它慢一些了。如果这里的严谨性不是我们需要的(换句话说,你可以承担不严谨的风险),那么你可以解开安全带自由飙车。 -
快多少?通常码农喜欢看倍数,但倍数只是一方面;另一方面是绝对值。如果一个是 1 毫秒,另一个是 10 毫秒,而且又只需要运行一次,那我觉得不值得操这 9 毫秒的心,9 毫秒连眨一下眼都来不及。当然不只是码农,宣传工具里也常用这个伎俩,比如吃某种食物会让你患癌的概率增加一百倍,这种话听起来让人毛骨悚然(或是反过来,某种食物让某癌症几率降低十倍),但就是不说从多少增加到多少,要是五百亿分之一到五亿分之一,虽是百倍,貌似也没什么值得操心的。
最早的时候我开高速喜欢超速,当然不会超很多,只是比限速多五迈十迈的样子。后来有一天开车的时候一想,限速 70 迈,就算我一路开 80 迈,其实到头来也省不了几分钟时间。就算省这几分钟,下了高速要是路上碰上两个红灯,或者在中途休息站里上个厕所伸个懒腰,这时间马上就回来了。超这 10 迈不仅难以省时间,而且还面临吃罚单的高风险,实在不划算。于是在没什么急事的时候就老老实实开,如果有开的稍快的车超了我(不是飙车的那种),我就跟他屁股后面开一会儿,反正打死不做领头羊。
写代码跟开车一样,不要只求快而不系安全带,也要想想超速究竟能省多少时间。我并不是说一定要时刻系好安全带,我自己很多时候也写不严谨的代码,但我通常已考虑过损失并且认为损失可承受才那样写。
赞赏
作为一名没有固定工作的自由职业者,我非常感谢您通过捐赠的方式来支持我的写作和开源软件开发。当然,捐赠纯属自愿。无论金额多少,都是一片诚挚的心意。支付方式如下:
| 微信 | ← 奋力支开它俩 → | 支付宝 |
|---|---|---|
![]() |
其它爱心通道 ↓ Venmo: @yihui_xie Zelle: xie@yihui.name PayPal: xie@yihui.name |
![]() |
若使用 Venmo/Zelle/Paypal,请添加备注“gift”或“donation”,以免捐赠被视为我的可税收入。若使用 Paypal,支付类型请选 Family and Friends,而不要选 Goods and Services。
在不影响生活的前提下,我会将收到的捐赠以尽量大的比例回馈给开源社区和慈善机构。作为参考,2024-25 年间我共收到约三万美元捐赠,完税后我转手捐出了一万五千美元。

