极资讯

  • 关于我们
  • 全栈AI助手
极资讯
这里有好的科技资讯
  1. 首页
  2. IT
  3. 正文

左耳朵耗子的话-陈皓2021年直播访谈摘录

2023 年 5 月 19 日 3690点热度 0人点赞 0条评论
昨天,一整天都不开心。朋友圈里,几乎每翻一屏,都能看到有人在转左耳朵耗子离世的消息。作为一名创造者,左耳朵耗子为这个世界留下了很多作品,比如他的博客 CoolShell、他的极客时间专栏左耳听风,以及他的公司 MegaEase。感慨世事无常的同时,我也在回忆,左耳朵耗子讲过的那些有分量的话。
对于生者来说,左耳朵耗子是一个好榜样。他近乎偏执地追求技术驱动创新,他敢于挑战权威、从不盲从,他知世故而不世故的作风,将会永远留在我们心里。
我司的池老师和陈皓是多年老友,他 15 号凌晨就得知了这个噩耗,中午他写了一篇悼文放到了墨问便签上,看得让人泪目。

沉痛缅怀好友左耳朵耗子
今天早上来了公司,我猛然想起两年前,和他的连麦直播。那一次,他完整地阐述了他为什么创业,他的梦想是什么,他这辈子想做件什么事。记得当时弹幕区里有用户说,这场直播,是自己人生觉醒的分水岭,意义非凡。我赶忙找到了那期直播的视频(差点丢了),然后约同事和朋友一起,完成了内容精编。
这是左耳朵耗子给我们留下的精神遗产。我们在怀念他的时候,不妨去理解和实践他的人生观和做事观吧。以下,是具体内容。
创业
为什么会创业?
离开阿里的时候其实没想过要创业,因为那时候最重要的事情是父亲病危。我爸胰腺有些问题,医生说得做手术。不做手术肯定撑不了多久,做手术的话还有 50% 的概率能够救回来,但是需要观察一年。
当时我就不知所措。人到中年,基本上都会遇到这些问题,中年危机啊。那年我 38 岁,工作出了问题,小孩上学也出了问题,父亲还生病了,所有的事情堆叠在一起,我的头发很快就白了。
从阿里出来后,我就一个人在家里待着,安心陪父亲。没想到的是,这时候,几乎国内所有的云计算公司都来找我,还有一些创业团队,我就帮他们解决各种各样的技术问题。那段时间,我就感觉技术人的技术能力是被社会认可的,而且大家的付费意愿也很好。
记得当时,一家创业公司找我。他们花钱买流量,但大流量来了后,系统接不住,用户没办法注册,等于投放的钱打了水漂。于是,我帮他们解决这些问题。
他们系统是 PHP 的,我直接在线上帮他重构,没有重构源代码,只是重构架构。然后大概干了两天吧,基本上就可以救火了。我用了一些纯运维的手段,在不改代码的情况下,帮他搞定这种高并发的营销活动。
这一套都搞定之后,他问我要多少钱,我说两天 5000 块钱,你这没啥技术含量。他赶忙说可不是,我必须得给你五万块,因为你帮我们解决了大问题。
就这样,我一边在家里待着陪父亲,一边帮其他公司解决问题。印象中有一个月,我大概一口气服务了七八个公司,挣了 50 万。算了下,那段时间,我的平均月薪是我在阿里、亚马逊三到四倍的样子。  
我意识到,可以创业了。很明显,市场对技术是有强烈需求的。因为绝大多数好的技术人员都被大公司垄断了,但中小公司也要发展,他们的发展也需要技术,所以他们需要像我这样的一些技术人员,能够帮助他们解决一些实实在在的技术问题。
或主动,或被动地,我走上了创业这条路。我希望能用标准化的方式,来解决客户遇到的问题。之前,虽然我以救火队员的方式,手忙脚乱地暂时帮他们渡过了难关,但心里也清楚,那不是长久之计。
我要创业,做一款标准化的产品。
饿了么的技术故事
再讲个故事,那段时间,我也和饿了么合作过。饿了么的电商,是我经历过的所有电商系统中最难做的。
电商系统中,我觉得第一简单的是阿里的电商,因为它没有库存,所有的问题都是软件层面的问题。
第二是亚马逊,亚马逊有库存,所有的订单都要甩到库存去,但是他们都不是实时的,送货可以隔一天慢慢处理。它不需要实时,你可以用异步的方式解决很多问题。
但像饿了么这种实时订单类型的,就很难用异步的方式做。因为它要解决的问题是每天中午用户集中下单,想在 30 分钟之内吃到午饭,就需要在几分钟之内快速调动所有的资源来为一个订单服务。
当然, 这不只是技术问题,还是个业务问题,涉及商家、外卖员等等链条。不过,它有一个好的地方,就是区域性特征明显,很适合分库分表。
我接触到饿了么团队的时候,他们系统并不稳定,经常会挂。而且有一个比较有意思的现象是如果美团挂了,那饿了么必挂。或者说是饿了挂了,美团也会跟着挂。
为什么呢?因为没有任何一家公司可以在那一瞬间扛住全网的流量。所以,饿了么就想做异地灾备,他们想的是既然我系统经常挂,那我就到异地另外一个机房建个灾备系统。
后来我跟饿了么 CTO 雪峰讲,灾备不行,还是要做多活,而且饿了么天生可以做多活。淘宝是全国人民在任何地方都可以买任何地方的商品,但饿了么是本地消费,上海的在上海买,北京的在北京买。天生就适合做成异地多活。
雪峰一听,觉得这个技术决策太夸张了,步子迈得有些大。我说这事对你们的架构和团队都有极大好处。其实我这人,经常在客户那边都会给出这种比较大的命题,有的客户可能会觉得我不是来帮他们解决问题的,而是来让他们难堪的,哈哈哈哈。
对于我提出的异地多活的解决方案,饿了么的团队犹豫了很久。这中间,我一直在努力说服他们。有一次,我没忍住给雪峰打电话,我说不行,你必须得大张旗鼓地干,要不然无解。
你面对的是一艘摇摇晃晃、力有不逮的小船,今天这补一个漏洞,明天那补一个漏洞,你这种一点点的小修小补是不行的,你必须要大来。而且通过这个项目你可以全部把所有架构都梳理一遍。这多好的事。
后来,他们听进去了,启动了饿了么异地多活的重构项目。为了这个项目,所有的需求全部停掉,全部让路于这个项目。
做到最后,饿了么几乎所有系统都上了异地多活。
记得有一天,比较好玩的是,订单峰值一下子上去了,是平时的 1.7 倍、1.8 倍的样子,就想是不是市场在做活动。结果市场说没有做任何活动,大家都懵了,不知道为什么订单量暴增。
过了 20 分钟,就有新闻爆出来,说美团宕机了。但饿了么北京机房和上海机房是 1:1 的,可以容纳全国所有流量,遇到类似的情况,不会再挂了。后来,我还和雪峰开玩笑说,要不然咱们这样,先让饿了么宕机,然后所有流量就会到美团那边去,美团肯定撑不住,肯定要宕机。这个时候我们再把饿了么拉起来,撑住全网的流量。哈哈哈,这纯粹是在群里开个玩笑。
关于创业方向的选择
为什么我创业会去做网关。其实要讲清楚网关这些东西,我应该放出一个打印的 PPT 出来,像老罗一样拿出一个 PPT,嗯,现在我放不出来(笑)。
我整理一下思路。其实用户来找我无非就是几个事。第一个是要我做高并发的事,比如营销活动。第二个是想提高上线速度,比如可能需要用灰度发布、实时发布手段,来加快速度。第三个事情是用户量很大,速度又很快,系统必然不稳定,所以需要高可用。
你发布速度快,必须要并行发布,肯定要用微服务。不用微服务的话还是单体,所有人都在排期,不可能快。我记得阿里的交易线上就不是一个微服务,很多人都在里面写,写相同的代码,一个大单体往上发布,得排期。阿里那种所谓的“快”其实也是拿人堆,并不是技术上你可以很悠闲的那种快,他是那种很忙碌的快,你通常要加班,如果排不了期就得赶下一期。不可能快的。
所以,所有这些技术都会导向高并发、开发速度要快、并行开发,再加上高可用。最后都会导向只有那么一个类技术,就是云原生、分布式、微服务,还有 Kubernetes。但这些东西是不是能解决用户的问题?并不一定啊。
引导到这些地方,我们再抽象一下,基本上就 4 块,流量治理、服务治理、资源治理,还有数据治理,这四块东西会变成你的基础设施。要解决上层的问题,你的基础设施必须要好,就这意思。
就像我怎么让车开到 180 公里每小时,你先得铺路去,先得把路搞好,就像中国的高铁,并不是车开不快,而是之前铁路不支持这样的速度,所以基础设施不支持,你就没办法快起来。就像要让飞机起飞,必须要有大量大规模的配套设施,基础设施没跟上,你完全做不到。
现在我看到,服务治理有 Java 在做,比如 Dubbo 或者 Spring Cloud,资源治理是 Kubernetes 在做。还有两个事情没有人做,一个是流量治理,我就想流量那么重要的事情,为什么没人在做?另外一个是监控,今天的监控就是整体运维的数据,你必须要有。所以我们公司一开始起来做的就是一个流量网关,再加一个监控。
监控什么意思?我创业的时候,每一家公司都在比谁家的监控指标多,包括饿了么也一样。我记得我在饿了么的时候,有个同学来晋升,他说我们今天饿了么的监控系统可以采集将近 50 万个指标,到明年的时候,我要把它翻成 100 万个指标。
但是,数据太多等于没有信息啊。
有一个观点,数据是没有用的,只有把数据关联起来才有意义。数据关联了以后,才叫信息,我们不是做数据,我们是做信息。信息里面找到因果关系,我们才能有知识,比如说因为这个所以那个,这叫知识;有了知识以后,才能导出公式,我们才能通过公式去完成一些事情。
所有做科学实验都是走这条路的,不断地做实验、拿数据,在数据里面把它标注好,关联起来,然后找信息,从信息里面找因果关系,从因果关系里看看能不能推出一些公式。大概就是这么一个逻辑。
所以我觉得,今天所有监控系统都做错了,都在拼命地采集数据,而不思考这些数据到底里面有什么样的联系。
举个例子,我们做监控系统时,要说清楚这个对外的 API,后面连着多少 service?以及这些 service 运行在哪些 resource 上?又使用了哪些数据库、中间件?你如果说不清楚这些关联数据,是没办法做的。
今天的运维,因为是按技能分工,我只关心我的底层资源,不关心你的应用层。这就导致了一个问题。比如说我来问你,我想下线这台机器,它到底影响哪些用户?
我可以告诉你,在今天,中国没有人,没有任何一家公司,可以说清楚这个事情,包括 BAT。国外可以说得清清楚楚,因为数据有关联,我知道你这台机器到底服务着前面哪些 API,这些 API 有多少用户在用?我说的清楚这个事,因为数据是关联着的。
这就是我们公司为什么要走这条路。一个是拿着流量的调度,另外一个是数据,我觉得这两个事,然后再辅以像 Spring Cloud 服务治理、Kubernetes 资源治理这样的产品,就完全齐活了。这就是整体的基础设施。
我们公司叫 MegaEase,翻译成中文就是“巨大且容易”(笑)。
MegaEase 的 GitHub 地址:
https://github.com/megaease。
为什么我公司会选择 Go 语言?
我可能又要唠叨一点了哈哈。
首先,做流量网关,其实国内现在已经有一些东西了,一种是偏应用,一种是偏控制面。偏控制面的像 Nginx 或者 HAProxy;偏应用的像 Envoy,还有 Java 的 Spring Cloud 或者 Zuul 。但 Java 那些东西的性能又很糟糕,性能好的就在 C 和 C++ 这边,但我觉得语言门槛太高了,一般人是玩不了的。
因为流量调度网关,一定是会有业务逻辑侵入的。有业务逻辑侵入的话,就必然需要大家可以定制、可以在上层进行开发扩展。所以我们选择技术,首先你要有很高的扩展性,而且技术门槛要低。
如果用 C 语言,我相信能够参与贡献 Commit 的人少之又少,Node.js、PHP、Java、Python 都属于门槛比较低的,Go 也是,但是我们又需要兼顾性能。看了一圈所有,只有 Go 语言和 Rust 语言。
但是你要说为什么没有选 Rust 语言?首先 2016 年 Rust 还不怎么样,这几年非常火我们也在用。我想告诉大家 Rust 语言是一个很好的语言,但是我觉得它的门槛也是非常非常高的,甚至会比 C 和 C++ 还要高,真的。
所以我们觉得,要让大家可以去贡献、去扩展,语言门槛放在这里就会导致整个社区变凉,为什么像 PHP 的社区,像 Java 的社区、 Python 社区、Node.js 这种社区很多很多?就是因为门槛低参与人多,所以基于这些方面的考虑,我们选择了 Go 语言,这是第一个因素。
然后第二个因素,为什么我们会选择 Go 语言,而不是其他的?
因为我觉得一个流行技术必须要满足这么几个条件。第一个门槛低。除了门槛低以外还需要有大公司在后面撑着,没有大公司用的话不行,因为大公司用了以后就会在上面贡献更多的特性。
而且大公司用得越多,就一定会有标准化的东西出来,比如 Java、C 和 C++,很多公司都在用,就有一个标准化组织。第三个,社区很重要,必须要有社区。第四个它必须要有杀手级应用。杀手级应用的意思就是它必须要有个成功案例,没有成功案例不行。  
所以这 4 个因素:门槛低、有大公司撑着、好的社区,还有杀手级应用,决定这个技术会不会成功,会不会爆。
PHP 也有大公司用,比如 Facebook,社区也很好,门槛也低,又有杀手级应用 LAMP,所以 PHP 能爆火。虽然我不是很喜欢这个语言,我非常非常不喜欢。像 Java 语言也是全部都有,门槛也低,大公司不断地投入。Go 语言其实也是这样。
但 Rust 目前来说还没看到。Rust 门槛比较高,社区并不活跃。大公司只有 AWS 说要用。杀手级应用才刚刚开始有苗头,一个是 WebAssembly 就是 Web 上的汇编,一个是它逐步进入内核了。所以现在, Rust 有一点点起势的苗头。但是它有一个非常致命的缺点,就是门槛太高。
我很早就总结过:Java 适合做业务层,Go 适合做中间件、Rust 适合做系统层。很多公司业务层也都在用 Go 写,我觉得没啥问题。是这样,业务层 Go 可以写,你拿 Node.js 也能写业务层,我以前都是拿 C 语言写业务层,所以你拿什么东西写都可以。
Go 语言写业务层,我觉得天然有一个好处就是 Go 没有太多乱七八糟的东西,它特别适合写面条代码。所谓的面条代码就是这个业务流程长啥样就怎么写,不需要任何抽象,这些代码也懒得重用,我直接写就好。国内的很多 Go 语言开发者,我觉得可能有 80% 都是从 PHP 转过来的,因为太适合写面条代码了。
但是,当你的架构变得越来越大、越来越复杂,里面一定要有一个框架的。比如 MVC 框架。为什么你发现 Java 代码写不烂,因为它有框架保证。但 Go 语言代码我看烂的就有一大堆。另外,服务越来越多,你开始要运维,做配置中心、服务治理那些中间件,但这方面,你会发现 Go 语言可用的不是很多,而 Java 那边成熟的一大堆。
所以,早期的项目,你用什么语言都行。假如说我们把场景分成 0 到 1、1 到 10、10 到 100,我今天跟大家说, 0 到 1 你爱用什么语言用什么语言,随便你用,Rust、Swift、Kotlin 随便什么,C 语言都行,你要用汇编写业务代码,我觉得都没问题。
但是 1 到 10,你开始要尊重两个东西。第一个你的开发速度要快,第二个你的稳定性、性能这些要保证因为要扩展用户,这个时候,你就必须得选一些工业化的语言。像 PHP 可能就有点受不了,Go 语言或者 Java、Ruby、Python 这些都还可以,因为生产力各方面都还可以。但是如果 10-100 的话,哎呦,我估摸着只剩 Java。所以,关键是你公司在哪个阶段。
有时候我们上网一看,哇,大量都是 Java 不行、Java 反人类、Java 太啰嗦,但是你可以看看,说的那些人他们可能都在小公司哈哈哈,因为他的业务场景的确不需要用 Java,他说的是对的。或者是那些独立开发者,都是从 0 到 1,他爱用啥就用啥,自己舒服就好。
但是你看那些大公司,银行、电商、电信,只要是这种有交易型的用户公司,包括哔哩哔哩所谓的自己用 Go,但是他做电商,你看他用啥,还是用 Java。Java,跑不掉的这个事情。
创业几年的反思
我创业也是很坎坷崎岖的。看似很好的一条路,但是一到创业的过程中,就发生了像中美贸易、疫情、资本趋于谨慎等等各种问题,互联网一片惨淡。现在也还有很多各种问题,所以其实都还是挺不容易的。
但是我坚持“条件受限是好事”,让我可以去想一些更重要的东西。比如很多公司可能想怎么样拿投资,现在我在想的是,怎么样能让我们的公司不拿投资,自己成为一个能盈利的公司,能成为一个真正的公司,不是被人包养需要寄养的一个公司。这些是我每天在思考的。
其实大家也可以去思考,这个世界其实并不完美,你会遇到很多很多让你很无助的事情,我也经历过工资发不出来,自己掏钱给团队发工资的时候,我一晚上睡不着觉,也经历过。
但是我想说的就是,所有的路都是可以走的,不用担心。但不是纯靠坚持,关键是你一定要去想方法,想更好的、更优的解,这个事很关键,千万不要使蛮力,没有太大意义。这是我创业学会的第一个道理。方法会比努力更重要,所以我们不加班,如果团队在加班,我觉得我们肯定方法不对。
我创业学会的第二个道理是关注你的重点,不追小兔子。能让你分心的事情太多太多了,你不知道你前面那座城池有多高。因为你从来没见过,一路上都会有很多很多的小兔子来找你。你一看,这个兔子好看,我来追一下,那边又有一只蝴蝶,你就忘了你未来要去哪。
这两个东西我觉得挺重要,这也是我创业这几年来受到最大的两个教训。我觉得跟我们的人生也是很相通的。
我的梦想
我活到 40 岁了,算是看出来,之所以这些大公司能垄断,就是因为垄断了技术人员,垄断技术人员他就会垄断掉这些技术,用技术来压制你。你们觉得有人写程序抢月饼,他把那些抢月饼的人开掉了,其实他在整个社会上跟你抢月饼,跟所有没有技术能力的人抢月饼,你们根本抢不过他。
所以我一定要把这个抢月饼的技术给到大家。我不觉得这个世界就是那一些公司在垄断的,我希望能够把技术惠及到所有人,大家都能抢月饼,就这意思。
所以我们公司的使命就是,残酷无情地降低技术门槛,让普通的公司可以用到这些高级技术。不是让你用云计算,我是要让你用到解决方案,让你一行代码不改做秒杀,让你系统再差也可以做秒杀,让你可以做高可用,成本很低地做高可用,成本很低地做灰度发布,就这样子,让你可以去跟大厂去抢月饼,他们每天都在用各种各样的技术手段在抢月饼。
我觉得这些技术并不难。难者不会,会者不难。
技术
技术不是用来写 CRUD 的
低代码会不会颠覆外包公司?这是一个很有意思的话题。过去一段时间,云计算,更多是对企业运维侧工作的变革。特别是 IaaS 和 PaaS,它做的都是技术侧的事情,比如怎么管理计算资源,怎么做好监控。
我相信,未来云计算肯定是要慢慢向业务渗透的,因为有一部分业务是可以标准化的。从这个角度看,外包公司可能会被颠覆。很多中小公司并不一定需要一个特别复杂、定制化的产品,它们的需求是可以快速使用。
而快速使用、开箱即用类的产品,有两类。第一,SaaS。像项目管理软件、聊天软件、销售软件这类的产品,企业没有特别多的定制化需求,标准化的产品就够用了。第二,低代码。通过低代码,企业可以搞定一些简单的定制化类的需求。
很多外包公司我觉得还是缺少思考。一个人,一家公司,如果不思考的话,那颠覆你的往往不是不是这些云计算、低代码这些技术,而是什么都有可能颠覆你。因为你只是在按部就班地做事,别人让你做啥你就做啥,你没有去想更多。
客户说我要一匹更快的马,你就去训马了,而不是想着做个汽车。这是外包公司最大的问题,他们没有任何的话语权,客户让他干啥他就干啥。而绝大多数客户,绝大多数时候是不知道自己想要什么的。
低代码肯定会替代一部分简单的 CRUD 类的工作,但我觉得我们技术人员本应该去干更高级的事情,而不是纠结这些。我想说的是,技术不是用来写 CRUD 的,技术是用来创新的,这一点大家要理解。
如果你只是把业务流程给数字化、代码化,那即使在大公司里,你本质也是做外包。不要觉得在大公司里就不是做外包,我给你讲,你很有可能是在给那些运营做外包。要理解,真正的技术是要拿来做创新的,你要去颠覆点什么,要去创造点什么。
基础知识的意义
我一直强调要学好基础底层技术。两个原因,第一,你得知道原理,知道某个技术它是怎么运作的。不要着急,有的人可能会说今天学了也没什么用,你还是要坚持学,因为你慢慢会发现,很多东西都是相通的。
第二,当遇到一些比较难解的问题时,你学到的这些知识就会派上用场。这些难解的问题会让你跟别人拉开差距,懂基础和不懂基础的人,他们的思考完全是在两个层面。不懂基础知识的人,他就在那瞎搞,这里试一下,那里试一下。运气好,碰巧解决了,但也不知道怎么回事。而懂基础的人,他可以很快理解大概是怎么回事。
我举个例子,Linux 操作系统有时候我们会感觉写硬盘很慢,但我想说,写硬盘其实不慢,因为它有 Page Cache。你写硬盘,其实也是写在操作系统的内存,然后内存在一点点换页换到硬盘上。很多中间件,比如 RocketMQ、Kafka,都会使用到 Page Cache 技术。只要 Page Cache 玩得好,那系统性能也会不错。
还有像 TCP 原理。有些时候网络连接会闪断。从 a 节点到 b 节点,中间经过了很多设备,你怎么排查故障?如果你懂原理,那就会容易些。第一,你先看看 TCP 的状态,如果是 time wait 的话,那就是我主动断开连接;如果是 close wait 的话,那就是对方主动断开连接。你看状态就能有一个基本的判断。  
第二,如果没有看到连接建立的话,你需要使用抓包的方式,像什么 tcpdump、wireshark 之类,用这些工具,就能很快定位问题。如果你不懂基础知识,那你很可能就不知道怎么使用这些工具。而没有这些工具,解决那些问题,你估计就得使用蛮力了。  
如何选择技术?
每次直播的时候都有人来问我一个问题:我该不该从 .NET 转 Java、该不该从 Java 转 Go。我不直接回答这个问题。
我不知道这个问题背后的思维方式是啥,就是 .NET 怎么样?或者说 .NET 转 Go 怎么样?我不知道你为什么想问这个问题,你想从我这边得到什么样的答案?想转就转呗。是不是你需要有个人帮你坚定想法,还是需要有人告诉你一个答案,你才去做这个事情?我觉得你不要把人生的一些决定寄托在我身上,你自己的决定最好自己做。
但是,我跟大家说一下,我之所以能够做成今天这个样子,就是我随时都在追逐一些我觉得是主流的技术,它是未来技术。就像我在阿里追 Docker,惹了 3 个团队。但是我一点都不后悔,为什么呢?因为我今天的很多想法都是因为我去用了这个技术我才会有。
包括我学 Java 也是一样,我始终都觉得我必须要靠上主流。说得俗一点,就是你必须要去风口,这个风口猪都会飞。但是,要看那个风口是不是个短暂的风口,千万不要去找短暂的风口,你要去找长风口,风可以吹一辈子的。
因为你是猪,你是没翅膀的,你必须要一直有风吹着你才能飞;否则的话,你飞不起来,因为你没翅膀。你不是鸟,没风都能飞,绝大多数人跟我一样都是猪。
所以你需要站在一个天天都有风吹的地方,比如说你选对了计算机专业,这就是一个风不停地吹的地方。过去也好,今天也好,未来也好,整个世界都是被一堆程序员驱动,就是这些写代码的人在改变着未来。
所以今天这个风口是没啥问题的,那问题就是你有没有站在这个风口里面的主流的技术上。
比如说,我觉得主流技术就是 Java,你又没去学 Java。你看那么多公司,有多少公司在用这个技术?这个技术可以干什么?我用了它我就不会失业,对吧?Go 语言也上来了,你是不是也要去看一下?满世界都是 Linux,你怎么可能不学呢?所以就这个意思。
现在都是手机,都是移动互联网,所以你也得要去了解一下。包括云原生很火,大数据也很火,这些都需要我们去看一下。
但是像区块链这些东西,你就扪心自问一下,区块链是不是所有公司都在用?没有用就让那些猪在天上再飞一会,指不定哪天风停了呢。但是,今天那些很强劲的风已经刮了十多年、二十年了,你为啥不去呢?
那些只刮了一两天的风,你要小心,因为你没翅膀,飞上去以后,风停了你就会摔得很惨。那些刮了十几二十年的风,你还没站上去,要赶快站上去。
如何完成早期的技术积累?
很多人觉得我已经完成了自己的技术积累,已经开始探索马斯洛需求层次理论上层的事情了。是这样子。
很多人知道我的时候,我已经有点名气,我已经去了阿里、亚马逊,反正稍微有点成就。所以你并不知道我刚开始出来是去了工商银行,他们给我分了套房子。我父母是下岗工人,每个月两个人加起来就 200 块钱工资,我是 600 块钱,我们一家三口 800 块钱。  
但当时,我不要了,全部都不要了,我要出去到上海做外包。
到上海的时候我拿 1500 块钱的工资,租房 900 块钱,然后一顿饭要吃 15 块钱,你们算一算,一天的生活费我只够吃一顿饭,而且我还得自己做饭。公司说出差一天有 30 块钱的出差补贴,而且出差还管饭,所以我必须得出差。一出差,我的收入就好很多。
那时,我无时无刻都在想着,我要去更好的地方。那时候我们封闭开发,周一到周六全部待在开发中心,家都回不去。即便这样我也要去学习,周日我也要出去面试,去改变自己。因为那种没有技术含量的事情,我知道再做 100 次,也依旧没有任何未来。
老实说,我跟那些外包公司极度不和,我跟老板吵架,我甚至跟甲方的行长吵架你们相信。因为我把事情做完了以后就在那看书,那个行长过来说,大家都在这外包,你为什么要在这看书?我说我看的又不是闲书,我看的是技术书籍,你凭什么不准看?你安排活给我做就好了,你管我看不看书?我就跟他吵架。
后来我选择职业或者工作的时候,我宁可被公司开掉,也要去做有价值的东西,我从一开始的初衷就是这样子。并不是说今天功成名就了,我才这样选;而是我一直都在这么选,所以我才会有今天的成就,大家要理清楚这里面的因果关系。你不这么选,你永远不可能成为这个样子,明白吧?  
现在我做公司也类似,有些项目我不接就不接了,我要接项目的话,也可以把自己做成一个外包公司,一年也有几个亿,但是有什么意义呢?我设想是十几个亿的事情。
刚才有人跟我说我做的事情太大了,有点不可能。这就对了,因为绝大多数人都不敢想,他们想一想就觉得这事不可能,就离开了,所以我没有太多的竞争对手,明白吗?因为绝大多数人都不敢想,他们一想他们觉得我做不到,就傻掉了,他们自己就给自己思维框架里面就设了一座墙,因为连尝试他都不敢尝试。
至少我敢尝试,失败了又能怎么样呢?反正我不会后悔。我未来老了以后,四五十岁看我这段时间我至少试过失败、至少试了一个牛逼的事情。
那你们呢,自己的人生你连试都不敢试,想都不敢想。人,最可怕的是不敢想。不好意思,讲得稍微有点激动。
成长
996 没有成长怎么办?
“毕业两年,现在公司里头都是 996,日常的业务需求做不完,感觉自己在这个公司没有什么成长,学习也没有多少时间,是不是应该考虑换工作了。”
对于这个问题,我想问,大家想过没有,你找工作的目的是啥?
任何事情我们都得回到目的上,如果找工作的目的是为了找碗饭吃,不让自己饿死的话,那 996 这些我觉得都顺其自然就好,因为这是让你不饿死的一条路。
如果你找工作的目的是为了实现自我价值,那假使现在的公司不能帮你达到这样的目标,你就应该勇敢寻找能够帮你达到目标的公司。比如,我以前是在银行里,从甲方跑出来,房子都不要了,我就是为了实现自我价值,所以我选择公司的标准就是这个公司可不可以帮助我实现自我价值。
这是互相成就的一个事,我跟我的团队的员工也是这样说的:你成就我,我成就你,这是双向的事情。
所以我觉得换不换工作问题在于,你得问一问自己,你想要什么?如果你想要的是提升自我,那就应该去找能够成就你的公司。那些公司也会问你,你能成就我啥?这就是一个相互交换的过程。当我们不断去索取的时候,我们也需要给予。
我贡献价值,反过来,我希望公司也能给我价值。这是互相交换。大家都是在签合同,是雇佣关系,而不是什么劳动关系,不是说是我为你工作,我就是你的人,不是卖身关系,这是个相互合作的关系。所以,如果不能达到目的,我建议你不要去,公司也需要很好的人。好的机会从来都是给好的人,不会给不好的人。  
大公司和小公司的权衡
其实无论大公司也好,小公司也罢,只要你用心观察都能学到东西,但你不用心什么都学不到。
大公司最大的问题就是一个萝卜一个坑,你就只能干你那一小个环节,你就是他的零件。所以很多人觉得大公司里面学不到东西,反而在小公司里可以做一个面的事情,能学得更多。其实不是。到大公司里面,我觉得有三个东西是可以学得到的。  
第一,组织管理。大公司组织的运作方式、体系化的管理方式,怎么调动那么多人来完成一个事;或者一些思维方式,为什么他要做这个而不是做那个。这是大公司跟小公司不一样的地方,因为大公司有资源,可以去试错,试过很多很多错误。每一个东西都是可以让你思考。第二,怎么挣钱,大公司怎么挣钱的。
第三,大公司里面的一些高手是怎么工作的。因为大公司里我觉得应该是有这个世界上最好的人。比如这个世界上最好的运营、最好的产品经理、最好技术人员,都在阿里、亚马逊、谷歌这样的一些公司。所以你进去要去找大公司里面那些聪明的人,跟他学,就像你打羽毛球下象棋一样,你必须要找高手学。就这三个东西,在大公司里面我觉得是最有价值的。
那亚马逊和阿里我学到什么东西?  
在亚马逊,我学到的是他组织整个公司是以微服务架构以工程师文化来分工的,不再以技能分工,是以职责分工,也就是说我让你完成一个事,你得从前端一直干到数据库,干到运维等等,任何一个环节都不算完,必须全部从头到尾干完。  
所以亚马逊拆分组织是竖着切的。比如说这是购物车,这是下单,这是发短信,这是地址,然后有一个团队负责所有事情,这个团队是 two-pizza team,两张披萨可以喂饱,也就是 10 个人左右。所以,亚马逊是小团队可以干大事。这是我学到的,相当厉害。因为以前什么瀑布模型、敏捷,我都觉得有很多问题,直到我看到亚马逊的这种组织方式。
然后怎么挣钱?亚马逊是用技术挣钱,所以你看他做了世界上第一个推荐系统,也做了世界上第一个云计算平台。
他是这么想的:首先一件事情,你必须把它抽象化,因为抽象化之后才可以简化,简化后才可以标准化,标准化的事情才能自动化,自动化的事情才能规模化。
简化—>标准化—>自动化这条线,全部都是技术在干的事,第一次工业革命、第二次工业革命是一样的,只有技术做到了,你才最终可能规模化,之后才有飞轮模型。这是亚马逊的理念。
那在阿里我学到了什么?
第一,怎么组织整个企业。我觉得阿里用一种政委文化。我虽然不太认可,但是这也是一种组织方式。另外是一种激情、热情,我觉得阿里巴巴的员工就像打了鸡血似的,可以为公司拼命地加班。当时双十一的技术支持团队,因为要做连续做 48 个小时,我说你们分成两个团队,一个做第一天,另一个做第二天,看行不行?然后他们说不,我们可以干 48 小时不睡觉,大概是这样。
而且我经常在阿里看到员工说我这事做不好了,我就去跳西湖,或者说有军令状对赌的方式,员工跟公司立军令状说我今年我要做 300 亿,如果做不到,我全年白干,奖金升职都不要给我,但是我要是做上去了,每一分钱我都要参与,我要分给我的团队。
我觉得,阿里让我看到了跟其他公司完全不一样的文化,他们太有热情了,非常非常有热情,比起外企那种闲着整天想着怎么早下班,是两种不同的文化。这是阿里的组织,我到今天我都在想怎么样把人的这种热情给激励出来。  
然后怎么挣钱的?电商,其实核心是想着怎么样让你更快地做决定,因为你做决定的时间越短,我流量的转化率就会越高,对吧,这跟我们做技术一样的,响应时间越短,你的吞吐量就会越大。所以我在买一件东西的时候,做决定的时间越短,转化率就会越高。
阿里挣钱其实跟亚马逊有点类似,但是他们走的不是同一条路。
亚马逊走的路叫简单标准化,我为了要让用户更快地做决定,我要把最好的商品呈现在他面前,或者展示出能够影响用户做决定的那些最关键的因素,比如好评率,所以会有一些 rank。
但国内不是。国内要让用户更快做决定,其实要让用户疯狂。国外是认为让用户在理智的情况下,会更快地做决定,国内是觉得用户越不理智,会越快做决定,这是两种不同挣钱方式。
所以我觉得这些东西都只能在大公司里面学,小公司完全不开窍。那如果你一直在小公司去不了大公司,怎么能快速成长?
其实也能成长,关键是你有没有跟那些聪明人在一块。因为并不是所有聪明人都会在大公司里,越是聪明的人,可能越不喜欢待在大公司。因为他待在大公司收益其实很小,他必须得没有约束,不需要去搞什么办公室政治。
所以你的朋友圈会比公司更重要。你到大公司,也是要看你的朋友圈,这是一个非常非常重要的观点,你跟什么样的人在一起,决定了你怎么样成长;你跟什么样的人在一起,你就会被影响成什么样的人。所以有的小公司也不一定不能成长,关键是你有没有跟对人?他的格局够不够?
我们公司就非常注重员工成长,每周都要让他们去做分享,我会留出大量的时间让大家去学习,甚至要去写东西。因为我觉得写作是一种深度思考,在写作的过程中,你才会认真地去想、去总结、去归纳你所学到的知识。
没有时间怎么办?
这个事情我是这样想的,你得管理时间。有时候向下管理,有时候向上管理。
向下管理就是管理自己的时间。
我们现在有点不好,有手机随时都会来通知,一会就被打断。如果你的时间总是被打断的话,利用效率是不高的,所以不要被打断。你说我们公司里面还有什么钉钉群这些东西,就很可怕的事,反正管理好自己时间。一般来说我喜欢专注做事情,在阿里有些时候我也害怕被打断,我就跑到别的办公区里工作,把手机直接静音,然后一个小时以后再出来回复一波。
然后第二个,向上管理。
比如说是这个事情本来就是得一个星期才能做完的,他就要让你两三天做完,你要自己接了,就不要怪别人。该跟他斗争的还是要斗争,但是斗争是要有资本的。没资本的话,就比较麻烦。
对于类似的事情,我的思路是我可以辛苦,我可以加班,我肯定会努力做。欲先取之,必先予之。等到领导对你、公司对你有比较大的依赖的时候,你就可以跟他谈任意的条件,因为他很害怕你跑了。这就是资本。
但沟通的时候,也不要太直。我在外企里面学到的一个方法叫 Never Say No。他说和用户沟通的时候,你永远不要说不,这事我做不到。你要说 Yes,但永远是有条件的 Yes。比如这种情况下我能做到,那种情况下我做不到。你给我更多的时间,我能做得到,你给我那么短的时间我做不到。或者说在那么短的时间内我只能交付你半成品,你要不要?
就是我永远都可以给你做出来东西,但是总是有代价的,总是有条件的。为什么要这样呢?别人把球传给你,问你能不能做?我们技术人员比较实在,好像只能回答“能做”还是“不能做”,那你就被 PUA 了,知道吧?你知道你被 PUA 是什么概念?被 PUA 就说是你进入了别人的环境里面,它营造了一个空间,把你扔进来,按照他的逻辑,就问你,给你一个答案,你能干还是不能干?那无论你的答案是能还是不能,你都是被 PUA 的。
你要反 PUA 的话,必须得把他拉到我们喜欢的角度来,把这个压力推回去,给他一系列的条件:

