返回社区

多产的导师与系统自动化者

被人贴上“万事通”的负面标签?也许这其实是件好事,尤其是在指导来自不同背景、不同编程经验和不同文化的人的时候!Isaac 自称是科技迷,也是个“万事通”……除此之外还有很多其他身份!

在 Youtube 上观看
时长 37分钟

Jonathan: 大家好,欢迎来到 Exercism 社区播客。今天很荣幸请到了 Isaac,他是我们的维护者兼贡献者之一,最近在我们的 GoHort,也就是我们的学习小组里,指导了很多学员。这个学习小组我们每次办 30 天,算下来现在应该办过两次了,主要是 Go 和 Elixir 那两期。Isaac 参与了 Go 赛道,非常棒。Isaac,热烈欢迎你。能不能先跟大家聊聊你住在哪里、来自哪里,以及你是怎么进入科技行业的?

Isaac: 好的。我住在加州,具体在圣何塞。说实话,我进入科技行业是因为我哥哥喜欢搞技术,而我那时候他做什么我就做什么。我们家兄弟姐妹很多,平时会一起玩,不过人和人之间的亲疏也不一样。我有一个哥哥,我特别喜欢跟他待在一起。他倒未必那么喜欢带着我,但我总是跟在他屁股后面,想跟他做一样的事。他 15 岁左右的时候,在家里翻出了一本《C for Dummies》,我记得当时我 9 岁。于是他开始写 C,我心想,他做这个,那我也要做。那个年纪我写的程序都很简单、很基础,无非就是“你叫什么名字”“你好,Bob”这类练习。一点都不复杂。总得有个起点嘛,就从那儿开始呗。我当时觉得,哇,你居然能打印出那个会发出声音的字符,太酷了。我写过一个程序,真的就只是打印出一个反斜杠加 a。可我当时才 9 岁,就在写 C 程序了。我们家有一台很旧的 Windows 3.1 机器,启动后进入 DOS,我哥哥写了一个批处理脚本,电脑一开机就会显示一个菜单,可以选启动 Windows、启动游戏之类的,还有个游戏菜单,输个 5 就能启动 Warcraft 什么的。所以家里后来装了不少别的游戏,我也跟着写批处理脚本。从那以后就一发不可收拾了。我哥哥上大学读的是计算机工程,我又一次想,他做这个,那我也要做。所以 9 岁我就开始写 C 了。到了高中,我在写……Visual Basic 6。高中时我有一台 Palm Pilot,在上面写过各种程序。我的数学老师人特别好。我当时在一所很老派的……

Jonathan: 是不是就是那个……你还记得吗,他们想推出那种 iPad 之前的东西,没多少人拿到手,上面有那种用笔写写画画的功能。大家都觉得超酷,因为笔抽出来的时候“嗖”一下,然后你就可以在上面点来点去。它其实……我一直记得这个,因为后来 iPad 出来了,大家都在说,哦,早了点儿。Palm Pilot 就是超前了那么一点,你懂我意思吧?

Isaac: 它风光了大概 10 年吧。对,就是那个 Palm 的 Graffiti 手写输入。有一个小小的输入区,你得在上面写字,写法差不多是根据字母表来的。比如 A 就是一个三角形,F 就是一个直角。对,我高中的数学老师说,嘿,既然程序是你自己写的,考试的时候用它也没问题。所以高中时我就在写 Palm Pilot 程序,特别酷。我大学读的是计算机工程。当时大家在聊脚本语言,我不太清楚那是什么,就随手学了 Perl。后来我研究生毕业,被 Google 录用了。2013 年,他们把我从东海岸调到了加州。差不多 10 年前,我就是在那里开始学 Python 的。过去 10 年,Python 一直是我的主要语言。我是在 Google 起步的,写代码的风格深受 Google 风格的影响。然后大概……4 年前吧,我想是 2018 年左右,Google 开始在公司内部推广 Go 语言,我那时候就开始学 Go 了。

Jonathan: 很酷。Isaac,你说到 Google 风格,是不是有一套明确的“就该这么做”的标准?还是说……能展开讲讲吗?这个挺有意思的。

