发现效率的眼睛
///
程序员的自我实现。
你在生活中有没有那种感觉?就是总能发现各种“低效率”的场景,总受不了这样的场景,总想给提一个改进的方案。比如说,当你和一群人一起排队的时候,你的内心会不会发出一个呐喊:这太愚蠢了!这么多人就这么傻傻地等着?我们肯定有更好的办法!
想要增加效率、减少摩擦,想让一切以最顺畅的方式运行,这也是一种美学追求,是生活黑客、工程师、特别是程序员的价值观……甚至是一个情感需求。
像排队这样的事儿是有学问的。我们在超市排队,都是有多个收款通道,每个通道排一个队,这种方法的效率并不是最高的。人们自动选择当前看上去最短的一队,但这其实是一种赌博:有的队里赶上一个买的东西特别多、或者遇到付款技术问题等待时间特别长,后面的人都会受影响。银行的排队方法就更公平一些:只排一个队,轮到哪个窗口服务就去哪个窗口,减少了不确定性。当然超市的特殊情况是人们都推着购物车,只排一个队摆不开。不过有的超市仍然会做一些改进,比如说给买的东西少的顾客提供快速通道。
凡是低效率的地方,都可能是信息技术的应用机会。你可以给每人发个号码,然后各个窗口按顺序叫号;你可以接受电话或者网上预约;有些餐馆会给等待的顾客发个无线的、会亮灯的排队器,到现在也没被手机APP取代。我看还有人专门建立数学模型模拟比如说一个大学食堂的排队情况,寻找平衡了效率和运营成本的最优解。
我们这一讲要说的不是具体问题的解法,而是这个精神。你看到一个效率问题,应该想想能不能优化它。你应该有一双随时能发现效率应用的眼睛。
《连线》杂志专栏作家克莱夫·汤普森(Clive Thompson)是科技圈的长期观察者,他不但观察技术而且观察发明和使用技术的人。汤普森 2019 年出了一本专门讲程序员的书,叫《编码者:一个新部落的形成和世界的重塑》(Coders: The Making of a New Tribe and the Remaking of the World)。我感觉这个书名中的“coder”,是比“程序员(programmer)”更雅致的一个说法:程序员强调的是职业,编码者 —— 或者叫“写代码者” —— 强调的是行为。
写代码是一种能定义你的身份的行为,因为这个行为会改变你的想法和眼光。汤普森在书中讲了很多程序员的故事,特别是在著名公司工作的那些最新一代程序员的工作和生活,可以说是一部程序员文化大观,全书都非常值得读。我最感兴趣的是书中提到程序员思维有一个最大的特点,那就是对效率的执着。
汤普森讲到一个住在旧金山的华裔小伙儿,叫杰森·何(Jason Ho)。小何是个编程高手和极端意义上的生活黑客。
小何说他小时候有一个德州仪器的 TI-89 计算器,他发现这个计算器提供 BASIC 语言编程功能,就自学了编程,然后竟然在这个计算器上实现了任天堂的《塞尔达传说》游戏!我听着感觉不太可能,也许他只是实现了游戏的一部分功能,但不管怎么说这也挺厉害。
小何喜欢对生活做各种优化。他喜欢吃拉面,去日本旅游的时候就在地图上找到东京的各家拉面馆,自己写了个程序,按照拉面馆评分和距离自己旅游路线的远近,使用算法找到了每顿饭的最优解。他买房子的时候写了个程序,按照自己设定的方式根据地点、价格和周围信息计算了每个房产的“长期价值”,然后他忠实地买下了这个软件中排名分最高的房子。他是“量化自我”的坚定执行者,记录了自己做的每一件事、花费的每一分钟,分析了每一顿饭的营养,并且据此搞了一个健身计划,而且实现得很成功。
而小何最大的特点就是干什么都追求效率。他把能让计算机自动完成的事儿全都自动化,他忍受不了自己做需要重复的、“无聊”的事儿。
恰恰是这个特点给小何带来了财务自由。小何的父亲是个儿科医生,有一次为了记录办公室人员考勤,打算去商店买个员工打卡用的表。小何一听怎么都这个年代了还有人这么落后的方法考勤呢?手机 + GPS 不就解决了吗?他让父亲别买那个表,自己花了三天时间写了个自动考勤程序,父亲一用果然好使。小何就把这个应用做成了一个网站(clockspot.com),专门给各个公司提供考勤服务。结果这个网站火了。他开了个公司,只雇了一个兼职客服人员,自己只做做程序的技术维护。这个程序给小何带来了足以整天在世界各地旅游的收入,而他号称每个月只需要工作 20 个小时。
我看小何这个商业模式有很强的运气成分,他不但发现了一个点,而且抢在别人前面占据了这个点。有人认为像 Google 那样的大公司只要随便动动手就能把小何的市场抢走,但是毕竟目前这个点还在。
不过这个故事的精神可不是“市场提供机会” —— 市场里一直都有各种机会 —— 更不是“知识改变命运”“时间就是金钱” —— 而是自动化。你找到一个效率的痛点,写个程序帮人们解决这个痛点,因为程序是自动的,你基本上就一劳永逸了。
这个精神是效率的精神:你不是通过自己多工作而挣钱,你是通过让别人和自己都少工作而挣钱。
但程序员追求效率并不只是为了挣钱……可以说主要不是为了挣钱。而是为了爽。
汤普森采访了很多程序员,效率是他们的一种情感驱动。他们看到各种事物都想着能不能自动化一下,能不能让程序替人做。
这帮人从小写个数学作业都会编程做。有个女程序员说她走在街上,看见街头的行人,都忍不住想象能不能设计一个传送带代替他们走路。她排队上飞机会充满挫折感,被时代的低效率所震惊。有个男程序员有感于自己的亲戚朋友经常抱怨他不联系,就写了一个自动脚本,时不时地、随机地向亲友发送问候短信。还有个哥们把给女友写情书也自动化了。
追求效率几乎是程序员的职业病。有个程序员抱怨领导总爱在开会的时候讲笑话:你知道你讲一个笑话会耽误多少人的工作时间吗?咱们有事儿不能快点说吗?
这不是传统意义上什么“眼里总有活儿”的事儿,更不是受不了自己闲着 —— 而是受不了低效率,受不了别人的笨,受不了局面的愚蠢。这也不仅仅是能让机器做的就不应该让人做,而是一种美学,是一种欣赏,一种自得:哪怕这个方法只能提高一点点效率,我也感到很愉快。
汤普森不是专业程序员,但是他自己也喜欢编程,写了不少自动化脚本。他有个项目是这样的。作为作家,汤普森为了让文章的词汇量显得更有文采,会经常查阅同义词词典,看看能不能找到好的替代词。电子版的、网上的同义词词典很多,你要做的就是用浏览器访问一个网站,输入一个词,按回车就行,这够简单吧?汤普森认为还不够。他通过搜索,发现有个网站提供可以用程序直接调用的词典查询的 API 接口。他写了一个脚本,只要在自己的终端直接输入一个命令,就能返回一个词的同义词。
这个做法跟在网页上查询有本质区别。脚本返回的只是同义词,而网页返回结果的时候会附带各种看得见和看不见的东西。网页查询要耗费多出很多倍的计算机时间。
但是你能感觉到那个节省下来的计算机时间吗?这个脚本的作用有多大呢?汤普森估算了一下,假设他写作的时候每小时查询两次、每次节省2秒钟,他每年大约因此节省了一个小时 —— 远远抵不上创造这个脚本花费的时间。
但是他每一次用自己的脚本查询同义词,都会感到一阵快感……“就如同效率的毒品流过血管”。
计算机科学家、Perl 语言的发明人,拉里·沃尔(Larry Wall),有句名言:『懒惰是程序员的一个核心美德。』
好,那既然懒惰是程序员的美德,为什么有那么多程序员整天加班,中国程序员还流行“996”呢?
从追求效率这个角度来说,程序员加班是个听起来有点荒诞的事儿。这就好像厨师营养不良、作家抱怨找不着书读、警察担心自己的人身安全一样 —— 这些事儿都有可能是真的,很多厨师自己吃的营养配比真的有问题……但你可是厨师啊!你肯定不是没有条件做,你是没做好,你是缺乏这个意识,你的职业荣誉感受到了威胁。
美国程序员不流行加班。大部分人上班晚来但是不晚走,很多人每天实际工作时间根本不到八小时。硅谷有些公司爱加班,特别是创业公司会很忙,但是总体来说,编程是一种比较轻松的工作。
编程不但是脑力劳动,而且是一种技艺,甚至可以说是一种艺术。你得看谁聪明,不能看谁工作时间长。好的程序员必须对效率极其敏感,他会强烈地在意代码够不够简洁够不够高效,而不是写了多少行。
汤普森讲到 Facebook 公司一个叫 Yan Jinghao 的程序员。他一年的总编程时间大约是 1000 个小时 —— 相当于每个工作日 4 个小时。他在 Facebook 工作三年总共写了 39 万行代码,但是他给公司删除了 50 万行代码:相当于每小时删除 39 行。他对公司代码库的贡献是“负”的。对此他感到很自豪,因为他提升了公司代码的效率。
所以编程这个事儿,你不能比谁写的代码多,而应该比谁写的代码少。你不能看谁最后一个离开公司,应该看谁最先把活做完。
中国程序员为什么 996 呢?我看过一些程序员的讨论,没有人认为真的是活儿太多做不完,也没有人认为中国程序员比美国程序员笨。大家都抱怨是管理的问题,是对工作的评估方式的问题。
我理解这可能是因为中国公司没有建立一个讲效率的文化。但是这不要紧,我相信局面会好转的,因为程序员自带讲效率的种子。关键是管理者应该尊重程序员,搞一个工程师说了算的企业文化。
效率是程序员的个性发挥。这是你让世界按照你的想法稍微变一变,往你喜欢的方向稍微转一转。这是程序员的自我实现。
贴图素材&图片:Google Image
文字:得到APP