发布于: 2023-7-7最后更新: 2023-8-9字数 00 分钟

创业

所有做科学实验都是走这条路的,不断地做实验、拿数据,在数据里面把它标注好,关联起来,然后找信息,从信息里面找因果关系,从因果关系里看看能不能推出一些公式。大概就是这么一个逻辑。

关于语言:

为什么我公司会选择 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,跑不掉的这个事情。

经验

千万不要使蛮力,没有太大意义。这是我创业学会的第一个道理。方法会比努力更重要,
不追小兔子。能让你分心的事情太多太多了,你不知道你前面那座城池有多高

对技术的态度

如果你只是把业务流程给数字化、代码化,那即使在大公司里,你本质也是做外包。不要觉得在大公司里就不是做外包,我给你讲,你很有可能是在给那些运营做外包。要理解,真正的技术是要拿来做创新的,你要去颠覆点什么,要去创造点什么。
每次直播的时候都有人来问我一个问题:我该不该从 .NET 转 Java、该不该从 Java 转 Go。我不直接回答这个问题。
我不知道这个问题背后的思维方式是啥,就是 .NET 怎么样?或者说 .NET 转 Go 怎么样?我不知道你为什么想问这个问题,你想从我这边得到什么样的答案?想转就转呗。是不是你需要有个人帮你坚定想法,还是需要有人告诉你一个答案,你才去做这个事情?我觉得你不要把人生的一些决定寄托在我身上,你自己的决定最好自己做。
但是,我跟大家说一下,我之所以能够做成今天这个样子,就是我随时都在追逐一些我觉得是主流的技术,它是未来技术。 …
包括我学 Java 也是一样,我始终都觉得我必须要靠上主流。说得俗一点,就是你必须要去风口,这个风口猪都会飞。但是,要看那个风口是不是个短暂的风口,千万不要去找短暂的风口,你要去找长风口,风可以吹一辈子的。
因为你是猪,你是没翅膀的,你必须要一直有风吹着你才能飞;否则的话,你飞不起来,因为你没翅膀。你不是鸟,没风都能飞,绝大多数人跟我一样都是猪。
比如说,我觉得主流技术就是 Java,你又没去学 Java。你看那么多公司,有多少公司在用这个技术?这个技术可以干什么?我用了它我就不会失业,对吧?Go 语言也上来了,你是不是也要去看一下?满世界都是 Linux,你怎么可能不学呢?所以就这个意思。
现在都是手机,都是移动互联网,所以你也得要去了解一下。包括云原生很火,大数据也很火,这些都需要我们去看一下。
但是像区块链这些东西,你就扪心自问一下,区块链是不是所有公司都在用?没有用就让那些猪在天上再飞一会,指不定哪天风停了呢。但是,今天那些很强劲的风已经刮了十多年、二十年了,你为啥不去呢?
那些只刮了一两天的风,你要小心,因为你没翅膀,飞上去以后,风停了你就会摔得很惨。那些刮了十几二十年的风,你还没站上去,要赶快站上去。

工作:996、大公司

“毕业两年,现在公司里头都是 996,日常的业务需求做不完,感觉自己在这个公司没有什么成长,学习也没有多少时间,是不是应该考虑换工作了。”
对于这个问题,我想问,大家想过没有,你找工作的目的是啥?
任何事情我们都得回到目的上,如果找工作的目的是为了找碗饭吃,不让自己饿死的话,那 996 这些我觉得都顺其自然就好,因为这是让你不饿死的一条路。
如果你找工作的目的是为了实现自我价值,那假使现在的公司不能帮你达到这样的目标,你就应该勇敢寻找能够帮你达到目标的公司
到大公司里面,我觉得有三个东西是可以学得到的。
第一,组织管理。大公司组织的运作方式、体系化的管理方式,怎么调动那么多人来完成一个事;或者一些思维方式,为什么他要做这个而不是做那个。这是大公司跟小公司不一样的地方,因为大公司有资源,可以去试错,试过很多很多错误。每一个东西都是可以让你思考。
第二,怎么挣钱,大公司怎么挣钱的。
第三,大公司里面的一些高手是怎么工作的。
亚马逊的示例:
在亚马逊,我学到的是他组织整个公司是以微服务架构以工程师文化来分工的,不再以技能分工,是以职责分工,也就是说我让你完成一个事,你得从前端一直干到数据库,干到运维等等,任何一个环节都不算完,必须全部从头到尾干完。
所以亚马逊拆分组织是竖着切的。比如说这是购物车,这是下单,这是发短信,这是地址,然后有一个团队负责所有事情,这个团队是 two-pizza team,两张披萨可以喂饱,也就是 10 个人左右。所以,亚马逊是小团队可以干大事。这是我学到的,相当厉害。因为以前什么瀑布模型、敏捷,我都觉得有很多问题,直到我看到亚马逊的这种组织方式。
然后怎么挣钱?亚马逊是用技术挣钱,所以你看他做了世界上第一个推荐系统,也做了世界上第一个云计算平台。
他是这么想的:首先一件事情,你必须把它抽象化,因为抽象化之后才可以简化,简化后才可以标准化,标准化的事情才能自动化,自动化的事情才能规模化。
简化—>标准化—>自动化这条线,全部都是技术在干的事,第一次工业革命、第二次工业革命是一样的,只有技术做到了,你才最终可能规模化,之后才有飞轮模型。这是亚马逊的理念。
阿里:
那在阿里我学到了什么?
第一,怎么组织整个企业。我觉得阿里用一种政委文化。我虽然不太认可,但是这也是一种组织方式。另外是一种激情、热情,我觉得阿里巴巴的员工就像打了鸡血似的,可以为公司拼命地加班。
小公司
那如果你一直在小公司去不了大公司,怎么能快速成长?
其实也能成长,关键是你有没有跟那些聪明人在一块。
你跟什么样的人在一起,决定了你怎么样成长;你跟什么样的人在一起,你就会被影响成什么样的人。