Isaac: 编码风格未必是“正确”的做法,更准确地说,是要求大家都统一遵守的做法。有人说,一个好的妥协、一笔好交易,就是让谁都不太满意的交易。没人对那份风格指南完全满意,但只要大家都照着做,代码看起来就是统一的。这意味着,任何人都可以拿起 Google 代码库里的任何一段代码去修改。只要大家遵循同样的风格指南,代码就是统一的,你不用去琢磨,哦,这个代码库用 4 个空格缩进,那个用 2 个空格,或者这个用这种命名规范、那个用那种。整个代码库里所有东西的做法都一样。没有人对里面的每一条都满意。每个人都有自己的地方,希望当初要是那样写就好了。但既然有一份成文的风格指南,而且是公开的,你直接在 Google 上一搜 Google Python 风格指南就能找到,它会告诉你我们在 Google 是怎么写代码的。只要大家都守着这份指南,代码看起来就非常统一。能随便打开任何一个代码库都不觉得意外,这感觉真好,不会出现“哦,他们这儿会换个写法”这种状况。

Jonathan: 这是不是也是 Go 特别适合这种氛围的原因?因为它自带格式化,就是规定好了“就得这样”。你能明显看到 Google 的影响。

Isaac: 是啊。我也说不清到底是 Rob Pike 受了 Google 做法的多少影响,还是他影响了 Google 的做法。我不确定是谁影响了谁,但 Go 确实把这一点推到了另一个层次……比 Python 更甚。Python 有各种不同的风格,大家还会调整自己的 linter,让它接受不同的写法。比如在 Google 内部,Python 用的是 2 个空格缩进,因为有很多代码嵌套很深,他们不想要一整面墙的空格。而在外面,大多数人用 4 个空格,Python 文档里差不多也是这么写的。但说到 Go,他们就把这件事推到了另一个层次:语言本身就带了格式化工具。只有一种格式化方式。网上根本不会争论哪种写法才算对,就一种。

Jonathan: 这省掉了大量来回扯皮。这么说吧。对,挺好的。

Isaac: 是啊。

Jonathan: 那好。你刚进 Google 的时候,是完全没碰过 Python,还是稍微玩过一点,还是说对你来说很轻松?因为你刚才说得好像是,先拿到了 Google 的工作,然后才,行吧,学 Python,开干。

Isaac: 没错。在加入 Google 之前,我相信我从来没写过 Python。我当时写了大概 1、2 年 Perl。算起来,我其实在那之前几年就开始写 Perl 了,第一份暑期工作就是。那又是另一个故事了。我是在加入 Google 前 6 年开始写 Perl 的,所以那会儿 Perl 写得不少,也写一点 Bash,对脚本语言算是熟悉。但 Python 我确实从没写过。不过,只要你接触过足够多的语言……再学一门新语言,学习曲线就没那么陡,因为大部分结构你都见过了,无非是语法稍有不同,工具集稍有不同。很多东西其实是老一套,只是写法变了。各种结构往往都差不多。所以当你掌握了 4 门语言之后,再学第 5 门就是,哦,只是写法稍微不一样而已。

Jonathan: 嗯嗯,有意思。你刚才说到第一份工作的时候笑了,像是高中那会儿的。那你……你是一直都想着,我要做工程,我要搞计算机这一类的事吗?这是一直以来有意识的想法,还是说,只是因为你天生就适合这个,你也喜欢,就这样了?你当时是怎么……

Isaac: 大概是吧。我一直很想追随我哥哥的脚步。他读的是计算机工程。他开始写程序的时候我还小,我跟着他一起学,从小就开始写程序。他去读计算机工程,那就是……你知道,我想做和他一样的事,而且我写程序的时候也确实很开心。所以我从进高中的时候起,那会儿哥哥已经上大学了,我就知道自己想走这条路。

Jonathan: 他比你大几岁,听起来他对你这个人的影响非常大。你还有多少兄弟姐妹?还是说,在你眼里他就是最好的那个?