Option 1 :我可以再按时完成,但是质量别想。

Option 2 :你给我足够的时间,我保质保量全部交付。

Option 3 :我还是按你这个时间,但是你必须砍掉一些需求。
三个 Option 传回去,就反转了,因为这个逻辑是你的。他这时候就要痛苦地做选择了。到底选 1、2 还是 3?因为每个选择他都要付出一些东西,那就让他去选,不要剥夺他的选择权,不要硬杠,你把选择权传给他,表面上你是在很好的交流,实际上你在 PUA 他。
我给大家再举一个例子,当时从阿里出来的时候,因为工作居住证的一些问题,所以我需要阿里给我赔偿,但当时他们就很可怕地说:你是不是要敲诈我?律师团队这么说。我一想我敲诈多大的罪啊?要把我抓到监狱里!因为我要求的那个数是比他要赔偿我的更多一些,所以我说:
第一个我不要钱,一分钱不要。既然你也认这个事的话,你给我写个道歉信,盖上阿里巴巴的公章就好。
第二个是按你说的赔偿,你不用给我道歉,你告诉我这个钱的事由是什么样子,然后盖上盖公章,不然你说我诈骗,我可不敢要了这个钱。也就是说你给我赔偿这个钱,必须说明这个钱是用来干什么的,然后盖上你的公章,不然我以后说不清楚。
第三个是这些都不需要,然后我们就签个协议,按照我的要求给我。他们自己肯定不愿意出具我可以拿出去说的这么一个证明嘛,对吧?
也就是说要反向 PUA,选项给对方,选项永远都说可以干的,但是你要有条件。小胡同赶猪,我给你了 5 条路选,但是你肯定不会选那 4 条路,你只会选这条路,因为那 4 条路他自己就去盘算了,就这样子反向 PUA 就是反过来给他更多的选项。
好,这些都是这些我教大家的,不单单是管理时间了,哈哈哈。  
怎么才能学得快?
我之前说我学 Go 语言大概一两周时间就能够学会。但很多同学说自己已经是 Java 程序员,要学 Go 语言可能用半年时间都搞不定。
我跟大家讲一个故事。我以前刚去上海的时候买不了书,只能在书店里面看书。我就把书店当成一个图书馆,看完后我会做笔记。我希望大家都有一种写作或者做笔记的习惯。
以学编程语言为例。你学一门编程语言,总是要把它抽象成一棵知识树。
因为刚开始你学各种各样的语言,会发现,这个语言也有这几块东西,那个语言也有那几块东西。比如说,一个语言,它必然会有变量、分支,还有循环,这是它最基本的逻辑结构,所有语言都应该有的。然后更高级一点的特性,它也有一些数据结构,还有数组、字符串,再高级点比如泛型,还有面向对象的多态,还有一些类库等等,这些都必须得要有。没有这些东西的话,这个语言是挺难用。
所以我学一个新的语言,我就会把这个语言照着我的框架来套。这个语言有哪些分支逻辑、哪些声明变量,多线程是怎么玩的、面向对象多态怎么玩的等等。我就照着套,半天或一两天就套完了。这个语言也就学会了。
所以,首先你有一个大的语言框架,新语言跑不出这个框架范围,然后你把语言特性往框架里面套就好了。你学得多了,你未来就会越学越快的,因为你会自己总结。这就是学习的一个过程,当你有了一个系统的知识树以后,然后你去填充这个树,把它全部填满了,你自然就学会了。
但是,我学 Rust 语言就没那么快,虽然 Rust 我也在套,但套完以后,准备上手写点东西的时候,就发现挺复杂。
我讲一下我学 Rust 遇到的问题。首先,Rust 有所有权、生命周期、借用(借用就是引用)、共享各种各种乱七八糟的概念。
我写代码,要共享内存。但是 Rust 不支持共享,一个变量赋值给另外一个变量,所有权就转移了。但是我偏要实现共享,然而共享就要用引用,引用就要玩生命周期,我就去写 Lifetime ,写 Lifetime 又要写多线程。多线程里面必须得用闭包,我就要在闭包里面玩共享变量,闭包里面我就要用 Lifetime……完蛋了。
这个代码,我调了 3 天都没调通,编译我都编译不出来。我到 Stack Overflow 上问了这个问题,两天以后有人告诉我答案了。我看那个语法,哎呀,我都崩溃了,我是绝对不可能自己想得出来的。所以我想说为什么 Rust 门槛有点高,当我想去干一件事情的时候,我却发现我干不出来。所以我觉得它不是很成熟,学习门槛太高。
学了就忘怎么办?
很多同学说自己学了就忘,这种情况下,要不要继续坚持。
我觉得你学了就忘,是因为你在用记忆去学,而不是基于问题去学。任何一个技术,都是在解决一个实际的问题。你一定要明白,你学这个技术,它到底解决什么样的问题,它是为什么而生的。当你明白了这个“为什么”以后,你才能够记住那些原理。
“为什么”是件很重要的事情。大家可以看我的 CoolShell 上的一篇博客《如何做一个有质量的技术分享》,你必须要告诉用户为什么,到底要解决什么样的问题。
Why 这种学习方式,我们叫理性学习;What 这种学习方式,我们叫感性学习。任何事情都是先从感性从是什么开始,因为一开始你也问不出那么多 Why。比如数学是 10 进制,不是 2 进制,不是 8 进制,也不是 16 进制,那为什么一开始就设计成 10 进制,但是时间又是 12 进制?这些东西,你不知道 What 是问不出来的,但你一旦问出这个 Why,没人告诉你,你的老师可能都不知道。
你的学习一定是从感性到理性的,所以一开始你大概知道有那么一回事,慢慢地看的东西多了,顺理成章你就会想去了解一下为什么。比如说我学 Windows、Unix、 Linux 这三个系统,里面有很多东西是相似的,有些东西又不太一样的,学多了以后自然会问为什么 C 和 C++ 全都是玩指针, Java 里面为啥没有指针?  
如果只学单一的东西,你不会有那么多疑问。你看多了,学多了,开始比较,自然会有疑问,有了疑问就会想去探究背后的 Why。
还有就是你遇到一些实际的问题,在解决这些实际问题的时候,也会去真正地理解这个技术。总之,带着问题去学。
对我影响比较大的书
技术书,对我影响比较大的是《Effective C++》,这本书让我感受到了作者 Scott Meyers 的严谨精神。他不是把一个技术设计出来就好了,他会想这个事有各种各样的副作用,然后这些副作用怎么不断地求解,这种求真精神让我很受震撼。所以为什么 《Effective C++》是一本全球畅销书。很多后来的书,比如 《Effective Java》、 《Effective GO》都在模仿它。
书中有一句话,其实我记了一辈子,他说:“美丽的东西都是肤浅的。”意思就是你看得见那些美好的东西都是表面上的,所以他就是肤浅。你把它剥开了以后,那些东西才是比较深刻的东西,所以千万不要被美所迷惑。哈哈,这也是我教育我们家孩子的,但是我不知道什么时候才能感受到这个东西。
第二本书是让我感觉写代码有一下子能够提高的《Code Complete》。这本书可能有点过时,微软的书,但是内容非常好。装在书包里面还挺重的,可以防身,你遇到有人要抢你,先拿这本书先,就是随身带着一块板砖,可以拿着来打人的。
这本书讲了怎么样把一个代码写好的各种各样的方向,以前从来没有人跟我讲过这些东西,没有训练,所以这是一本让我觉得很爽的一个东西。和这个书更相似的是像《设计模式》这样的书,比如《Beautiful Code》,就是教你怎么写代码,怎么组织代码,《重构》也是。
还有另外一本书,对我影响比较大:《Rework》。它不是技术书籍,但是我被它里面所有的想法,严重洗脑了。
里面讲“条件受限是个好事”,因为条件受限可以倒逼你抓重点,倒逼你做自动化,倒逼你简化。我突然就想起我以前买不起书,那个条件受限的时候就必须要用更聪明的方式去学习,因为你买不起书,所以你必须要画知识图,全部都是在条件受限。要是我条件不受限,可能我就不会这么样,我就会去买书,最后书堆着都没法看。
还有一个观点,就是挠自己的痒处,自己觉得不爽了自己要去改变它。所以我觉得这个世界上很多能创业的人,或者说是能改变世界的人,一定是不能忍的人。各位,如果你今天什么事都能忍,你想一想还是忍了,我不去抗争了,你一定不会成为这个世界的厉害的人,你一定没有什么利益的噱头。
这个世界是属于那些不能忍的人的,因为你不能忍了你才会想去改变它。知道吗?各位。从你身边的一点点小事开始,你觉得不能忍了,不能抱怨了,你决定行动起来,改变点什么,这时候,你就会琢磨怎么才能更好。所有的东西都是从不能忍开始的。
如果你什么都能忍,那对不起你一定是韭菜。我看过的很多好的产品经理,他们都是不能忍,都是各种不能忍。所以他们就可以做得很好。不能忍的人一般标准很高,就是这样子。
35 岁危机
我在一些群里,40 岁程序员的群,然后还有些 35 岁以上程序员的群。我觉得那些群我连一天都不想看,太无聊了,里面就是各种八卦,我不知道为什么这些中年人天天都喜欢聊八卦,今天看见这个社会热点又怎么样,那个热点又怎么样。
我觉得是这样的,不要觉得 35 岁、40 岁会是一个坎。我今天也在写代码,有句话是这么说的:“人不是因为变老了才没有热情,而是因为没有热情才会变老。”
有的人说我老了,我学不动了。不是的,因为你学不动,你才变老了;不是你老了,你才学不动。这个世界上有大量这样本末倒置的因果关系的逻辑,如果你学得动,或者你还对这个事情充满憧憬,有想法,愿意去奋斗的话,70 岁你都不老。