时间

argue时提供选项。即使有些选项显然不会选的,就是要提供一些选择不了的选项,同时提供一条可以走的路径,而不是只给出一条你想走的路径。
对于类似的事情,我的思路是我可以辛苦,我可以加班,我肯定会努力做。欲先取之,必先予之。等到领导对你、公司对你有比较大的依赖的时候,你就可以跟他谈任意的条件,因为他很害怕你跑了。这就是资本。
但沟通的时候,也不要太直。我在外企里面学到的一个方法叫 Never Say No。他说和用户沟通的时候,你永远不要说不,这事我做不到你要说 Yes,但永远是有条件的 Yes。比如这种情况下我能做到,那种情况下我做不到。你给我更多的时间,我能做得到,你给我那么短的时间我做不到。或者说在那么短的时间内我只能交付你半成品,你要不要?
就是我永远都可以给你做出来东西,但是总是有代价的,总是有条件的。
..
你要反 PUA 的话,必须得把他拉到我们喜欢的角度来,把这个压力推回去,给他一系列的条件: Option 1 :我可以再按时完成,但是质量别想。
Option 2 :你给我足够的时间,我保质保量全部交付。
Option 3 :我还是按你这个时间,但是你必须砍掉一些需求。
你把选择权传给他,表面上你是在很好的交流,实际上你在 PUA 他。
小胡同赶猪,我给你了 5 条路选,但是你肯定不会选那 4 条路,你只会选这条路

快速学习

搭建自己的知识库,以此构建知识体系,用旧的先验知识,迅速消化新知识,把新知识像拼积木一样按图索骥放入设计好的坑位。
你学一门编程语言,总是要把它抽象成一棵知识树。
因为刚开始你学各种各样的语言,会发现,这个语言也有这几块东西,那个语言也有那几块东西。比如说,一个语言,它必然会有变量、分支,还有循环,这是它最基本的逻辑结构,所有语言都应该有的。然后更高级一点的特性,它也有一些数据结构,还有数组、字符串,再高级点比如泛型,还有面向对象的多态,还有一些类库等等,这些都必须得要有。没有这些东西的话,这个语言是挺难用。
所以我学一个新的语言,我就会把这个语言照着我的框架来套。这个语言有哪些分支逻辑、哪些声明变量,多线程是怎么玩的、面向对象多态怎么玩的等等。我就照着套,半天或一两天就套完了。这个语言也就学会了。
所以,首先你有一个大的语言框架,新语言跑不出这个框架范围,然后你把语言特性往框架里面套就好了。
我觉得你学了就忘,是因为你在用记忆去学,而不是基于问题去学。
“为什么”是件很重要的事情。大家可以看我的 CoolShell 上的一篇博客《如何做一个有质量的技术分享》,你必须要告诉用户为什么,到底要解决什么样的问题。
Why 这种学习方式,我们叫理性学习;What 这种学习方式,我们叫感性学习。

《Effective C++》
《Code Complete》
这本书讲了怎么样把一个代码写好的各种各样的方向,以前从来没有人跟我讲过这些东西,没有训练,所以这是一本让我觉得很爽的一个东西。和这个书更相似的是像《设计模式》这样的书,比如《Beautiful Code》,就是教你怎么写代码,怎么组织代码,《重构》也是。
《Rework》
“条件受限是个好事”,因为条件受限可以倒逼你抓重点,倒逼你做自动化,倒逼你简化。 就是挠自己的痒处,自己觉得不爽了自己要去改变它。
 

2023年8月9日分享:金融
2023年8月9日分享:金融
2023年8月2日分享:科研
2023年8月2日分享:科研