Isaac: 我有 8 个兄弟姐妹,但他肯定是跟我最合得来的那个。怎么说呢,我和其中几个处得比其他人更好。有 8 个兄弟姐妹,总会有亲疏差别。我跟他相处得特别好。我们想法经常很像,兴趣也接近。我们总是聊电脑聊得特别起劲,现在还是这样。他太太不喜欢这变成饭桌上的话题,她会说,吃饭的时候别谈工作。我们就是总在聊编程、聊技术。很难说清这里面有多少是我单纯想学他,又有多少只是因为我们兴趣相投。我们现在肯定兴趣很接近。这有多少是天性、多少是后天影响,我也说不清。我没办法判断,其中多少是我在模仿他,多少只是我们兴趣本来就相似。但既然我从小就跟着他走,我在后面跟,他在某种程度上铺路,我跟着走。

Jonathan: 嗯,真不错。那他现在在哪儿?就是好奇问一下,他还在东海岸吗?

Isaac: 他还在东海岸,做技术工作。我们曾经在同一家公司待过很短一段时间。

Jonathan: 好,挺好的。就是这样。真不错,我就是好奇问问。那么,有件事想聊聊,你在我们刚刚结束的这一期学习小组里参与得特别多。最近这一期学习小组,尤其是 Go 那期,我们做了 30 天的活动。那你之前在 Exercism 的参与,主要是在做维护,但据我了解,你也做了不少指导。你觉得这两者之间的分配怎么样?我是说,你当初是怎么遇到 Exercism 的?你又喜欢在哪些方面做贡献?

Isaac: 我最初遇到 Exercism,是因为我想重新学 Haskell。我在 Google 上过一门 Haskell 101 的课,挺有意思的。然后我心想,哦,我应该多花点时间在这上面。结果后来就搁下了。再后来我又想捡起来。

Jonathan: 那我们就下次见。

Isaac: 学任何语言,我都觉得最有效的办法就是真的去写。而最容易坚持写下去的办法,就是有一个非写不可的目的。我一直没找到写 Haskell 的好理由,所以特别难上手。后来我发现了 Exercism,心想,哦,这也许能帮我多写点 Haskell。我就是这样找到 Exercism 的。一进去我就发现,哦,这里有 Python 赛道,还有 Haskell 赛道,里面一大堆练习,于是我就……掉进兔子洞了?

Jonathan: 然后你就一头扎进去了。

Isaac: 是啊。我开始用 Python 做练习,又开始用 Bash 做练习,还做了几道 Go 的练习。Go Horde 开始的时候,我翻了自己以前的一些解答,发现很多都是 3 年前提交的。原来我在 2019 年第一次注册了 Go 赛道,那会儿就做了一大批练习。而那时候我已经写了 10 年 Python,所以以 Python 导师的身份加入,感觉还挺自在的,现在我大部分时间都在做 Python 练习。后来我开始给 Python 赛道提交 PR(pull request),因为发现有些地方不太对。再后来我又参与到 Bash 赛道里。具体是怎么变成这样的我也说不太清,反正我从给 Bash 赛道提交修复,一路变成了 Bash 维护者。

Jonathan: 就这么简单。我是说,这就像,报名之前可得想清楚,对吧?

Isaac: 是啊。后来 Glenn 把 Ock 赛道做起来了,我心想,哦,我懂 Ock,我喜欢 Ock,那我就跟着一起干吧。于是我帮着把 Ock 赛道的练习建了起来。我不太确定,但我想是 3 年前,我看到 Go 练习的时候,就把整条赛道做完了,然后有个导师说,哦,你把所有练习都做完了,也许你该来当导师。我不够格,我写 Go 的频率不够高、不够规律,还没到能自如指导别人的程度。所以我算不上真正的 Go 导师。不过后来我加入了 Go Hort,看到一堆人想找人指导,我就想,行吧,我可以报名当这个月的导师,帮帮忙。但其实我最近是以学员的身份加入 Go Hort 的。然后我就打算从学员区……挪过去了吧。

Jonathan: 你就是从学员那边挪过去的,大概吧。报名前真得想清楚。我跟你说,这好像已经成规律了:你报名做一件事,最后却做成了另一件事。不过挺好的。那么,具体到你在 Go 赛道上指导学员的时候,你见到最多的问题是什么?我是说,Go 赛道,我猜有不少经验丰富的开发者参加,就是那种在开发上有一定资历的人。但你注意到哪些是大家普遍会卡住的地方?有没有什么规律,或者你觉得,哦,这个很常见,出现得还挺一致的?