像我今天这个样子,我也不觉得我老。我觉得很多年轻人可能还不如我,他们在 20 多岁、30 多岁,可能就已经放弃了自己的人生,我今天还没有放弃。所以, 35 也好, 40 也好,不用去想这个数字的事。

标签: 程序员
最后更新:2023 年 5 月 19 日

admin

这个人很懒,什么都没留下

点赞
⇦爆火的ChatGPT太强了!写代码、改bug,网友:可取代Stack Overflow了
微软 Edge 浏览器正测试更深色的暗黑主题,采用全黑色背景 ⇨

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

最新 热点 随机
最新 热点 随机
阿里云服务器“镜像”怎么选择?看这一篇文章就够了! 积极贯彻落实《公司法》 推动存量公司依法调整注册资本 更新版!一些有趣或实用的生成器! 整理一波写作必备网站,供大家参考 远离抑郁症的方法之一:增强多巴胺、内啡肽、血清素、催产素的神经质地分泌 网络社区这种模式为什么注定会失败 靠着AI自动生成视频撸自媒体收益,赚了包辣条~ 有钱人是如何面对美色诱惑的 失业的中年人在北京过得真的有多心酸 最年轻的“十八罗汉”,阿里巴巴的新CEO-吴泳铭
跨境电商还能创业吗? 农村能吃的野菜100种(能吃的野菜100种图片大全) 基于 QUIC 协议的 HTTP/3 正式发布 GitHub 推出开源字体家族 Monaspace:五种风格可选,IDE 及日用均可 怎么做网站?做网站必须知道的四个基本常识和小窍门 用过GPT-4 Turbo以后,我们再也回不去了 继抖音、微博后,B站 UP 主开始显示 MCN 机构名称 深入了解 CPU 的型号、代际架构与微架构 Midjourney中国版本使用指南 QUIC和互联网传输的未来
归档
  • 2024 年 10 月
  • 2024 年 2 月
  • 2024 年 1 月
  • 2023 年 12 月
  • 2023 年 11 月
  • 2023 年 10 月
  • 2023 年 9 月
  • 2023 年 8 月
  • 2023 年 7 月
  • 2023 年 6 月
  • 2023 年 5 月
  • 2023 年 4 月
  • 2023 年 3 月
  • 2023 年 2 月
  • 2022 年 12 月
  • 2022 年 11 月
  • 2022 年 10 月
  • 2022 年 9 月
  • 2022 年 8 月
  • 2022 年 7 月
  • 2022 年 6 月
  • 2019 年 8 月
  • 2019 年 7 月
  • 2019 年 6 月
分类
  • AI
  • IT
  • 云计算
  • 互联网
  • 创业
  • 开发
  • 开源资讯
  • 未分类
  • 概念
  • 科技
  • 移动互联网
  • 自媒体
  • 趋势
标签聚合
元宇宙 开发 程序员 AI golang AI绘画 ChatGPT 人工智能 编程 小红书 直播 Linux 编程语言 web3.0 AIGC 抖音 iphone 短视频 软件 电商

COPYRIGHT © 2022-2025 极资讯. ALL RIGHTS RESERVED.

京ICP备18039103号-2