Isaac: 我也说不好。我见过的大多数指导,对象都是已经完成解答的学员。多数情况下,大家在来找指导之前就已经把练习做出来了,所以在我参与的大部分交流里,他们其实并没有卡住。呃,所以多半是,你知道,他们已经成功完成了一道练习,然后很多反馈都是,呃,有没有更高效的做法?有没有更好的算法?呃,出现得特别多的一种情况是字符串拼接。在 Go 和 Python 这类字符串不可变的语言里,做大量字符串拼接效率不高。所以经常会说,嘿,你可以用数组来构建,最后再把它们拼起来,或者用 Go 里的 string builder。所以很多是在引导他们走向更好的……我想说是模式,最佳实践和模式。感谢观看。

Jonathan: 好,不错,挺有意思的。那现在,你平时的工作日是什么样的?开发在其中占什么位置?你在这行也做了挺久了,一天下来大概是什么样?有哪些挑战?目前的工作里,哪些部分是你喜欢的?

Isaac: 我做的是网站可靠性工程(SRE)的岗位,大致类似 DevOps,也包含一些系统管理的工作。过去 10 年左右,我一直在参加值班轮换,随身带着 pager。所以我每天的工作很大程度上取决于这周是不是我值班。值班的时候,主要就是盯着 pager,还有工单队列、支持队列,确保任何出问题的流程或故障都能被诊断出来并修好。这大概是每 6 周轮 1 周,具体看团队现在有多少人。其余时间就不值班了。

Jonathan: 嗯。

Isaac: 我花很多时间在自动化上,所以很大一部分工作是找出那些繁琐的流程,让它们没那么繁琐。也许……出现这种情况可能有它的理由,但一般来说我发现,一旦出了问题,我们就得手动跑这些命令、那些命令来修复。我就在想,为什么要手敲这些命令?能不能写个 Python 脚本把这些全干了?或者能不能改进工具,让它不出错,自己就把问题接住?很多精力就是花在改进我们日常运维系统的方式上,让人的参与更少,或者说不需要那么深度地参与,系统也能平稳运行。

Jonathan: 那你平时的工作,你喜欢去发现那些可以优化的小地方吗?你的工作里,有多少是在被动应对,然后从应对中发现,哦,这是个机会,又有多少是主动去找这些可以优化的小地方?一般来说这个比例是怎样的?

Isaac: 我喜欢自动化,这可能是我工作中最喜欢的一点,就是能把事情自动化。它不总是被动的。我是说,被动既可能意味着有东西坏了,也可能是,哦,你知道,大家在跑某个命令,我发现有个命令我们经常复制粘贴,能不能改好一点?有时候我看到有人改了某个地方的运维手册,或者改进了某条命令,我就会想,哦,这命令挺乱的,我能不能干脆从头重写一遍?当然,光有关注还不够,还得有吸引力,用词要少一些大词,语言要更好,诸如此类。你得靠动手去做,才能真正把这些拿下来。老实说,仔细想想,我工作里的每件事其实都挺合适的。我是个很有动力的人。不管在哪儿工作,只要是我真心喜欢的工作,我都会……

Jonathan: 你要这么说的话,也可以叫制造。

Isaac: 重构。发现有些工具用起来很麻烦,就决定把它们重写,或者在它们外面套一层封装。我会……对,比如看到某个大型复杂程序的代码改动,就觉得,哦,这程序一团糟,我能不能进去把它重写或者重构一下?有时候也不只是重构,还会做新工具。比如,哦,我们有个流程要走 20 个步骤,那我就把这一整套都塞进一个程序里。很多时候确实是,你知道,我得想办法发现这些东西。有时候是因为我被指派去做一组任务,然后我就想,我不想手动跑这些。有时候只是碰巧注意到,比如我在查某段代码,然后发现,哦,这边另一段代码,由另一个团队维护的,写得实在糟糕,那我来重构一下,或者换成现代的库之类的,对。

Jonathan: 所以很多是……就是能看见。那你有多少自主权?你是不是有很大的自主空间,可以到处转悠,看到就上去改一改?我是说,这肯定挺好玩、挺享受的吧。

Isaac: 我的经理给了我很大的自主权,这点特别好。我现在已经不在 Google 了,我也说不清这种自由度有多少来自 Google 的经历。在 Google,大家都很乐意上去掺一脚,说,哦,我注意到那边,你知道,我刚好用过这个库,它这里可以这样改进,那我顺手把它修了吧。呃,我还在创业公司待过很短很短的一段时间,那里的文化很不一样,开放程度低得多。呃,在那家创业公司,大家把自己的代码库看得很紧,不太接受别人来改自己的代码。我会说,哦,这个代码库有个问题,我能不能改一下,结果就是,别碰那个代码库。

Jonathan: 对,别碰。不过这挺有意思,因为……你会以为创业公司更应该像是,行吧,把活干完就行,怎么省钱怎么来。可实际上,也许 Google 反而更能容忍这种做法。抱歉,我刚把灯打开了,因为我们现在……各位听众,这边现在没灯,开普敦时不时就停电。这一下把自己晃得眼花,不过没事。回到刚才说创业公司文化那点,挺有意思的:人们反而更执着于“这是我的东西”,结果可能反倒拖了后腿,你懂吧?

Isaac: 是啊。我也说不准创业公司是不是就一定和开放……那种玩着干活的文化契合。在 Google,大家做的很多事都像是在玩,因为他们喜欢自己做的事,是因为喜欢才做。大家在这点上很友好,也很开放。另一些职场文化则不太一样,不一定是出于喜欢才做事,更多是“这是一份工作”,或者“这是我的代码,我知道它怎么运作,我不想别人来碰”。这些职场文化是怎么变的,我也不太清楚。但 Google 确实培养出了一种氛围:所有人都能拿到全部代码,都被赋予修改它的权力,你觉得怎么做对,就去做。而我现在的这份工作,现在的经理,也给了我很大的自主权。他会说,行,你发现了要修的东西,那就去修。你找到了可以改进的地方,我就不挡你的路,需要我做什么告诉我。所以很多事情我可以自己做主,只要我发现,哦,这里我能做得更好,他就会说,好啊,去吧。

Jonathan: 好,不错。你那家公司总部在东海岸,我没说错吧?所以其实是远程工作?我记得你说过你本来准备搬过去,结果疫情来了,那整件事就不了了之了。远程办公、距离、时差这些,你感觉怎么样?对你有影响吗?还是说……

Isaac: 我确实很想念在办公室里和人当面交流。呃,这是肯定的。呃,时差方面,我的团队对时差非常……呃,非常照顾。我比团队其他人晚 3 个小时。呃,每天有个简短的站会,我参加不了。我们负责 2 个不同的产品,所以每天有 2 次站会。呃,第一次我就赶不上,团队在这方面对我非常照顾,内部大量使用 Slack。他们很善于开一个每日的 Slack 讨论串,把出现的问题列出来,这样我就能跟上进度;如果有需要,他们会 ping 我。呃,我会尽量及时回复,呃,早上也会尽快把那些东西处理掉。所以,呃,确实有点……时差不理想,但也没那么糟,我们处理得还算不错。呃,反过来也有另一面:他们知道团队里有个人醒得比较晚。所以有同事会说,你知道,东海岸都下午 6 点了,哦,这个坏了。嘿,Isaac 在西海岸,他还能帮忙看看,因为他那边才下午 3 点。呃,所以两个方向都有好处。呃,对,还有……

Jonathan: 嗯。

Isaac: 我在……对,我是 2019 年离开 Google 的,抱歉,是 2020 年。我 2019 年面试,本来应该 2020 年 5 月入职。我原本打算 2020 年 4 月搬过去,但疫情开始了,办公室也关了,然后就一直是,哦,办公室还没开,等一开他就搬过去。结果疫情过了 2 年,他们又开始重开办公室。我就想,你知道,我不太确定还想不想搬了。纽约听起来确实很让人兴奋,各种店铺开着,还有演出场地之类的东西。但有了疫情之后,很多这些听起来就没那么让人兴奋了。所以在远程工作了 2 年之后,我转成了远程岗位。

Jonathan: 那你是喜欢城市,还是乡村,还是介于两者之间?因为纽约就是城市,百分百的城市,这没得说,你懂我意思吧?所以那会是个不小的转变,我猜。不过还是很让人兴奋的。

Isaac: 我从小在大城市长大,所以对城市生活并不陌生。我现在住在郊区,喜欢徒步和骑车,尽量多到户外去。所以我挺喜欢住在郊区,附近有很棒的徒步和骑行路线。搬到纽约会是个很大的变化。但我想,偶尔换个活法也不是坏事。要是我在纽约过得不开心,大不了再搬走。

Jonathan: 这事其实也没那么难。不过挺好的。那现在,如果我没说错的话,你大概有很多时间都对着屏幕,在办公室或者居家办公之类的地方。你会每天都出门吗?你怎么平衡一直对着屏幕的生活,还是说你每天会留出一段时间,跟自己说,我得出去走走,去做点别的事?

Isaac: 我也希望我能做到。有些日子、有些月份、有些年份,我做得比别人好一些。2020 年,我几乎每天骑车,坚持得还不错。大多数周末我都会出门,尽量每周去徒步一次。这方面我做得不算好,但我会去徒步。这要看季节,我在加州,有些星期特别热。我们刚经历过一波热浪,气温连续一周多都在 40 摄氏度以上。这种天气出门就很难受。我们在加州,还有山火,所以有时候一连一两周,外面的空气质量都不太适合呼吸。所以在加州的某些星期,去户外确实很有挑战。再加上疫情期间待在室内也不容易。所以确实有些星期我待在室内的时间比平时多得多。不过我还是喜欢到户外去。你知道,我曾经有过连续半年,每两周至少去徒步一次。

Jonathan: 然后呢。

Isaac: 也有过连续半年、每个月去露营一次的时候。所以有些阶段我状态更好,也有阶段我一连两周都待在家里。

Jonathan: 嗯,挺好的。那 Isaac,接下来……也许你还没想那么远,但未来 5 年对你来说大概是什么样?你有什么想法吗,还是说,你想自己创业,或者想做点什么,又或者只是,啊,好好享受生活,享受当下?

Isaac: 我……搬到西海岸之前,我以为自己对未来会是什么样还算有数。但这一切被彻底打乱之后,让我明白,预测明年会发生什么都已经很难了,更别说 5 年。我现在挺开心的。我最近刚换了工作,大概 2 年、2 年半前换的。我挺喜欢现在这份工作,所以短期内不觉得会有什么变化。接下来 2、3 年,甚至 5 年就这么做下去,我也乐意。我喜欢住在加州,喜欢能去徒步、骑车、露营这些。所以短期内我不觉得自己会离开加州。我也不觉得自己会很快离开这份工作,因为我确实很喜欢在那里工作。所以我挺满足的,没有什么大的……没有计划什么大的变化,不过话说回来,这事真的很难讲。

Jonathan: 不错。好,我还有几个问题,很想听听你的看法。第一个可能不是你事先准备过的,是这么一个……假如说……现在有 10 个人走进你的办公室,10 个完全陌生的人,他们对编程一无所知,里面有竖琴师、园丁,什么人都行。你会给他们哪 3 条最重要的建议,教他们怎么开始学编程?就是如果非要浓缩成,无论如何都该做的事,那会是哪些建议?

Isaac: 我给的头号建议是,尽量找一个你能用编程解决的问题。这样你就有了一个具体的目标、一个实实在在的项目,它会给你动力。如果心里没有明确的目标推着你往前走,学下去会非常难。和其他技能一样,学编程确实需要相当的韧劲。你得坚持。一开始会非常吃力,也会非常挫败。没有东西推着你往前走,很容易就放弃了。所以只要可能,找到一件你真心想用它来做的事,帮助会很大。这些建议其实是一回事:你必须坚持到底。对自己有耐心,并且明白自己是在学一项新技能、一定会失败很多次,会很有帮助。我见过一些人尝试学编程,一遇到挫折就烦了,说,我平时做什么都挺行的,怎么这个上来就不顺。我就说,对,失败本来就是学习过程的一部分。如果你对失败感到很不自在,学新技能就会格外艰难。你得对自己有耐心,对过程有耐心,就是得多坚持。

Jonathan: 很有用。我是说,我觉得这就像……我也是刚刚才明白方法是怎么运作的。这个过程就是一路走过来,因为,嗯,人们讲东西的时候,教东西的时候,默认你懂的东西太多了,尤其是这样。比如突然之间所有人都在抛“方法”这个词,我就想,方法到底是什么鬼?这是怎么回事?直到参加了 Go 那期学习小组,我才开始意识到,哦,方法是这样运作的。这有点像恍然大悟,但我得在那个环境和那套术语里泡很久,它才会慢慢渗进去。我觉得对我来说最大的收获之一,就是不要想着一次学完,而是每次啃掉一个简单的概念。因为所有东西关联得太紧密了,最后你就能开始把思维模型一点点串起来,这非常重要。所以这是个很棒的小方法。我会告诉大家,这是 Isaac 的建议:对自己有耐心、对自己好一点,一点一点啃。太好了。好,最后一个问题,问完就让你去忙你一天剩下的事。我们团队聊过一个概念,叫你在技术领域愿意死守的那座“山”。这听起来挺戏剧化的,也的确火药味十足。意思基本上是,你认为在技术领域里哪一条是绝对关键、不可动摇的心态或观点。举个不错的例子,呃,说个很琐碎的,如果做前端,我永远是先把功能写好,再去写 CSS。先功能,再逻辑,然后才是别的。也可能是,你知道,我们有一位 Rebecca,负责 Unison 赛道。她说,与其要一个很有主见、很难共事的天才,她宁愿要 50 个真心喜欢在团队里一起解决问题的人。那个天才光是管理上就要占掉所有精力。那是她的观点之一,我说得比较委婉。那你在技术领域愿意死守、绝不让步的那座“山”是什么?

Isaac: 这大概深受 Google 做事方式的影响。在 Google,有一个叫可读性(readability)的概念,要求代码必须容易读。我写代码的时候,很大程度上就是希望我的代码读起来、理解起来都简单。我见过很多代码,里面特别强调效率、基准测试、让代码跑得更快。我常常承认,我这种写法未必是最高效的,但如果我发现这样代码更好读,那我宁愿要效率不高但好读的代码,也不要极其高效却难读的代码。你知道,有句很流行的话,我不确定具体是谁说的,叫“过早优化是万恶之源”。每次有人说,哦,这怎么能更高效一点?我就会问,它需要更高效吗?你有没有遇到过,你知道,你在生产环境里跑,遇到过效率问题吗?它在生产环境里用起来太慢了吗?如果你实际上并没有遇到过生产环境里代码需要更高效的问题,那你为什么要让它更高效?它现在就挺好读的,也更好维护,别人也能看懂在干什么。你为什么要为了省几个 CPU 周期,就放弃写得清楚、用起来顺手、也容易维护的代码?电够便宜,CPU 也够便宜,我们没必要单纯为了优化去优化代码吧。

Jonathan: 嗯,这种事总让人想笑,因为就是那种我会说……我们的程序编译加运行花了 30 毫秒。然后他们说,哦,但我们让它降到了 20 毫秒左右。我说,我真分不出来。我分不出哪个更快、哪个更慢。反正都挺快的。所以我觉得你说得很有道理。我相信我会很喜欢读你的代码,说得好。Isaac,非常感谢你抽出时间,感谢你早起,也感谢你忍受南半球的限电。还有我坐在一片漆黑里,我相信这对你来说大概挺好笑的。但真的很感谢你的时间。也期待在以后的学习小组、指导直播之类的场合再见到你。感谢你为 Exercism 所做的一切贡献,方方面面都是。非常感谢。呃,再次感谢,回头见。不,是我的荣幸。保重,Isaac。再见。

Isaac: 再次非常感谢你。不,是我的荣幸。保重,Isaac。

来自我们社区的更多故事

倾听、学习,并从我们的社区成员那里获得启发。